aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-lspconfig/api/command.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/mason-lspconfig/api/command.lua')
-rw-r--r--lua/mason-lspconfig/api/command.lua150
1 files changed, 0 insertions, 150 deletions
diff --git a/lua/mason-lspconfig/api/command.lua b/lua/mason-lspconfig/api/command.lua
deleted file mode 100644
index 136cd350..00000000
--- a/lua/mason-lspconfig/api/command.lua
+++ /dev/null
@@ -1,150 +0,0 @@
-local a = require "mason-core.async"
-local Optional = require "mason-core.optional"
-local notify = require "mason-core.notify"
-local _ = require "mason-core.functional"
-
----@async
----@param user_args string[]: The arguments, as provided by the user.
-local function parse_packages_from_user_args(user_args)
- local Package = require "mason-core.package"
- local server_mapping = require "mason-lspconfig.mappings.server"
- local language_mapping = require "mason.mappings.language"
-
- return _.filter_map(function(server_specifier)
- local server_name, version = Package.Parse(server_specifier)
- -- 1. first see if the provided arg is an actual lspconfig server name
- return Optional
- .of_nilable(server_mapping.lspconfig_to_package[server_name])
- -- 2. if not, check if it's a language specifier (e.g., "typescript" or "java")
- :or_(function()
- return Optional.of_nilable(language_mapping[server_name]):map(function(package_names)
- local lsp_package_names = _.filter(function(package_name)
- return server_mapping.package_to_lspconfig[package_name] ~= nil
- end, package_names)
-
- if #lsp_package_names == 0 then
- return nil
- end
-
- return a.promisify(vim.ui.select)(lsp_package_names, {
- prompt = ("Please select which server you want to install for language %q:"):format(
- server_name
- ),
- format_item = function(item)
- return server_mapping.package_to_lspconfig[item]
- end,
- })
- end)
- end)
- :map(function(package_name)
- return { package = package_name, version = version }
- end)
- :if_not_present(function()
- notify(("Could not find LSP server %q."):format(server_name), vim.log.levels.ERROR)
- end)
- end, user_args)
-end
-
----@async
-local function parse_packages_from_heuristics()
- local server_mapping = require "mason-lspconfig.mappings.server"
-
- -- Prompt user which server they want to install (based on the current filetype)
- local current_ft = vim.api.nvim_buf_get_option(vim.api.nvim_get_current_buf(), "filetype")
- local filetype_mapping = require "mason-lspconfig.mappings.filetype"
- return Optional.of_nilable(filetype_mapping[current_ft])
- :map(function(server_names)
- return a.promisify(vim.ui.select)(server_names, {
- prompt = ("Please select which server you want to install for filetype %q:"):format(current_ft),
- })
- end)
- :map(function(server_name)
- local package_name = server_mapping.lspconfig_to_package[server_name]
- return { { package = package_name, version = nil } }
- end)
- :or_else_get(function()
- notify(("No LSP servers found for filetype %q."):format(current_ft), vim.log.levels.ERROR)
- return {}
- end)
-end
-
-local parse_packages_to_install = _.cond {
- { _.compose(_.gt(0), _.length), parse_packages_from_user_args },
- { _.compose(_.equals(0), _.length), parse_packages_from_heuristics },
- { _.T, _.always {} },
-}
-
-local LspInstall = a.scope(function(servers)
- local packages_to_install = parse_packages_to_install(servers)
- if #packages_to_install > 0 then
- local registry = require "mason-registry"
- _.each(function(target)
- local pkg = registry.get_package(target.package)
- pkg:install { version = target.version }
- end, packages_to_install)
- local ui = require "mason.ui"
- ui.open()
- ui.set_view "LSP"
- vim.schedule(function()
- ui.set_sticky_cursor "installing-section"
- end)
- end
-end)
-
-vim.api.nvim_create_user_command("LspInstall", function(opts)
- LspInstall(opts.fargs)
-end, {
- desc = "Install one or more LSP servers.",
- nargs = "*",
- complete = "custom,v:lua.mason_lspconfig_completion.available_server_completion",
-})
-
-local function LspUninstall(servers)
- require("mason.ui").open()
- require("mason.ui").set_view "LSP"
- local registry = require "mason-registry"
- local server_mapping = require "mason-lspconfig.mappings.server"
- for _, server_specifier in ipairs(servers) do
- local package_name = server_mapping.lspconfig_to_package[server_specifier]
- local pkg = registry.get_package(package_name)
- pkg:uninstall()
- end
-end
-
-vim.api.nvim_create_user_command("LspUninstall", function(opts)
- LspUninstall(opts.fargs)
-end, {
- desc = "Uninstall one or more LSP servers.",
- nargs = "+",
- complete = "custom,v:lua.mason_lspconfig_completion.installed_server_completion",
-})
-
-_G.mason_lspconfig_completion = {
- available_server_completion = function()
- local registry = require "mason-registry"
- local server_mapping = require "mason-lspconfig.mappings.server"
- local language_mapping = require "mason.mappings.language"
-
- local package_names = _.filter_map(function(pkg_name)
- return Optional.of_nilable(server_mapping.package_to_lspconfig[pkg_name])
- end, registry.get_all_package_names())
- local completion =
- _.compose(_.sort_by(_.identity), _.uniq_by(_.identity), _.concat(_.keys(language_mapping)))(package_names)
- return table.concat(completion, "\n")
- end,
- installed_server_completion = function()
- local registry = require "mason-registry"
- local server_mapping = require "mason-lspconfig.mappings.server"
-
- local server_names = _.filter_map(function(pkg_name)
- return Optional.of_nilable(server_mapping.package_to_lspconfig[pkg_name])
- end, registry.get_installed_package_names())
- table.sort(server_names)
- return table.concat(server_names, "\n")
- end,
-}
-
-return {
- LspInstall = LspInstall,
- LspUninstall = LspUninstall,
-}