Documentation ¶
Index ¶
- Constants
- Variables
- func Fdump(w io.Writer, n Node) (err error)
- func Fprint(w io.Writer, x Node, linebreaks bool) (n int, err error)
- func String(n Node) string
- type ArrayType
- type AssertExpr
- type AssignStmt
- type BadExpr
- type BasicLit
- type BlockStmt
- type BranchStmt
- type CallExpr
- type CallStmt
- type CaseClause
- type ChanDir
- type ChanType
- type CommClause
- type Comment
- type CommentKind
- type CompositeLit
- type ConstDecl
- type Decl
- type DeclStmt
- type DotsType
- type EmptyStmt
- type Error
- type ErrorHandler
- type Expr
- type ExprStmt
- type Field
- type File
- type ForStmt
- type FuncDecl
- type FuncLit
- type FuncType
- type Group
- type IfStmt
- type ImportDecl
- type IndexExpr
- type InterfaceType
- type KeyValueExpr
- type LabeledStmt
- type ListExpr
- type LitKind
- type MapType
- type Mode
- type Name
- type Node
- type Operation
- type Operator
- type ParenExpr
- type Pos
- type PosBase
- type Pragma
- type PragmaHandler
- type RangeClause
- type ReturnStmt
- type SelectStmt
- type SelectorExpr
- type SendStmt
- type SimpleStmt
- type SliceExpr
- type SliceType
- type Stmt
- type StructType
- type SwitchStmt
- type TypeDecl
- type TypeSwitchGuard
- type VarDecl
Constants ¶
const ( // for BranchStmt Break = _Break Continue = _Continue Fallthrough = _Fallthrough Goto = _Goto // for CallStmt Go = _Go Defer = _Defer )
const PosMax = 1 << 30
PosMax is the largest line or column value that can be represented without loss. Incoming values (arguments) larger than PosMax will be set to PosMax.
Variables ¶
var ImplicitOne = &BasicLit{Value: "1"}
We represent x++, x-- as assignments x += ImplicitOne, x -= ImplicitOne. ImplicitOne should not be used elsewhere.
Functions ¶
Types ¶
type ArrayType ¶
type ArrayType struct { // TODO(gri) consider using Name{"..."} instead of nil (permits attaching of comments) Len Expr // nil means Len is ... Elem Expr // contains filtered or unexported fields }
[Len]Elem
type AssertExpr ¶
type AssertExpr struct { X Expr // TODO(gri) consider using Name{"..."} instead of nil (permits attaching of comments) Type Expr // contains filtered or unexported fields }
X.(Type)
type AssignStmt ¶
type BadExpr ¶
type BadExpr struct {
// contains filtered or unexported fields
}
Placeholder for an expression that failed to parse correctly and where we can't provide a better node.
type BranchStmt ¶
type BranchStmt struct { Tok token // Break, Continue, Fallthrough, or Goto Label *Name // Target is the continuation of the control flow after executing // the branch; it is computed by the parser if CheckBranches is set. // Target is a *LabeledStmt for gotos, and a *SwitchStmt, *SelectStmt, // or *ForStmt for breaks and continues, depending on the context of // the branch. Target is not set for fallthroughs. Target Stmt // contains filtered or unexported fields }
type CallExpr ¶
type CallExpr struct { Fun Expr ArgList []Expr // nil means no arguments HasDots bool // last argument is followed by ... // contains filtered or unexported fields }
Fun(ArgList[0], ArgList[1], ...)
type CallStmt ¶
type CallStmt struct { Tok token // Go or Defer Call *CallExpr // contains filtered or unexported fields }
type CaseClause ¶
type ChanType ¶
type ChanType struct { Dir ChanDir // 0 means no direction Elem Expr // contains filtered or unexported fields }
chan Elem
<-chan Elem chan<- Elem
type CommClause ¶
type CommClause struct { Comm SimpleStmt // send or receive stmt; nil means default clause Body []Stmt Colon Pos // contains filtered or unexported fields }
type Comment ¶
type Comment struct { Kind CommentKind Text string Next *Comment }
type CommentKind ¶
type CommentKind uint
TODO(gri) Consider renaming to CommentPos, CommentPlacement, etc.
Kind = Above doesn't make much sense.
const ( Above CommentKind = iota Below Left Right )
type CompositeLit ¶
type CompositeLit struct { Type Expr // nil means no literal type ElemList []Expr NKeys int // number of elements with keys Rbrace Pos // contains filtered or unexported fields }
Type { ElemList[0], ElemList[1], ... }
type ConstDecl ¶
type ConstDecl struct { NameList []*Name Type Expr // nil means no type Values Expr // nil means no values Group *Group // nil means not part of a group // contains filtered or unexported fields }
NameList NameList = Values NameList Type = Values
type DotsType ¶
type DotsType struct { Elem Expr // contains filtered or unexported fields }
...Elem
type ErrorHandler ¶
type ErrorHandler func(err error)
An ErrorHandler is called for each error encountered reading a .go file.
type Field ¶
type Field struct { Name *Name // nil means anonymous field/parameter (structs/parameters), or embedded interface (interfaces) Type Expr // field names declared in a list share the same Type (identical pointers) // contains filtered or unexported fields }
Name Type
Type
type File ¶
type File struct { PkgName *Name DeclList []Decl Lines uint // contains filtered or unexported fields }
package PkgName; DeclList[0], DeclList[1], ...
func Parse ¶
func Parse(base *PosBase, src io.Reader, errh ErrorHandler, pragh PragmaHandler, mode Mode) (_ *File, first error)
Parse parses a single Go source file from src and returns the corresponding syntax tree. If there are errors, Parse will return the first error found, and a possibly partially constructed syntax tree, or nil.
If errh != nil, it is called with each error encountered, and Parse will process as much source as possible. In this case, the returned syntax tree is only nil if no correct package clause was found. If errh is nil, Parse will terminate immediately upon encountering the first error, and the returned syntax tree is nil.
If pragh != nil, it is called with each pragma encountered.
func ParseFile ¶
func ParseFile(filename string, errh ErrorHandler, pragh PragmaHandler, mode Mode) (*File, error)
ParseFile behaves like Parse but it reads the source from the named file.
type ForStmt ¶
type ForStmt struct { Init SimpleStmt // incl. *RangeClause Cond Expr Post SimpleStmt Body *BlockStmt // contains filtered or unexported fields }
type FuncDecl ¶
type FuncDecl struct { Attr map[string]bool // go:attr map Recv *Field // nil means regular function Name *Name Type *FuncType Body *BlockStmt // nil means no body (forward declaration) Pragma Pragma // TODO(mdempsky): Cleaner solution. // contains filtered or unexported fields }
func Name Type { Body } func Name Type func Receiver Name Type { Body } func Receiver Name Type
type Group ¶
type Group struct {
// contains filtered or unexported fields
}
All declarations belonging to the same group point to the same Group node.
type IfStmt ¶
type IfStmt struct { Init SimpleStmt Cond Expr Then *BlockStmt Else Stmt // either *IfStmt or *BlockStmt // contains filtered or unexported fields }
type ImportDecl ¶
type ImportDecl struct { LocalPkgName *Name // including "."; nil means no rename present Path *BasicLit Group *Group // nil means not part of a group // contains filtered or unexported fields }
Path
LocalPkgName Path
type InterfaceType ¶
type InterfaceType struct { MethodList []*Field // contains filtered or unexported fields }
interface { MethodList[0]; MethodList[1]; ... }
type KeyValueExpr ¶
type KeyValueExpr struct {
Key, Value Expr
// contains filtered or unexported fields
}
Key: Value
type LabeledStmt ¶
type ListExpr ¶
type ListExpr struct { ElemList []Expr // contains filtered or unexported fields }
ElemList[0], ElemList[1], ...
type Node ¶
type Node interface { // Pos() returns the position associated with the node as follows: // 1) The position of a node representing a terminal syntax production // (Name, BasicLit, etc.) is the position of the respective production // in the source. // 2) The position of a node representing a non-terminal production // (IndexExpr, IfStmt, etc.) is the position of a token uniquely // associated with that production; usually the left-most one // ('[' for IndexExpr, 'if' for IfStmt, etc.) Pos() Pos // contains filtered or unexported methods }
type Operator ¶
type Operator uint
const ( // Def is the : in := Def Operator // : Not // ! Recv // <- // precOrOr OrOr // || // precAndAnd AndAnd // && // precCmp Eql // == Neq // != Lss // < Leq // <= Gtr // > Geq // >= // precAdd Add // + Sub // - Or // | Xor // ^ // precMul Mul // * Div // / Rem // % And // & AndNot // &^ Shl // << Shr // >> )
type Pos ¶
type Pos struct {
// contains filtered or unexported fields
}
A Pos represents an absolute (line, col) source position with a reference to position base for computing relative (to a file, or line directive) position information. Pos values are intentionally light-weight so that they can be created without too much concern about space use.
func (Pos) RelFilename ¶
type PosBase ¶
type PosBase struct {
// contains filtered or unexported fields
}
A PosBase represents the base for relative position information: At position pos, the relative position is filename:line:col.
func NewFileBase ¶
NewFileBase returns a new PosBase for the given filename. A file PosBase's position is relative to itself, with the position being filename:1:1.
func NewLineBase ¶
NewLineBase returns a new PosBase for a line directive "line filename:line:col" relative to pos, which is the position of the character immediately following the comment containing the line directive. For a directive in a line comment, that position is the beginning of the next line (i.e., the newline character belongs to the line comment).
func (*PosBase) IsFileBase ¶
type Pragma ¶
type Pragma uint16
A Pragma value is a set of flags that augment a function or type declaration. Callers may assign meaning to the flags as appropriate.
type PragmaHandler ¶
A PragmaHandler is used to process //go: directives as they're scanned. The returned Pragma value will be unioned into the next FuncDecl node.
type RangeClause ¶
type ReturnStmt ¶
type ReturnStmt struct { Results Expr // nil means no explicit return values // contains filtered or unexported fields }
type SelectStmt ¶
type SelectStmt struct { Body []*CommClause Rbrace Pos // contains filtered or unexported fields }
type SelectorExpr ¶
X.Sel
type SendStmt ¶
type SendStmt struct {
Chan, Value Expr // Chan <- Value
// contains filtered or unexported fields
}
type SimpleStmt ¶
type SimpleStmt interface { Stmt // contains filtered or unexported methods }
type SliceExpr ¶
type SliceExpr struct { X Expr Index [3]Expr // Full indicates whether this is a simple or full slice expression. // In a valid AST, this is equivalent to Index[2] != nil. // TODO(mdempsky): This is only needed to report the "3-index // slice of string" error when Index[2] is missing. Full bool // contains filtered or unexported fields }
X[Index[0] : Index[1] : Index[2]]
type SliceType ¶
type SliceType struct { Elem Expr // contains filtered or unexported fields }
[]Elem
type StructType ¶
type StructType struct { FieldList []*Field TagList []*BasicLit // i >= len(TagList) || TagList[i] == nil means no tag for field i // contains filtered or unexported fields }
struct { FieldList[0] TagList[0]; FieldList[1] TagList[1]; ... }
type SwitchStmt ¶
type SwitchStmt struct { Init SimpleStmt Tag Expr Body []*CaseClause Rbrace Pos // contains filtered or unexported fields }
type TypeDecl ¶
type TypeDecl struct { Name *Name Alias bool Type Expr Group *Group // nil means not part of a group Pragma Pragma // contains filtered or unexported fields }
Name Type