oracle: referrers: display the selected object relative to the current package
Added test. (Its previous output was "references to type
referrers.s", with s package-qualified.)
Change-Id: Ifd70246bf5976d5f59ed85e7bbded618286ec6bc
Reviewed-on: https://go-review.googlesource.com/9294
Reviewed-by: David Crawshaw <crawshaw@golang.org>
diff --git a/oracle/referrers.go b/oracle/referrers.go
index 893668b..b805ba2 100644
--- a/oracle/referrers.go
+++ b/oracle/referrers.go
@@ -35,6 +35,7 @@
var obj types.Object
var lprog *loader.Program
var pass2 bool
+ var qpos *queryPos
for {
// Load/parse/type-check the program.
var err error
@@ -44,7 +45,7 @@
}
q.Fset = lprog.Fset
- qpos, err := parseQueryPos(lprog, q.Pos, false)
+ qpos, err = parseQueryPos(lprog, q.Pos, false)
if err != nil {
return err
}
@@ -104,7 +105,7 @@
sort.Sort(byNamePos{q.Fset, refs})
q.result = &referrersResult{
- fset: q.Fset,
+ qpos: qpos,
query: id,
obj: obj,
refs: refs,
@@ -152,14 +153,14 @@
}
type referrersResult struct {
- fset *token.FileSet
+ qpos *queryPos
query *ast.Ident // identifier of query
obj types.Object // object it denotes
refs []*ast.Ident // set of all other references to it
}
func (r *referrersResult) display(printf printfFunc) {
- printf(r.obj, "%d references to %s", len(r.refs), r.obj)
+ printf(r.obj, "%d references to %s", len(r.refs), r.qpos.objectString(r.obj))
// Show referring lines, like grep.
type fileinfo struct {
@@ -172,7 +173,7 @@
// First pass: start the file reads concurrently.
for _, ref := range r.refs {
- posn := r.fset.Position(ref.Pos())
+ posn := r.qpos.fset.Position(ref.Pos())
fi := fileinfosByName[posn.Filename]
if fi == nil {
fi = &fileinfo{data: make(chan []byte)}
diff --git a/oracle/testdata/src/referrers/main.go b/oracle/testdata/src/referrers/main.go
index f551ee0..968c138 100644
--- a/oracle/testdata/src/referrers/main.go
+++ b/oracle/testdata/src/referrers/main.go
@@ -6,7 +6,7 @@
import "lib"
-type s struct {
+type s struct { // @referrers ref-type " s "
f int
}
diff --git a/oracle/testdata/src/referrers/main.golden b/oracle/testdata/src/referrers/main.golden
index 06cab17..3e8629b 100644
--- a/oracle/testdata/src/referrers/main.golden
+++ b/oracle/testdata/src/referrers/main.golden
@@ -1,3 +1,8 @@
+-------- @referrers ref-type --------
+2 references to type s struct{f int}
+ _ = s{}.f // @referrers ref-field "f"
+ var s2 s
+
-------- @referrers ref-package --------
2 references to package lib
var v lib.Type = lib.Const // @referrers ref-package "lib"