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>
This commit is contained in:
Alan Donovan 2015-04-23 15:45:31 -04:00
parent ee9a07d373
commit 837a81a1b2
3 changed files with 12 additions and 6 deletions

View File

@ -35,6 +35,7 @@ func referrers(q *Query) error {
var obj types.Object var obj types.Object
var lprog *loader.Program var lprog *loader.Program
var pass2 bool var pass2 bool
var qpos *queryPos
for { for {
// Load/parse/type-check the program. // Load/parse/type-check the program.
var err error var err error
@ -44,7 +45,7 @@ func referrers(q *Query) error {
} }
q.Fset = lprog.Fset q.Fset = lprog.Fset
qpos, err := parseQueryPos(lprog, q.Pos, false) qpos, err = parseQueryPos(lprog, q.Pos, false)
if err != nil { if err != nil {
return err return err
} }
@ -104,7 +105,7 @@ func referrers(q *Query) error {
sort.Sort(byNamePos{q.Fset, refs}) sort.Sort(byNamePos{q.Fset, refs})
q.result = &referrersResult{ q.result = &referrersResult{
fset: q.Fset, qpos: qpos,
query: id, query: id,
obj: obj, obj: obj,
refs: refs, refs: refs,
@ -152,14 +153,14 @@ func (p byNamePos) Less(i, j int) bool {
} }
type referrersResult struct { type referrersResult struct {
fset *token.FileSet qpos *queryPos
query *ast.Ident // identifier of query query *ast.Ident // identifier of query
obj types.Object // object it denotes obj types.Object // object it denotes
refs []*ast.Ident // set of all other references to it refs []*ast.Ident // set of all other references to it
} }
func (r *referrersResult) display(printf printfFunc) { 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. // Show referring lines, like grep.
type fileinfo struct { type fileinfo struct {
@ -172,7 +173,7 @@ func (r *referrersResult) display(printf printfFunc) {
// First pass: start the file reads concurrently. // First pass: start the file reads concurrently.
for _, ref := range r.refs { for _, ref := range r.refs {
posn := r.fset.Position(ref.Pos()) posn := r.qpos.fset.Position(ref.Pos())
fi := fileinfosByName[posn.Filename] fi := fileinfosByName[posn.Filename]
if fi == nil { if fi == nil {
fi = &fileinfo{data: make(chan []byte)} fi = &fileinfo{data: make(chan []byte)}

View File

@ -6,7 +6,7 @@ package main
import "lib" import "lib"
type s struct { type s struct { // @referrers ref-type " s "
f int f int
} }

View File

@ -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 -------- -------- @referrers ref-package --------
2 references to package lib 2 references to package lib
var v lib.Type = lib.Const // @referrers ref-package "lib" var v lib.Type = lib.Const // @referrers ref-package "lib"