aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2021-10-23 02:02:29 +0200
committerGitHub <noreply@github.com>2021-10-23 02:02:29 +0200
commit1ad71df31d399fe13df253167283032fb7f28020 (patch)
tree0f7c9df338f0388695c6b7bfaa0ef550ab0cd6c9
parentRevert "access environ via vim.loop" (diff)
downloadmason-1ad71df31d399fe13df253167283032fb7f28020.tar
mason-1ad71df31d399fe13df253167283032fb7f28020.tar.gz
mason-1ad71df31d399fe13df253167283032fb7f28020.tar.bz2
mason-1ad71df31d399fe13df253167283032fb7f28020.tar.lz
mason-1ad71df31d399fe13df253167283032fb7f28020.tar.xz
mason-1ad71df31d399fe13df253167283032fb7f28020.tar.zst
mason-1ad71df31d399fe13df253167283032fb7f28020.zip
map filetype to servers, promote relevant servers in the UI (#190)
Uninstalled servers that map to a filetype that is open in any buffer will be hoisted in the UI list.
-rw-r--r--lua/nvim-lsp-installer/_generated/filetype_map.lua103
-rw-r--r--lua/nvim-lsp-installer/ui/status-win/init.lua51
-rw-r--r--scripts/autogen_metadata.lua57
3 files changed, 176 insertions, 35 deletions
diff --git a/lua/nvim-lsp-installer/_generated/filetype_map.lua b/lua/nvim-lsp-installer/_generated/filetype_map.lua
new file mode 100644
index 00000000..78f9da0c
--- /dev/null
+++ b/lua/nvim-lsp-installer/_generated/filetype_map.lua
@@ -0,0 +1,103 @@
+-- THIS FILE IS GENERATED. DO NOT EDIT MANUALLY.
+-- stylua: ignore start
+return {
+ Dockerfile = { "dockerls" },
+ aspnetcorerazor = { "tailwindcss" },
+ astro = { "tailwindcss" },
+ ["astro-markdown"] = { "tailwindcss" },
+ bib = { "texlab", "ltex" },
+ bicep = { "bicep" },
+ blade = { "tailwindcss" },
+ c = { "clangd" },
+ clojure = { "clojure_lsp" },
+ cmake = { "cmake" },
+ cpp = { "clangd" },
+ cs = { "omnisharp" },
+ css = { "tailwindcss", "emmet_ls", "cssls", "stylelint_lsp" },
+ d = { "serve_d" },
+ ["django-html"] = { "tailwindcss" },
+ dockerfile = { "dockerls" },
+ dot = { "dotls" },
+ edge = { "tailwindcss" },
+ edn = { "clojure_lsp" },
+ eelixir = { "tailwindcss", "elixirls" },
+ ejs = { "tailwindcss" },
+ elixir = { "elixirls" },
+ elm = { "elmls" },
+ erb = { "tailwindcss" },
+ erlang = { "erlangls" },
+ eruby = { "tailwindcss" },
+ fortran = { "fortls" },
+ genie = { "vala_ls" },
+ go = { "gopls" },
+ gohtml = { "tailwindcss" },
+ gomod = { "gopls" },
+ graphql = { "graphql" },
+ groovy = { "groovyls" },
+ haml = { "tailwindcss" },
+ handlebars = { "tailwindcss", "ember" },
+ haskell = { "hls" },
+ hbs = { "tailwindcss" },
+ html = { "html", "tailwindcss", "angularls", "emmet_ls" },
+ ["html-eex"] = { "tailwindcss" },
+ jade = { "tailwindcss" },
+ java = { "jdtls" },
+ javascript = { "eslintls", "tailwindcss", "eslint", "denols", "ember", "rome", "stylelint_lsp", "tsserver" },
+ ["javascript.jsx"] = { "eslint", "denols", "tsserver" },
+ javascriptreact = { "eslintls", "tailwindcss", "eslint", "denols", "graphql", "rome", "stylelint_lsp", "tsserver" },
+ json = { "jsonls", "rome" },
+ kotlin = { "kotlin_language_server" },
+ leaf = { "tailwindcss" },
+ less = { "tailwindcss", "cssls", "stylelint_lsp" },
+ lhaskell = { "hls" },
+ liquid = { "tailwindcss" },
+ lua = { "sumneko_lua" },
+ markdown = { "tailwindcss", "ltex" },
+ mdx = { "tailwindcss" },
+ mustache = { "tailwindcss" },
+ mysql = { "sqlls", "sqls" },
+ njk = { "tailwindcss" },
+ nunjucks = { "tailwindcss" },
+ objc = { "clangd" },
+ objcpp = { "clangd" },
+ ocaml = { "ocamlls" },
+ php = { "intelephense", "phpactor", "tailwindcss" },
+ postcss = { "tailwindcss" },
+ prisma = { "prismals" },
+ ps1 = { "powershell_es" },
+ puppet = { "puppet" },
+ purescript = { "purescriptls" },
+ python = { "pyright", "jedi_language_server", "pylsp" },
+ razor = { "tailwindcss" },
+ reason = { "tailwindcss", "ocamlls" },
+ rescript = { "tailwindcss", "rescriptls" },
+ ruby = { "solargraph" },
+ rust = { "rust_analyzer" },
+ sass = { "tailwindcss" },
+ scss = { "tailwindcss", "cssls", "stylelint_lsp" },
+ sh = { "bashls" },
+ slim = { "tailwindcss" },
+ solidity = { "solang" },
+ sql = { "sqlls", "sqls" },
+ stylus = { "tailwindcss" },
+ sugarss = { "tailwindcss", "stylelint_lsp" },
+ svelte = { "tailwindcss", "svelte" },
+ svg = { "lemminx" },
+ terraform = { "terraformls", "tflint" },
+ tex = { "texlab", "ltex" },
+ twig = { "tailwindcss" },
+ typescript = { "eslintls", "tailwindcss", "eslint", "angularls", "denols", "ember", "rome", "stylelint_lsp", "tsserver" },
+ ["typescript.tsx"] = { "eslint", "angularls", "denols", "rome", "tsserver" },
+ typescriptreact = { "eslintls", "tailwindcss", "eslint", "angularls", "denols", "graphql", "rome", "stylelint_lsp", "tsserver" },
+ vala = { "vala_ls" },
+ vb = { "omnisharp" },
+ vim = { "vimls" },
+ vue = { "tailwindcss", "eslint", "stylelint_lsp", "volar", "vuels" },
+ wxss = { "stylelint_lsp" },
+ xml = { "lemminx" },
+ xsd = { "lemminx" },
+ yaml = { "yamlls", "ansiblels" },
+ ["yaml.ansible"] = { "ansiblels" },
+ zig = { "zls" },
+ zir = { "zls" }
+} \ No newline at end of file
diff --git a/lua/nvim-lsp-installer/ui/status-win/init.lua b/lua/nvim-lsp-installer/ui/status-win/init.lua
index 3d582111..3eb7b206 100644
--- a/lua/nvim-lsp-installer/ui/status-win/init.lua
+++ b/lua/nvim-lsp-installer/ui/status-win/init.lua
@@ -5,6 +5,7 @@ local Data = require "nvim-lsp-installer.data"
local display = require "nvim-lsp-installer.ui.display"
local settings = require "nvim-lsp-installer.settings"
local lsp_servers = require "nvim-lsp-installer.servers"
+local filetype_map = require "nvim-lsp-installer._generated.filetype_map"
local HELP_KEYMAP = "?"
local CLOSE_WINDOW_KEYMAP_1 = "<Esc>"
@@ -201,9 +202,9 @@ local function ServerMetadata(server)
))
end
-local function InstalledServers(servers, expanded_server)
+local function InstalledServers(servers, props)
return Ui.Node(Data.list_map(function(server)
- local is_expanded = expanded_server == server.name
+ local is_expanded = props.expanded_server == server.name
return Ui.Node {
Ui.HlTextNode {
Data.list_not_nil(
@@ -273,15 +274,20 @@ local function PendingServers(servers)
end, servers))
end
-local function UninstalledServers(servers, expanded_server)
+local function UninstalledServers(servers, props)
return Ui.Node(Data.list_map(function(server)
- local is_expanded = expanded_server == server.name
+ local is_prioritized = props.prioritized_servers[server.name]
+ local is_expanded = props.expanded_server == server.name
return Ui.Node {
Ui.HlTextNode {
Data.list_not_nil(
- { settings.current.ui.icons.server_uninstalled, "LspInstallerMuted" },
+ {
+ settings.current.ui.icons.server_uninstalled,
+ is_prioritized and "LspInstallerHighlighted" or "LspInstallerMuted",
+ },
{ " " .. server.name, "LspInstallerMuted" },
- Data.when(server.uninstaller.has_run, { " (uninstalled)", "Comment" })
+ Data.when(server.uninstaller.has_run, { " (uninstalled)", "Comment" }),
+ Data.when(server.deprecated, { " deprecated", "LspInstallerOrange" })
),
},
Ui.Keybind(settings.current.ui.keymaps.toggle_server_expand, "EXPAND_SERVER", { server.name }),
@@ -311,13 +317,13 @@ local function ServerGroup(props)
count = total_server_count,
},
Indent(Data.list_map(function(servers)
- return props.renderer(servers, props.expanded_server)
+ return props.renderer(servers, props)
end, props.servers)),
}
end)
end
-local function Servers(servers, expanded_server)
+local function Servers(servers, expanded_server, prioritized_servers)
local grouped_servers = {
installed = {},
queued = {},
@@ -325,6 +331,7 @@ local function Servers(servers, expanded_server)
uninstall_failed = {},
installing = {},
install_failed = {},
+ uninstalled_prioritized = {},
uninstalled = {},
session_uninstalled = {},
}
@@ -350,7 +357,11 @@ local function Servers(servers, expanded_server)
elseif server.installer.has_run then
grouped_servers.install_failed[#grouped_servers.install_failed + 1] = server
else
- grouped_servers.uninstalled[#grouped_servers.uninstalled + 1] = server
+ if prioritized_servers[server.name] then
+ grouped_servers.uninstalled_prioritized[#grouped_servers.uninstalled_prioritized + 1] = server
+ else
+ grouped_servers.uninstalled[#grouped_servers.uninstalled + 1] = server
+ end
end
end
@@ -376,8 +387,13 @@ local function Servers(servers, expanded_server)
ServerGroup {
title = "Available servers",
renderer = UninstalledServers,
- servers = { grouped_servers.session_uninstalled, grouped_servers.uninstalled },
+ servers = {
+ grouped_servers.session_uninstalled,
+ grouped_servers.uninstalled_prioritized,
+ grouped_servers.uninstalled,
+ },
expanded_server = expanded_server,
+ prioritized_servers = prioritized_servers,
},
}
end
@@ -427,7 +443,7 @@ local function init(all_servers)
return Help(state.is_current_settings_expanded, state.vader_saber_ticks)
end),
Ui.When(not state.is_showing_help, function()
- return Servers(state.servers, state.expanded_server)
+ return Servers(state.servers, state.expanded_server, state.prioritized_servers)
end),
}
end)
@@ -441,6 +457,7 @@ local function init(all_servers)
local mutate_state, get_state = window.init {
servers = servers,
is_showing_help = false,
+ prioritized_servers = {},
expanded_server = nil,
help_command_text = "", -- for "animating" the ":help" text when toggling the help window
vader_saber_ticks = 0, -- for "animating" the cowthvader lightsaber
@@ -658,8 +675,20 @@ local function init(all_servers)
}
local function open()
+ local current_buf = vim.fn.bufnr "%"
+ local open_filetypes = vim.split(vim.api.nvim_exec([[ bufdo echo &filetype ]], true), "\n")
+ vim.cmd(("buffer %d"):format(current_buf))
+ local prioritized_servers = {}
+
+ for _, filetype in ipairs(open_filetypes) do
+ if filetype_map[filetype] then
+ vim.list_extend(prioritized_servers, filetype_map[filetype])
+ end
+ end
+
mutate_state(function(state)
state.is_showing_help = false
+ state.prioritized_servers = Data.set_of(prioritized_servers)
end)
window.open {
diff --git a/scripts/autogen_metadata.lua b/scripts/autogen_metadata.lua
index 5bee63f7..cec6c263 100644
--- a/scripts/autogen_metadata.lua
+++ b/scripts/autogen_metadata.lua
@@ -21,12 +21,21 @@ end
local function write_file(path, txt, flag)
uv.fs_open(path, flag, 438, function(open_err, fd)
assert(not open_err, open_err)
- uv.fs_write(fd, txt, -1, function(write_err)
- assert(not write_err, write_err)
- uv.fs_close(fd, function(close_err)
- assert(not close_err, close_err)
- end)
- end)
+ uv.fs_write(
+ fd,
+ table.concat({
+ "-- THIS FILE IS GENERATED. DO NOT EDIT MANUALLY.",
+ "-- stylua: ignore start",
+ txt,
+ }, "\n"),
+ -1,
+ function(write_err)
+ assert(not write_err, write_err)
+ uv.fs_close(fd, function(close_err)
+ assert(not close_err, close_err)
+ end)
+ end
+ )
end)
end
@@ -44,12 +53,26 @@ local function get_supported_filetypes(server)
lspconfig_server_ok and configs[server.name].document_config.default_config.filetypes,
{}
)
- -- it's probably still not safe to do this in runtime, but just in case
- package.loaded["lspconfig/configs"] = nil
return filetypes
end
-local function generate_metadata_table()
+do
+ local filetype_map = {}
+
+ local available_servers = servers.get_available_servers()
+ for _, server in pairs(available_servers) do
+ for _, filetype in pairs(get_supported_filetypes(server)) do
+ if not filetype_map[filetype] then
+ filetype_map[filetype] = {}
+ end
+ table.insert(filetype_map[filetype], server.name)
+ end
+ end
+
+ write_file(Path.concat { generated_dir, "filetype_map.lua" }, "return " .. vim.inspect(filetype_map), "w")
+end
+
+do
local metadata = {}
local function create_metadata_entry(server)
@@ -60,20 +83,6 @@ local function generate_metadata_table()
for _, server in pairs(available_servers) do
metadata[server.name] = create_metadata_entry(server)
end
- print(string.format("found [%s] configurations", #vim.tbl_keys(metadata)))
- return metadata
+ write_file(Path.concat { generated_dir, "metadata.lua" }, "return " .. vim.inspect(metadata), "w")
end
-
-local mt = generate_metadata_table()
-
-local metadata_file_lua = Path.concat { generated_dir, "metadata.lua" }
-write_file(
- metadata_file_lua,
- table.concat({
- "-- THIS FILE IS GENERATED. DO NOT EDIT MANUALLY.",
- "-- stylua: ignore start",
- "return " .. vim.inspect(mt),
- }, "\n"),
- "w"
-)