aboutsummaryrefslogtreecommitdiffstats
path: root/lua
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 /lua
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.
Diffstat (limited to 'lua')
-rw-r--r--lua/nvim-lsp-installer/_generated/filetype_map.lua103
-rw-r--r--lua/nvim-lsp-installer/ui/status-win/init.lua51
2 files changed, 143 insertions, 11 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 {