diff options
| author | Michael Lingelbach <m.j.lbach@gmail.com> | 2021-11-11 09:37:51 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-11 09:37:51 -0800 |
| commit | 86abe8db3ad48271d7295b08cdbb923aa705644b (patch) | |
| tree | 31ec5fd6d11077ab04655b92d9230addd4692b77 /lua/lspconfig/gopls.lua | |
| parent | docs: update server_configurations.md (diff) | |
| download | nvim-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.lua | 27 |
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 = { |
