From 2d1b7d554f628b307689fee24c119bea317e75ee Mon Sep 17 00:00:00 2001 From: janabhumi Date: Mon, 19 Sep 2022 20:43:20 +0300 Subject: [PATCH] plugin/lsp: add lspsaga plugin --- flake.lock | 18 ++++++++++++++++++ flake.nix | 9 +++++++++ plugins/lsp/default.nix | 30 ++++++++++++++++++++---------- plugins/lsp/lspconfig.lua | 36 +++++++++++++++++++++++++----------- 4 files changed, 72 insertions(+), 21 deletions(-) diff --git a/flake.lock b/flake.lock index 3543141..1994f8f 100644 --- a/flake.lock +++ b/flake.lock @@ -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", diff --git a/flake.nix b/flake.nix index 7a66f1e..0e88b67 100644 --- a/flake.nix +++ b/flake.nix @@ -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; + }; }; }) ]; diff --git a/plugins/lsp/default.nix b/plugins/lsp/default.nix index fe5950a..69e3214 100644 --- a/plugins/lsp/default.nix +++ b/plugins/lsp/default.nix @@ -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; } diff --git a/plugins/lsp/lspconfig.lua b/plugins/lsp/lspconfig.lua index f921fb4..90b782e 100644 --- a/plugins/lsp/lspconfig.lua +++ b/plugins/lsp/lspconfig.lua @@ -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 = "" }, + definition_action_keys = { quit = "" }, + rename_action_quit = "", +}) -- 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", "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", "Lspsaga diagnostic_jump_prev", opts) +vim.keymap.set("n", "]c", "Lspsaga diagnostic_jump_next", opts) vim.keymap.set("n", "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", "", vim.lsp.buf.signature_help, bufopts) - vim.keymap.set("n", "wa", vim.lsp.buf.add_workspace_folder, bufopts) - vim.keymap.set("n", "wr", vim.lsp.buf.remove_workspace_folder, bufopts) - vim.keymap.set("n", "wl", function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end, bufopts) - vim.keymap.set("n", "n", vim.lsp.buf.rename, bufopts) - vim.keymap.set("n", "a", vim.lsp.buf.code_action, bufopts) - vim.keymap.set("n", "f", vim.lsp.buf.formatting, bufopts) + --vim.keymap.set("n", "f", vim.lsp.buf.formatting, bufopts) + vim.keymap.set("n", "n", "Lspsaga rename", bufopts) + vim.keymap.set({ "n", "v" }, "a", "Lspsaga code_action", bufopts) + vim.keymap.set("n", "K", "Lspsaga hover_doc", bufopts) + vim.keymap.set("n", "co", "LSoutlineToggle", bufopts) end -- nvim-cmp