diff options
Diffstat (limited to 'lua/nvim-lsp-installer/servers/arduino_language_server/init.lua')
| -rw-r--r-- | lua/nvim-lsp-installer/servers/arduino_language_server/init.lua | 228 |
1 files changed, 135 insertions, 93 deletions
diff --git a/lua/nvim-lsp-installer/servers/arduino_language_server/init.lua b/lua/nvim-lsp-installer/servers/arduino_language_server/init.lua index 49da467a..81188828 100644 --- a/lua/nvim-lsp-installer/servers/arduino_language_server/init.lua +++ b/lua/nvim-lsp-installer/servers/arduino_language_server/init.lua @@ -1,122 +1,164 @@ local path = require "nvim-lsp-installer.path" -local std = require "nvim-lsp-installer.installers.std" -local installers = require "nvim-lsp-installer.installers" local server = require "nvim-lsp-installer.server" -local go = require "nvim-lsp-installer.installers.go" -local process = require "nvim-lsp-installer.process" local platform = require "nvim-lsp-installer.platform" -local context = require "nvim-lsp-installer.installers.context" local Data = require "nvim-lsp-installer.data" +local installer = require "nvim-lsp-installer.core.installer" +local github = require "nvim-lsp-installer.core.managers.github" +local std = require "nvim-lsp-installer.core.managers.std" +local Optional = require "nvim-lsp-installer.core.optional" +local process = require "nvim-lsp-installer.process" local coalesce, when = Data.coalesce, Data.when return function(name, root_dir) - local arduino_cli_installer = installers.branch_context { - context.set_working_dir "arduino-cli", - context.set(function(ctx) - -- The user's requested version should not apply to the CLI. - ctx.requested_server_version = nil - end), - context.use_github_release_file("arduino/arduino-cli", function(version) - local target_file = coalesce( - when(platform.is_mac, "arduino-cli_%s_macOS_64bit.tar.gz"), - when( - platform.is_linux, - coalesce( - when(platform.arch == "x64", "arduino-cli_%s_Linux_64bit.tar.gz"), - when(platform.arch == "x86", "arduino-cli_%s_Linux_32bit.tar.gz"), - when(platform.arch == "arm64", "arduino-cli_%s_Linux_ARM64.tar.gz"), - when(platform.arch == "armv6", "arduino-cli_%s_Linux_ARMv6.tar.gz"), - when(platform.arch == "armv7", "arduino-cli_%s_Linux_ARMv7.tar.gz") - ) - ), - when( - platform.is_win, - coalesce( - when(platform.arch == "x64", "arduino-cli_%s_Windows_64bit.zip"), - when(platform.arch == "x86", "arduino-cli_%s_Windows_32bit.zip") + ---@async + local function arduino_cli_installer() + local ctx = installer.context() + + ctx.fs:mkdir "arduino-cli" + ctx:chdir("arduino-cli", function() + local opts = { + repo = "arduino/arduino-cli", + version = Optional.empty(), + asset_file = function(release) + local target = coalesce( + when(platform.is_mac, "arduino-cli_%s_macOS_64bit.tar.gz"), + when( + platform.is_linux, + coalesce( + when(platform.arch == "x64", "arduino-cli_%s_Linux_64bit.tar.gz"), + when(platform.arch == "x86", "arduino-cli_%s_Linux_32bit.tar.gz"), + when(platform.arch == "arm64", "arduino-cli_%s_Linux_ARM64.tar.gz"), + when(platform.arch == "armv6", "arduino-cli_%s_Linux_ARMv6.tar.gz"), + when(platform.arch == "armv7", "arduino-cli_%s_Linux_ARMv7.tar.gz") + ) + ), + when( + platform.is_win, + coalesce( + when(platform.arch == "x64", "arduino-cli_%s_Windows_64bit.zip"), + when(platform.arch == "x86", "arduino-cli_%s_Windows_32bit.zip") + ) + ) ) - ) - ) - return target_file and target_file:format(version) - end), - context.capture(function(ctx) - if platform.is_win then - return std.unzip_remote(ctx.github_release_file) - else - return std.untargz_remote(ctx.github_release_file) - end - end), - std.chmod("+x", { "arduino-cli" }), - ---@type ServerInstallerFunction - function(_, callback, ctx) - process.spawn(path.concat { ctx.install_dir, "arduino-cli" }, { - args = { "config", "init", "--dest-file", "arduino-cli.yaml", "--overwrite" }, - cwd = ctx.install_dir, - stdio_sink = ctx.stdio_sink, - }, callback) - end, - context.receipt(function(receipt, ctx) - receipt:with_secondary_source(receipt.github_release_file(ctx)) - end), - } + return target and target:format(release) + end, + } - local arduino_language_server_installer = installers.branch_context { - context.set_working_dir "arduino-language-server", - go.packages { "github.com/arduino/arduino-language-server" }, - } + platform.when { + unix = function() + github.untargz_release_file(opts) + std.chmod("+x", { "arduino-cli" }) + end, + win = function() + github.unzip_release_file(opts) + end, + } - local clangd_installer = installers.branch_context { - context.set(function(ctx) - -- The user's requested version should not apply to clangd. - ctx.requested_server_version = nil - end), - context.use_github_release_file("clangd/clangd", function(version) - local target_file = coalesce( - when(platform.is_mac, "clangd-mac-%s.zip"), - when(platform.is_linux and platform.arch == "x64", "clangd-linux-%s.zip"), - when(platform.is_win, "clangd-windows-%s.zip") - ) - return target_file and target_file:format(version) - end), - context.capture(function(ctx) - return installers.pipe { - std.unzip_remote(ctx.github_release_file), - std.rename(("clangd_%s"):format(ctx.requested_server_version), "clangd"), + ctx.spawn["arduino-cli"] { + "config", + "init", + "--dest-file", + "arduino-cli.yaml", + "--overwrite", + with_paths = { ctx.cwd:get() }, } - end), - context.receipt(function(receipt, ctx) - receipt:with_secondary_source(receipt.github_release_file(ctx)) - end), - } + end) + end + + local function arduino_language_server_installer() + local ctx = installer.context() + ctx.fs:mkdir "arduino-language-server" + ctx:chdir("arduino-language-server", function() + local opts = { + repo = "arduino/arduino-language-server", + asset_file = function(release) + local target = coalesce( + when(platform.is_mac, "arduino-language-server_%s_macOS_64bit.tar.gz"), + when( + platform.is_linux and platform.arch == "x64", + "arduino-language-server_%s_Linux_64bit.tar.gz" + ), + when( + platform.is_linux and platform.arch == "x86", + "arduino-language-server_%s_Linux_32bit.tar.gz" + ), + when( + platform.is_linux and platform.arch == "arm64", + "arduino-language-server_%s_Linux_ARM64.tar.gz" + ), + when( + platform.is_win and platform.arch == "x64", + "arduino-language-server_0.6.0_Windows_64bit.zip" + ), + when( + platform.is_win and platform.arch == "x86", + "arduino-language-server_0.6.0_Windows_32bit.zip" + ) + ) + + return target and target:format(release) + end, + } + platform.when { + unix = function() + github.untargz_release_file(opts) + end, + win = function() + github.unzip_release_file(opts) + end, + } + end) + end + + local function clangd_installer() + local ctx = installer.context() + + local source = github.unzip_release_file { + repo = "clangd/clangd", + version = Optional.empty(), + asset_file = function(release) + local target_file = coalesce( + when(platform.is_mac, "clangd-mac-%s.zip"), + when(platform.is_linux and platform.arch == "x64", "clangd-linux-%s.zip"), + when(platform.is_win, "clangd-windows-%s.zip") + ) + return target_file and target_file:format(release) + end, + } + + ctx.fs:rename(("clangd_%s"):format(source.release), "clangd") + end return server.Server:new { name = name, root_dir = root_dir, homepage = "https://github.com/arduino/arduino-language-server", languages = { "arduino" }, - installer = { - clangd_installer, - arduino_cli_installer, - arduino_language_server_installer, - context.receipt(function(receipt) - -- We install 3 different components to 3 different subdirectories. This is currently not captured in - -- the receipt structure. - receipt:mark_invalid() - end), - }, + async = true, + installer = function() + clangd_installer() + arduino_cli_installer() + arduino_language_server_installer() + end, default_options = { cmd = { -- This cmd is incomplete. Users need to manually append their FQBN (e.g., -fqbn arduino:avr:nano) "arduino-language-server", "-cli", - path.concat { root_dir, "arduino-cli", platform.is_win and "arduino-cli.exe" or "arduino-cli" }, + "arduino-cli", + "-clangd", + "clangd", "-cli-config", path.concat { root_dir, "arduino-cli", "arduino-cli.yaml" }, - "-clangd", - path.concat { root_dir, "clangd", "bin", platform.is_win and "clangd.bat" or "clangd" }, }, - cmd_env = go.env(path.concat { root_dir, "arduino-language-server" }), + cmd_env = { + PATH = process.extend_path { + path.concat { root_dir, "arduino-language-server" }, + path.concat { root_dir, "arduino-cli" }, + path.concat { root_dir, "clangd", "bin" }, + }, + }, }, } end |
