164 lines
5.8 KiB
Lua
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,
|
|
-- })
|