diff --git a/plugins/nvim-lsp/helpers.nix b/plugins/nvim-lsp/helpers.nix index 3f5d9ebe..1b1f83ce 100644 --- a/plugins/nvim-lsp/helpers.nix +++ b/plugins/nvim-lsp/helpers.nix @@ -20,6 +20,7 @@ pkgs, config, lib, + options, ... }: with lib; let @@ -84,6 +85,12 @@ Extra settings for the ${name} language server. ''; }; + + extraOptions = mkOption { + default = {}; + type = types.attrs; + description = "Extra options for the ${name} language server."; + }; } // packageOption; }; @@ -98,22 +105,35 @@ plugins.lsp.enabledServers = [ { name = serverName; - extraOptions = { - inherit (cfg) cmd filetypes autostart; - on_attach = - helpers.ifNonNull' cfg.onAttach - ( - helpers.mkRaw '' - function(client, bufnr) - ${optionalString (!cfg.onAttach.override) config.plugins.lsp.onAttach} - ${cfg.onAttach.function} - end - '' - ); - settings = (settings cfg.settings) // cfg.extraSettings; - }; + extraOptions = + { + inherit (cfg) cmd filetypes autostart; + on_attach = + helpers.ifNonNull' cfg.onAttach + ( + helpers.mkRaw '' + function(client, bufnr) + ${optionalString (!cfg.onAttach.override) config.plugins.lsp.onAttach} + ${cfg.onAttach.function} + end + '' + ); + settings = (settings cfg.settings) // cfg.extraSettings; + } + // cfg.extraOptions; } ]; + + warnings = let + extraSettingsOption = options.plugins.lsp.servers.${name}.extraSettings; + in + optional + (extraSettingsOption.isDefined) + ( + let + optionPrefix = "plugins.lsp.servers.${name}"; + in "The `${optionPrefix}.extraSettings` option is deprecated in favor of `${optionPrefix}.extraOptions.settings`." + ); }; }; } diff --git a/tests/test-sources/plugins/nvim-lsp/nvim-lsp.nix b/tests/test-sources/plugins/nvim-lsp/nvim-lsp.nix index 89380c89..21ee4fdf 100644 --- a/tests/test-sources/plugins/nvim-lsp/nvim-lsp.nix +++ b/tests/test-sources/plugins/nvim-lsp/nvim-lsp.nix @@ -33,6 +33,12 @@ }; nil_ls.enable = true; rust-analyzer.enable = true; + ruff-lsp = { + enable = true; + extraOptions = { + init_options.settings.args = ["--config=/path/to/config.toml"]; + }; + }; pylsp = { enable = true; filetypes = ["python"];