Configure LSPs via Languages and Profiles
This commit is contained in:
parent
990efd1444
commit
24ec529102
|
@ -206,119 +206,6 @@ return {
|
||||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_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 = {},
|
|
||||||
pyright = {
|
|
||||||
settings = {
|
|
||||||
python = {
|
|
||||||
analysis = {
|
|
||||||
autoSearchPaths = true,
|
|
||||||
diagnosticMode = 'workspace',
|
|
||||||
useLibraryCodeForTypes = true,
|
|
||||||
autoImportCompletions = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
disableLanguageServices = false,
|
|
||||||
},
|
|
||||||
basedpyright = {
|
|
||||||
settings = {
|
|
||||||
basedpyright = {
|
|
||||||
analysis = {
|
|
||||||
autoSearchPaths = true,
|
|
||||||
typeCheckingMode = 'basic',
|
|
||||||
diagnosticMode = 'openFilesOnly',
|
|
||||||
useLibraryCodeForTypes = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
gopls = {
|
|
||||||
settings = {
|
|
||||||
gopls = {
|
|
||||||
analyses = {
|
|
||||||
unusedparams = true,
|
|
||||||
},
|
|
||||||
staticcheck = true,
|
|
||||||
hints = {
|
|
||||||
rangeVariableTypes = true,
|
|
||||||
parameterNames = true,
|
|
||||||
constantValues = true,
|
|
||||||
assignVariableTypes = true,
|
|
||||||
compositeLiteralFields = true,
|
|
||||||
compositeLiteralTypes = true,
|
|
||||||
functionTypeParameters = true,
|
|
||||||
},
|
|
||||||
gofumpt = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- pylsp = {
|
|
||||||
-- settings = {
|
|
||||||
-- pylsp = {
|
|
||||||
-- plugins = {
|
|
||||||
-- pycodestyle = {
|
|
||||||
-- ignore = {},
|
|
||||||
-- maxLineLength = 120,
|
|
||||||
-- },
|
|
||||||
-- },
|
|
||||||
-- }
|
|
||||||
-- }
|
|
||||||
-- },
|
|
||||||
rust_analyzer = {
|
|
||||||
alias = 'rust-analyzer',
|
|
||||||
},
|
|
||||||
|
|
||||||
markdown_oxide = {
|
|
||||||
alias = 'markdown-oxide',
|
|
||||||
},
|
|
||||||
-- ... 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 = {},
|
|
||||||
--
|
|
||||||
nixd = {},
|
|
||||||
['nil_ls'] = {
|
|
||||||
alias = 'nil',
|
|
||||||
},
|
|
||||||
bashls = {
|
|
||||||
alias = 'bash-language-server',
|
|
||||||
},
|
|
||||||
dockerls = {
|
|
||||||
alias = 'docker-langserver',
|
|
||||||
},
|
|
||||||
docker_compose_language_service = {
|
|
||||||
alias = 'docker-compose-langserver',
|
|
||||||
},
|
|
||||||
lua_ls = {
|
|
||||||
-- cmd = {...},
|
|
||||||
-- filetypes = { ...},
|
|
||||||
-- capabilities = {},
|
|
||||||
alias = 'lua-language-server',
|
|
||||||
settings = {
|
|
||||||
Lua = {
|
|
||||||
completion = {
|
|
||||||
callSnippet = 'Replace',
|
|
||||||
},
|
|
||||||
-- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings
|
|
||||||
-- diagnostics = { disable = { 'missing-fields' } },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Ensure the servers and tools above are installed
|
-- Ensure the servers and tools above are installed
|
||||||
-- To check the current status of installed tools and/or manually install
|
-- To check the current status of installed tools and/or manually install
|
||||||
-- other tools, you can run
|
-- other tools, you can run
|
||||||
|
@ -329,39 +216,24 @@ return {
|
||||||
|
|
||||||
-- You can add other tools here that you want Mason to install
|
-- You can add other tools here that you want Mason to install
|
||||||
-- for you, so that they are available from within Neovim.
|
-- 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
|
|
||||||
})
|
|
||||||
-- require('mason-tool-installer').setup { ensure_installed = ensure_installed }
|
-- require('mason-tool-installer').setup { ensure_installed = ensure_installed }
|
||||||
-- INFO: Using my own utils function instead of mason-lspconfig as it checks if the stuff is already installed
|
-- INFO: Using my own utils function instead of mason-lspconfig as it checks if the stuff is already installed
|
||||||
-- outside of mason. This is useful for NixOS setup where mason version just doesn't work sometimes due to libc issues.
|
-- outside of mason. This is useful for NixOS setup where mason version just doesn't work sometimes due to libc issues.
|
||||||
local installed = {}
|
|
||||||
local i = 0
|
|
||||||
for server, config in pairs(servers) do
|
|
||||||
if config.alias then
|
|
||||||
installed[i] = config.alias
|
|
||||||
else
|
|
||||||
installed[i] = server
|
|
||||||
end
|
|
||||||
i = i + 1
|
|
||||||
end
|
|
||||||
table.insert(installed, 'stylua')
|
|
||||||
require('utils.mason').install(installed, true)
|
|
||||||
-- require('utils.mason').install {
|
|
||||||
-- -- "python-lsp-server",
|
|
||||||
-- 'pyright',
|
|
||||||
-- 'basedpyright',
|
|
||||||
-- 'bash-language-server',
|
|
||||||
-- -- "rnix-lsp",
|
|
||||||
-- 'lua-language-server',
|
|
||||||
-- -- "docker-compose-language-service",
|
|
||||||
-- -- "nil",
|
|
||||||
-- }
|
|
||||||
|
|
||||||
|
-- We take the languages configured for a given profile
|
||||||
|
-- Given the profile we take the LSPs configured for the languages
|
||||||
|
-- Then we guarantee use or install the LSPs
|
||||||
|
local languages = require('utils.profile').Languages()
|
||||||
|
local languageServers = require 'utils.languages'
|
||||||
|
local tmpTable = {}
|
||||||
|
for _, lang in ipairs(languages) do
|
||||||
|
for lsp, config in pairs(languageServers[lang]) do
|
||||||
|
tmpTable[lsp] = config
|
||||||
|
end
|
||||||
|
end
|
||||||
|
require('utils.mason').install(tmpTable, true)
|
||||||
local lsp = require 'lspconfig'
|
local lsp = require 'lspconfig'
|
||||||
|
for server, config in pairs(tmpTable) do
|
||||||
for server, config in pairs(servers) do
|
|
||||||
config.capabilities = vim.tbl_deep_extend('force', {}, capabilities, config.capabilities or {})
|
config.capabilities = vim.tbl_deep_extend('force', {}, capabilities, config.capabilities or {})
|
||||||
config.on_attach = on_attach
|
config.on_attach = on_attach
|
||||||
lsp[server].setup(config)
|
lsp[server].setup(config)
|
||||||
|
|
|
@ -0,0 +1,109 @@
|
||||||
|
-- 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 Languages = {
|
||||||
|
['python'] = {
|
||||||
|
pyright = {
|
||||||
|
settings = {
|
||||||
|
python = {
|
||||||
|
analysis = {
|
||||||
|
autoSearchPaths = true,
|
||||||
|
diagnosticMode = 'workspace',
|
||||||
|
useLibraryCodeForTypes = true,
|
||||||
|
autoImportCompletions = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
disableLanguageServices = false,
|
||||||
|
},
|
||||||
|
basedpyright = {
|
||||||
|
settings = {
|
||||||
|
basedpyright = {
|
||||||
|
analysis = {
|
||||||
|
autoSearchPaths = true,
|
||||||
|
typeCheckingMode = 'basic',
|
||||||
|
diagnosticMode = 'openFilesOnly',
|
||||||
|
useLibraryCodeForTypes = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
['go'] = {
|
||||||
|
gopls = {
|
||||||
|
settings = {
|
||||||
|
gopls = {
|
||||||
|
analyses = {
|
||||||
|
unusedparams = true,
|
||||||
|
},
|
||||||
|
staticcheck = true,
|
||||||
|
hints = {
|
||||||
|
rangeVariableTypes = true,
|
||||||
|
parameterNames = true,
|
||||||
|
constantValues = true,
|
||||||
|
assignVariableTypes = true,
|
||||||
|
compositeLiteralFields = true,
|
||||||
|
compositeLiteralTypes = true,
|
||||||
|
functionTypeParameters = true,
|
||||||
|
},
|
||||||
|
gofumpt = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
['rust'] = {
|
||||||
|
rust_analyzer = {
|
||||||
|
alias = 'rust-analyzer',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
['markdown'] = {
|
||||||
|
markdown_oxide = {
|
||||||
|
alias = 'markdown-oxide',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
['nix'] = {
|
||||||
|
nixd = {},
|
||||||
|
['nil_ls'] = {
|
||||||
|
alias = 'nil',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
['bash'] = {
|
||||||
|
bashls = {
|
||||||
|
alias = 'bash-language-server',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
['docker'] = {
|
||||||
|
dockerls = {
|
||||||
|
alias = 'docker-langserver',
|
||||||
|
},
|
||||||
|
docker_compose_language_service = {
|
||||||
|
alias = 'docker-compose-langserver',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
['lua'] = {
|
||||||
|
lua_ls = {
|
||||||
|
-- cmd = {...},
|
||||||
|
-- filetypes = { ...},
|
||||||
|
-- capabilities = {},
|
||||||
|
alias = 'lua-language-server',
|
||||||
|
settings = {
|
||||||
|
Lua = {
|
||||||
|
completion = {
|
||||||
|
callSnippet = 'Replace',
|
||||||
|
},
|
||||||
|
-- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings
|
||||||
|
-- diagnostics = { disable = { 'missing-fields' } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
stylua = nil,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return Languages
|
|
@ -0,0 +1,27 @@
|
||||||
|
local PROFILES = {
|
||||||
|
['HOME'] = {
|
||||||
|
'python',
|
||||||
|
'nix',
|
||||||
|
'go',
|
||||||
|
'rust',
|
||||||
|
'markdown',
|
||||||
|
'bash',
|
||||||
|
'docker',
|
||||||
|
'lua',
|
||||||
|
},
|
||||||
|
['DEFAULT'] = {
|
||||||
|
'python',
|
||||||
|
'markdown',
|
||||||
|
'bash',
|
||||||
|
'docker',
|
||||||
|
'lua',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local Profile = {}
|
||||||
|
Profile.Languages = function()
|
||||||
|
local profile = PROFILES[os.getenv 'NVIM_PROFILE' or 'DEFAULT']
|
||||||
|
return profile
|
||||||
|
end
|
||||||
|
|
||||||
|
return Profile
|
Loading…
Reference in New Issue