mirror of
https://github.com/NotAShelf/nvf.git
synced 2026-04-26 19:37:36 +00:00
languages/csharp: add omnisharp-extended-lsp-nvim extension
This commit is contained in:
parent
c73e781a3d
commit
3c8885b75a
2 changed files with 55 additions and 15 deletions
|
|
@ -111,6 +111,7 @@
|
||||||
[CaueAnjos](https://github.com/caueanjos)
|
[CaueAnjos](https://github.com/caueanjos)
|
||||||
|
|
||||||
- Renamed `roslyn_ls` to `roslyn-ls`
|
- Renamed `roslyn_ls` to `roslyn-ls`
|
||||||
|
- Turned `omnisharp-extended-lsp-nvim` into an extension disabled by default
|
||||||
|
|
||||||
## Changelog {#sec-release-0-9-changelog}
|
## Changelog {#sec-release-0-9-changelog}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
|
options,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (builtins) concatMap;
|
inherit (builtins) concatMap;
|
||||||
|
|
@ -9,16 +10,18 @@
|
||||||
inherit (lib) genAttrs;
|
inherit (lib) genAttrs;
|
||||||
inherit (lib.generators) mkLuaInline;
|
inherit (lib.generators) mkLuaInline;
|
||||||
inherit (lib.options) mkEnableOption mkOption literalExpression;
|
inherit (lib.options) mkEnableOption mkOption literalExpression;
|
||||||
|
inherit (config.vim.lib) mkMappingOption;
|
||||||
inherit (lib.types) enum listOf;
|
inherit (lib.types) enum listOf;
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption enumWithRename luaInline;
|
inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption enumWithRename luaInline;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
inherit (lib.nvim.dag) entryAnywhere;
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
inherit (lib.nvim.binds) addDescriptionsToMappings;
|
||||||
|
|
||||||
extraServerPlugins = {
|
extraServerPlugins = {
|
||||||
omnisharp = ["omnisharp-extended-lsp-nvim"];
|
|
||||||
csharp_ls = ["csharpls-extended-lsp-nvim"];
|
csharp_ls = ["csharpls-extended-lsp-nvim"];
|
||||||
roslyn-ls = [];
|
roslyn-ls = [];
|
||||||
|
omnisharp = [];
|
||||||
};
|
};
|
||||||
defaultServers = ["csharp-ls"];
|
defaultServers = ["csharp-ls"];
|
||||||
servers = ["csharp-ls" "omnisharp" "roslyn-ls"];
|
servers = ["csharp-ls" "omnisharp" "roslyn-ls"];
|
||||||
|
|
@ -98,6 +101,23 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
omnisharp-extended-lsp-nvim = {
|
||||||
|
enable = mkEnableOption ''
|
||||||
|
Extended 'textDocument/definition' handler for OmniSharp Neovim LSP
|
||||||
|
|
||||||
|
::: {.note}
|
||||||
|
This feature only works for `omnisharp`.
|
||||||
|
:::
|
||||||
|
'';
|
||||||
|
mappings = let
|
||||||
|
inherit (config.vim.lsp) mappings;
|
||||||
|
in {
|
||||||
|
goToDefinition = mkMappingOption "Go to definition [omnisharp-extended-lsp-nvim]" mappings.goToDefinition;
|
||||||
|
goToType = mkMappingOption "Go to type [omnisharp-extended-lsp-nvim]" mappings.goToType;
|
||||||
|
listReferences = mkMappingOption "List references [omnisharp-extended-lsp-nvim]" mappings.listReferences;
|
||||||
|
listImplementations = mkMappingOption "List implementations [omnisharp-extended-lsp-nvim]" mappings.listImplementations;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
treesitter = {
|
treesitter = {
|
||||||
|
|
@ -139,20 +159,15 @@ in {
|
||||||
|
|
||||||
(mkIf cfg.lsp.enable {
|
(mkIf cfg.lsp.enable {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = concatMap (server: extraServerPlugins.${server}) cfg.lsp.servers;
|
luaConfigRC.razorFileTypes = ''
|
||||||
luaConfigRC.razorFileTypes =
|
-- Set unknown file types!
|
||||||
/*
|
vim.filetype.add {
|
||||||
lua
|
extension = {
|
||||||
*/
|
razor = "razor",
|
||||||
''
|
cshtml = "razor",
|
||||||
-- Set unknown file types!
|
},
|
||||||
vim.filetype.add {
|
}
|
||||||
extension = {
|
'';
|
||||||
razor = "razor",
|
|
||||||
cshtml = "razor",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
lsp = {
|
lsp = {
|
||||||
presets = genAttrs cfg.lsp.servers (_: {enable = true;});
|
presets = genAttrs cfg.lsp.servers (_: {enable = true;});
|
||||||
servers = genAttrs cfg.lsp.servers (_: {
|
servers = genAttrs cfg.lsp.servers (_: {
|
||||||
|
|
@ -171,5 +186,29 @@ in {
|
||||||
extraPackages = with pkgs; [roslyn-ls];
|
extraPackages = with pkgs; [roslyn-ls];
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
(mkIf (cfg.lsp.enable
|
||||||
|
&& cfg.extensions.omnisharp-extended-lsp-nvim.enable
|
||||||
|
&& (elem "omnisharp" cfg.lsp.servers)) {
|
||||||
|
vim = {
|
||||||
|
startPlugins = ["omnisharp-extended-lsp-nvim"];
|
||||||
|
lsp.servers.omnisharp.on_attach = let
|
||||||
|
mappingDefinitions = options.vim.languages.csharp.extensions.omnisharp-extended-lsp-nvim.mappings;
|
||||||
|
mappings = addDescriptionsToMappings cfg.extensions.omnisharp-extended-lsp-nvim.mappings mappingDefinitions;
|
||||||
|
mkBinding = binding: action:
|
||||||
|
if binding.value != null
|
||||||
|
then "vim.keymap.set('n', ${toLuaObject binding.value}, ${action}, {buffer=bufnr, noremap=true, silent=true, desc=${toLuaObject binding.description}})"
|
||||||
|
else "";
|
||||||
|
in
|
||||||
|
mkLuaInline
|
||||||
|
''
|
||||||
|
function(client, bufnr)
|
||||||
|
${mkBinding mappings.goToDefinition "require('omnisharp_extended').lsp_definition"}
|
||||||
|
${mkBinding mappings.goToType "require('omnisharp_extended').lsp_type_definition"}
|
||||||
|
${mkBinding mappings.listReferences "require('omnisharp_extended').lsp_references"}
|
||||||
|
${mkBinding mappings.listImplementations "require('omnisharp_extended').lsp_implementation"}
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
})
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue