mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
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:
parent
ee9a07d373
commit
837a81a1b2
@ -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)}
|
||||
|
2
oracle/testdata/src/referrers/main.go
vendored
2
oracle/testdata/src/referrers/main.go
vendored
@ -6,7 +6,7 @@ package main
|
||||
|
||||
import "lib"
|
||||
|
||||
type s struct {
|
||||
type s struct { // @referrers ref-type " s "
|
||||
f int
|
||||
}
|
||||
|
||||
|
5
oracle/testdata/src/referrers/main.golden
vendored
5
oracle/testdata/src/referrers/main.golden
vendored
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user