mirror of
https://github.com/NotAShelf/nvf.git
synced 2025-09-06 10:21:31 +00:00
This change is done in favor of our intentions to use the new API Neovim has exposed, and the one we are exposing to match theirs.
93 lines
2.7 KiB
Nix
93 lines
2.7 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
...
|
|
}: let
|
|
inherit (builtins) filter;
|
|
inherit (lib.modules) mkIf mkMerge mkDefault;
|
|
inherit (lib.options) mkOption mkEnableOption;
|
|
inherit (lib.types) attrsOf;
|
|
inherit (lib.strings) concatLines;
|
|
inherit (lib.attrsets) mapAttrsToList attrNames filterAttrs;
|
|
inherit (lib.generators) mkLuaInline;
|
|
inherit (lib.nvim.languages) lspOptions;
|
|
inherit (lib.nvim.dag) entryAnywhere;
|
|
inherit (lib.nvim.lua) toLuaObject;
|
|
|
|
cfg = config.vim.lsp;
|
|
|
|
lspConfigurations =
|
|
mapAttrsToList (
|
|
name: value: ''
|
|
vim.lsp.config["${name}"] = ${toLuaObject value}
|
|
''
|
|
)
|
|
cfg.servers;
|
|
|
|
enabledServers = filterAttrs (_: u: u.enable) cfg.servers;
|
|
in {
|
|
options = {
|
|
vim.lsp = {
|
|
enable = mkEnableOption ''
|
|
global LSP functionality for Neovim.
|
|
|
|
This option controls whether to enable LSP functionality within modules under
|
|
{option}`vim.languages`. You do not need to set this to `true` for language
|
|
servers defined in {option}`vim.lsp.servers` to take effect, since they are
|
|
enabled automatically.
|
|
'';
|
|
|
|
servers = mkOption {
|
|
type = attrsOf lspOptions;
|
|
default = {};
|
|
example = ''
|
|
{
|
|
"*" = {
|
|
root_markers = [".git"];
|
|
capabilities = {
|
|
textDocument = {
|
|
semanticTokens = {
|
|
multilineTokenSupport = true;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
"clangd" = {
|
|
filetypes = ["c"];
|
|
};
|
|
}
|
|
'';
|
|
description = ''
|
|
LSP configurations that will be managed using `vim.lsp.config()` and related
|
|
utilities added in Neovim 0.11. LSPs defined here will be added to the
|
|
resulting {file}`init.lua` using `vim.lsp.config` and enabled through
|
|
`vim.lsp.enable()` API from Neovim below the configuration table.
|
|
|
|
You may review the generated configuration by running {command}`nvf-print-config`
|
|
in a shell. Please see {command}`:help lsp-config` for more details
|
|
on the underlying API.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
config = mkMerge [
|
|
{
|
|
vim.lsp.servers."*" = {
|
|
capabilities = mkDefault (mkLuaInline "capabilities");
|
|
on_attach = mkDefault (mkLuaInline "default_on_attach");
|
|
};
|
|
}
|
|
|
|
(mkIf (cfg.servers != {}) {
|
|
vim.luaConfigRC.lsp-servers = entryAnywhere ''
|
|
-- Individual LSP configurations managed by nvf.
|
|
${concatLines lspConfigurations}
|
|
|
|
-- Enable configured LSPs explicitly
|
|
vim.lsp.enable(${toLuaObject (filter (name: name != "*") (attrNames enabledServers))})
|
|
'';
|
|
})
|
|
];
|
|
}
|