+++ /dev/null
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package serial defines the guru's schema for -json output.
-//
-// The output of a guru query is a stream of one or more JSON objects.
-// This table shows the types of objects in the result stream for each
-// query type.
-//
-// Query Result stream
-// ----- -------------
-// callees Callees
-// callers Caller ...
-// callstack CallStack
-// definition Definition
-// describe Describe
-// freevars FreeVar ...
-// implements Implements
-// peers Peers
-// pointsto PointsTo ...
-// referrers ReferrersInitial ReferrersPackage ...
-// what What
-// whicherrs WhichErrs
-//
-// All 'pos' strings in the output are of the form "file:line:col",
-// where line is the 1-based line number and col is the 1-based byte index.
-package serial
-
-// A Peers is the result of a 'peers' query.
-// If Allocs is empty, the selected channel can't point to anything.
-type Peers struct {
- Pos string `json:"pos"` // location of the selected channel op (<-)
- Type string `json:"type"` // type of the selected channel
- Allocs []string `json:"allocs,omitempty"` // locations of aliased make(chan) ops
- Sends []string `json:"sends,omitempty"` // locations of aliased ch<-x ops
- Receives []string `json:"receives,omitempty"` // locations of aliased <-ch ops
- Closes []string `json:"closes,omitempty"` // locations of aliased close(ch) ops
-}
-
-// A "referrers" query emits a ReferrersInitial object followed by zero or
-// more ReferrersPackage objects, one per package that contains a reference.
-type (
- ReferrersInitial struct {
- ObjPos string `json:"objpos,omitempty"` // location of the definition
- Desc string `json:"desc"` // description of the denoted object
- }
- ReferrersPackage struct {
- Package string `json:"package"`
- Refs []Ref `json:"refs"` // non-empty list of references within this package
- }
- Ref struct {
- Pos string `json:"pos"` // location of all references
- Text string `json:"text"` // text of the referring line
- }
-)
-
-// A Definition is the result of a 'definition' query.
-type Definition struct {
- ObjPos string `json:"objpos,omitempty"` // location of the definition
- Desc string `json:"desc"` // description of the denoted object
-}
-
-// A Callees is the result of a 'callees' query.
-//
-// Callees is nonempty unless the call was a dynamic call on a
-// provably nil func or interface value.
-type (
- Callees struct {
- Pos string `json:"pos"` // location of selected call site
- Desc string `json:"desc"` // description of call site
- Callees []*Callee `json:"callees"`
- }
- Callee struct {
- Name string `json:"name"` // full name of called function
- Pos string `json:"pos"` // location of called function
- }
-)
-
-// A Caller is one element of the slice returned by a 'callers' query.
-// (Callstack also contains a similar slice.)
-//
-// The root of the callgraph has an unspecified "Caller" string.
-type Caller struct {
- Pos string `json:"pos,omitempty"` // location of the calling function
- Desc string `json:"desc"` // description of call site
- Caller string `json:"caller"` // full name of calling function
-}
-
-// A CallStack is the result of a 'callstack' query.
-// It indicates an arbitrary path from the root of the callgraph to
-// the query function.
-//
-// If the Callers slice is empty, the function was unreachable in this
-// analysis scope.
-type CallStack struct {
- Pos string `json:"pos"` // location of the selected function
- Target string `json:"target"` // the selected function
- Callers []Caller `json:"callers"` // enclosing calls, innermost first.
-}
-
-// A FreeVar is one element of the slice returned by a 'freevars'
-// query. Each one identifies an expression referencing a local
-// identifier defined outside the selected region.
-type FreeVar struct {
- Pos string `json:"pos"` // location of the identifier's definition
- Kind string `json:"kind"` // one of {var,func,type,const,label}
- Ref string `json:"ref"` // referring expression (e.g. "x" or "x.y.z")
- Type string `json:"type"` // type of the expression
-}
-
-// An Implements contains the result of an 'implements' query.
-// It describes the queried type, the set of named non-empty interface
-// types to which it is assignable, and the set of named/*named types
-// (concrete or non-empty interface) which may be assigned to it.
-//
-type Implements struct {
- T ImplementsType `json:"type,omitempty"` // the queried type
- AssignableTo []ImplementsType `json:"to,omitempty"` // types assignable to T
- AssignableFrom []ImplementsType `json:"from,omitempty"` // interface types assignable from T
- AssignableFromPtr []ImplementsType `json:"fromptr,omitempty"` // interface types assignable only from *T
-
- // The following fields are set only if the query was a method.
- // Assignable{To,From,FromPtr}Method[i] is the corresponding
- // method of type Assignable{To,From,FromPtr}[i], or blank
- // {"",""} if that type lacks the method.
- Method *DescribeMethod `json:"method,omitempty"` // the queried method
- AssignableToMethod []DescribeMethod `json:"to_method,omitempty"`
- AssignableFromMethod []DescribeMethod `json:"from_method,omitempty"`
- AssignableFromPtrMethod []DescribeMethod `json:"fromptr_method,omitempty"`
-}
-
-// An ImplementsType describes a single type as part of an 'implements' query.
-type ImplementsType struct {
- Name string `json:"name"` // full name of the type
- Pos string `json:"pos"` // location of its definition
- Kind string `json:"kind"` // "basic", "array", etc
-}
-
-// A SyntaxNode is one element of a stack of enclosing syntax nodes in
-// a "what" query.
-type SyntaxNode struct {
- Description string `json:"desc"` // description of syntax tree
- Start int `json:"start"` // start byte offset, 0-based
- End int `json:"end"` // end byte offset
-}
-
-// A What is the result of the "what" query, which quickly identifies
-// the selection, parsing only a single file. It is intended for use
-// in low-latency GUIs.
-type What struct {
- Enclosing []SyntaxNode `json:"enclosing"` // enclosing nodes of syntax tree
- Modes []string `json:"modes"` // query modes enabled for this selection.
- SrcDir string `json:"srcdir,omitempty"` // $GOROOT src directory containing queried package
- ImportPath string `json:"importpath,omitempty"` // import path of queried package
- Object string `json:"object,omitempty"` // name of identified object, if any
- SameIDs []string `json:"sameids,omitempty"` // locations of references to same object
-}
-
-// A PointsToLabel describes a pointer analysis label.
-//
-// A "label" is an object that may be pointed to by a pointer, map,
-// channel, 'func', slice or interface. Labels include:
-// - functions
-// - globals
-// - arrays created by literals (e.g. []byte("foo")) and conversions ([]byte(s))
-// - stack- and heap-allocated variables (including composite literals)
-// - arrays allocated by append()
-// - channels, maps and arrays created by make()
-// - and their subelements, e.g. "alloc.y[*].z"
-//
-type PointsToLabel struct {
- Pos string `json:"pos"` // location of syntax that allocated the object
- Desc string `json:"desc"` // description of the label
-}
-
-// A PointsTo is one element of the result of a 'pointsto' query on an
-// expression. It describes a single pointer: its type and the set of
-// "labels" it points to.
-//
-// If the pointer is of interface type, it will have one PTS entry
-// describing each concrete type that it may contain. For each
-// concrete type that is a pointer, the PTS entry describes the labels
-// it may point to. The same is true for reflect.Values, except the
-// dynamic types needn't be concrete.
-//
-type PointsTo struct {
- Type string `json:"type"` // (concrete) type of the pointer
- NamePos string `json:"namepos,omitempty"` // location of type defn, if Named
- Labels []PointsToLabel `json:"labels,omitempty"` // pointed-to objects
-}
-
-// A DescribeValue is the additional result of a 'describe' query
-// if the selection indicates a value or expression.
-type DescribeValue struct {
- Type string `json:"type"` // type of the expression
- Value string `json:"value,omitempty"` // value of the expression, if constant
- ObjPos string `json:"objpos,omitempty"` // location of the definition, if an Ident
- TypesPos []Definition `json:"typespos,omitempty"` // location of the named types, that type consist of
-}
-
-type DescribeMethod struct {
- Name string `json:"name"` // method name, as defined by types.Selection.String()
- Pos string `json:"pos"` // location of the method's definition
-}
-
-// A DescribeType is the additional result of a 'describe' query
-// if the selection indicates a type.
-type DescribeType struct {
- Type string `json:"type"` // the string form of the type
- NamePos string `json:"namepos,omitempty"` // location of definition of type, if named
- NameDef string `json:"namedef,omitempty"` // underlying definition of type, if named
- Methods []DescribeMethod `json:"methods,omitempty"` // methods of the type
-}
-
-type DescribeMember struct {
- Name string `json:"name"` // name of member
- Type string `json:"type,omitempty"` // type of member (underlying, if 'type')
- Value string `json:"value,omitempty"` // value of member (if 'const')
- Pos string `json:"pos"` // location of definition of member
- Kind string `json:"kind"` // one of {var,const,func,type}
- Methods []DescribeMethod `json:"methods,omitempty"` // methods (if member is a type)
-}
-
-// A DescribePackage is the additional result of a 'describe' if
-// the selection indicates a package.
-type DescribePackage struct {
- Path string `json:"path"` // import path of the package
- Members []*DescribeMember `json:"members,omitempty"` // accessible members of the package
-}
-
-// A Describe is the result of a 'describe' query.
-// It may contain an element describing the selected semantic entity
-// in detail.
-type Describe struct {
- Desc string `json:"desc"` // description of the selected syntax node
- Pos string `json:"pos"` // location of the selected syntax node
- Detail string `json:"detail,omitempty"` // one of {package, type, value}, or "".
-
- // At most one of the following fields is populated:
- // the one specified by 'detail'.
- Package *DescribePackage `json:"package,omitempty"`
- Type *DescribeType `json:"type,omitempty"`
- Value *DescribeValue `json:"value,omitempty"`
-}
-
-// A WhichErrs is the result of a 'whicherrs' query.
-// It contains the position of the queried error and the possible globals,
-// constants, and types it may point to.
-type WhichErrs struct {
- ErrPos string `json:"errpos,omitempty"` // location of queried error
- Globals []string `json:"globals,omitempty"` // locations of globals
- Constants []string `json:"constants,omitempty"` // locations of constants
- Types []WhichErrsType `json:"types,omitempty"` // Types
-}
-
-type WhichErrsType struct {
- Type string `json:"type,omitempty"`
- Position string `json:"position,omitempty"`
-}