From 79922f67c1b62778aa7d7a9db5014ead8e5250f4 Mon Sep 17 00:00:00 2001 From: Pu Junsong Date: Thu, 14 Aug 2025 17:24:21 +0800 Subject: [PATCH] fix a bug that go parser fails to extract a package-level variable usage --- go.mod | 2 +- lang/golang/parser/file.go | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index c4dff74..15f17a0 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( github.com/fsnotify/fsnotify v1.4.9 github.com/invopop/jsonschema v0.13.0 github.com/mark3labs/mcp-go v0.34.0 + github.com/pkg/errors v0.9.1 github.com/sourcegraph/go-lsp v0.0.0-20240223163137-f80c5dd31dfd github.com/sourcegraph/jsonrpc2 v0.2.0 github.com/stretchr/testify v1.10.0 @@ -67,7 +68,6 @@ require ( github.com/openai/openai-go v1.10.1 // indirect github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/slongfield/pyfmt v0.0.0-20220222012616-ea85ff4c361f // indirect diff --git a/lang/golang/parser/file.go b/lang/golang/parser/file.go index 8fd1785..d5ec870 100644 --- a/lang/golang/parser/file.go +++ b/lang/golang/parser/file.go @@ -295,6 +295,26 @@ func (p *GoParser) parseSelector(ctx *fileContext, expr *ast.SelectorExpr, infos return false } return false + } else if obj, ok := use.(*types.Var); ok { + // collect global var + addPkgVarDep := func() { + pkg := obj.Pkg() + if pkg == nil { + return + } + path := pkg.Path() + mod, err := ctx.GetMod(path) + if err != nil { + return + } + id := NewIdentity(mod, path, obj.Name()) + dep := NewDependency(id, ctx.FileLine(ident)) + infos.globalVars = InsertDependency(infos.globalVars, dep) + } + // check if it is a global var + if isPkgScope(obj.Parent()) { + addPkgVarDep() + } } } } else if sel, ok := expr.X.(*ast.SelectorExpr); ok {