Dan Anglin
e92cf5bdb3
Add GOFLAGS environment setting to gopls and add the 'mage' tag so that gopls works with magefiles.
126 lines
3.9 KiB
Lua
126 lines
3.9 KiB
Lua
local ok, lspconfig = pcall(require, "lspconfig")
|
|
|
|
local log_directory = vim.env.LOG_HOME
|
|
|
|
if log_directory == nil then
|
|
log_directory = "/tmp"
|
|
end
|
|
|
|
if not ok then
|
|
return
|
|
end
|
|
|
|
local custom_attach = function(_, bufnr)
|
|
local opts = { noremap=true, silent=true, buffer=bufnr }
|
|
|
|
-- Enable completion triggered by <c-x><c-o>
|
|
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
|
|
|
|
-- See `:help vim.diagnostic.*` for documentation on any of the diagnostics functions
|
|
vim.keymap.set('n', '<leader>h', vim.lsp.buf.hover, opts)
|
|
vim.keymap.set('n', '<leader>gd', vim.lsp.buf.definition, opts)
|
|
vim.keymap.set('n', '<leader>gr', vim.lsp.buf.references, opts)
|
|
vim.keymap.set('n', '<leader>gi', vim.lsp.buf.implementation, opts)
|
|
vim.keymap.set('n', '<leader>dl', vim.diagnostic.setloclist, opts)
|
|
vim.keymap.set('n', '<leader>dn', vim.diagnostic.goto_next, opts)
|
|
vim.keymap.set('n', '<leader>dp', vim.diagnostic.goto_prev, opts)
|
|
vim.keymap.set('n', '<leader>gt', vim.lsp.buf.type_definition, opts)
|
|
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts)
|
|
vim.keymap.set("n", '<leader>ff', function() vim.lsp.buf.format{ async = true } end, opts)
|
|
vim.keymap.set('n', '<leader>ca', vim.lsp.buf.code_action, opts)
|
|
vim.keymap.set('n', '<leader>dec', vim.lsp.buf.declaration, opts)
|
|
--buf_set_keymap('n', '<C-k>', vim.lsp.buf.signature_help, opts)
|
|
--buf_set_keymap('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts)
|
|
--buf_set_keymap('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts)
|
|
--buf_set_keymap('n', '<space>wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end', opts)
|
|
end
|
|
|
|
local lsp_flags = {
|
|
debounce_text_changes = 150,
|
|
}
|
|
|
|
-- Go
|
|
lspconfig.gopls.setup{
|
|
on_attach = custom_attach,
|
|
cmd = {"gopls", "serve", "-logfile="..log_directory.."/gopls.log"},
|
|
settings = {
|
|
gopls = {
|
|
analyses = {
|
|
unusedparams = true,
|
|
},
|
|
env = {
|
|
GOFLAGS = "-tags=mage"
|
|
},
|
|
gofumpt = true,
|
|
staticcheck = true,
|
|
},
|
|
init_options = {
|
|
usePlaceholders = true,
|
|
completeUnimported = true,
|
|
hoverKind = "FullDocumentation",
|
|
},
|
|
},
|
|
flags = lsp_flags,
|
|
}
|
|
|
|
-- Golangci-lint language server
|
|
-- requires golangci-lint and golangci-lint-langserver
|
|
lspconfig.golangci_lint_ls.setup{
|
|
flags = lsp_flags,
|
|
}
|
|
|
|
-- Jsonnet
|
|
lspconfig.jsonnet_ls.setup{
|
|
on_attach = custom_attach,
|
|
cmd = {"jsonnet-language-server", "--lint"},
|
|
flags = lsp_flags,
|
|
}
|
|
|
|
-- Terraform
|
|
lspconfig.terraformls.setup{
|
|
on_attach = custom_attach,
|
|
cmd = {"terraform-ls", "serve", "-log-file="..log_directory.."/terraformls.log"},
|
|
filetypes = {"terraform", "hcl", "tf"},
|
|
root_dir = lspconfig.util.root_pattern{".terraform", ".git", "main.tf"},
|
|
flags = lsp_flags,
|
|
}
|
|
|
|
-- Python
|
|
lspconfig.pylsp.setup{
|
|
on_attach = custom_attach,
|
|
cmd = { "pylsp" },
|
|
filetypes = { "python" },
|
|
flags = lsp_flags,
|
|
}
|
|
|
|
-- Lua
|
|
local sumneko_root_path = vim.fn.expand('$HOME') .. "/Git/github.com/sumneko/lua-language-server"
|
|
local sumneko_binary = sumneko_root_path .. "/bin/Linux/lua-language-server"
|
|
|
|
lspconfig.sumneko_lua.setup {
|
|
on_attach = custom_attach,
|
|
cmd = {sumneko_binary, "-E", sumneko_root_path .. "/main.lua"},
|
|
settings = {
|
|
Lua = {
|
|
runtime = {
|
|
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
|
|
version = 'LuaJIT',
|
|
-- Setup your lua path
|
|
path = vim.split(package.path, ';')
|
|
},
|
|
diagnostics = {
|
|
-- Get the language server to recognize the vim and awesome globals
|
|
globals = {'vim', 'awesome'}
|
|
},
|
|
workspace = {
|
|
-- Make the server aware of Neovim runtime files
|
|
library = vim.api.nvim_get_runtime_file("", true),
|
|
},
|
|
telemetry = {
|
|
-- Do not send telemetry data containing a randomized but unique identifier
|
|
enable = false,
|
|
},
|
|
}
|
|
},
|
|
flags = lsp_flags,
|
|
}
|