diff options
Diffstat (limited to 'nvim')
19 files changed, 357 insertions, 307 deletions
diff --git a/nvim/.config/nvim/lua/tobyvin.lua b/nvim/.config/nvim/lua/tobyvin.lua new file mode 100644 index 0000000..904abdd --- /dev/null +++ b/nvim/.config/nvim/lua/tobyvin.lua @@ -0,0 +1,19 @@ +local M = { + options = require("tobyvin.options"), + autocmds = require("tobyvin.autocmds"), + keymaps = require("tobyvin.keymaps"), + plugins = require("tobyvin.plugins"), + diagnostic = require("tobyvin.diagnostic"), + lsp = require("tobyvin.lsp"), +} + +M.setup = function() + M.options.setup() + M.autocmds.setup() + M.keymaps.setup() + M.plugins.setup() + M.diagnostic.setup() + M.lsp.setup() +end + +return M diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/diagnostics.lua b/nvim/.config/nvim/lua/tobyvin/diagnostic.lua index 55f7840..a7fda4c 100644 --- a/nvim/.config/nvim/lua/tobyvin/lsp/diagnostics.lua +++ b/nvim/.config/nvim/lua/tobyvin/diagnostic.lua @@ -1,28 +1,6 @@ local utils = require("tobyvin.utils") local M = {} -M.on_attach = function(_, bufnr) - vim.api.nvim_create_autocmd("CursorHold", { - buffer = bufnr, - callback = function() - local opts = { - focusable = false, - close_events = { "BufLeave", "CursorMoved", "InsertEnter", "FocusLost" }, - border = "rounded", - source = "always", - prefix = " ", - scope = "cursor", - } - vim.diagnostic.open_float(nil, opts) - end, - }) - - vim.keymap.set("n", "<leader>e", vim.diagnostic.setloclist, { desc = "Buffer Diagnostic", buffer = bufnr }) - vim.keymap.set("n", "<leader>E", vim.diagnostic.setqflist, { desc = "Workspace Diagnostic", buffer = bufnr }) - vim.keymap.set("n", "]d", vim.diagnostic.goto_next, { desc = "Next Diagnostic", buffer = bufnr }) - vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, { desc = "Prev Diagnostic", buffer = bufnr }) -end - M.setup = function() vim.diagnostic.config({ virtual_text = { @@ -38,6 +16,25 @@ M.setup = function() vim.fn.sign_define("DiagnosticSignWarn", utils.diagnostic.signs.warn) vim.fn.sign_define("DiagnosticSignInfo", utils.diagnostic.signs.info) vim.fn.sign_define("DiagnosticSignHint", utils.diagnostic.signs.hint) + + vim.api.nvim_create_autocmd("CursorHold", { + callback = function() + local opts = { + focusable = false, + close_events = { "BufLeave", "CursorMoved", "InsertEnter", "FocusLost" }, + border = "rounded", + source = "always", + prefix = " ", + scope = "cursor", + } + vim.diagnostic.open_float(nil, opts) + end, + }) + + vim.keymap.set("n", "<leader>e", vim.diagnostic.setloclist, { desc = "Buffer Diagnostic" }) + vim.keymap.set("n", "<leader>E", vim.diagnostic.setqflist, { desc = "Workspace Diagnostic" }) + vim.keymap.set("n", "]d", vim.diagnostic.goto_next, { desc = "Next Diagnostic" }) + vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, { desc = "Prev Diagnostic" }) end return M diff --git a/nvim/.config/nvim/lua/tobyvin/init.lua b/nvim/.config/nvim/lua/tobyvin/init.lua deleted file mode 100644 index 07900a6..0000000 --- a/nvim/.config/nvim/lua/tobyvin/init.lua +++ /dev/null @@ -1,11 +0,0 @@ -local M = {} - -M.setup = function() - require("tobyvin.options").setup() - require("tobyvin.autocmds").setup() - require("tobyvin.keymaps").setup() - require("tobyvin.plugins").setup() - require("tobyvin.lsp").setup() -end - -return M diff --git a/nvim/.config/nvim/lua/tobyvin/lsp.lua b/nvim/.config/nvim/lua/tobyvin/lsp.lua new file mode 100644 index 0000000..8aadee6 --- /dev/null +++ b/nvim/.config/nvim/lua/tobyvin/lsp.lua @@ -0,0 +1,29 @@ +local utils = require("tobyvin.utils") +local lsp = { + configs = require("tobyvin.lsp.configs"), + handlers = require("tobyvin.lsp.handlers"), + highlighting = require("tobyvin.lsp.highlighting"), + formatting = require("tobyvin.lsp.formatting"), +} + +lsp.setup = function() + lsp.handlers.setup() + lsp.highlighting.setup() + lsp.formatting.setup() + + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("tobyvin_lsp", { clear = true }), + desc = "lsp", + callback = function(args) + local bufnr = args.buf + local client = vim.lsp.get_client_by_id(args.data.client_id) + + utils.keymap.group("n", "<leader>l", { desc = "LSP", buffer = bufnr }) + vim.keymap.set("n", "<leader>L", "<CMD>LspInfo<CR>", { desc = "LSP info" }) + vim.keymap.set("n", "<leader>k", utils.documentation.open, { desc = "Documentation", buffer = bufnr }) + vim.api.nvim_exec_autocmds("User", { pattern = "LspAttach", data = { client_id = client.id } }) + end, + }) +end + +return lsp diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/configs.lua b/nvim/.config/nvim/lua/tobyvin/lsp/configs.lua new file mode 100644 index 0000000..79eaed2 --- /dev/null +++ b/nvim/.config/nvim/lua/tobyvin/lsp/configs.lua @@ -0,0 +1,108 @@ +local configs = { + default = {}, + bashls = {}, + taplo = {}, + yamlls = {}, + tsserver = {}, + cssls = {}, + cssmodules_ls = {}, + stylelint_lsp = {}, + ccls = {}, +} + +configs.pylsp = { + settings = { + pylsp = { + plugins = { + autopep8 = { + enabled = false, + }, + yapf = { + enabled = false, + }, + pylint = { + enabled = true, + }, + }, + }, + }, +} + +configs.gopls = { + cmd = { "gopls", "serve" }, + settings = { + gopls = { + analyses = { + unusedparams = true, + }, + staticcheck = true, + }, + }, +} + +configs.rust_analyzer = { + standalone = true, + settings = { + ["rust-analyzer"] = { + cargo = { + allFeatures = true, + }, + checkOnSave = { + command = "clippy", + }, + }, + }, +} + +configs.sumneko_lua = { + settings = { + Lua = { + completion = { + callSnippet = "Replace", + }, + diagnostics = { + globals = { "vim", "packer_plugins" }, + }, + format = { + enable = false, + }, + telemetry = { + enable = false, + }, + }, + }, +} + +configs.texlab = { + settings = { + texlab = { + build = { + args = { + "-pdf", + "-interaction=nonstopmode", + "-synctex=1", + string.format("-auxdir=%s/aux", vim.fn.getcwd()), + string.format("-outdir=%s/out", vim.fn.getcwd()), + "-emulate-aux-dir", + "%f", + }, + onSave = true, + }, + chktex = { + onEdit = true, + onOpenAndSave = true, + }, + auxDirectory = string.format("%s/aux", vim.fn.getcwd()), + latexindent = { + ["local"] = string.format("%s/latexindent/indentconfig.yaml", vim.env.XDG_CONFIG_HOME), + modifyLineBreaks = true, + }, + }, + }, + on_attach = function() + vim.g.tex_flavor = "latex" + vim.opt.spell = true + end, +} + +return configs diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/formatting.lua b/nvim/.config/nvim/lua/tobyvin/lsp/formatting.lua index 5486640..588c5c8 100644 --- a/nvim/.config/nvim/lua/tobyvin/lsp/formatting.lua +++ b/nvim/.config/nvim/lua/tobyvin/lsp/formatting.lua @@ -1,20 +1,28 @@ -local M = {} +local formatting = {} -M.on_attach = function(client, bufnr) - if client.name == "sumneko_lua" then - return - end +formatting.setup = function() + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("tobyvin_lsp_formatting", { clear = true }), + desc = "setup lsp formatting", + callback = function(args) + local bufnr = args.buf + local client = vim.lsp.get_client_by_id(args.data.client_id) + if client.name == "sumneko_lua" then + return + end - if client.server_capabilities.documentFormattingProvider then - vim.api.nvim_buf_set_option(bufnr, "formatexpr", "v:lua.vim.lsp.formatexpr()") - vim.api.nvim_buf_create_user_command(bufnr, "Format", vim.lsp.buf.format, { nargs = "*" }) - vim.keymap.set("n", "<leader>lf", vim.lsp.buf.format, { desc = "Format", buffer = bufnr }) - end + if client.server_capabilities.documentFormattingProvider then + vim.api.nvim_buf_set_option(bufnr, "formatexpr", "v:lua.vim.lsp.formatexpr()") + vim.api.nvim_buf_create_user_command(bufnr, "Format", vim.lsp.buf.format, { nargs = "*" }) + vim.keymap.set("n", "<leader>lf", vim.lsp.buf.format, { desc = "Format", buffer = bufnr }) + end - if client.server_capabilities.documentRangeFormattingProvider then - vim.api.nvim_buf_create_user_command(bufnr, "FormatRange", vim.lsp.buf.format, { nargs = "*" }) - vim.keymap.set("n", "<leader>lf", vim.lsp.buf.format, { desc = "Format Range", buffer = bufnr }) - end + if client.server_capabilities.documentRangeFormattingProvider then + vim.api.nvim_buf_create_user_command(bufnr, "FormatRange", vim.lsp.buf.format, { nargs = "*" }) + vim.keymap.set("n", "<leader>lf", vim.lsp.buf.format, { desc = "Format Range", buffer = bufnr }) + end + end, + }) end -return M +return formatting diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua b/nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua index 86eaa3c..7d666df 100644 --- a/nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua +++ b/nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua @@ -1,7 +1,8 @@ ---@diagnostic disable: missing-parameter local M = {} -M.with_handler = function(callback) +M.goto_handler = function(method) + local callback = vim.lsp.handlers[method] return function(err, result, ctx, config) if result == nil or vim.tbl_isempty(result) then vim.notify("No location found", vim.log.levels.INFO, { title = "[LSP] " .. ctx.method }) @@ -26,12 +27,11 @@ M.with_handler = function(callback) if vim.tbl_islist(result) and #result == 1 then result = result[1] end - callback(err, result, ctx, config) end end -M.with_preview = function(method) +M.preview_handler = function(method) local preview_callback = function(_, result, _, _) if vim.tbl_islist(result) then vim.lsp.util.preview_location(result[1]) @@ -42,24 +42,63 @@ M.with_preview = function(method) return function() local params = vim.lsp.util.make_position_params() - return vim.lsp.buf_request(0, method, params, M.with_handler(preview_callback)) + return vim.lsp.buf_request(0, method, params, M.goto_handler(preview_callback)) end end -M.preview = {} +M.preview = { + definition = M.preview_handler("textDocument/definition"), + declaration = M.preview_handler("textDocument/declaration"), + type_definition = M.preview_handler("textDocument/type_definition"), + implementation = M.preview_handler("textDocument/implementation"), + references = M.preview_handler("textDocument/references"), +} -M.setup = function() - vim.lsp.handlers["textDocument/definition"] = M.with_handler(vim.lsp.handlers["textDocument/definition"]) - vim.lsp.handlers["textDocument/declaration"] = M.with_handler(vim.lsp.handlers["textDocument/declaration"]) - vim.lsp.handlers["textDocument/type_definition"] = M.with_handler(vim.lsp.handlers["textDocument/type_definition"]) - vim.lsp.handlers["textDocument/implementation"] = M.with_handler(vim.lsp.handlers["textDocument/implementation"]) - vim.lsp.handlers["textDocument/references"] = M.with_handler(vim.lsp.handlers["textDocument/references"]) +M.provider_handers = { + signatureHelpProvider = function(_, bufnr) + vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, { desc = "Signature Help", buffer = bufnr }) + end, + hoverProvider = function(_, bufnr) + vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover", buffer = bufnr }) + end, + codeActionProvider = function(_, bufnr) + vim.keymap.set("n", "<leader>la", vim.lsp.buf.code_action, { desc = "Code Action", buffer = bufnr }) + end, + codeLensProvider = function(_, bufnr) + vim.keymap.set("n", "<leader>ll", vim.lsp.codelens.run, { desc = "Codelens", buffer = bufnr }) + end, + renameProvider = function(_, bufnr) + vim.keymap.set("n", "<leader>lr", vim.lsp.buf.rename, { desc = "Rename", buffer = bufnr }) + end, + definitionProvider = function(_, bufnr) + vim.bo[bufnr].tagfunc = "v:lua.vim.lsp.tagfunc" + vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Definition", buffer = bufnr }) + vim.keymap.set("n", "g<C-d>", M.preview.definition, { desc = "Definition", buffer = bufnr }) + end, + declarationProvider = function(_, bufnr) + vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Declaration", buffer = bufnr }) + vim.keymap.set("n", "g<CS-D>", M.preview.declaration, { desc = "Preview Declaration", buffer = bufnr }) + end, + typeDefinitionProvider = function(_, bufnr) + vim.keymap.set("n", "gt", vim.lsp.buf.type_definition, { desc = "Type", buffer = bufnr }) + vim.keymap.set("n", "g<C-t>", M.preview.type_definition, { desc = "Preview Type", buffer = bufnr }) + end, + implementationProvider = function(_, bufnr) + vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Implementation", buffer = bufnr }) + vim.keymap.set("n", "g<C-i>", M.preview.implementation, { desc = "Preview Implementation", buffer = bufnr }) + end, + referencesProvider = function(_, bufnr) + vim.keymap.set("n", "gr", vim.lsp.buf.references, { desc = "References", buffer = bufnr }) + vim.keymap.set("n", "g<C-r>", M.preview.references, { desc = "Preview References", buffer = bufnr }) + end, +} - M.preview.definition = M.with_preview("textDocument/definition") - M.preview.declaration = M.with_preview("textDocument/declaration") - M.preview.type_definition = M.with_preview("textDocument/type_definition") - M.preview.implementation = M.with_preview("textDocument/implementation") - M.preview.references = M.with_preview("textDocument/references") +M.setup = function() + vim.lsp.handlers["textDocument/definition"] = M.goto_handler("textDocument/definition") + vim.lsp.handlers["textDocument/declaration"] = M.goto_handler("textDocument/declaration") + vim.lsp.handlers["textDocument/type_definition"] = M.goto_handler("textDocument/type_definition") + vim.lsp.handlers["textDocument/implementation"] = M.goto_handler("textDocument/implementation") + vim.lsp.handlers["textDocument/references"] = M.goto_handler("textDocument/references") vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.handlers["textDocument/publishDiagnostics"], { @@ -74,6 +113,20 @@ M.setup = function() title = "[LSP] " .. vim.lsp.get_client_by_id(ctx.client_id), }) end + + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("tobyvin_lsp_handlers", { clear = true }), + desc = "setup lsp handlers", + callback = function(args) + local bufnr = args.buf + local client = vim.lsp.get_client_by_id(args.data.client_id) + for provider, handler in pairs(M.provider_handers) do + if client.server_capabilities[provider] then + handler(client, bufnr) + end + end + end, + }) end return M diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/highlighting.lua b/nvim/.config/nvim/lua/tobyvin/lsp/highlighting.lua index 9fe8d68..89fce57 100644 --- a/nvim/.config/nvim/lua/tobyvin/lsp/highlighting.lua +++ b/nvim/.config/nvim/lua/tobyvin/lsp/highlighting.lua @@ -1,23 +1,32 @@ local M = {} -M.on_attach = function(client, bufnr) - if client.server_capabilities.documentHighlightProvider then - local augroup_highlight = vim.api.nvim_create_augroup("DocumentHighlight", { clear = false }) +M.setup = function() + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("tobyvin_lsp_highlighting", { clear = true }), + desc = "setup lsp highlighting", + callback = function(args) + local bufnr = args.buf + local client = vim.lsp.get_client_by_id(args.data.client_id) - vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { - group = augroup_highlight, - buffer = bufnr, - callback = vim.lsp.buf.document_highlight, - desc = "Highlight lsp references", - }) + if client.server_capabilities.documentHighlightProvider then + local augroup_highlight = vim.api.nvim_create_augroup("DocumentHighlight", { clear = false }) - vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { - group = augroup_highlight, - buffer = bufnr, - callback = vim.lsp.buf.clear_references, - desc = "Clear highlighted references", - }) - end + vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { + group = augroup_highlight, + buffer = bufnr, + callback = vim.lsp.buf.document_highlight, + desc = "Highlight lsp references", + }) + + vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { + group = augroup_highlight, + buffer = bufnr, + callback = vim.lsp.buf.clear_references, + desc = "Clear highlighted references", + }) + end + end, + }) end return M diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/init.lua b/nvim/.config/nvim/lua/tobyvin/lsp/init.lua deleted file mode 100644 index 513b2c0..0000000 --- a/nvim/.config/nvim/lua/tobyvin/lsp/init.lua +++ /dev/null @@ -1,188 +0,0 @@ -local utils = require("tobyvin.utils") -local lsp = { - handlers = require("tobyvin.lsp.handlers"), - highlighting = require("tobyvin.lsp.highlighting"), - diagnostics = require("tobyvin.lsp.diagnostics"), - formatting = require("tobyvin.lsp.formatting"), - symbol = require("tobyvin.lsp.symbol"), -} - -lsp.on_attach = function(client, bufnr) - local preview = lsp.handlers.preview - utils.keymap.group("n", "<leader>l", { desc = "LSP", buffer = bufnr }) - vim.keymap.set("n", "<leader>li", "<CMD>LspInfo<CR>", { desc = "LSP info" }) - vim.keymap.set("n", "<leader>k", utils.documentation.open, { desc = "Documentation", buffer = bufnr }) - - if client.server_capabilities.hoverProvider then - vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover", buffer = bufnr }) - end - - if client.server_capabilities.signatureHelpProvider then - vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, { desc = "Signature Help", buffer = bufnr }) - end - - if client.server_capabilities.hoverProvider then - vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover", buffer = bufnr }) - end - - if client.server_capabilities.codeActionProvider then - vim.keymap.set("n", "<leader>la", vim.lsp.buf.code_action, { desc = "Code Action", buffer = bufnr }) - end - - if client.server_capabilities.codeLensProvider then - vim.keymap.set("n", "<leader>ll", vim.lsp.codelens.run, { desc = "Codelens", buffer = bufnr }) - end - - if client.server_capabilities.renameProvider then - vim.keymap.set("n", "<leader>lr", vim.lsp.buf.rename, { desc = "Rename", buffer = bufnr }) - end - - if client.server_capabilities.definitionProvider then - vim.bo[bufnr].tagfunc = "v:lua.vim.lsp.tagfunc" - vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Definition", buffer = bufnr }) - vim.keymap.set("n", "g<C-d>", preview.definition, { desc = "Definition", buffer = bufnr }) - end - - if client.server_capabilities.declarationProvider then - vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Declaration", buffer = bufnr }) - vim.keymap.set("n", "g<CS-D>", preview.declaration, { desc = "Preview Declaration", buffer = bufnr }) - end - - if client.server_capabilities.typeDefinitionProvider then - vim.keymap.set("n", "gt", vim.lsp.buf.type_definition, { desc = "Type", buffer = bufnr }) - vim.keymap.set("n", "g<C-t>", preview.type_definition, { desc = "Preview Type", buffer = bufnr }) - end - - if client.server_capabilities.implementationProvider then - vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Implementation", buffer = bufnr }) - vim.keymap.set("n", "g<C-i>", preview.implementation, { desc = "Preview Implementation", buffer = bufnr }) - end - - if client.server_capabilities.referencesProvider then - vim.keymap.set("n", "gr", vim.lsp.buf.references, { desc = "References", buffer = bufnr }) - vim.keymap.set("n", "g<C-r>", preview.references, { desc = "Preview References", buffer = bufnr }) - end - - -- disabled in favor of https://github.com/nvim-treesitter/nvim-treesitter-refactor#highlight-definitions - lsp.highlighting.on_attach(client, bufnr) - lsp.diagnostics.on_attach(client, bufnr) - lsp.formatting.on_attach(client, bufnr) - lsp.symbol.on_attach(client, bufnr) - require("lsp_signature").on_attach() - - vim.api.nvim_exec_autocmds("User", { pattern = "LspAttach", data = { client_id = client.id } }) -end - -lsp.default_config = { - on_attach = lsp.on_attach, - capabilities = vim.lsp.protocol.make_client_capabilities(), -} - -lsp.configs = { - bashls = {}, - taplo = {}, - yamlls = {}, - tsserver = {}, - pylsp = { - settings = { - pylsp = { - plugins = { - autopep8 = { - enabled = false, - }, - yapf = { - enabled = false, - }, - pylint = { - enabled = true, - }, - }, - }, - }, - }, - cssls = {}, - cssmodules_ls = {}, - stylelint_lsp = {}, - ccls = {}, - gopls = { - cmd = { "gopls", "serve" }, - settings = { - gopls = { - analyses = { - unusedparams = true, - }, - staticcheck = true, - }, - }, - }, - ["rust-analyzer"] = { - standalone = true, - settings = { - ["rust-analyzer"] = { - cargo = { - allFeatures = true, - }, - checkOnSave = { - command = "clippy", - }, - }, - }, - }, - sumneko_lua = { - settings = { - Lua = { - completion = { - callSnippet = "Replace", - }, - diagnostics = { - globals = { "vim", "packer_plugins" }, - }, - format = { - enable = false, - }, - telemetry = { - enable = false, - }, - }, - }, - }, - texlab = { - settings = { - texlab = { - build = { - args = { - "-pdf", - "-interaction=nonstopmode", - "-synctex=1", - string.format("-auxdir=%s/aux", vim.fn.getcwd()), - string.format("-outdir=%s/out", vim.fn.getcwd()), - "-emulate-aux-dir", - "%f", - }, - onSave = true, - }, - chktex = { - onEdit = true, - onOpenAndSave = true, - }, - auxDirectory = string.format("%s/aux", vim.fn.getcwd()), - latexindent = { - ["local"] = string.format("%s/latexindent/indentconfig.yaml", vim.env.XDG_CONFIG_HOME), - modifyLineBreaks = true, - }, - }, - }, - on_attach = function(client, bufnr) - vim.g.tex_flavor = "latex" - vim.opt.spell = true - lsp.on_attach(client, bufnr) - end, - }, -} - -lsp.setup = function() - lsp.handlers.setup() - lsp.diagnostics.setup() -end - -return lsp diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/symbol.lua b/nvim/.config/nvim/lua/tobyvin/lsp/symbol.lua deleted file mode 100644 index 00384ac..0000000 --- a/nvim/.config/nvim/lua/tobyvin/lsp/symbol.lua +++ /dev/null @@ -1,9 +0,0 @@ -local M = {} - -M.on_attach = function(client, bufnr) - if client.name ~= "cssls" and client.server_capabilities.documentSymbolProvider then - require("nvim-navic").attach(client, bufnr) - end -end - -return M diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/cmp.lua b/nvim/.config/nvim/lua/tobyvin/plugins/cmp.lua index 2c2fe18..b5deaab 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/cmp.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/cmp.lua @@ -22,7 +22,9 @@ M.setup = function() return end - lsp.default_config.capabilities = require("cmp_nvim_lsp").update_capabilities(lsp.default_config.capabilities) + lsp.configs.default = vim.tbl_extend("force", lsp.configs.default, { + capabilities = require("cmp_nvim_lsp").default_capabilities(), + }) cmp.setup({ enabled = M.enabled, diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/crates.lua b/nvim/.config/nvim/lua/tobyvin/plugins/crates.lua index 67d1834..1a18bfb 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/crates.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/crates.lua @@ -15,7 +15,9 @@ M.setup = function() }) vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("tobyvin_crates", { clear = true }), pattern = "*/Cargo.toml", + desc = "setup crates", callback = function() utils.documentation.register("toml", crates.open_documentation) diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/lsp-signature.lua b/nvim/.config/nvim/lua/tobyvin/plugins/lsp-signature.lua index 9db8900..cefcf17 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/lsp-signature.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/lsp-signature.lua @@ -6,11 +6,24 @@ M.setup = function() return end - lsp_signature.setup({ - bind = true, -- This is mandatory, otherwise border config won't get registered. - handler_opts = { - border = "rounded", - }, + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("tobyvin_lsp_signature", { clear = true }), + desc = "setup lsp_signature", + callback = function(args) + local bufnr = args.buf + local client = vim.lsp.get_client_by_id(args.data.client_id) + + if client.server_capabilities.signatureHelpProvider then + lsp_signature.on_attach({ + bind = true, + hint_prefix = "> ", + hi_parameter = "IncSearch", + handler_opts = { + border = "rounded", + }, + }, bufnr) + end + end, }) end diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/lspconfig.lua b/nvim/.config/nvim/lua/tobyvin/plugins/lspconfig.lua index 3d62229..a82a294 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/lspconfig.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/lspconfig.lua @@ -1,6 +1,11 @@ local lsp = require("tobyvin.lsp") local M = {} +M.is_setup = function(name) + local available_servers = require("lspconfig").util.available_servers() + return name == "default" or vim.tbl_contains(available_servers, name) +end + M.setup = function() local status_ok, lspconfig = pcall(require, "lspconfig") if not status_ok then @@ -8,20 +13,13 @@ M.setup = function() return end - lspconfig.util.default_config = vim.tbl_extend("force", lspconfig.util.default_config, lsp.default_config) + lspconfig.util.default_config = vim.tbl_extend("force", lspconfig.util.default_config, lsp.configs.default) for name, config in pairs(lsp.configs) do - if name ~= "rust-analyzer" then + if not M.is_setup(name) then lspconfig[name].setup(config) end end - - require("lsp_signature").setup({ - bind = true, - handler_opts = { - border = "rounded", - }, - }) end return M diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/lualine.lua b/nvim/.config/nvim/lua/tobyvin/plugins/lualine.lua index ada021d..06e6701 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/lualine.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/lualine.lua @@ -93,6 +93,7 @@ M.setup = function() if buftype == "help" then return "help:" .. vim.fn.fnamemodify(file, ":t:r") elseif buftype == "terminal" then + ---@diagnostic disable-next-line: missing-parameter local match = string.match(vim.split(file, " ")[1], "term:.*:(%a+)") return match ~= nil and match or vim.fn.fnamemodify(vim.env.SHELL, ":t") elseif vim.fn.isdirectory(file) == 1 then diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/null-ls.lua b/nvim/.config/nvim/lua/tobyvin/plugins/null-ls.lua index ab8f58b..3fba5c2 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/null-ls.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/null-ls.lua @@ -25,9 +25,8 @@ M.setup = function() null_ls.builtins.formatting.shfmt, null_ls.builtins.formatting.cbfmt, }, - on_attach = function(client, bufnr) + on_attach = function(_, bufnr) vim.keymap.set("n", "<leader>ln", "<CMD>NullLsInfo<CR>", { desc = "Null-LS Info", buffer = bufnr }) - lsp.on_attach(client, bufnr) end, }) end diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/nvim-navic.lua b/nvim/.config/nvim/lua/tobyvin/plugins/nvim-navic.lua index 962d6f9..b6040e4 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/nvim-navic.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/nvim-navic.lua @@ -10,6 +10,19 @@ M.setup = function() nvim_navic.setup({ icons = require("lspkind").symbol_map, }) + + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("tobyvin_nvim-navic", { clear = true }), + desc = "setup nvim-navic", + callback = function(args) + local bufnr = args.buf + local client = vim.lsp.get_client_by_id(args.data.client_id) + + if client.name ~= "cssls" and client.server_capabilities.documentSymbolProvider then + require("nvim-navic").attach(client, bufnr) + end + end, + }) end return M diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/rust-tools.lua b/nvim/.config/nvim/lua/tobyvin/plugins/rust-tools.lua index b8a4456..7be3a4a 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/rust-tools.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/rust-tools.lua @@ -12,21 +12,29 @@ M.setup = function() return end - lsp.configs["rust-analyzer"].on_attach = function(client, bufnr) - lsp.on_attach(client, bufnr) + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("tobyvin_rust-tools", { clear = true }), + desc = "setup rust-tools", + callback = function(args) + local bufnr = args.buf + local client = vim.lsp.get_client_by_id(args.data.client_id) + if client.name ~= "rust-analyzer" then + return + end - local runnables = rust_tools.runnables.runnables - local debuggables = rust_tools.debuggables.debuggables - local open_cargo_toml = rust_tools.open_cargo_toml.open_cargo_toml - local external_docs = rust_tools.external_docs.open_external_docs + local runnables = rust_tools.runnables.runnables + local debuggables = rust_tools.debuggables.debuggables + local open_cargo_toml = rust_tools.open_cargo_toml.open_cargo_toml + local external_docs = rust_tools.external_docs.open_external_docs - utils.keymap.group("n", "<leader>r", { desc = "Run" }) - vim.keymap.set("n", "<leader>rr", runnables, { desc = "Runnables", buffer = bufnr }) - vim.keymap.set("n", "<leader>rd", debuggables, { desc = "Debug", buffer = bufnr }) - vim.keymap.set("n", "<leader>ro", open_cargo_toml, { desc = "Open Cargo.toml", buffer = bufnr }) + utils.keymap.group("n", "<leader>r", { desc = "Run" }) + vim.keymap.set("n", "<leader>rr", runnables, { desc = "Runnables", buffer = bufnr }) + vim.keymap.set("n", "<leader>rd", debuggables, { desc = "Debug", buffer = bufnr }) + vim.keymap.set("n", "<leader>ro", open_cargo_toml, { desc = "Open Cargo.toml", buffer = bufnr }) - utils.documentation.register("rust", external_docs) - end + utils.documentation.register("rust", external_docs) + end, + }) rust_tools.setup({ server = lsp.configs["rust-analyzer"], diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/treesitter.lua b/nvim/.config/nvim/lua/tobyvin/plugins/treesitter.lua index c67fb3e..39d59f0 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/treesitter.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/treesitter.lua @@ -16,7 +16,6 @@ M.setup = function() attach = function(bufnr, _) local refactor_module = require("nvim-treesitter-refactor.smart_rename") local smart_rename = function() - vim.notify("ts renameing") refactor_module.smart_rename(bufnr) end |