mirror of
https://github.com/NotAShelf/nvf.git
synced 2025-10-16 13:39:33 +00:00
Merge pull request #1156 from horriblename/LspAttach-keybinds
attach LSP keybinds + other setup work in LspAttach
This commit is contained in:
commit
5ff51032a4
13 changed files with 49 additions and 48 deletions
|
@ -28,6 +28,10 @@
|
|||
align with the "hunks" themed mapping and avoid conflict with the new [neogit]
|
||||
group.
|
||||
|
||||
- LSP keybinds and related plugin integrations are now attached in an LspAttach
|
||||
autocmd event. If you were calling `default_on_attach()` in your LSP setup you
|
||||
can remove them now.
|
||||
|
||||
[NotAShelf](https://github.com/notashelf):
|
||||
|
||||
[typst-preview.nvim]: https://github.com/chomosuke/typst-preview.nvim
|
||||
|
@ -135,6 +139,8 @@
|
|||
- Moved code setting `additionalRuntimePaths` and `enableLuaLoader` out of
|
||||
`luaConfigPre`'s default to prevent being overridden
|
||||
- Use conform over custom autocmds for LSP format on save
|
||||
- Move LSP keybinds and other related plugin integrations into an LspAttach
|
||||
event.
|
||||
|
||||
[diniamo](https://github.com/diniamo):
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
# - the addition of the function `entryBefore` indicating a "wanted
|
||||
# by" relationship.
|
||||
{lib}: let
|
||||
inherit (builtins) isAttrs attrValues attrNames elem all head tail length toJSON isString;
|
||||
inherit (builtins) isAttrs attrValues attrNames elem all head tail length toJSON isString removeAttrs;
|
||||
inherit (lib.attrsets) filterAttrs mapAttrs;
|
||||
inherit (lib.lists) toposort;
|
||||
inherit (lib.nvim.dag) empty isEntry entryBetween entryAfter entriesBetween entryAnywhere topoSort;
|
||||
|
@ -169,10 +169,11 @@ in {
|
|||
else value)
|
||||
dag;
|
||||
sortedDag = topoSort finalDag;
|
||||
loopDetail = map (loops: removeAttrs loops ["data"]) sortedDag.loops;
|
||||
result =
|
||||
if sortedDag ? result
|
||||
then mapResult sortedDag.result
|
||||
else abort ("Dependency cycle in ${name}: " + toJSON sortedDag);
|
||||
else abort ("Dependency cycle in ${name}: " + toJSON loopDetail);
|
||||
in
|
||||
result;
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
inherit (lib.types) nullOr submodule listOf str bool;
|
||||
inherit (lib.nvim.types) luaInline;
|
||||
inherit (lib.nvim.lua) toLuaObject;
|
||||
inherit (lib.nvim.dag) entryAfter;
|
||||
inherit (lib.nvim.dag) entryAfter entryBetween;
|
||||
|
||||
autocommandType = submodule {
|
||||
options = {
|
||||
|
@ -144,7 +144,7 @@ in {
|
|||
enabledAutogroups = filter (au: au.enable) cfg.augroups;
|
||||
in {
|
||||
luaConfigRC = {
|
||||
augroups = entryAfter ["pluginConfigs"] (optionalString (enabledAutogroups != []) ''
|
||||
augroups = entryBetween ["autocmds"] ["pluginConfigs"] (optionalString (enabledAutogroups != []) ''
|
||||
local nvf_autogroups = {}
|
||||
for _, group in ipairs(${toLuaObject enabledAutogroups}) do
|
||||
if group.name then
|
||||
|
|
|
@ -77,7 +77,6 @@ in {
|
|||
{
|
||||
vim.lsp.servers."*" = {
|
||||
capabilities = mkDefault (mkLuaInline "capabilities");
|
||||
on_attach = mkDefault (mkLuaInline "default_on_attach");
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -26,8 +26,6 @@
|
|||
workspace_required = true;
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr)
|
||||
|
||||
local function switch_source_header(bufnr)
|
||||
local method_name = "textDocument/switchSourceHeader"
|
||||
local params = vim.lsp.util.make_text_document_params(bufnr)
|
||||
|
@ -77,8 +75,6 @@
|
|||
};
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr)
|
||||
|
||||
local function switch_source_header(bufnr)
|
||||
local method_name = "textDocument/switchSourceHeader"
|
||||
local client = vim.lsp.get_clients({ bufnr = bufnr, name = "clangd", })[1]
|
||||
|
|
|
@ -63,12 +63,11 @@
|
|||
};
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr)
|
||||
local oe = require("omnisharp_extended")
|
||||
${mkLspBinding "goToDefinition" "oe.lsp_definition"}
|
||||
${mkLspBinding "goToType" "oe.lsp_type_definition"}
|
||||
${mkLspBinding "listReferences" "oe.lsp_references"}
|
||||
${mkLspBinding "listImplementations" "oe.lsp_implementation"}
|
||||
local oe = require("omnisharp_extended")
|
||||
${mkLspBinding "goToDefinition" "oe.lsp_definition"}
|
||||
${mkLspBinding "goToType" "oe.lsp_type_definition"}
|
||||
${mkLspBinding "listReferences" "oe.lsp_references"}
|
||||
${mkLspBinding "listImplementations" "oe.lsp_implementation"}
|
||||
end
|
||||
'';
|
||||
settings = {
|
||||
|
|
|
@ -161,7 +161,6 @@ in {
|
|||
},
|
||||
|
||||
capabilities = capabilities,
|
||||
on_attach = default_on_attach;
|
||||
},
|
||||
${optionalString cfg.dap.enable ''
|
||||
debugger = {
|
||||
|
|
|
@ -33,7 +33,6 @@
|
|||
''
|
||||
function(client, bufnr)
|
||||
local ht = require("haskell-tools")
|
||||
default_on_attach(client, bufnr, ht)
|
||||
local opts = { noremap = true, silent = true, buffer = bufnr }
|
||||
vim.keymap.set('n', '<localleader>cl', vim.lsp.codelens.run, opts)
|
||||
vim.keymap.set('n', '<localleader>hs', ht.hoogle.hoogle_signature, opts)
|
||||
|
|
|
@ -42,7 +42,6 @@
|
|||
};
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr);
|
||||
vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightOrganizeImports', function()
|
||||
local params = {
|
||||
command = 'pyright.organizeimports',
|
||||
|
@ -89,7 +88,6 @@
|
|||
};
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr);
|
||||
vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightOrganizeImports', function()
|
||||
local params = {
|
||||
command = 'basedpyright.organizeimports',
|
||||
|
|
|
@ -160,7 +160,6 @@ in {
|
|||
${cfg.lsp.opts}
|
||||
},
|
||||
on_attach = function(client, bufnr)
|
||||
default_on_attach(client, bufnr)
|
||||
local opts = { noremap=true, silent=true, buffer = bufnr }
|
||||
vim.keymap.set("n", "<localleader>rr", ":RustLsp runnables<CR>", opts)
|
||||
vim.keymap.set("n", "<localleader>rp", ":RustLsp parentModule<CR>", opts)
|
||||
|
|
|
@ -50,8 +50,6 @@
|
|||
};
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr);
|
||||
|
||||
-- ts_ls provides `source.*` code actions that apply to the whole file. These only appear in
|
||||
-- `vim.lsp.buf.code_action()` if specified in `context.only`.
|
||||
vim.api.nvim_buf_create_user_command(0, 'LspTypescriptSourceAction', function()
|
||||
|
@ -106,7 +104,6 @@
|
|||
};
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr)
|
||||
vim.api.nvim_buf_create_user_command(0, 'LspDenolsCache', function()
|
||||
client:exec_cmd({
|
||||
command = 'deno.cache',
|
||||
|
|
|
@ -15,18 +15,18 @@
|
|||
|
||||
cfg = config.vim.languages.yaml;
|
||||
|
||||
on_attach = mkLuaInline (
|
||||
on_attach =
|
||||
if config.vim.languages.helm.lsp.enable && config.vim.languages.helm.enable
|
||||
then ''
|
||||
function(client, bufnr)
|
||||
default_on_attach()
|
||||
local filetype = vim.bo[bufnr].filetype
|
||||
if filetype == "helm" then
|
||||
client.stop()
|
||||
then
|
||||
mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
local filetype = vim.bo[bufnr].filetype
|
||||
if filetype == "helm" then
|
||||
client.stop()
|
||||
end
|
||||
end
|
||||
end''
|
||||
else "default_on_attach"
|
||||
);
|
||||
''
|
||||
else null;
|
||||
|
||||
defaultServers = ["yaml-language-server"];
|
||||
servers = {
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
inherit (lib.strings) optionalString;
|
||||
inherit (lib.trivial) boolToString;
|
||||
inherit (lib.nvim.binds) addDescriptionsToMappings;
|
||||
inherit (lib.nvim.dag) entryBefore;
|
||||
inherit (lib.nvim.lua) toLuaObject;
|
||||
|
||||
cfg = config.vim.lsp;
|
||||
usingNvimCmp = config.vim.autocomplete.nvim-cmp.enable;
|
||||
|
@ -22,7 +24,7 @@
|
|||
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||
mkBinding = binding: action:
|
||||
if binding.value != null
|
||||
then "vim.keymap.set('n', '${binding.value}', ${action}, {buffer=bufnr, noremap=true, silent=true, desc='${binding.description}'})"
|
||||
then "vim.keymap.set('n', ${toLuaObject binding.value}, ${action}, {buffer=bufnr, noremap=true, silent=true, desc=${toLuaObject binding.description}})"
|
||||
else "";
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
|
@ -34,20 +36,26 @@ in {
|
|||
|
||||
augroups = [{name = augroup;}];
|
||||
autocmds =
|
||||
(optional cfg.inlayHints.enable {
|
||||
group = augroup;
|
||||
event = ["LspAttach"];
|
||||
desc = "LSP on-attach enable inlay hints autocmd";
|
||||
callback = mkLuaInline ''
|
||||
function(event)
|
||||
local bufnr = event.buf
|
||||
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then
|
||||
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = bufnr }), { bufnr = bufnr })
|
||||
[
|
||||
{
|
||||
group = augroup;
|
||||
event = ["LspAttach"];
|
||||
desc = "LSP on-attach add keybinds, enable inlay hints, and other plugin integrations";
|
||||
callback = mkLuaInline ''
|
||||
function(event)
|
||||
local bufnr = event.buf
|
||||
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||
default_on_attach(client, bufnr)
|
||||
|
||||
${optionalString cfg.inlayHints.enable ''
|
||||
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then
|
||||
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = bufnr }), { bufnr = bufnr })
|
||||
end
|
||||
''}
|
||||
end
|
||||
end
|
||||
'';
|
||||
})
|
||||
'';
|
||||
}
|
||||
]
|
||||
++ (optional (!conformFormatOnSave) {
|
||||
group = augroup;
|
||||
event = ["BufWritePre"];
|
||||
|
@ -86,7 +94,7 @@ in {
|
|||
'';
|
||||
});
|
||||
|
||||
pluginRC.lsp-setup = ''
|
||||
pluginRC.lsp-setup = entryBefore ["autocmds"] ''
|
||||
vim.g.formatsave = ${boolToString cfg.formatOnSave};
|
||||
|
||||
local attach_keymaps = function(client, bufnr)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue