|
2 | 2 | lib,
|
3 | 3 | helpers,
|
4 | 4 | config,
|
| 5 | + options, |
5 | 6 | ...
|
6 | 7 | }:
|
7 | 8 | with lib;
|
| 9 | +let |
| 10 | + lspCfg = config.plugins.lsp; |
| 11 | +in |
8 | 12 | lib.nixvim.plugins.mkNeovimPlugin {
|
9 | 13 | name = "ltex-extra";
|
10 | 14 | packPathName = "ltex_extra.nvim";
|
11 | 15 | package = "ltex_extra-nvim";
|
12 | 16 |
|
13 | 17 | maintainers = [ maintainers.loicreynier ];
|
14 | 18 |
|
| 19 | + description = '' |
| 20 | + This plugin works with both the ltex or ltex_plus language servers and will enable ltex_plus if neither are. |
| 21 | + ''; |
| 22 | + |
15 | 23 | callSetup = false;
|
16 | 24 |
|
17 | 25 | settingsOptions = {
|
@@ -44,24 +52,65 @@ lib.nixvim.plugins.mkNeovimPlugin {
|
44 | 52 | };
|
45 | 53 |
|
46 | 54 | extraConfig = cfg: {
|
47 |
| - warnings = lib.nixvim.mkWarnings "plugins.ltex-extra" { |
48 |
| - when = !config.plugins.lsp.enable; |
49 |
| - message = '' |
50 |
| - You have enabled `ltex-extra` but not the lsp (`plugins.lsp`). |
51 |
| - You should set `plugins.lsp.enable = true` to make use of the LTeX_extra plugin's features. |
52 |
| - ''; |
53 |
| - }; |
54 |
| - |
55 |
| - plugins.lsp = { |
56 |
| - servers.ltex = { |
57 |
| - # Enable the ltex language server |
58 |
| - enable = true; |
| 55 | + warnings = lib.nixvim.mkWarnings "plugins.ltex-extra" [ |
| 56 | + { |
| 57 | + when = !lspCfg.enable; |
| 58 | + message = '' |
| 59 | + You have enabled `ltex-extra` but not the lsp (`plugins.lsp`). |
| 60 | + You should set `plugins.lsp.enable = true` to make use of the LTeX_extra plugin's features. |
| 61 | + ''; |
| 62 | + } |
| 63 | + ( |
| 64 | + let |
| 65 | + expectedDefs = map toString [ |
| 66 | + ./. |
| 67 | + ../../lsp/language-servers |
| 68 | + ]; |
| 69 | + isExternal = d: !elem d.file expectedDefs; |
| 70 | + anyExternal = |
| 71 | + acc: name: v: |
| 72 | + let |
| 73 | + e = findFirst isExternal null v.definitionsWithLocations; |
| 74 | + in |
| 75 | + if acc != null then |
| 76 | + acc |
| 77 | + else if e == null then |
| 78 | + null |
| 79 | + else |
| 80 | + { |
| 81 | + inherit name; |
| 82 | + inherit (e) file; |
| 83 | + }; |
| 84 | + external = foldlAttrs anyExternal null options.plugins.lsp.servers.ltex; |
| 85 | + in |
| 86 | + { |
| 87 | + # TODO: Added 2025-03-30; remove after 25.05 |
| 88 | + # Warn if servers.ltex seems to be configured outside of ltex-extra |
| 89 | + when = !lspCfg.servers.ltex.enable && external != null; |
| 90 | + message = '' |
| 91 | + in ${external.file} |
| 92 | + You seem to have configured `plugins.lsp.servers.ltex.${external.name}` for `ltex-extra`. |
| 93 | + It now uses `plugins.lsp.servers.ltex_plus` by default, |
| 94 | + either move the configuration or explicitly enable `ltex` with `plugins.lsp.servers.ltex.enable = true` |
| 95 | + ''; |
| 96 | + } |
| 97 | + ) |
| 98 | + ]; |
59 | 99 |
|
60 |
| - onAttach.function = '' |
| 100 | + plugins.lsp = |
| 101 | + let |
| 102 | + attachLua = '' |
61 | 103 | require("ltex_extra").setup(${lib.nixvim.toLuaObject cfg.settings})
|
62 | 104 | '';
|
| 105 | + in |
| 106 | + { |
| 107 | + servers.ltex.onAttach.function = attachLua; |
| 108 | + servers.ltex_plus = { |
| 109 | + # Enable ltex_plus if ltex is not already enabled |
| 110 | + enable = mkIf (!lspCfg.servers.ltex.enable) (mkDefault true); |
| 111 | + onAttach.function = attachLua; |
| 112 | + }; |
63 | 113 | };
|
64 |
| - }; |
65 | 114 | };
|
66 | 115 |
|
67 | 116 | settingsExample = {
|
|
0 commit comments