aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--nvim/.config/nvim/lua/tobyvin.lua19
-rw-r--r--nvim/.config/nvim/lua/tobyvin/diagnostic.lua (renamed from nvim/.config/nvim/lua/tobyvin/lsp/diagnostics.lua)41
-rw-r--r--nvim/.config/nvim/lua/tobyvin/init.lua11
-rw-r--r--nvim/.config/nvim/lua/tobyvin/lsp.lua29
-rw-r--r--nvim/.config/nvim/lua/tobyvin/lsp/configs.lua108
-rw-r--r--nvim/.config/nvim/lua/tobyvin/lsp/formatting.lua38
-rw-r--r--nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua85
-rw-r--r--nvim/.config/nvim/lua/tobyvin/lsp/highlighting.lua41
-rw-r--r--nvim/.config/nvim/lua/tobyvin/lsp/init.lua188
-rw-r--r--nvim/.config/nvim/lua/tobyvin/lsp/symbol.lua9
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/cmp.lua4
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/crates.lua2
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/lsp-signature.lua23
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/lspconfig.lua16
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/lualine.lua1
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/null-ls.lua3
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/nvim-navic.lua13
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/rust-tools.lua32
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/treesitter.lua1
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