plugin/lsp: add lspsaga plugin

This commit is contained in:
Dmitriy Pleshevskiy 2022-09-19 20:43:20 +03:00
parent 3e991b54ea
commit 2d1b7d554f
Signed by: pleshevskiy
GPG key ID: 1B59187B161C0215
4 changed files with 72 additions and 21 deletions

View file

@ -17,6 +17,23 @@
"type": "github"
}
},
"lspsaga-nvim": {
"flake": false,
"locked": {
"lastModified": 1663371685,
"narHash": "sha256-mxyqpgUWBiXC6Xm/5bb6fShZtgXGY1kBsl0DxOkf2zA=",
"owner": "glepnir",
"repo": "lspsaga.nvim",
"rev": "c2ef0115fb917460daf5c76fe3ad3a9357213b54",
"type": "github"
},
"original": {
"owner": "glepnir",
"repo": "lspsaga.nvim",
"rev": "c2ef0115fb917460daf5c76fe3ad3a9357213b54",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1663146586,
@ -36,6 +53,7 @@
"root": {
"inputs": {
"editorconfig-nvim": "editorconfig-nvim",
"lspsaga-nvim": "lspsaga-nvim",
"nixpkgs": "nixpkgs",
"tabby-nvim": "tabby-nvim",
"telescope-live-grep-args-nvim": "telescope-live-grep-args-nvim",

View file

@ -17,6 +17,11 @@
url = "github:nvim-telescope/telescope-live-grep-args.nvim?rev=32b633b062d1168a2d18ad27994e5b4ef97f0a74";
flake = false;
};
lspsaga-nvim = {
url = "github:glepnir/lspsaga.nvim?rev=c2ef0115fb917460daf5c76fe3ad3a9357213b54";
flake = false;
};
};
outputs = inputs @ { self, nixpkgs, utils, ... }:
@ -40,6 +45,10 @@
name = "telescope-live-grep-args-nvim";
src = inputs.telescope-live-grep-args-nvim;
};
lspsaga-nvim = p.vimUtils.buildVimPluginFrom2Nix {
name = "lspsaga-nvim";
src = inputs.lspsaga-nvim;
};
};
})
];

View file

@ -1,16 +1,26 @@
{ nvim-lspconfig, luasnip, nvim-cmp, cmp-nvim-lsp, cmp_luasnip, ... }:
{
luaConfig = (builtins.readFile ./lspconfig.lua)
+ (builtins.readFile ./nvim-cmp.lua);
plugins = [
nvim-lspconfig # Collection of configurations for built-in LSP client
luasnip # Snippets plugin
{ nvim-lspconfig
, lspsaga-nvim
, luasnip
, nvim-cmp
, cmp-nvim-lsp
, cmp_luasnip
, ...
}:
let
lsp = [ nvim-lspconfig lspsaga-nvim ];
snippets = [ luasnip ];
completions = [
nvim-cmp # Autocompletion
cmp-nvim-lsp # LSP source for nvim-cmp
cmp_luasnip # Snippets source for nvim-cmp
];
in
{
luaConfig = (builtins.readFile ./lspconfig.lua)
+ (builtins.readFile ./nvim-cmp.lua);
plugins = lsp
++ snippets
++ completions;
}

View file

@ -1,4 +1,14 @@
local lsp_config = require("lspconfig")
local saga = require("lspsaga")
-- See: https://github.com/glepnir/lspsaga.nvim#configuration
saga.init_lsp_saga({
border_style = "rounded",
code_action_lightbulb = { enable = false },
code_action_keys = { quit = "<Esc>" },
definition_action_keys = { quit = "<Esc>" },
rename_action_quit = "<Esc>",
})
-- always show signcolumns
vim.opt.signcolumn = "yes"
@ -7,10 +17,18 @@ vim.opt.signcolumn = "yes"
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
local opts = { noremap = true, silent = true }
vim.keymap.set("n", "<space>e", vim.diagnostic.open_float, opts)
vim.keymap.set("n", "[c", vim.diagnostic.goto_prev, opts)
vim.keymap.set("n", "]c", vim.diagnostic.goto_next, opts)
vim.keymap.set("n", "[c", "<Cmd>Lspsaga diagnostic_jump_prev<CR>", opts)
vim.keymap.set("n", "]c", "<Cmd>Lspsaga diagnostic_jump_next<CR>", opts)
vim.keymap.set("n", "<space>q", vim.diagnostic.setloclist, opts)
-- Only jump to error
vim.keymap.set("n", "[e", function()
require("lspsaga.diagnostic").goto_prev({ severity = vim.diagnostic.severity.ERROR })
end, opts)
vim.keymap.set("n", "]e", function()
require("lspsaga.diagnostic").goto_next({ severity = vim.diagnostic.severity.ERROR })
end, opts)
-- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer
local on_attach = function(client, bufnr)
@ -25,16 +43,12 @@ local on_attach = function(client, bufnr)
vim.keymap.set("n", "gy", vim.lsp.buf.type_definition, bufopts)
vim.keymap.set("n", "gr", vim.lsp.buf.references, bufopts)
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, bufopts)
vim.keymap.set("n", "K", vim.lsp.buf.hover, bufopts)
vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, bufopts)
vim.keymap.set("n", "<space>wa", vim.lsp.buf.add_workspace_folder, bufopts)
vim.keymap.set("n", "<space>wr", vim.lsp.buf.remove_workspace_folder, bufopts)
vim.keymap.set("n", "<space>wl", function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, bufopts)
vim.keymap.set("n", "<localleader>n", vim.lsp.buf.rename, bufopts)
vim.keymap.set("n", "<localleader>a", vim.lsp.buf.code_action, bufopts)
vim.keymap.set("n", "<localleader>f", vim.lsp.buf.formatting, bufopts)
--vim.keymap.set("n", "<localleader>f", vim.lsp.buf.formatting, bufopts)
vim.keymap.set("n", "<localleader>n", "<Cmd>Lspsaga rename<CR>", bufopts)
vim.keymap.set({ "n", "v" }, "<localleader>a", "<Cmd>Lspsaga code_action<CR>", bufopts)
vim.keymap.set("n", "K", "<Cmd>Lspsaga hover_doc<CR>", bufopts)
vim.keymap.set("n", "co", "<Cmd>LSoutlineToggle<CR>", bufopts)
end
-- nvim-cmp