115 lines
4.5 KiB
Lua
115 lines
4.5 KiB
Lua
return {
|
|
{ -- LSP Configuration & Plugins
|
|
'neovim/nvim-lspconfig',
|
|
dependencies = {
|
|
-- Automatically install LSPs and related tools to stdpath for neovim
|
|
'williamboman/mason.nvim',
|
|
'williamboman/mason-lspconfig.nvim',
|
|
'WhoIsSethDaniel/mason-tool-installer.nvim',
|
|
|
|
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
|
|
{ 'j-hui/fidget.nvim', opts = {
|
|
notification = {
|
|
window = {
|
|
winblend = 0,
|
|
},
|
|
},
|
|
} },
|
|
},
|
|
config = function()
|
|
local lspconfig = require 'lspconfig'
|
|
|
|
lspconfig.dartls.setup {
|
|
cmd = { 'dart', 'language-server', '--protocol=lsp' },
|
|
}
|
|
|
|
-- LSP servers and clients are able to communicate to each other what features they support.
|
|
-- By default, Neovim doesn't support everything that is in the LSP Specification.
|
|
-- When you add nvim-cmp, luasnip, etc. Neovim now has *more* capabilities.
|
|
-- So, we create new capabilities with nvim cmp, and then broadcast that to the servers.
|
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
|
capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities())
|
|
|
|
-- Enable the following language servers
|
|
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
|
|
--
|
|
-- Add any additional override configuration in the following tables. Available keys are:
|
|
-- - cmd (table): Override the default command used to start the server
|
|
-- - filetypes (table): Override the default list of associated filetypes for the server
|
|
-- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features.
|
|
-- - settings (table): Override the default settings passed when initializing the server.
|
|
-- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
|
|
local servers = {
|
|
-- clangd = {},
|
|
-- gopls = {},
|
|
-- pyright = {
|
|
-- filetypes = { 'python' },
|
|
-- },
|
|
-- rust_analyzer = {},
|
|
-- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs
|
|
--
|
|
-- Some languages (like typescript) have entire language plugins that can be useful:
|
|
-- https://github.com/pmizio/typescript-tools.nvim
|
|
--
|
|
-- But for many setups, the LSP (`tsserver`) will work just fine
|
|
-- tsserver = {},
|
|
|
|
lua_ls = {
|
|
-- cmd = {...},
|
|
-- filetypes { ...},
|
|
-- capabilities = {},
|
|
settings = {
|
|
Lua = {
|
|
runtime = { version = 'LuaJIT' },
|
|
workspace = {
|
|
checkThirdParty = false,
|
|
-- Tells lua_ls where to find all the Lua files that you have loaded
|
|
-- for your neovim configuration.
|
|
library = {
|
|
'${3rd}/luv/library',
|
|
unpack(vim.api.nvim_get_runtime_file('', true)),
|
|
},
|
|
-- If lua_ls is really slow on your computer, you can try this instead:
|
|
-- library = { vim.env.VIMRUNTIME },
|
|
},
|
|
completion = {
|
|
callSnippet = 'Replace',
|
|
},
|
|
-- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings
|
|
-- diagnostics = { disable = { 'missing-fields' } },
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
require('mason').setup()
|
|
|
|
-- You can add other tools here that you want Mason to install
|
|
-- for you, so that they are available from within Neovim.
|
|
local ensure_installed = vim.tbl_keys(servers or {})
|
|
vim.list_extend(ensure_installed, {
|
|
'stylua', -- Used to format lua code
|
|
'black',
|
|
'debugpy',
|
|
'mypy',
|
|
'ruff',
|
|
'pyright',
|
|
})
|
|
|
|
require('mason-tool-installer').setup { ensure_installed = ensure_installed }
|
|
require('mason-lspconfig').setup {
|
|
handlers = {
|
|
function(server_name)
|
|
local server = servers[server_name] or {}
|
|
-- This handles overriding only values explicitly passed
|
|
-- by the server configuration above. Useful when disabling
|
|
-- certain features of an LSP (for example, turning off formatting for tsserver)
|
|
server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
|
|
require('lspconfig')[server_name].setup(server)
|
|
end,
|
|
},
|
|
}
|
|
end,
|
|
},
|
|
}
|