From 9c112540f669f904924364d9da2f6c7af50d26ca Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Fri, 15 Nov 2013 12:35:11 -0500 Subject: [PATCH] go.tools/oracle: use SelectionString when printing methods. R=gri, crawshaw, gri CC=golang-dev https://golang.org/cl/26900043 --- oracle/describe.go | 18 +++++++++--------- oracle/oracle.go | 5 +++++ oracle/testdata/src/main/describe-json.golden | 8 ++++---- oracle/testdata/src/main/describe.golden | 8 ++++---- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/oracle/describe.go b/oracle/describe.go index f03486cb..5607a9c6 100644 --- a/oracle/describe.go +++ b/oracle/describe.go @@ -670,7 +670,7 @@ func (r *describeTypeResult) display(printf printfFunc) { if len(r.methods) > 0 { printf(r.node, "Method set:") for _, meth := range r.methods { - printf(meth.Obj(), "\t%s", meth) + printf(meth.Obj(), "\t%s", r.qpos.SelectionString(meth)) } } else { printf(r.node, "No methods.") @@ -692,7 +692,7 @@ func (r *describeTypeResult) toSerial(res *serial.Result, fset *token.FileSet) { Type: r.qpos.TypeString(r.typ), NamePos: namePos, NameDef: nameDef, - Methods: methodsToSerial(r.methods, fset), + Methods: methodsToSerial(r.qpos.info.Pkg, r.methods, fset), }, } } @@ -790,10 +790,10 @@ func formatMember(obj types.Object, maxname int) string { fmt.Fprintf(&buf, "%-5s %-*s", tokenOf(obj), maxname, obj.Name()) switch obj := obj.(type) { case *types.Const: - fmt.Fprintf(&buf, " %s = %s", obj.Type(), obj.Val().String()) + fmt.Fprintf(&buf, " %s = %s", types.TypeString(obj.Pkg(), obj.Type()), obj.Val().String()) case *types.Func: - fmt.Fprintf(&buf, " %s", obj.Type()) + fmt.Fprintf(&buf, " %s", types.TypeString(obj.Pkg(), obj.Type())) case *types.TypeName: // Abbreviate long aggregate type names. @@ -809,13 +809,13 @@ func formatMember(obj types.Object, maxname int) string { } } if abbrev == "" { - fmt.Fprintf(&buf, " %s", obj.Type().Underlying()) + fmt.Fprintf(&buf, " %s", types.TypeString(obj.Pkg(), obj.Type().Underlying())) } else { fmt.Fprintf(&buf, " %s", abbrev) } case *types.Var: - fmt.Fprintf(&buf, " %s", obj.Type()) + fmt.Fprintf(&buf, " %s", types.TypeString(obj.Pkg(), obj.Type())) } return buf.String() } @@ -837,7 +837,7 @@ func (r *describePackageResult) toSerial(res *serial.Result, fset *token.FileSet Value: val, Pos: fset.Position(mem.obj.Pos()).String(), Kind: tokenOf(mem.obj), - Methods: methodsToSerial(mem.methods, fset), + Methods: methodsToSerial(r.pkg, mem.methods, fset), }) } res.Describe = &serial.Describe{ @@ -935,11 +935,11 @@ func isAccessibleFrom(obj types.Object, pkg *types.Package) bool { return ast.IsExported(obj.Name()) || obj.Pkg() == pkg } -func methodsToSerial(methods []*types.Selection, fset *token.FileSet) []serial.DescribeMethod { +func methodsToSerial(this *types.Package, methods []*types.Selection, fset *token.FileSet) []serial.DescribeMethod { var jmethods []serial.DescribeMethod for _, meth := range methods { jmethods = append(jmethods, serial.DescribeMethod{ - Name: meth.String(), + Name: types.SelectionString(this, meth), Pos: fset.Position(meth.Obj().Pos()).String(), }) } diff --git a/oracle/oracle.go b/oracle/oracle.go index 8dffbd69..aa85fe34 100644 --- a/oracle/oracle.go +++ b/oracle/oracle.go @@ -120,6 +120,11 @@ func (qpos *QueryPos) ObjectString(obj types.Object) string { return types.ObjectString(qpos.info.Pkg, obj) } +// SelectionString prints selection sel relative to the query position. +func (qpos *QueryPos) SelectionString(sel *types.Selection) string { + return types.SelectionString(qpos.info.Pkg, sel) +} + // A Result encapsulates the result of an oracle.Query. type Result struct { fset *token.FileSet diff --git a/oracle/testdata/src/main/describe-json.golden b/oracle/testdata/src/main/describe-json.golden index 702726d4..230c255f 100644 --- a/oracle/testdata/src/main/describe-json.golden +++ b/oracle/testdata/src/main/describe-json.golden @@ -15,7 +15,7 @@ "kind": "type", "methods": [ { - "name": "method (describe.C) f()", + "name": "method (C) f()", "pos": "testdata/src/main/describe-json.go:30:12" } ] @@ -27,7 +27,7 @@ "kind": "type", "methods": [ { - "name": "method (*describe.D) f()", + "name": "method (*D) f()", "pos": "testdata/src/main/describe-json.go:31:13" } ] @@ -39,7 +39,7 @@ "kind": "type", "methods": [ { - "name": "method (describe.I) f()", + "name": "method (I) f()", "pos": "testdata/src/main/describe-json.go:24:2" } ] @@ -142,7 +142,7 @@ "namedef": "int", "methods": [ { - "name": "method (describe.C) f()", + "name": "method (C) f()", "pos": "testdata/src/main/describe-json.go:30:12" } ] diff --git a/oracle/testdata/src/main/describe.golden b/oracle/testdata/src/main/describe.golden index 4aa8a975..41230c0e 100644 --- a/oracle/testdata/src/main/describe.golden +++ b/oracle/testdata/src/main/describe.golden @@ -12,7 +12,7 @@ definition of package "describe" var global *string func main func() const pi untyped float = 3141/1000 - const pie describe.cake = 1768225803696341/562949953421312 + const pie cake = 1768225803696341/562949953421312 -------- @describe type-ref-builtin -------- reference to built-in type float64 @@ -53,13 +53,13 @@ defined here reference to type D defined as struct{} Method set: - method (describe.D) f() + method (D) f() -------- @describe type-I -------- reference to type I defined as interface{f()} Method set: - method (describe.I) f() + method (I) f() -------- @describe func-ref-d.f -------- reference to method func (D).f() @@ -188,7 +188,7 @@ no points-to information: PTA did not encounter this expression (dead code?) -------- @describe def-iface-I -------- definition of type I Method set: - method (describe.I) f() + method (I) f() -------- @describe def-imethod-I.f -------- type interface{f()}