From 98f602d510f097a6dc790a2bdcbb57e2b1e650cf Mon Sep 17 00:00:00 2001 From: Daniel Lundin Date: Mon, 1 Aug 2022 15:21:58 +0200 Subject: [PATCH] nvim: add gopls config for bazel generated code --- .config/nvim/lua/dln/lsp-config.lua | 215 +++++++++++++++------------- 1 file changed, 114 insertions(+), 101 deletions(-) diff --git a/.config/nvim/lua/dln/lsp-config.lua b/.config/nvim/lua/dln/lsp-config.lua index e4e32ad..2c9b91c 100644 --- a/.config/nvim/lua/dln/lsp-config.lua +++ b/.config/nvim/lua/dln/lsp-config.lua @@ -3,33 +3,27 @@ local lspconfig = require("lspconfig") local util = require("lspconfig.util") local capabilities = vim.lsp.protocol.make_client_capabilities() -capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) +capabilities = require("cmp_nvim_lsp").update_capabilities(capabilities) - -vim.lsp.handlers["textDocument/publishDiagnostics"] = -vim.lsp.with( -vim.lsp.diagnostic.on_publish_diagnostics, -{ +vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, { update_in_insert = false, - virtual_text = false, -} -) + virtual_text = false, +}) local signs = { Error = "🔥", Warn = "⚠️ ", Hint = "💡", Info = "💡" } for type, icon in pairs(signs) do - local hl = "DiagnosticSign" .. type - vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl }) + local hl = "DiagnosticSign" .. type + vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl }) end local on_attach = function() require("folding").on_attach() - require "lsp_signature".on_attach() -- Note: add in lsp client on-attach + require("lsp_signature").on_attach() -- Note: add in lsp client on-attach end -- simple setups -- local servers = { "bashls", "dockerls", - "gopls", "jsonls", -- "sql", "sumneko_lua", @@ -38,59 +32,78 @@ local servers = { } for _, lsp in ipairs(servers) do - lspconfig[lsp].setup {on_attach = on_attach} + lspconfig[lsp].setup({ on_attach = on_attach }) end local efm_prettier = { formatCommand = "prettier --stdin-filepath ${INPUT}", - formatStdin = true + formatStdin = true, } +lspconfig.gopls.setup({ + on_attach = on_attach, + settings = { + gopls = { + env = { + GOPACKAGESDRIVER = "./tools/gopackagesdriver.sh", + }, + directoryFilters = { + "-bazel-bin", + "-bazel-out", + "-bazel-testlogs", + "-bazel-mypkg", + }, + ..., + }, + }, +}) -lspconfig.sumneko_lua.setup { - on_attach = function() +lspconfig.sumneko_lua.setup({ + on_attach = function() on_attach() vim.cmd([[autocmd BufWritePre lua require'stylua-nvim'.format_file()]]) end, settings = { Lua = { - completion = {kewordSnippet = "Disable"}, + completion = { kewordSnippet = "Disable" }, diagnostics = { enable = true, - globals = {"renoise", "use", "vim"} + globals = { "renoise", "use", "vim" }, }, runtime = { version = "LuaJIT", - path = {"?.lua", "?/init.lua", "?/?.lua"} + path = { "?.lua", "?/init.lua", "?/?.lua" }, }, workspace = { - library = vim.api.nvim_get_runtime_file("", true), - maxPreload = 2000, - preloadFileSize = 1000, - checkThirdParty = false, - } - } - } -} + library = vim.api.nvim_get_runtime_file("", true), + maxPreload = 2000, + preloadFileSize = 1000, + checkThirdParty = false, + }, + }, + }, +}) -lspconfig.terraformls.setup {} +lspconfig.terraformls.setup({}) local yaml_is_k8s = function(bufnr) local lines = vim.api.nvim_buf_get_lines(bufnr, 0, 50, false) -- Stop after the first 50 lines for _, l in pairs(lines) do - if string.find(l, "apiVersion") ~= nil then return true end + if string.find(l, "apiVersion") ~= nil then + return true + end end return false end -lspconfig.cssls.setup { +lspconfig.cssls.setup({ cmd = { "vscode-css-languageserver", "--stdio" }, - capabilities = capabilities, -} + capabilities = capabilities, +}) -lspconfig.cssmodules_ls.setup{} +lspconfig.cssmodules_ls.setup({}) -lspconfig.html.setup { +lspconfig.html.setup({ cmd = { "vscode-html-languageserver", "--stdio" }, filetypes = { "html" }, init_options = { @@ -98,16 +111,16 @@ lspconfig.html.setup { embeddedLanguages = { css = true, javascript = true, - } + }, }, - settings = {} -} + settings = {}, +}) -lspconfig.yamlls.setup { +lspconfig.yamlls.setup({ settings = { yaml = { - format = {enable = true, singleQuote = true}, - schemaStore = {enable = true, url = "https://json.schemastore.org"}, + format = { enable = true, singleQuote = true }, + schemaStore = { enable = true, url = "https://json.schemastore.org" }, schemas = { -- ["https://json.schemastore.org/github-workflow"] = "*.github/workflows/*", ["https://json.schemastore.org/kustomization.json"] = "kustomization.yaml", @@ -142,76 +155,76 @@ lspconfig.yamlls.setup { }, }, - validate = true - } - } -} + validate = true, + }, + }, +}) -- npm install -g typescript typescript-language-server -require'lspconfig'.tsserver.setup({ - on_attach = function(client, bufnr) - client.resolved_capabilities.document_formatting = false - on_attach(client) +require("lspconfig").tsserver.setup({ + on_attach = function(client, bufnr) + client.resolved_capabilities.document_formatting = false + on_attach(client) - require'lsp_signature'.on_attach({ - bind = false, -- This is mandatory, otherwise border config won't get registered. - -- If you want to hook lspsaga or other signature handler, pls set to false - doc_lines = 2, -- will show two lines of comment/doc(if there are more than two lines in doc, will be truncated); - -- set to 0 if you DO NOT want any API comments be shown - -- This setting only take effect in insert mode, it does not affect signature help in normal - -- mode, 10 by default + require("lsp_signature").on_attach({ + bind = false, -- This is mandatory, otherwise border config won't get registered. + -- If you want to hook lspsaga or other signature handler, pls set to false + doc_lines = 2, -- will show two lines of comment/doc(if there are more than two lines in doc, will be truncated); + -- set to 0 if you DO NOT want any API comments be shown + -- This setting only take effect in insert mode, it does not affect signature help in normal + -- mode, 10 by default - floating_window = true, -- show hint in a floating window, set to false for virtual text only mode - fix_pos = false, -- set to true, the floating window will not auto-close until finish all parameters - hint_enable = false, -- virtual hint enable - hint_prefix = "🐼 ", -- Panda for parameter - hint_scheme = "String", - use_lspsaga = true, -- set to true if you want to use lspsaga popup - hi_parameter = "Search", -- how your parameter will be highlight - max_height = 12, -- max height of signature floating_window, if content is more than max_height, you can scroll down - -- to view the hiding contents - max_width = 120, -- max_width of signature floating_window, line will be wrapped if exceed max_width - handler_opts = { - border = "single" -- double, single, shadow, none - }, - extra_trigger_chars = {} -- Array of extra characters that will trigger signature completion, e.g., {"(", ","} - }) + floating_window = true, -- show hint in a floating window, set to false for virtual text only mode + fix_pos = false, -- set to true, the floating window will not auto-close until finish all parameters + hint_enable = false, -- virtual hint enable + hint_prefix = "🐼 ", -- Panda for parameter + hint_scheme = "String", + use_lspsaga = true, -- set to true if you want to use lspsaga popup + hi_parameter = "Search", -- how your parameter will be highlight + max_height = 12, -- max height of signature floating_window, if content is more than max_height, you can scroll down + -- to view the hiding contents + max_width = 120, -- max_width of signature floating_window, line will be wrapped if exceed max_width + handler_opts = { + border = "single", -- double, single, shadow, none + }, + extra_trigger_chars = {}, -- Array of extra characters that will trigger signature completion, e.g., {"(", ","} + }) - local ts_utils = require("nvim-lsp-ts-utils") + local ts_utils = require("nvim-lsp-ts-utils") - ts_utils.setup { - debug = false, - disable_commands = false, - enable_import_on_completion = false, - import_all_timeout = 5000, -- ms + ts_utils.setup({ + debug = false, + disable_commands = false, + enable_import_on_completion = false, + import_all_timeout = 5000, -- ms - -- eslint - eslint_enable_code_actions = true, - eslint_enable_disable_comments = true, - eslint_bin = 'eslint_d', - eslint_config_fallback = nil, - eslint_enable_diagnostics = true, + -- eslint + eslint_enable_code_actions = true, + eslint_enable_disable_comments = true, + eslint_bin = "eslint_d", + eslint_config_fallback = nil, + eslint_enable_diagnostics = true, - -- formatting - enable_formatting = true, - formatter = 'prettier', - formatter_config_fallback = nil, + -- formatting + enable_formatting = true, + formatter = "prettier", + formatter_config_fallback = nil, - -- parentheses completion - complete_parens = false, - signature_help_in_parens = false, + -- parentheses completion + complete_parens = false, + signature_help_in_parens = false, - -- update imports on file move - update_imports_on_move = true, - require_confirmation_on_move = true, - watch_dir = nil, - } + -- update imports on file move + update_imports_on_move = true, + require_confirmation_on_move = true, + watch_dir = nil, + }) - ts_utils.setup_client(client) + ts_utils.setup_client(client) - vim.api.nvim_buf_set_keymap(bufnr, "n", "co", ":TSLspOrganize", { silent = true }) - vim.api.nvim_buf_set_keymap(bufnr, "n", "qq", ":TSLspFixCurrent", { silent = true }) - vim.api.nvim_buf_set_keymap(bufnr, "n", "cR", ":TSLspRenameFile", { silent = true }) - vim.api.nvim_buf_set_keymap(bufnr, "n", "ci", ":TSLspImportAll", { silent = true }) - end + vim.api.nvim_buf_set_keymap(bufnr, "n", "co", ":TSLspOrganize", { silent = true }) + vim.api.nvim_buf_set_keymap(bufnr, "n", "qq", ":TSLspFixCurrent", { silent = true }) + vim.api.nvim_buf_set_keymap(bufnr, "n", "cR", ":TSLspRenameFile", { silent = true }) + vim.api.nvim_buf_set_keymap(bufnr, "n", "ci", ":TSLspImportAll", { silent = true }) + end, })