tools: golang.org/x/tools/cmd/guru/serial Index | Files

package serial

import "golang.org/x/tools/cmd/guru/serial"

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.

Index

Package Files

serial.go

type CallStack Uses

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 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 Callee Uses

type Callee struct {
    Name string `json:"name"` // full name of called function
    Pos  string `json:"pos"`  // location of called function
}

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 Uses

type Callees struct {
    Pos     string    `json:"pos"`  // location of selected call site
    Desc    string    `json:"desc"` // description of call site
    Callees []*Callee `json:"callees"`
}

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 Caller Uses

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 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 Definition Uses

type Definition struct {
    ObjPos string `json:"objpos,omitempty"` // location of the definition
    Desc   string `json:"desc"`             // description of the denoted object
}

A Definition is the result of a 'definition' query.

type Describe Uses

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 Describe is the result of a 'describe' query. It may contain an element describing the selected semantic entity in detail.

type DescribeMember Uses

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)
}

type DescribeMethod Uses

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
}

type DescribePackage Uses

type DescribePackage struct {
    Path    string            `json:"path"`              // import path of the package
    Members []*DescribeMember `json:"members,omitempty"` // accessible members of the package
}

A DescribePackage is the additional result of a 'describe' if the selection indicates a package.

type DescribeType Uses

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
}

A DescribeType is the additional result of a 'describe' query if the selection indicates a type.

type DescribeValue Uses

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
}

A DescribeValue is the additional result of a 'describe' query if the selection indicates a value or expression.

type FreeVar Uses

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
}

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 Implements Uses

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 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 ImplementsType Uses

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
}

An ImplementsType describes a single type as part of an 'implements' query.

type Peers Uses

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 Peers is the result of a 'peers' query. If Allocs is empty, the selected channel can't point to anything.

type PointsTo Uses

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 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 PointsToLabel Uses

type PointsToLabel struct {
    Pos  string `json:"pos"`  // location of syntax that allocated the object
    Desc string `json:"desc"` // description of the label
}

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 Ref Uses

type Ref struct {
    Pos  string `json:"pos"`  // location of all references
    Text string `json:"text"` // text of the referring line
}

A "referrers" query emits a ReferrersInitial object followed by zero or more ReferrersPackage objects, one per package that contains a reference.

type ReferrersInitial Uses

type ReferrersInitial struct {
    ObjPos string `json:"objpos,omitempty"` // location of the definition
    Desc   string `json:"desc"`             // description of the denoted object
}

A "referrers" query emits a ReferrersInitial object followed by zero or more ReferrersPackage objects, one per package that contains a reference.

type ReferrersPackage Uses

type ReferrersPackage struct {
    Package string `json:"package"`
    Refs    []Ref  `json:"refs"` // non-empty list of references within this package
}

A "referrers" query emits a ReferrersInitial object followed by zero or more ReferrersPackage objects, one per package that contains a reference.

type SyntaxNode Uses

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 SyntaxNode is one element of a stack of enclosing syntax nodes in a "what" query.

type What Uses

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 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 WhichErrs Uses

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
}

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 WhichErrsType Uses

type WhichErrsType struct {
    Type     string `json:"type,omitempty"`
    Position string `json:"position,omitempty"`
}

Package serial is imported by 8 packages. Updated 2017-10-16. Refresh now. Tools for package owners.