Skip to content

Commit

Permalink
plugins/lsp: deprecate installLanguageServer option in favor of setti…
Browse files Browse the repository at this point in the history
…ng package = null
  • Loading branch information
GaetanLepage committed Feb 14, 2024
1 parent 5a744a7 commit 183eac7
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 66 deletions.
94 changes: 91 additions & 3 deletions plugins/lsp/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,97 @@
with lib; let
cfg = config.plugins.lsp;
in {
imports = [
./language-servers
];
imports =
[
./language-servers
]
# TODO: introduced 2024-02-14, remove on 2024-03-14
++ (
map
(
serverName:
mkRemovedOptionModule
["plugins" "lsp" "servers" serverName "installLanguageServer"]
"If you want to not install the language server package, set `plugins.lsp.servers.${serverName}.package` to `false`."
)
[
"astro"
"bashls"
"beancount"
"biome"
"ccls"
"clangd"
"clojure-lsp"
"cmake"
"csharp-ls"
"cssls"
"dagger"
"dartls"
"denols"
"dhall-lsp-server"
"digestif"
"dockerls"
"efm"
"elixirls"
"elmls"
"emmet_ls"
"eslint"
"fsautocomplete"
"futhark-lsp"
"gdscript"
"gleam"
"gopls"
"graphql"
"helm-ls"
"hls"
"html"
"htmx"
"intelephense"
"java-language-server"
"jsonls"
"julials"
"kotlin-language-server"
"leanls"
"lemminx"
"ltex"
"lua-ls"
"marksman"
"metals"
"nil_ls"
"nixd"
"nushell"
"ols"
"omnisharp"
"perlpls"
"pest_ls"
"phpactor"
"prismals"
"prolog-ls"
"purescriptls"
"pylsp"
"pylyzer"
"pyright"
"rnix-lsp"
"ruff-lsp"
"rust-analyzer"
"solargraph"
"sourcekit"
"svelte"
"tailwindcss"
"taplo"
"templ"
"terraformls"
"texlab"
"tsserver"
"typst-lsp"
"vala-ls"
"vls"
"volar"
"vuels"
"yamlls"
"zls"
]
);

options = {
plugins.lsp = {
Expand Down
112 changes: 50 additions & 62 deletions plugins/lsp/helpers.nix
Original file line number Diff line number Diff line change
Expand Up @@ -19,88 +19,76 @@
}:
with lib; let
cfg = config.plugins.lsp.servers.${name};
in {
options = {
plugins.lsp.servers.${name} = {
enable = mkEnableOption description;

packageOption =
if package != null
then {
package = mkOption {
default = package;
type = types.package;
type = types.nullOr types.package;
description = "Which package to use for ${name}.";
};
}
else {};
in {
options = {
plugins.lsp.servers.${name} =
{
enable = mkEnableOption description;

installLanguageServer = mkOption {
type = types.bool;
default = true;
description = "Whether nixvim should take care of installing the language server.";
};

cmd = mkOption {
type = with types; nullOr (listOf str);
default =
if cfg.installLanguageServer
then cmd cfg
else null;
};
cmd = mkOption {
type = with types; nullOr (listOf str);
default =
if (cfg.package or null) != null
then cmd cfg
else null;
};

filetypes = helpers.mkNullOrOption (types.listOf types.str) ''
Set of filetypes for which to attempt to resolve {root_dir}.
May be empty, or server may specify a default value.
'';
filetypes = helpers.mkNullOrOption (types.listOf types.str) ''
Set of filetypes for which to attempt to resolve {root_dir}.
May be empty, or server may specify a default value.
'';

autostart = helpers.defaultNullOpts.mkBool true ''
Controls if the `FileType` autocommand that launches a language server is created.
If `false`, allows for deferring language servers until manually launched with
`:LspStart` (|lspconfig-commands|).
'';
autostart = helpers.defaultNullOpts.mkBool true ''
Controls if the `FileType` autocommand that launches a language server is created.
If `false`, allows for deferring language servers until manually launched with
`:LspStart` (|lspconfig-commands|).
'';

rootDir = helpers.defaultNullOpts.mkLuaFn "nil" ''
A function (or function handle) which returns the root of the project used to
determine if lspconfig should launch a new language server, or attach a previously
launched server when you open a new buffer matching the filetype of the server.
'';
rootDir = helpers.defaultNullOpts.mkLuaFn "nil" ''
A function (or function handle) which returns the root of the project used to
determine if lspconfig should launch a new language server, or attach a previously
launched server when you open a new buffer matching the filetype of the server.
'';

onAttach =
helpers.mkCompositeOption "Server specific on_attach behavior."
{
override = mkOption {
type = types.bool;
default = false;
description = "Override the global `plugins.lsp.onAttach` function.";
};
onAttach =
helpers.mkCompositeOption "Server specific on_attach behavior."
{
override = mkOption {
type = types.bool;
default = false;
description = "Override the global `plugins.lsp.onAttach` function.";
};

function = mkOption {
type = types.lines;
description = ''
Body of the on_attach function.
The argument `client` and `bufnr` is provided.
'';
};
function = mkOption {
type = types.lines;
description = ''
Body of the on_attach function.
The argument `client` and `bufnr` is provided.
'';
};
};

settings = settingsOptions;
settings = settingsOptions;

extraOptions = mkOption {
default = {};
type = types.attrs;
description = "Extra options for the ${name} language server.";
};
}
// packageOption;
extraOptions = mkOption {
default = {};
type = types.attrs;
description = "Extra options for the ${name} language server.";
};
};
};

config =
mkIf cfg.enable
{
extraPackages =
optional
(cfg.installLanguageServer && (package != null))
(cfg.package != null)
cfg.package;

plugins.lsp.enabledServers = [
Expand Down
2 changes: 1 addition & 1 deletion tests/test-sources/plugins/lsp/_lsp.nix
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
# Do not install the language server using nixvim
gopls = {
enable = true;
installLanguageServer = false;
package = null;
};
nil_ls.enable = true;
rust-analyzer = {
Expand Down

0 comments on commit 183eac7

Please sign in to comment.