-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(nvim): add base LSP config via Mason : )
- Loading branch information
Showing
3 changed files
with
90 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
-- [[ Configure LSP ]] | ||
-- This function gets run when an LSP connects to a particular buffer. | ||
local on_attach = function(_, bufnr) | ||
local nmap = function(keys, func, desc) | ||
if desc then | ||
desc = 'LSP: ' .. desc | ||
end | ||
|
||
vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) | ||
end | ||
|
||
nmap('<localleader>rn', vim.lsp.buf.rename, '[R]e[n]ame') | ||
nmap('<localleader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction') | ||
|
||
nmap('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') | ||
nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') | ||
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') | ||
nmap('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') | ||
nmap('<localleader>t', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition') | ||
nmap('<localleader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') | ||
nmap('<localleader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') | ||
|
||
nmap('K', vim.lsp.buf.hover, 'Hover Documentation') | ||
nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation') | ||
|
||
-- Workspace Fu | ||
nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') | ||
nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') | ||
nmap('<leader>wl', function() | ||
print(vim.inspect(vim.lsp.buf.list_workspace_folders())) | ||
end, '[W]orkspace [L]ist Folders') | ||
|
||
-- Create a command `:Format` local to the LSP buffer | ||
vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) | ||
vim.lsp.buf.format() | ||
end, { desc = 'Format current buffer with LSP' }) | ||
end | ||
|
||
-- Document workspace keymap | ||
require('which-key').register { | ||
['<leader>w'] = { name = '[W]orkspace', _ = 'which_key_ignore' }, | ||
} | ||
|
||
-- mason-lspconfig requires that these setup functions are called in this order | ||
-- before setting up the servers. | ||
require('mason').setup() | ||
require('mason-lspconfig').setup() | ||
|
||
local servers = { | ||
-- clangd = {}, | ||
-- gopls = {}, | ||
-- pyright = {}, | ||
-- rust_analyzer = {}, | ||
-- tsserver = {}, | ||
-- html = { filetypes = { 'html', 'twig', 'hbs'} }, | ||
|
||
lua_ls = { | ||
Lua = { | ||
workspace = { checkThirdParty = false }, | ||
telemetry = { enable = false }, | ||
diagnostics = { disable = { 'missing-fields' } }, | ||
}, | ||
}, | ||
} | ||
|
||
-- Setup neovim lua configuration | ||
require('neodev').setup() | ||
|
||
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers | ||
local capabilities = vim.lsp.protocol.make_client_capabilities() | ||
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) | ||
|
||
-- Ensure the servers above are installed | ||
local mason_lspconfig = require 'mason-lspconfig' | ||
mason_lspconfig.setup { | ||
ensure_installed = vim.tbl_keys(servers), | ||
} | ||
mason_lspconfig.setup_handlers { | ||
function(server_name) | ||
require('lspconfig')[server_name].setup { | ||
capabilities = capabilities, | ||
on_attach = on_attach, | ||
settings = servers[server_name], | ||
filetypes = (servers[server_name] or {}).filetypes, | ||
} | ||
end, | ||
} |