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