summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/config/lsp.lua
diff options
context:
space:
mode:
authormoxie <moxie.git@posteo.net>2025-09-30 12:27:44 +0300
committermoxie <moxie.git@posteo.net>2025-09-30 12:27:44 +0300
commit1e27d1c7b25e4d28a25c0fa2c4e6e33a66b9072e (patch)
tree7169509b4d5dfce3ed25fe333cc506a40f5c90f2 /.config/nvim/lua/config/lsp.lua
parent51797f743fe74d1723ca62085f92e8c5e953038b (diff)
add nvim configs
Diffstat (limited to '.config/nvim/lua/config/lsp.lua')
-rw-r--r--.config/nvim/lua/config/lsp.lua88
1 files changed, 88 insertions, 0 deletions
diff --git a/.config/nvim/lua/config/lsp.lua b/.config/nvim/lua/config/lsp.lua
new file mode 100644
index 0000000..07d9d4c
--- /dev/null
+++ b/.config/nvim/lua/config/lsp.lua
@@ -0,0 +1,88 @@
+vim.diagnostic.config({
+ virtual_text = true,
+ current_line = true,
+})
+
+vim.lsp.config('*', {
+ capabilities = {
+ textDocument = {
+ semanticTokens = {
+ multilineTokenSupport = true,
+ }
+ }
+ },
+ root_markers = { '.git' },
+})
+
+vim.lsp.enable({
+ "rust_analyzer",
+ "ruff", -- python
+ "ty", -- python
+ -- "pyright", -- replace with astrals ty
+ -- "delance",
+ -- "cyright",
+ "bashls",
+ "clangd",
+ "lua_ls",
+
+ "gopls",
+ "cssls",
+ "ts_ls",
+ "jsonls",
+})
+
+local capabilities = require('blink.cmp').get_lsp_capabilities()
+
+local disable_semantic_tokens = {
+ lua = true,
+ python = true, -- TODO: fix ty highlight colors later
+}
+
+vim.api.nvim_create_autocmd('LspAttach', {
+ group = vim.api.nvim_create_augroup('lsp', {}),
+ callback = function(args)
+ local bufnr = args.buf
+ local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
+ if client:supports_method('textDocument/implementation') then
+ -- Create a keymap for vim.lsp.buf.implementation ...
+ end
+ -- Enable auto-completion. Note: Use CTRL-Y to select an item. |complete_CTRL-Y|
+ if client:supports_method('textDocument/completion') then
+ -- Optional: trigger autocompletion on EVERY keypress. May be slow!
+ -- local chars = {}; for i = 32, 126 do table.insert(chars, string.char(i)) end
+ -- client.server_capabilities.completionProvider.triggerCharacters = chars
+ vim.lsp.completion.enable(true, client.id, args.buf, { autotrigger = true })
+ end
+ -- Auto-format ("lint") on save.
+ -- Usually not needed if server supports "textDocument/willSaveWaitUntil".
+ if not client:supports_method('textDocument/willSaveWaitUntil')
+ and client:supports_method('textDocument/formatting') then
+ vim.api.nvim_create_autocmd('BufWritePre', {
+ group = vim.api.nvim_create_augroup('lsp', { clear = false }),
+ buffer = args.buf,
+ callback = function()
+ vim.lsp.buf.format({ bufnr = args.buf, id = client.id, timeout_ms = 1000 })
+ end,
+ })
+ end
+ -- LSP keybindings
+ vim.opt_local.omnifunc = "v:lua.vim.lsp.omnifunc"
+ vim.keymap.set("n", "gd", vim.lsp.buf.definition, { buffer = 0, desc = "Goto definition" })
+ vim.keymap.set("n", "gr", vim.lsp.buf.references, { buffer = 0, desc = "List references" })
+ vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { buffer = 0, desc = "Goto declaration" })
+ vim.keymap.set("n", "gT", vim.lsp.buf.type_definition, { buffer = 0, desc = "Goto type definition" })
+ -- vim.keymap.set("n", "K", vim.lsp.buf.hover, { buffer = 0, desc = "Hover documentation" }) -- hover.nvim
+
+ vim.keymap.set("n", "<space>cr", vim.lsp.buf.rename, { buffer = 0, desc = "Rename all references" })
+ vim.keymap.set("n", "<space>ca", vim.lsp.buf.code_action, { buffer = 0, desc = "Code action" })
+
+ local filetype = vim.bo[bufnr].filetype
+ if disable_semantic_tokens[filetype] then
+ client.server_capabilities.semanticTokensProvider = nil
+ end
+
+ if client.name == "vscode-css-language-server" then
+ capabilities.textDocument.completion.completionItem.snippetSupport = true
+ end
+ end,
+})