-- Define nvim-lspconfig LSP servers here local lsp_servers = { -- 'basedpyright', 'pyright', 'pylsp', 'lua_ls', 'ts_ls', 'tailwindcss', 'emmet_ls', 'bashls', 'jdtls', 'clangd', 'html', 'cssls', } local lspconfig = require('lspconfig') -- import cmp-nvim-lsp plugin local cmp_nvim_lsp = require('cmp_nvim_lsp') -- import mason_lspconfig plugin local mason_lspconfig = require('mason-lspconfig') -- local keymap = vim.keymap -- for conciseness -- vim.api.nvim_create_autocmd('LspAttach', { -- group = vim.api.nvim_create_augroup('UserLspConfig', {}), -- callback = function(ev) -- -- Buffer local mappings. -- -- See `:help vim.lsp.*` for documentation on any of the below functions -- local opts = { buffer = ev.buf, silent = true } -- -- -- set keybinds -- opts.desc = 'Show LSP references' -- keymap.set('n', 'lR', 'Telescope lsp_references', opts) -- show definition, references -- -- opts.desc = 'Go to declaration' -- keymap.set('n', 'lD', vim.lsp.buf.declaration, opts) -- go to declaration -- -- opts.desc = 'Inlay hint' -- keymap.set( -- 'n', -- 'lh', -- 'lua vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())', -- opts -- ) -- -- opts.desc = 'Show LSP definitions' -- keymap.set('n', 'ld', 'Telescope lsp_definitions', opts) -- show lsp definitions -- -- opts.desc = 'Show LSP implementations' -- keymap.set('n', 'li', 'Telescope lsp_implementations', opts) -- show lsp implementations -- -- opts.desc = 'Show LSP type definitions' -- keymap.set('n', 'lt', 'Telescope lsp_type_definitions', opts) -- show lsp type definitions -- -- opts.desc = 'See available code actions' -- keymap.set({ 'n', 'v' }, 'ca', vim.lsp.buf.code_action, opts) -- see available code actions, in visual mode will apply to selection -- -- opts.desc = 'Smart rename' -- keymap.set('n', 'mR', vim.lsp.buf.rename, opts) -- smart rename -- -- opts.desc = 'Show buffer diagnostics' -- keymap.set('n', 'lD', 'Telescope diagnostics bufnr=0', opts) -- show diagnostics for file -- -- opts.desc = 'Show line diagnostics' -- keymap.set('n', 'ld', vim.diagnostic.open_float, opts) -- show diagnostics for line -- -- opts.desc = 'Show documentation for what is under cursor' -- keymap.set('n', 'K', vim.lsp.buf.hover, opts) -- show documentation for what is under cursor -- -- opts.desc = 'Restart LSP' -- keymap.set('n', 'ls', ':LspRestart', opts) -- mapping to restart lsp if necessary -- end, -- }) -- used to enable autocompletion (assign to every lsp server config) local capabilities = cmp_nvim_lsp.default_capabilities() -- Change the Diagnostic symbols in the sign column (gutter) local signs = { Error = ' ', Warn = ' ', Hint = '󰠠 ', Info = ' ' } for type, icon in pairs(signs) do local hl = 'DiagnosticSign' .. type vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = '' }) end -- Set Mason LSPs Here mason_lspconfig.setup({ ensure_installed = lsp_servers, automatic_installation = true, handlers = { -- default handler for installed servers function(server_name) lspconfig[server_name].setup({ capabilities = capabilities, }) end, ['lua_ls'] = function() -- configure lua server (with special settings) lspconfig['lua_ls'].setup({ capabilities = capabilities, settings = { Lua = { -- make the language server recognize "vim" global diagnostics = { globals = { 'vim' }, }, completion = { callSnippet = 'Replace', }, workspace = { library = { [vim.fn.expand('$VIMRUNTIME/lua')] = true, [vim.fn.stdpath('config') .. '/lua'] = true, }, }, }, }, }) end, ['pyright'] = function() -- configure pyright server (with special settings) lspconfig['pyright'].setup({ capabilities = capabilities, settings = { python = { hint = { enable = true }, analysis = { ignore = { '*' }, autoImportCompletions = false, }, }, -- pyright = { -- -- Using Ruff's import organizer -- disableOrganizeImports = true, -- }, }, handlers = { ['textDocument/publishDiagnostics'] = function() end, }, }) end, -- ['pylsp'] = function() -- lspconfig['pylsp'].setup({ -- capabilities = capabilities, -- settings = { -- pylsp = { -- plugins = { -- autopep8 = { -- enabled = true, -- }, -- pycodestyle = { -- enabled = true, -- ignore = { 'E501', 'E231', 'W503' }, -- maxLineLength = 79, -- }, -- pylint = { -- enabled = true, -- executable = 'pylint', -- args = { -- '--enable=W0611,W0614', -- }, -- }, -- }, -- }, -- }, -- }) -- end, ['emmet_ls'] = function() -- configure emmet language server lspconfig['emmet_ls'].setup({ capabilities = capabilities, filetypes = { 'html', 'javascript', 'typescript', 'javascriptreact', 'typescriptreact', 'css', 'less', }, }) end, ['cssls'] = function() lspconfig.cssls.setup({ capabilities = capabilities, settings = { css = { validate = true, lint = { unknownAtRules = 'ignore', }, }, scss = { validate = true, lint = { unknownAtRules = 'ignore', }, }, }, }) end, }, })