diff --git a/after/plugin/lsp.lua b/after/plugin/lsp.lua index 3df9122..8e7f732 100644 --- a/after/plugin/lsp.lua +++ b/after/plugin/lsp.lua @@ -3,7 +3,7 @@ local lsp = require("lsp-zero") lsp.preset("recommended") lsp.ensure_installed({ - 'tsserver', + 'tsserver' }) -- Fix Undefined global 'vim' @@ -30,12 +30,19 @@ local cmp_mappings = lsp.defaults.cmp_mappings({ cmp_mappings[''] = nil cmp_mappings[''] = nil + lsp.setup_nvim_cmp({ mapping = cmp_mappings }) lsp.set_preferences({ suggest_lsp_servers = false, + sign_icons = { + error = 'E', + warn = 'W', + hint = 'H', + info = 'I' + } }) @@ -55,8 +62,7 @@ lsp.on_attach(function(client, bufnr) vim.keymap.set("i", "", function() vim.lsp.buf.signature_help() end, opts) end) - -lsp.setup() +lsp.skip_server_setup({'rust_analyzer'}) vim.diagnostic.config({ virtual_text = true, @@ -65,3 +71,58 @@ vim.diagnostic.config({ severity_sort = false, float = true, }) + +-- rust tools + +-- Configure LSP through rust-tools.nvim plugin. +-- rust-tools will configure and enable certain LSP features for us. +-- See https://github.com/simrat39/rust-tools.nvim#configuration +local opts = { + tools = { + runnables = { + use_telescope = true, + }, + inlay_hints = { + auto = true, + show_parameter_hints = false, + parameter_hints_prefix = "", + other_hints_prefix = "", + }, + }, + + -- all the opts to send to nvim-lspconfig + -- these override the defaults set by rust-tools.nvim + -- see https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md#rust_analyzer + server = { + -- on_attach is a callback called when the language server attachs to the buffer + settings = { + -- to enable rust-analyzer settings visit: + -- https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/generated_config.adoc + ["rust-analyzer"] = { + -- enable clippy on save + checkOnSave = { + command = "clippy", + }, + }, + }, + }, +} + +-- todo: centralize and use the same callback for lspzero and rust-tools +opts.server.on_attach = function(client, bufnr) + local opts = { buffer = bufnr, remap = false } + + vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts) + vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts) + vim.keymap.set("n", "vws", function() vim.lsp.buf.workspace_symbol() end, opts) + vim.keymap.set("n", "vd", function() vim.diagnostic.open_float() end, opts) + vim.keymap.set("n", "[d", function() vim.diagnostic.goto_next() end, opts) + vim.keymap.set("n", "]d", function() vim.diagnostic.goto_prev() end, opts) + vim.keymap.set("n", "la", function() vim.lsp.buf.code_action() end, opts) + vim.keymap.set("n", "lf", function() vim.lsp.buf.format() end, opts) + vim.keymap.set("n", "gr", function() vim.lsp.buf.references() end, opts) + vim.keymap.set("n", "vrn", function() vim.lsp.buf.rename() end, opts) + vim.keymap.set("i", "", function() vim.lsp.buf.signature_help() end, opts) +end + +require("rust-tools").setup(opts) diff --git a/lua/talksik/packer.lua b/lua/talksik/packer.lua index d78200a..c51ed27 100644 --- a/lua/talksik/packer.lua +++ b/lua/talksik/packer.lua @@ -72,4 +72,7 @@ return require('packer').startup(function(use) end } + -- Adds extra functionality over rust analyzer + use("simrat39/rust-tools.nvim") + end) diff --git a/plugin/packer_compiled.lua b/plugin/packer_compiled.lua index b30766d..dd8d61e 100644 --- a/plugin/packer_compiled.lua +++ b/plugin/packer_compiled.lua @@ -85,11 +85,6 @@ _G.packer_plugins = { path = "/Users/talksik/.local/share/nvim/site/pack/packer/start/LuaSnip", url = "https://github.com/L3MON4D3/LuaSnip" }, - ["barbar.nvim"] = { - loaded = true, - path = "/Users/talksik/.local/share/nvim/site/pack/packer/start/barbar.nvim", - url = "https://github.com/romgrk/barbar.nvim" - }, ["cellular-automaton.nvim"] = { loaded = true, path = "/Users/talksik/.local/share/nvim/site/pack/packer/start/cellular-automaton.nvim", @@ -206,6 +201,11 @@ _G.packer_plugins = { path = "/Users/talksik/.local/share/nvim/site/pack/packer/start/rose-pine", url = "https://github.com/rose-pine/neovim" }, + ["rust-tools.nvim"] = { + loaded = true, + path = "/Users/talksik/.local/share/nvim/site/pack/packer/start/rust-tools.nvim", + url = "https://github.com/simrat39/rust-tools.nvim" + }, ["telescope.nvim"] = { loaded = true, path = "/Users/talksik/.local/share/nvim/site/pack/packer/start/telescope.nvim",