summary refs log tree commit diff
path: root/.config/nvim/lua/config/lsp.lua
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2026-04-08 13:11:48 +0900
committerRobert Günzler <r@gnzler.io>2026-04-08 13:11:48 +0900
commitd4620f3ac119263fee90bd819eadaf84fc8d50b7 (patch)
treef5268e72a1c0037d29acac699e5d3f4c37be0e6b /.config/nvim/lua/config/lsp.lua
parent8afe3fa8d88ae56e96f65897935ef508581ac5f7 (diff)
*
Automated-commit-by: dots
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to '.config/nvim/lua/config/lsp.lua')
-rw-r--r--.config/nvim/lua/config/lsp.lua36
1 files changed, 24 insertions, 12 deletions
diff --git a/.config/nvim/lua/config/lsp.lua b/.config/nvim/lua/config/lsp.lua
index 282a3dc..b168014 100644
--- a/.config/nvim/lua/config/lsp.lua
+++ b/.config/nvim/lua/config/lsp.lua
@@ -1,4 +1,6 @@
-if not vim.lsp.enable then return end
+if not vim.lsp.enable then
+  return
+end
 
 local lsp = vim.lsp
 
@@ -7,6 +9,8 @@ lsp.enable({
   'ccls',
   'clangd',
   'gopls',
+  'harper_ls',
+  'pylsp',
   'rust_analyzer',
   'superhtml',
   'tinymist',
@@ -14,17 +18,21 @@ lsp.enable({
   'zls',
 })
 
-local capabilities = nil
+local capabilities = {}
 if pcall(require, 'blink.cmp') then
   capabilities = require('blink.cmp').get_lsp_capabilities()
 end
 
 lsp.config('*', {
-  root_markers = {'.git'},
-  capabilities = capabilities
+  root_markers = { '.git' },
+  capabilities = vim.tbl_deep_extend('error', capabilities, {
+    textDocument = {
+      semanticTokens = { multilineTokenSupport = true },
+    },
+  }),
 })
 
-vim.api.nvim_create_autocmd({'LspAttach'}, {
+vim.api.nvim_create_autocmd({ 'LspAttach' }, {
   group = vim.api.nvim_create_augroup('lspattach', {}),
   callback = function(args)
     local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
@@ -36,7 +44,7 @@ vim.api.nvim_create_autocmd({'LspAttach'}, {
     vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, { desc = 'goto declaration' })
     vim.keymap.set('n', 'gT', vim.lsp.buf.type_definition, { desc = 'goto type definition' })
     vim.keymap.set('n', 'gR', vim.lsp.buf.references, { desc = 'show references' })
-    vim.keymap.set('n', 'ga', vim.lsp.buf.code_action, { desc = 'show code actions' })
+    vim.keymap.set({ 'n', 'v' }, 'ga', vim.lsp.buf.code_action, { desc = 'show code actions' })
     vim.keymap.set('n', 'grr', vim.lsp.buf.rename, { desc = 'rename' })
 
     if client:supports_method('textDocument/implementation') then
@@ -44,20 +52,24 @@ vim.api.nvim_create_autocmd({'LspAttach'}, {
     end
 
     if client:supports_method('textDocument/completion') then
-      vim.lsp.completion.enable(true, client.id, args.buf, {autotrigger = false})
+      vim.lsp.completion.enable(true, client.id, args.buf, { autotrigger = false })
     end
 
     if client:supports_method('textDocument/formatting') then
-    vim.keymap.set('n', '<leader>f', vim.lsp.buf.format, { desc = 'format' })
+      vim.keymap.set('n', '<leader>f', vim.lsp.buf.format, { desc = 'format' })
     end
 
-    if not client:supports_method('textDocument/willSaveWaitUntil')
-        and client:supports_method('textDocument/formatting') then
-      vim.api.nvim_create_autocmd({'BufWritePre'}, {
+    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('lspattach', {}),
         buffer = args.buf,
         callback = function()
-          if vim.b.nofmt then return end
+          if vim.b.nofmt then
+            return
+          end
           vim.lsp.buf.format({ bufnr = args.buf, id = client.id, timeout_ms = 1000 })
         end,
       })