mirror of
https://github.com/nix-community/nixvim.git
synced 2025-11-08 19:46:06 +01:00
modules/lsp: auto-import per-server custom modules
Adding a module in the following places will import the module into that specific server's submodule. This allows creating server-specific options. Added a test case to ensure all custom modules correspond to an actual server option to avoid accidental dead code.
This commit is contained in:
parent
cf6c8ef1fa
commit
2414e8e99f
3 changed files with 50 additions and 1 deletions
8
modules/lsp/servers/custom/README.md
Normal file
8
modules/lsp/servers/custom/README.md
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Custom LSP server modules
|
||||||
|
|
||||||
|
This directory contains modules that relate to a specific server.
|
||||||
|
Files are auto-imported into the submodule based on their name.
|
||||||
|
|
||||||
|
For example, a file named `foo.nix` or `foo/default.nix` would be imported into the `lsp.servers.foo` submodule.
|
||||||
|
|
||||||
|
A corresponding `lsp.servers.<name>` option must exist for every module in this directory.
|
||||||
|
|
@ -90,5 +90,13 @@ in
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
./server-renames.nix
|
./server-renames.nix
|
||||||
];
|
]
|
||||||
|
# We cannot use `config._module.args.name` in imports, since `config` causes inf-rec.
|
||||||
|
# Therefore we can only import custom modules when we have an externally supplied `name`.
|
||||||
|
++ lib.optionals (args ? name) (
|
||||||
|
lib.filter lib.pathExists [
|
||||||
|
./custom/${args.name}.nix
|
||||||
|
./custom/${args.name}/default.nix
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -221,4 +221,37 @@
|
||||||
++ assertSuffix "haskell-language-server" hls.package
|
++ assertSuffix "haskell-language-server" hls.package
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Assert that we don't have any redundant custom modules
|
||||||
|
custom-server-modules =
|
||||||
|
{ lib, options, ... }:
|
||||||
|
let
|
||||||
|
rootPrefix = toString ../../../. + "/";
|
||||||
|
customDir = ../../../modules/lsp/servers/custom;
|
||||||
|
serverOptions = (opt: opt.type.getSubOptions opt.loc) options.lsp.servers;
|
||||||
|
modules = lib.pipe customDir [
|
||||||
|
builtins.readDir
|
||||||
|
(lib.filterAttrs (name: _: !(serverOptions ? ${lib.strings.removeSuffix ".nix" name})))
|
||||||
|
(lib.mapAttrsToList (
|
||||||
|
name: type: customDir + "/${name}" + lib.optionalString (type == "directory") "/default.nix"
|
||||||
|
))
|
||||||
|
(builtins.filter (lib.strings.hasSuffix ".nix"))
|
||||||
|
(builtins.filter lib.pathExists)
|
||||||
|
(map (module: lib.strings.removePrefix rootPrefix (toString module)))
|
||||||
|
];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
test.buildNixvim = false;
|
||||||
|
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion = modules == [ ];
|
||||||
|
message = ''
|
||||||
|
The following custom modules do not correspond to an LSP server option:${
|
||||||
|
lib.concatMapStrings (module: "\n- ${module}") modules
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue