aboutsummaryrefslogtreecommitdiffstats
path: root/lua/lspconfig/gopls.lua
diff options
context:
space:
mode:
authorMichael Lingelbach <m.j.lbach@gmail.com>2021-11-11 09:37:51 -0800
committerGitHub <noreply@github.com>2021-11-11 09:37:51 -0800
commit86abe8db3ad48271d7295b08cdbb923aa705644b (patch)
tree31ec5fd6d11077ab04655b92d9230addd4692b77 /lua/lspconfig/gopls.lua
parentdocs: update server_configurations.md (diff)
downloadnvim-lspconfig-86abe8db3ad48271d7295b08cdbb923aa705644b.tar
nvim-lspconfig-86abe8db3ad48271d7295b08cdbb923aa705644b.tar.gz
nvim-lspconfig-86abe8db3ad48271d7295b08cdbb923aa705644b.tar.bz2
nvim-lspconfig-86abe8db3ad48271d7295b08cdbb923aa705644b.tar.lz
nvim-lspconfig-86abe8db3ad48271d7295b08cdbb923aa705644b.tar.xz
nvim-lspconfig-86abe8db3ad48271d7295b08cdbb923aa705644b.tar.zst
nvim-lspconfig-86abe8db3ad48271d7295b08cdbb923aa705644b.zip
fix(gopls): resolve top-level go.mod as root_dir (#1399)
Diffstat (limited to 'lua/lspconfig/gopls.lua')
-rw-r--r--lua/lspconfig/gopls.lua27
1 files changed, 26 insertions, 1 deletions
diff --git a/lua/lspconfig/gopls.lua b/lua/lspconfig/gopls.lua
index 0126b127..90c1fde0 100644
--- a/lua/lspconfig/gopls.lua
+++ b/lua/lspconfig/gopls.lua
@@ -6,7 +6,32 @@ configs.gopls = {
cmd = { 'gopls' },
filetypes = { 'go', 'gomod' },
root_dir = function(fname)
- return util.root_pattern 'go.work'(fname) or util.root_pattern('go.mod', '.git')(fname)
+ -- First, search for go.work
+ local primary_root = util.root_pattern 'go.work'(fname)
+ if primary_root then
+ return primary_root
+ end
+
+ -- Then, search up the filesystem for go.mod
+ local go_mod_hierarchy = {}
+ if primary_root then
+ return primary_root
+ end
+ for path in util.path.iterate_parents(fname) do
+ for _, p in ipairs(vim.fn.glob(util.path.join(path, 'go.mod'), true, true)) do
+ if util.path.exists(p) then
+ table.insert(go_mod_hierarchy, p)
+ end
+ end
+ end
+
+ -- Take the top level go.mod
+ if #go_mod_hierarchy > 0 then
+ return go_mod_hierarchy[#go_mod_hierarchy]
+ end
+
+ -- Fallback to the git root
+ return util.find_git_ancestor(fname)
end,
},
docs = {