From 837a81a1b21294ced895f2610fc258a487486c23 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Thu, 23 Apr 2015 15:45:31 -0400 Subject: [PATCH] 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 --- oracle/referrers.go | 11 ++++++----- oracle/testdata/src/referrers/main.go | 2 +- oracle/testdata/src/referrers/main.golden | 5 +++++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/oracle/referrers.go b/oracle/referrers.go index 893668b3..b805ba2c 100644 --- a/oracle/referrers.go +++ b/oracle/referrers.go @@ -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)} diff --git a/oracle/testdata/src/referrers/main.go b/oracle/testdata/src/referrers/main.go index f551ee01..968c1380 100644 --- a/oracle/testdata/src/referrers/main.go +++ b/oracle/testdata/src/referrers/main.go @@ -6,7 +6,7 @@ package main 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 06cab17b..3e8629b7 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"