From afdcec6a881c967634144f9f19e7dd59507f7649 Mon Sep 17 00:00:00 2001 From: Cody Schroeder Date: Tue, 29 Aug 2023 15:40:46 -0400 Subject: [PATCH] fix(go_indexer): detect top-level when using file-level scopes (#5817) --- kythe/go/indexer/BUILD | 1 + kythe/go/indexer/emit.go | 2 +- kythe/go/indexer/testdata/builtin.go | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/kythe/go/indexer/BUILD b/kythe/go/indexer/BUILD index 7f6e388f00..e15fe05a44 100644 --- a/kythe/go/indexer/BUILD +++ b/kythe/go/indexer/BUILD @@ -69,6 +69,7 @@ go_indexer_test( has_marked_source = True, import_path = "builtin", resolve_code_facts = True, + use_file_as_top_level_scope = True, ) go_indexer_test( diff --git a/kythe/go/indexer/emit.go b/kythe/go/indexer/emit.go index 05f1b216e3..3c4fd2c708 100644 --- a/kythe/go/indexer/emit.go +++ b/kythe/go/indexer/emit.go @@ -1224,7 +1224,7 @@ func (e *emitter) writeBinding(id *ast.Ident, kind string, parent *spb.VName) *s return nil } target := e.pi.ObjectVName(obj) - if e.pi.ImportPath == "builtin" && parent != nil && parent.GetSignature() == "package" { + if e.pi.ImportPath == "builtin" && parent != nil && (parent.GetSignature() == "package" || parent.GetSignature() == "") { // Special-case top-level builtin bindings: https://pkg.go.dev/builtin target = govname.Builtin(id.String()) kind = "tbuiltin" diff --git a/kythe/go/indexer/testdata/builtin.go b/kythe/go/indexer/testdata/builtin.go index 3fa1be703e..724fa0ba2b 100644 --- a/kythe/go/indexer/testdata/builtin.go +++ b/kythe/go/indexer/testdata/builtin.go @@ -1,9 +1,12 @@ package builtin +//- _? defines/binding BoolBuiltin //- BoolBuiltin=vname("bool#builtin", "golang.org", "", "", "go").node/kind tbuiltin //- BoolBuiltin.code/rendered/signature "bool" +//- _? defines/binding IntBuiltin //- IntBuiltin=vname("int#builtin", "golang.org", "", "", "go").node/kind tbuiltin //- IntBuiltin.code/rendered/signature "int" +//- _? defines/binding ErrorBuiltin //- ErrorBuiltin=vname("error#builtin", "golang.org", "", "", "go").node/kind tbuiltin //- ErrorBuiltin.code/rendered/signature "error"