From 50b3f468de9da6d11cb0a5116cf738693ecf9f61 Mon Sep 17 00:00:00 2001 From: Mohu Date: Fri, 19 Apr 2024 18:01:35 +0800 Subject: [PATCH] feat!: improve go development experience (#1226) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(go): replace vim-go with go.nvim. Signed-off-by: ayamir * fix: install gopls by mason by default. Signed-off-by: ayamir * feat(keymap): set `n|gi` to goto implementation. Signed-off-by: ayamir * chore(keymap): use `gm` to jump to lsp implementations Co-authored-by: 冷酔閑吟 <50296129+Jint-lzxy@users.noreply.github.com> Signed-off-by: Mohu * fixup: remove unused `map_cu`. * chore: use gopls instead of null-ls to format. Signed-off-by: ayamir * chore: add notes for config options. Signed-off-by: ayamir * fixup: tidy settings for go.nvim and gopls. * docs: update more notes for how to config go.nvim. * chore: cleanup Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> * fix: enable only the options that are truly necessary Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> * fixup! chore: cleanup * fix(gopls): invalid config entry Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> --------- Signed-off-by: ayamir Signed-off-by: Mohu Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> Co-authored-by: 冷酔閑吟 <50296129+Jint-lzxy@users.noreply.github.com> Co-authored-by: neogtliu --- lua/core/settings.lua | 2 +- lua/keymap/completion.lua | 6 ++- .../configs/completion/mason-lspconfig.lua | 2 +- .../configs/completion/servers/gopls.lua | 48 ++++++++++++++++--- lua/modules/configs/lang/go.lua | 21 ++++++++ lua/modules/configs/lang/vim-go.lua | 7 --- lua/modules/plugins/lang.lua | 7 +-- 7 files changed, 73 insertions(+), 20 deletions(-) create mode 100644 lua/modules/configs/lang/go.lua delete mode 100644 lua/modules/configs/lang/vim-go.lua diff --git a/lua/core/settings.lua b/lua/core/settings.lua index 5a2890cae..1dca37a02 100644 --- a/lua/core/settings.lua +++ b/lua/core/settings.lua @@ -106,7 +106,7 @@ settings["lsp_deps"] = { "jsonls", "lua_ls", "pylsp", - -- "gopls", + "gopls", } -- Set the general-purpose servers that will be installed during bootstrap here. diff --git a/lua/keymap/completion.lua b/lua/keymap/completion.lua index 23e81b2bc..ae67e2aad 100644 --- a/lua/keymap/completion.lua +++ b/lua/keymap/completion.lua @@ -4,7 +4,7 @@ local map_cmd = bind.map_cmd local map_callback = bind.map_callback local plug_map = { - ["n|"] = map_cmd("FormatToggle"):with_noremap():with_desc("Formater: Toggle format on save"), + ["n|"] = map_cmd("FormatToggle"):with_noremap():with_desc("formatter: Toggle format on save"), } bind.nvim_load_mapping(plug_map) @@ -50,6 +50,10 @@ function mapping.lsp(buf) ["n|gd"] = map_cr("Glance definitions"):with_silent():with_buffer(buf):with_desc("lsp: Preview definition"), ["n|gD"] = map_cr("Lspsaga goto_definition"):with_silent():with_buffer(buf):with_desc("lsp: Goto definition"), ["n|gh"] = map_cr("Glance references"):with_silent():with_buffer(buf):with_desc("lsp: Show reference"), + ["n|gm"] = map_cr("Glance implementations") + :with_silent() + :with_buffer(buf) + :with_desc("lsp: Show implementation"), ["n|gci"] = map_cr("Lspsaga incoming_calls") :with_silent() :with_buffer(buf) diff --git a/lua/modules/configs/completion/mason-lspconfig.lua b/lua/modules/configs/completion/mason-lspconfig.lua index eb534cbf2..8885aaa2b 100644 --- a/lua/modules/configs/completion/mason-lspconfig.lua +++ b/lua/modules/configs/completion/mason-lspconfig.lua @@ -18,7 +18,7 @@ M.setup = function() virtual_text = diagnostics_virtual_text and { severity_limit = diagnostics_level, } or false, - -- set update_in_insert to false bacause it was enabled by lspsaga + -- set update_in_insert to false because it was enabled by lspsaga update_in_insert = false, }) diff --git a/lua/modules/configs/completion/servers/gopls.lua b/lua/modules/configs/completion/servers/gopls.lua index c5de67868..c05d1628f 100644 --- a/lua/modules/configs/completion/servers/gopls.lua +++ b/lua/modules/configs/completion/servers/gopls.lua @@ -1,15 +1,49 @@ -- https://github.com/neovim/nvim-lspconfig/blob/master/lua/lspconfig/server_configurations/gopls.lua return { - flags = { debounce_text_changes = 500 }, - cmd = { "gopls", "-remote=auto" }, + cmd = { "gopls", "-remote.debug=:0", "-remote=auto" }, + filetypes = { "go", "gomod", "gosum", "gotmpl", "gohtmltmpl", "gotexttmpl" }, + flags = { allow_incremental_sync = true, debounce_text_changes = 500 }, + capabilities = { + textDocument = { + completion = { + contextSupport = true, + dynamicRegistration = true, + completionItem = { + commitCharactersSupport = true, + deprecatedSupport = true, + preselectSupport = true, + insertReplaceSupport = true, + labelDetailsSupport = true, + snippetSupport = true, + documentationFormat = { "markdown", "plaintext" }, + resolveSupport = { + properties = { + "documentation", + "details", + "additionalTextEdits", + }, + }, + }, + }, + }, + }, settings = { gopls = { + staticcheck = true, + semanticTokens = true, + noSemanticString = true, usePlaceholders = true, - analyses = { - nilness = true, - shadow = true, - unusedparams = true, - unusewrites = true, + completeUnimported = true, + symbolMatcher = "Fuzzy", + buildFlags = { "-tags", "integration" }, + codelenses = { + generate = true, + gc_details = true, + test = true, + tidy = true, + vendor = true, + regenerate_cgo = true, + upgrade_dependency = true, }, }, }, diff --git a/lua/modules/configs/lang/go.lua b/lua/modules/configs/lang/go.lua new file mode 100644 index 000000000..8ca7b03de --- /dev/null +++ b/lua/modules/configs/lang/go.lua @@ -0,0 +1,21 @@ +return function() + require("modules.utils").load_plugin("go", { + -- By default, we've turned off these options to prevent clashes with our gopls config + icons = false, + diagnostic = false, + lsp_cfg = false, + lsp_gofumpt = false, + lsp_keymaps = false, + lsp_codelens = false, + lsp_document_formatting = false, + lsp_inlay_hints = { enable = false }, + -- DAP-related settings are also turned off here for the same reason + dap_debug = false, + dap_debug_keymap = false, + textobjects = false, + -- Miscellaneous options to seamlessly integrate with other plugins + trouble = true, + luasnip = false, + run_in_floaterm = false, + }) +end diff --git a/lua/modules/configs/lang/vim-go.lua b/lua/modules/configs/lang/vim-go.lua deleted file mode 100644 index f4279e367..000000000 --- a/lua/modules/configs/lang/vim-go.lua +++ /dev/null @@ -1,7 +0,0 @@ -return function() - vim.g.go_doc_keywordprg_enabled = 0 - vim.g.go_def_mapping_enabled = 0 - vim.g.go_code_completion_enabled = 0 - - require("modules.utils").load_plugin("vim-go", nil, true) -end diff --git a/lua/modules/plugins/lang.lua b/lua/modules/plugins/lang.lua index 32e68efbe..9075ff8f9 100644 --- a/lua/modules/plugins/lang.lua +++ b/lua/modules/plugins/lang.lua @@ -8,11 +8,12 @@ lang["kevinhwang91/nvim-bqf"] = { { "junegunn/fzf", build = ":call fzf#install()" }, }, } -lang["fatih/vim-go"] = { +lang["ray-x/go.nvim"] = { lazy = true, - ft = "go", + ft = { "go", "gomod", "gosum" }, build = ":GoInstallBinaries", - init = require("lang.vim-go"), + config = require("lang.go"), + dependencies = { "ray-x/guihua.lua" }, } lang["mrcjkb/rustaceanvim"] = { lazy = true,