diff options
| author | William Boman <william@redwill.se> | 2021-12-05 18:57:02 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-05 18:57:02 +0100 |
| commit | c82abb3117d83a36b58f07d341fd56a00bdfd360 (patch) | |
| tree | c6efa60621a8ab8eb9d128e4a6c75f89aea82a62 /lua/nvim-lsp-installer/servers | |
| parent | sumneko_lua: don't provide -E argument as it's not needed (#309) (diff) | |
| download | mason-c82abb3117d83a36b58f07d341fd56a00bdfd360.tar mason-c82abb3117d83a36b58f07d341fd56a00bdfd360.tar.gz mason-c82abb3117d83a36b58f07d341fd56a00bdfd360.tar.bz2 mason-c82abb3117d83a36b58f07d341fd56a00bdfd360.tar.lz mason-c82abb3117d83a36b58f07d341fd56a00bdfd360.tar.xz mason-c82abb3117d83a36b58f07d341fd56a00bdfd360.tar.zst mason-c82abb3117d83a36b58f07d341fd56a00bdfd360.zip | |
add ccls (#299)
Diffstat (limited to 'lua/nvim-lsp-installer/servers')
| -rw-r--r-- | lua/nvim-lsp-installer/servers/bicep/init.lua | 4 | ||||
| -rw-r--r-- | lua/nvim-lsp-installer/servers/ccls/init.lua | 96 | ||||
| -rw-r--r-- | lua/nvim-lsp-installer/servers/init.lua | 1 |
3 files changed, 98 insertions, 3 deletions
diff --git a/lua/nvim-lsp-installer/servers/bicep/init.lua b/lua/nvim-lsp-installer/servers/bicep/init.lua index 7fb92f1c..1ebc6b1f 100644 --- a/lua/nvim-lsp-installer/servers/bicep/init.lua +++ b/lua/nvim-lsp-installer/servers/bicep/init.lua @@ -21,9 +21,7 @@ return function(name, root_dir) end), std.rename(path.concat { "vscode", "extension", "bicepLanguageServer" }, "langserver"), std.rmrf "vscode", - context.set(function(ctx) - ctx.install_dir = path.concat { ctx.install_dir, "langserver" } - end), + context.set_working_dir "langserver", }, default_options = { cmd = { "dotnet", path.concat { root_dir, "Bicep.LangServer.dll" } }, diff --git a/lua/nvim-lsp-installer/servers/ccls/init.lua b/lua/nvim-lsp-installer/servers/ccls/init.lua new file mode 100644 index 00000000..f8545c38 --- /dev/null +++ b/lua/nvim-lsp-installer/servers/ccls/init.lua @@ -0,0 +1,96 @@ +local server = require "nvim-lsp-installer.server" +local path = require "nvim-lsp-installer.path" +local installers = require "nvim-lsp-installer.installers" +local Data = require "nvim-lsp-installer.data" +local std = require "nvim-lsp-installer.installers.std" +local platform = require "nvim-lsp-installer.platform" +local context = require "nvim-lsp-installer.installers.context" +local process = require "nvim-lsp-installer.process" + +local coalesce, when = Data.coalesce, Data.when + +return function(name, root_dir) + local llvm_installer + + do + ---@param version string + ---@return string|nil + local function get_archive_name(version) + local name_template = coalesce( + when(platform.is_mac, "clang+llvm-%s-x86_64-apple-darwin"), + when( + platform.is_linux, + coalesce( + when(platform.arch == "x64", "clang+llvm-%s-amd64-unknown-freebsd13"), + when(platform.arch == "arm64", "clang+llvm-%s-aarch64-linux-gnu") + ) + ) + ) + return name_template and name_template:format(version) + end + + ---@param version string + local function normalize_version(version) + return version:gsub("^llvmorg%-", "") + end + + llvm_installer = installers.branch_context { + context.set(function(ctx) + -- We unset the requested version for llvm because it's not the primary target - the user's requested version should only apply to ccls. + ctx.requested_server_version = nil + end), + context.use_github_release_file("llvm/llvm-project", function(version) + -- Strip the "llvmorg-" prefix from tags (llvm releases tags like llvmorg-13.0.0) + local archive_name = get_archive_name(normalize_version(version)) + return archive_name and ("%s.tar.xz"):format(archive_name) + end), + context.capture(function(ctx) + return installers.pipe { + std.untarxz_remote(ctx.github_release_file), + std.rename(get_archive_name(normalize_version(ctx.requested_server_version)), "llvm"), + } + end), + } + end + + local ccls_installer = installers.branch_context { + context.set(function(ctx) + ctx.llvm_install_dir = path.concat { ctx.install_dir, "llvm" } + end), + context.set_working_dir "ccls", + std.git_clone "https://github.com/MaskRay/ccls", + std.git_submodule_update(), + function(_, callback, ctx) + local c = process.chain { + cwd = ctx.install_dir, + stdio_sink = ctx.stdio_sink, + } + + c.run("cmake", { + "-H.", + "-BRelease", + "-DCMAKE_BUILD_TYPE=Release", + ("-DCMAKE_PREFIX_PATH=%s"):format(path.concat { ctx.llvm_install_dir, "lib", "cmake" }), + }) + c.run("cmake", { "--build", "Release" }) + c.spawn(callback) + end, + } + + return server.Server:new { + name = name, + root_dir = root_dir, + homepage = "https://github.com/MaskRay/ccls", + languages = { "c", "c++", "objective-c" }, + installer = installers.when { + unix = { + context.promote_install_dir(), -- ccls hardcodes the path to llvm at compile time, so we need to compile everything in the final directory + llvm_installer, + ccls_installer, + }, + }, + default_options = { + cmd = { path.concat { root_dir, "ccls", "Release", "ccls" } }, + }, + } +end diff --git a/lua/nvim-lsp-installer/servers/init.lua b/lua/nvim-lsp-installer/servers/init.lua index cb217573..0f66d64c 100644 --- a/lua/nvim-lsp-installer/servers/init.lua +++ b/lua/nvim-lsp-installer/servers/init.lua @@ -35,6 +35,7 @@ local CORE_SERVERS = Data.set_of { "ansiblels", "bashls", "bicep", + "ccls", "clangd", "clojure_lsp", "cmake", |
