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 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, }, 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, --}