diff --git a/plugins/by-name/lspsaga/default.nix b/plugins/by-name/lspsaga/default.nix index c2d4045d..3aad03c0 100644 --- a/plugins/by-name/lspsaga/default.nix +++ b/plugins/by-name/lspsaga/default.nix @@ -467,7 +467,7 @@ in { enable = mkOverride 1490 true; }; - warnings = lib.nixvim.mkWarnings "plugins.ltex-extra" { + warnings = lib.nixvim.mkWarnings "plugins.lspsaga" { # https://nvimdev.github.io/lspsaga/implement/#default-options when = (cfg.implement.enable == true) && (cfg.symbolInWinbar.enable == false); diff --git a/plugins/by-name/ltex-extra/default.nix b/plugins/by-name/ltex-extra/default.nix index d5e7f0a1..51b7a89e 100644 --- a/plugins/by-name/ltex-extra/default.nix +++ b/plugins/by-name/ltex-extra/default.nix @@ -2,9 +2,13 @@ lib, helpers, config, + options, ... }: with lib; +let + lspCfg = config.plugins.lsp; +in lib.nixvim.plugins.mkNeovimPlugin { name = "ltex-extra"; packPathName = "ltex_extra.nvim"; @@ -12,6 +16,10 @@ lib.nixvim.plugins.mkNeovimPlugin { maintainers = [ maintainers.loicreynier ]; + description = '' + This plugin works with both the ltex or ltex_plus language servers and will enable ltex_plus if neither are. + ''; + callSetup = false; settingsOptions = { @@ -44,24 +52,65 @@ lib.nixvim.plugins.mkNeovimPlugin { }; extraConfig = cfg: { - warnings = lib.nixvim.mkWarnings "plugins.ltex-extra" { - when = !config.plugins.lsp.enable; - message = '' - You have enabled `ltex-extra` but not the lsp (`plugins.lsp`). - You should set `plugins.lsp.enable = true` to make use of the LTeX_extra plugin's features. - ''; - }; + warnings = lib.nixvim.mkWarnings "plugins.ltex-extra" [ + { + when = !lspCfg.enable; + message = '' + You have enabled `ltex-extra` but not the lsp (`plugins.lsp`). + You should set `plugins.lsp.enable = true` to make use of the LTeX_extra plugin's features. + ''; + } + ( + let + expectedDefs = map toString [ + ./. + ../../lsp/language-servers + ]; + isExternal = d: !elem d.file expectedDefs; + anyExternal = + acc: name: v: + let + e = findFirst isExternal null v.definitionsWithLocations; + in + if acc != null then + acc + else if e == null then + null + else + { + inherit name; + inherit (e) file; + }; + external = foldlAttrs anyExternal null options.plugins.lsp.servers.ltex; + in + { + # TODO: Added 2025-03-30; remove after 25.05 + # Warn if servers.ltex seems to be configured outside of ltex-extra + when = !lspCfg.servers.ltex.enable && external != null; + message = '' + in ${external.file} + You seem to have configured `plugins.lsp.servers.ltex.${external.name}` for `ltex-extra`. + It now uses `plugins.lsp.servers.ltex_plus` by default, + either move the configuration or explicitly enable `ltex` with `plugins.lsp.servers.ltex.enable = true` + ''; + } + ) + ]; - plugins.lsp = { - servers.ltex = { - # Enable the ltex language server - enable = true; - - onAttach.function = '' + plugins.lsp = + let + attachLua = '' require("ltex_extra").setup(${lib.nixvim.toLuaObject cfg.settings}) ''; + in + { + servers.ltex.onAttach.function = attachLua; + servers.ltex_plus = { + # Enable ltex_plus if ltex is not already enabled + enable = mkIf (!lspCfg.servers.ltex.enable) (mkDefault true); + onAttach.function = attachLua; + }; }; - }; }; settingsExample = { diff --git a/plugins/lsp/language-servers/ltex-settings.nix b/plugins/lsp/language-servers/ltex-settings.nix index deda8dea..a0d20426 100644 --- a/plugins/lsp/language-servers/ltex-settings.nix +++ b/plugins/lsp/language-servers/ltex-settings.nix @@ -249,7 +249,7 @@ in ''; }; - fields = defaultNullOpts.mkAttrsOf' { + bibtex.fields = defaultNullOpts.mkAttrsOf' { type = types.bool; pluginDefault = { }; example = { diff --git a/plugins/lsp/lsp-packages.nix b/plugins/lsp/lsp-packages.nix index 721ab6de..f08144c2 100644 --- a/plugins/lsp/lsp-packages.nix +++ b/plugins/lsp/lsp-packages.nix @@ -82,7 +82,6 @@ "laravel_ls" "lean3ls" "lelwel_ls" - "ltex_plus" "lwc_ls" "m68k" "marko-js" @@ -281,6 +280,7 @@ lemminx = "lemminx"; lsp_ai = "lsp-ai"; ltex = "ltex-ls"; + ltex_plus = "ltex-ls-plus"; lua_ls = "lua-language-server"; luau_lsp = "luau-lsp"; markdown_oxide = "markdown-oxide";