local ok, lspconfig = pcall(require, "lspconfig") local log_directory = vim.env.LOG_HOME if not ok then return end local custom_attach = function(_, bufnr) local opts = { noremap=true, silent=true, buffer=bufnr } -- Enable completion triggered by 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', 'h', vim.lsp.buf.hover, opts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) vim.keymap.set('n', 'dl', vim.diagnostic.setloclist, opts) vim.keymap.set('n', 'dn', vim.diagnostic.goto_next, opts) vim.keymap.set('n', 'dp', vim.diagnostic.goto_prev, opts) vim.keymap.set('n', 'gt', vim.lsp.buf.type_definition, opts) vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) vim.keymap.set("n", 'ff', function() vim.lsp.buf.format{ async = true } end, opts) vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, opts) vim.keymap.set('n', 'dec', vim.lsp.buf.declaration, opts) --buf_set_keymap('n', '', vim.lsp.buf.signature_help, opts) --buf_set_keymap('n', 'wa', vim.lsp.buf.add_workspace_folder, opts) --buf_set_keymap('n', 'wr', vim.lsp.buf.remove_workspace_folder, opts) --buf_set_keymap('n', '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, }, 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, }