From 40b9bd8e80c9374d2d25cfc93e6fc9cf2594c46a Mon Sep 17 00:00:00 2001 From: Jakub Dundalek Date: Fri, 22 Mar 2024 10:22:49 +0100 Subject: [PATCH] add curated server recommendations --- scripts/genstats.lua | 67 ++++++++++++++++++----- servers.md | 124 +++++++++++++++++++++++++------------------ 2 files changed, 128 insertions(+), 63 deletions(-) diff --git a/scripts/genstats.lua b/scripts/genstats.lua index f4e68fd..867c21d 100755 --- a/scripts/genstats.lua +++ b/scripts/genstats.lua @@ -16,7 +16,33 @@ for server, pkg in pairs(servers) do end end -local filetype_to_servers = helpers.build_filetype_to_servers_index(available_servers, lspconfig) +-- Curated recommendations +local curated_opts = [[{ + excluded_servers = { + "ccls", -- prefer clangd + "denols", -- prefer eslint and tsserver + "docker_compose_language_service", -- yamlls should be enough? + "flow", -- prefer eslint and tsserver + "ltex", -- grammar tool using too much CPU + "quick_lint_js", -- prefer eslint and tsserver + "rnix", -- archived on Jan 25, 2024 + "scry", -- archived on Jun 1, 2023 + "tailwindcss", -- associates with too many filetypes + }, + preferred_servers = { + markdown = {}, + python = { "pyright", "ruff_lsp" }, + }, +} +]] +local opts = load("return " .. curated_opts)() + +local filetype_to_servers = helpers.enabled_filetypes_to_servers( + available_servers, lspconfig, {}, {} +) +local filetype_to_servers_curated = helpers.enabled_filetypes_to_servers( + available_servers, lspconfig, opts.excluded_servers, opts.preferred_servers +) local filetypes_with_variants = {} for filetype, filetype_servers in pairs(filetype_to_servers) do @@ -50,31 +76,48 @@ local function lsp_link(server) return 'https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#' .. server end +local function write_server_list(f, servers) + table.sort(servers) + for i, server in ipairs(servers) do + if (i ~= 1) then f:write(', ') end + f:write(string.format('[%s](%s)', server, lsp_link(server))) + end +end + local f = assert(io.open('servers.md', 'w')) f:write([[ -## Filetypes + +## Curated servers + +You can use the following configuration to enable a smaller selection of recommended servers that should work well for most users. + +```lua +]] .. + curated_opts .. + [[ +``` +## Servers by filetypes Following table lists filetypes with more than one associated server. -It can be used to decide which servers to specify using the `preferred_servers` configuration option. +It can be used to decide which servers to specify using the `excluded_servers` and `preferred_servers` configuration options. -| Filetype | Available servers | -| - | - | +| Filetype | Available servers | Curated selection | +| - | - | - | ]]) local filetypes = vim.tbl_keys(filetypes_with_variants) table.sort(filetypes) for _, filetype in ipairs(filetypes) do - local filetype_servers = filetypes_with_variants[filetype] f:write(string.format('| `%s` | ', filetype)) - table.sort(filetype_servers) - for i, server in ipairs(filetype_servers) do - if (i ~= 1) then f:write(', ') end - f:write(string.format('[%s](%s)', server, lsp_link(server))) - end + write_server_list(f, filetypes_with_variants[filetype]) + + f:write(" | ") + write_server_list(f, filetype_to_servers_curated[filetype]) + f:write(" |\n") end -f:write(string.format('\n## Supported: %d / %d\n\n', supported, total)) +f:write(string.format('\n## Available servers: %d / %d\n\n', supported, total)) f:write('| Language Server | Nix package |\n') f:write('| - | - |\n') for _, server in ipairs(supported_servers) do diff --git a/servers.md b/servers.md index fe65b14..e2cdca5 100644 --- a/servers.md +++ b/servers.md @@ -1,57 +1,80 @@ -## Filetypes + +## Curated servers + +You can use the following configuration to enable a smaller selection of recommended servers that should work well for most users. + +```lua +{ + excluded_servers = { + "ccls", -- prefer clangd + "denols", -- prefer eslint and tsserver + "docker_compose_language_service", -- yamlls should be enough? + "flow", -- prefer eslint and tsserver + "ltex", -- grammar tool using too much CPU + "quick_lint_js", -- prefer eslint and tsserver + "rnix", -- archived on Jan 25, 2024 + "scry", -- archived on Jun 1, 2023 + "tailwindcss", -- associates with too many filetypes + }, + preferred_servers = { + markdown = {}, + python = { "pyright", "ruff_lsp" }, + }, +} +``` +## Servers by filetypes Following table lists filetypes with more than one associated server. -It can be used to decide which servers to specify using the `preferred_servers` configuration option. +It can be used to decide which servers to specify using the `excluded_servers` and `preferred_servers` configuration options. -| Filetype | Available servers | -| - | - | -| `astro` | [astro](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#astro), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `bib` | [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex), [texlab](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#texlab) | -| `c` | [ccls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ccls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd), [sourcekit](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#sourcekit) | -| `clojure` | [clojure_lsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clojure_lsp), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `context` | [digestif](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#digestif), [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex) | -| `cpp` | [ccls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ccls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd), [sourcekit](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#sourcekit) | -| `crystal` | [crystalline](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#crystalline), [scry](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#scry) | -| `cs` | [csharp_ls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#csharp_ls), [omnisharp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#omnisharp) | -| `css` | [cssls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#cssls), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `cuda` | [ccls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ccls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd) | -| `eelixir` | [elixirls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#elixirls), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `elixir` | [elixirls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#elixirls), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `heex` | [elixirls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#elixirls), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `html` | [html](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#html), [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `java` | [java_language_server](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#java_language_server), [jdtls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#jdtls) | -| `javascript` | [denols](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#denols), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [flow](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#flow), [quick_lint_js](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#quick_lint_js), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | -| `javascript.jsx` | [denols](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#denols), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [flow](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#flow), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | -| `javascriptreact` | [denols](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#denols), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [flow](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#flow), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | -| `less` | [cssls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#cssls), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `markdown` | [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex), [marksman](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#marksman), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss), [zk](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#zk) | -| `nim` | [nim_langserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nim_langserver), [nimls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nimls) | -| `nix` | [nil_ls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nil_ls), [nixd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nixd), [rnix](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#rnix) | -| `objc` | [ccls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ccls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd) | -| `objcpp` | [ccls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ccls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd) | -| `ocaml` | [ocamlls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ocamlls), [ocamllsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ocamllsp) | -| `perl` | [perlls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#perlls), [perlnavigator](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#perlnavigator), [perlpls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#perlpls) | -| `php` | [intelephense](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#intelephense), [phpactor](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#phpactor), [psalm](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#psalm), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `plaintex` | [digestif](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#digestif), [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex), [texlab](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#texlab) | -| `proto` | [bufls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#bufls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd) | -| `python` | [jedi_language_server](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#jedi_language_server), [pylsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#pylsp), [pylyzer](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#pylyzer), [pyright](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#pyright), [ruff_lsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ruff_lsp) | -| `reason` | [ocamlls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ocamlls), [ocamllsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ocamllsp), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `rmd` | [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex), [r_language_server](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#r_language_server) | -| `ruby` | [ruby_ls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ruby_ls), [solargraph](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#solargraph), [syntax_tree](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#syntax_tree) | -| `scss` | [cssls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#cssls), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `svelte` | [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [svelte](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#svelte), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `systemverilog` | [svls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#svls), [verible](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#verible) | -| `templ` | [html](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#html), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | -| `terraform` | [terraform_lsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#terraform_lsp), [terraformls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#terraformls), [tflint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tflint) | -| `tex` | [digestif](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#digestif), [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex), [texlab](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#texlab) | -| `typescript` | [denols](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#denols), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [quick_lint_js](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#quick_lint_js), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | -| `typescript.tsx` | [denols](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#denols), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | -| `typescriptreact` | [denols](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#denols), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | -| `verilog` | [svls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#svls), [verible](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#verible) | -| `vue` | [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss), [volar](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#volar), [vuels](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#vuels) | -| `yaml.docker-compose` | [docker_compose_language_service](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#docker_compose_language_service), [yamlls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#yamlls) | +| Filetype | Available servers | Curated selection | +| - | - | - | +| `astro` | [astro](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#astro), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [astro](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#astro), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint) | +| `bib` | [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex), [texlab](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#texlab) | [texlab](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#texlab) | +| `c` | [ccls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ccls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd), [sourcekit](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#sourcekit) | [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd), [sourcekit](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#sourcekit) | +| `clojure` | [clojure_lsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clojure_lsp), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [clojure_lsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clojure_lsp) | +| `context` | [digestif](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#digestif), [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex) | [digestif](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#digestif) | +| `cpp` | [ccls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ccls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd), [sourcekit](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#sourcekit) | [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd), [sourcekit](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#sourcekit) | +| `crystal` | [crystalline](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#crystalline), [scry](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#scry) | [crystalline](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#crystalline) | +| `cs` | [csharp_ls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#csharp_ls), [omnisharp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#omnisharp) | [csharp_ls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#csharp_ls), [omnisharp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#omnisharp) | +| `css` | [cssls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#cssls), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [cssls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#cssls) | +| `cuda` | [ccls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ccls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd) | [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd) | +| `eelixir` | [elixirls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#elixirls), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [elixirls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#elixirls) | +| `elixir` | [elixirls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#elixirls), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [elixirls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#elixirls) | +| `heex` | [elixirls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#elixirls), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [elixirls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#elixirls) | +| `html` | [html](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#html), [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [html](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#html) | +| `java` | [java_language_server](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#java_language_server), [jdtls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#jdtls) | [java_language_server](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#java_language_server), [jdtls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#jdtls) | +| `javascript` | [denols](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#denols), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [flow](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#flow), [quick_lint_js](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#quick_lint_js), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | +| `javascript.jsx` | [denols](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#denols), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [flow](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#flow), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | +| `javascriptreact` | [denols](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#denols), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [flow](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#flow), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | +| `less` | [cssls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#cssls), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [cssls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#cssls) | +| `markdown` | [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex), [marksman](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#marksman), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss), [zk](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#zk) | | +| `nim` | [nim_langserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nim_langserver), [nimls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nimls) | [nim_langserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nim_langserver), [nimls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nimls) | +| `nix` | [nil_ls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nil_ls), [nixd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nixd), [rnix](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#rnix) | [nil_ls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nil_ls), [nixd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nixd) | +| `objc` | [ccls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ccls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd) | [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd) | +| `objcpp` | [ccls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ccls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd) | [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd) | +| `perl` | [perlls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#perlls), [perlnavigator](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#perlnavigator), [perlpls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#perlpls) | [perlls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#perlls), [perlnavigator](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#perlnavigator), [perlpls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#perlpls) | +| `php` | [intelephense](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#intelephense), [phpactor](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#phpactor), [psalm](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#psalm), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [intelephense](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#intelephense), [phpactor](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#phpactor), [psalm](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#psalm) | +| `plaintex` | [digestif](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#digestif), [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex), [texlab](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#texlab) | [digestif](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#digestif), [texlab](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#texlab) | +| `proto` | [bufls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#bufls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd) | [bufls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#bufls), [clangd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#clangd) | +| `python` | [jedi_language_server](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#jedi_language_server), [pylsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#pylsp), [pylyzer](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#pylyzer), [pyright](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#pyright), [ruff_lsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ruff_lsp) | [pyright](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#pyright), [ruff_lsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ruff_lsp) | +| `reason` | [ocamllsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ocamllsp), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [ocamllsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ocamllsp) | +| `rmd` | [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex), [r_language_server](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#r_language_server) | [r_language_server](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#r_language_server) | +| `ruby` | [ruby_ls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ruby_ls), [solargraph](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#solargraph), [syntax_tree](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#syntax_tree) | [ruby_ls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ruby_ls), [solargraph](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#solargraph), [syntax_tree](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#syntax_tree) | +| `scss` | [cssls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#cssls), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [cssls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#cssls) | +| `svelte` | [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [svelte](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#svelte), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [svelte](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#svelte) | +| `systemverilog` | [svls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#svls), [verible](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#verible) | [svls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#svls), [verible](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#verible) | +| `templ` | [html](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#html), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss) | [html](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#html) | +| `terraform` | [terraform_lsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#terraform_lsp), [terraformls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#terraformls), [tflint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tflint) | [terraform_lsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#terraform_lsp), [terraformls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#terraformls), [tflint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tflint) | +| `tex` | [digestif](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#digestif), [ltex](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ltex), [texlab](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#texlab) | [digestif](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#digestif), [texlab](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#texlab) | +| `typescript` | [denols](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#denols), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [quick_lint_js](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#quick_lint_js), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | +| `typescript.tsx` | [denols](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#denols), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | +| `typescriptreact` | [denols](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#denols), [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tsserver](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver) | +| `verilog` | [svls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#svls), [verible](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#verible) | [svls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#svls), [verible](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#verible) | +| `vue` | [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [tailwindcss](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tailwindcss), [volar](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#volar), [vuels](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#vuels) | [eslint](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#eslint), [volar](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#volar), [vuels](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#vuels) | +| `yaml.docker-compose` | [docker_compose_language_service](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#docker_compose_language_service), [yamlls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#yamlls) | [yamlls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#yamlls) | -## Supported: 116 / 287 +## Available servers: 115 / 286 | Language Server | Nix package | | - | - | @@ -120,7 +143,6 @@ It can be used to decide which servers to specify using the `preferred_servers` | [nimls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nimls) | [nimlsp](https://search.nixos.org/packages?channel=unstable&query=nimlsp&show=nimlsp) | | [nixd](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nixd) | [nixd](https://search.nixos.org/packages?channel=unstable&query=nixd&show=nixd) | | [nushell](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#nushell) | [nushell](https://search.nixos.org/packages?channel=unstable&query=nushell&show=nushell) | -| [ocamlls](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ocamlls) | [nodePackages.ocaml-language-server](https://search.nixos.org/packages?channel=unstable&query=nodePackages.ocaml-language-server&show=nodePackages.ocaml-language-server) | | [ocamllsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ocamllsp) | [ocamlPackages.ocaml-lsp](https://search.nixos.org/packages?channel=unstable&query=ocamlPackages.ocaml-lsp&show=ocamlPackages.ocaml-lsp) | | [omnisharp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#omnisharp) | [omnisharp-roslyn](https://search.nixos.org/packages?channel=unstable&query=omnisharp-roslyn&show=omnisharp-roslyn) | | [openscad_lsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#openscad_lsp) | [openscad-lsp](https://search.nixos.org/packages?channel=unstable&query=openscad-lsp&show=openscad-lsp) |