diff options
| author | William Boman <william@redwill.se> | 2021-12-06 01:25:17 +0100 |
|---|---|---|
| committer | William Boman <william@redwill.se> | 2021-12-06 01:25:17 +0100 |
| commit | 3810b9e27b1dcb6c8c3a07fae249857bd34f45dc (patch) | |
| tree | 8d2a0578d4bcbfabb33f194706594b28b77bde2c /lua/nvim-lsp-installer.lua | |
| parent | rerun autogen (diff) | |
| download | mason-3810b9e27b1dcb6c8c3a07fae249857bd34f45dc.tar mason-3810b9e27b1dcb6c8c3a07fae249857bd34f45dc.tar.gz mason-3810b9e27b1dcb6c8c3a07fae249857bd34f45dc.tar.bz2 mason-3810b9e27b1dcb6c8c3a07fae249857bd34f45dc.tar.lz mason-3810b9e27b1dcb6c8c3a07fae249857bd34f45dc.tar.xz mason-3810b9e27b1dcb6c8c3a07fae249857bd34f45dc.tar.zst mason-3810b9e27b1dcb6c8c3a07fae249857bd34f45dc.zip | |
feat: use vim.ui.select to prompt which server to install
Diffstat (limited to 'lua/nvim-lsp-installer.lua')
| -rw-r--r-- | lua/nvim-lsp-installer.lua | 56 |
1 files changed, 29 insertions, 27 deletions
diff --git a/lua/nvim-lsp-installer.lua b/lua/nvim-lsp-installer.lua index 6c2a9f2b..0761e257 100644 --- a/lua/nvim-lsp-installer.lua +++ b/lua/nvim-lsp-installer.lua @@ -123,42 +123,44 @@ function M.uninstall_sync(server_identifiers) end end ----@param server_identifier string +---@param server_name string +---@param callback fun(server_name: string, version: string|nil) ---@return string,string|nil -local function translate_language_alias(server_identifier, version) - local language_aliases = language_autocomplete_map[server_identifier] +local function resolve_language_alias(server_name, callback) + local language_aliases = language_autocomplete_map[server_name] if language_aliases then - local choices = {} - for idx, server_alias in ipairs(language_aliases) do - table.insert(choices, ("&%d %s"):format(idx, server_alias)) - end - local choice = vim.fn.confirm( - ("The following servers were found for language %q, please select which one you want to install:"):format( - server_identifier - ), - table.concat(choices, "\n"), - 0 - ) - return language_aliases[choice] + vim.ui.select(language_aliases, { + prompt = ("Please select which %q server you want to install:"):format(server_name), + }, function(choice) + if choice then + callback(choice) + end + end) + else + callback(server_name) end - return server_identifier, version end --- Queues a server to be installed. Will also open the status window. --- Use the .on_server_ready(cb) function to register a handler to be executed when a server is ready to be set up. ---@param server_identifier string @The server to install. This can also include a requested version, for example "rust_analyzer@nightly". function M.install(server_identifier) - local server_name, version = translate_language_alias(servers.parse_server_identifier(server_identifier)) - if not server_name then - -- No selection was made - return - end - local ok, server = servers.get_server(server_name) - if not ok then - return notify(("Unable to find LSP server %s.\n\n%s"):format(server_name, server), vim.log.levels.ERROR) - end - status_win().install_server(server, version) - status_win().open() + local server_name, version = servers.parse_server_identifier(server_identifier) + resolve_language_alias(server_name, function(resolved_server_name) + if not resolved_server_name then + -- No selection was made + return + end + local ok, server = servers.get_server(resolved_server_name) + if not ok then + return notify( + ("Unable to find LSP server %s.\n\n%s"):format(resolved_server_name, server), + vim.log.levels.ERROR + ) + end + status_win().install_server(server, version) + status_win().open() + end) end --- Queues a server to be uninstalled. Will also open the status window. |
