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 lprog *loader.Program
var pass2 bool
var qpos *queryPos
for {
// Load/parse/type-check the program.
var err error
@ -44,7 +45,7 @@ func referrers(q *Query) error {
}
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 @@ func referrers(q *Query) error {
sort.Sort(byNamePos{q.Fset, refs})
q.result = &referrersResult{
fset: q.Fset,
qpos: qpos,
query: id,
obj: obj,
refs: refs,
@ -152,14 +153,14 @@ func (p byNamePos) Less(i, j int) bool {
}
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 @@ func (r *referrersResult) display(printf printfFunc) {
// 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)}

View File

@ -6,7 +6,7 @@ package main
import "lib"
type s struct {
type s struct { // @referrers ref-type " s "
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 --------
2 references to package lib
var v lib.Type = lib.Const // @referrers ref-package "lib"