Advertisement
Guest User

neovim lsp config

a guest
Apr 21st, 2024
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.20 KB | None | 0 0
  1.   { -- LSP Configuration & Plugins
  2.     'neovim/nvim-lspconfig',
  3.     dependencies = {
  4.       'williamboman/mason.nvim',
  5.       'williamboman/mason-lspconfig.nvim',
  6.       'WhoIsSethDaniel/mason-tool-installer.nvim',
  7.       { 'j-hui/fidget.nvim', opts = {} },
  8.       { 'folke/neodev.nvim', opts = {} },
  9.     },
  10.     config = function()
  11.       vim.api.nvim_create_autocmd('LspAttach', {
  12.         group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
  13.         callback = function(event)
  14.           local map = function(keys, func, desc)
  15.             vim.keymap.set('n', keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
  16.           end
  17.           map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
  18.           map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
  19.           map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
  20.           map('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition')
  21.           map('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
  22.           map('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
  23.           map('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
  24.           map('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
  25.           map('K', vim.lsp.buf.hover, 'Hover Documentation')
  26.           map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
  27.                    
  28.           local client = vim.lsp.get_client_by_id(event.data.client_id)
  29.           if client and client.server_capabilities.documentHighlightProvider then
  30.             vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
  31.               buffer = event.buf,
  32.               callback = vim.lsp.buf.document_highlight,
  33.             })
  34.  
  35.             vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
  36.               buffer = event.buf,
  37.               callback = vim.lsp.buf.clear_references,
  38.             })
  39.           end
  40.         end,
  41.       })
  42.       local capabilities = vim.lsp.protocol.make_client_capabilities()
  43.       capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities())
  44.      
  45.       local servers = {
  46.         clangd = {},
  47.         pyright = {},
  48.         rust_analyzer = {},
  49.         tsserver = {},
  50.         lua_ls = {
  51.           settings = {
  52.             Lua = {
  53.               completion = {
  54.                 callSnippet = 'Replace',
  55.               },
  56.             },
  57.           },
  58.         },
  59.       }
  60.       require('mason').setup()
  61.  
  62.       local ensure_installed = vim.tbl_keys(servers or {})
  63.       vim.list_extend(ensure_installed, {
  64.         'stylua',
  65.       })
  66.       require('mason-tool-installer').setup { ensure_installed = ensure_installed }
  67.  
  68.       require('mason-lspconfig').setup {
  69.         handlers = {
  70.           function(server_name)
  71.             local server = servers[server_name] or {}
  72.             server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
  73.             require('lspconfig')[server_name].setup(server)
  74.           end,
  75.         },
  76.       }
  77.     end,
  78.   },
  79.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement