local ok, lspconfig = pcall(require, "lspconfig") if not ok then return end local custom_attach = function(client, bufnr) local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') local opts = { noremap=true, silent=true } -- See `:help vim.lsp.*` for documentation on any of the below functions buf_set_keymap('n', 'h', 'lua vim.lsp.buf.hover()', { noremap=true, silent=true }) buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', { noremap=true, silent=true }) buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', { noremap=true, silent=true }) buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', { noremap=true, silent=true }) buf_set_keymap('n', 'dl', 'lua vim.lsp.diagnostic.set_loclist()', { noremap=true, silent=true }) buf_set_keymap('n', 'dn', 'lua vim.lsp.diagnostic.goto_next()', { noremap=true, silent=true }) buf_set_keymap('n', 'dp', 'lua vim.lsp.diagnostic.goto_prev()', { noremap=true, silent=true }) buf_set_keymap('n', 'de', 'lua vim.lsp.diagnostic.show_line_diagnostics()', { noremap=true, silent=true }) buf_set_keymap('n', 'gt', 'lua vim.lsp.buf.type_definition()', { noremap=true, silent=true }) buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', { noremap=true, silent=true }) buf_set_keymap("n", "ff", "lua vim.lsp.buf.formatting()", opts) buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) buf_set_keymap('n', 'dec', 'lua vim.lsp.buf.declaration()', opts) --buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) --buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) --buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) --buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) end -- Go lspconfig.gopls.setup{ on_attach = custom_attach, cmd = {"gopls", "serve"}, settings = { gopls = { analyses = { unusedparams = true, }, staticcheck = true, }, init_options = { usePlaceholders = true, completeUnimported = true, hoverKind = "FullDocumentation", }, }, } -- Golangci-lint language server -- requires golangci-lint and golangci-lint-langserver lspconfig.golangci_lint_ls.setup{} -- Jsonnet lspconfig.jsonnet_ls.setup{ on_attach = custom_attach, } -- Terraform lspconfig.terraformls.setup{ on_attach = custom_attach, cmd = {"terraform-ls", "serve"}, filetypes = {"terraform", "hcl", "tf"}, root_dir = lspconfig.util.root_pattern{".terraform", ".git", "main.tf"}, } -- Python lspconfig.pylsp.setup{ on_attach = custom_attach, cmd = { "pylsp" }, filetypes = { "python" }, } -- 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, }, } } }