Files
dotfiles/nvim/.config/nvim/lua/lsp.lua
T

164 lines
5.8 KiB
Lua

vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('UserLspCompletion', { clear = true }),
callback = function(ev)
local client = assert(vim.lsp.get_client_by_id(ev.data.client_id))
if client:supports_method('textDocument/completion') then
vim.lsp.completion.enable(true, client.id, ev.buf, { autotrigger = true })
end
end,
})
vim.filetype.add({
pattern = {
["compose.*%.ya?ml"] = "yaml.docker-compose",
["docker%-compose.*%.ya?ml"] = "yaml.docker-compose",
[".*/templates/.*%.tpl"] = "helm",
[".*/templates/.*%.ya?ml"] = "helm",
["values.*%.ya?ml"] = "yaml.helm-values",
},
})
-- Language server install commands:
-- lua_ls: brew install lua-language-server
-- pyright: npm install --global pyright
-- gopls: go install golang.org/x/tools/gopls@latest
-- clangd: brew install llvm
-- helm_ls: brew install helm helm-ls
-- bashls: npm install --global bash-language-server
-- angularls: npm install --global @angular/language-server
-- djls: brew install joshuadavidthomas/homebrew/django-language-server
-- docker_language_server: go install github.com/docker/docker-language-server/cmd/docker-language-server@latest
-- html: npm install --global vscode-langservers-extracted
-- cssls: npm install --global vscode-langservers-extracted
-- ts_ls: npm install --prefix "$HOME/.local/share/typescript-lsp" typescript typescript-language-server
-- jsonls: npm install --global vscode-langservers-extracted
-- emmet_ls: npm install --global emmet-ls
-- yamlls: npm install --global yaml-language-server
-- Kubernetes: provided by the yamlls schema configuration below
-- Enable language servers
local servers = {
'lua_ls',
'pyright',
'gopls',
'clangd',
'helm_ls',
'bashls',
'angularls',
'djls',
'docker_language_server',
}
for _, lsp in ipairs(servers) do
vim.lsp.enable(lsp)
end
-- HTML LSP
vim.lsp.config('html', {
filetypes = { "html", "templ", "javascript", "css" },
capabilities = capabilities,
init_options = {
configurationSection = { "html", "css", "javascript" },
embeddedLanguages = { css = true, javascript = true },
provideFormatter = true
}
})
vim.lsp.enable('html')
-- CSS LSP
vim.lsp.config('cssls', {
filetypes = { "css", "scss", "less" },
capabilities = capabilities,
})
vim.lsp.enable('cssls')
-- TypeScript LSP
local typescript_lsp_root = vim.fn.expand("~/.local/share/typescript-lsp")
vim.lsp.config("ts_ls", {
cmd = {
vim.fs.joinpath(typescript_lsp_root, "node_modules", ".bin", "typescript-language-server"),
"--stdio",
},
capabilities = capabilities,
init_options = {
hostInfo = "neovim",
tsserver = {
path = vim.fs.joinpath(
typescript_lsp_root,
"node_modules",
"typescript",
"lib",
"tsserver.js"
),
},
},
})
vim.lsp.enable("ts_ls")
-- JSON LSP
vim.lsp.config('jsonls', {
capabilities = capabilities,
})
vim.lsp.enable('jsonls')
-- Emmet LSP
vim.lsp.config('emmet_ls', {
filetypes = { "html", "template", "javascript" },
})
vim.lsp.enable('emmet_ls')
-- YAML LSP
vim.lsp.config('yamlls', {
filetypes = { "yaml", "yaml.gitlab", "yaml.helm-values" },
capabilities = capabilities,
settings = {
yaml = {
schemas = {
["https://json.schemastore.org/chart.json"] = "Chart.yaml",
},
},
}
})
vim.lsp.enable('yamlls')
-- DAP Setup
-- require('dap-python').setup('~/venv/bin/python')
-- require('dap-go').setup()
-- Global mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
-- vim.keymap.set('n', '<space>e', vim.diagnostic.open_float)
-- vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
-- vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
-- vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist)
-- vim.api.nvim_set_keymap('i', '<c-n>', '<c-x><c-o>', { noremap = true, silent = true })
--- Use LspAttach autocommand to only map the following keys
--- after the language server attaches to the current buffer
-- vim.api.nvim_create_autocmd('LspAttach', {
-- group = vim.api.nvim_create_augroup('UserLspConfig', {}),
-- callback = function(ev)
-- -- Enable completion triggered by <c-x><c-o>
-- vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
--
-- -- Buffer local mappings.
-- -- See `:help vim.lsp.*` for documentation on any of the below functions
-- local opts = { buffer = ev.buf }
-- vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
-- vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
-- vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
-- vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
-- vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts)
-- vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts)
-- vim.keymap.set('n', '<space>wl', function()
-- print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
-- end, opts)
-- vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, opts)
-- vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, opts)
-- vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts)
-- vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
-- vim.keymap.set('n', '<space>f', function()
-- vim.lsp.buf.format { async = true }
-- end, opts)
-- end,
-- })