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 FilenameHandler
- 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 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 )
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 src.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 src.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 *src.PosBase, src io.Reader, errh ErrorHandler, pragh PragmaHandler, fileh FilenameHandler, 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.
If fileh != nil, it is called to process each filename encountered in //line directives.
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 FilenameHandler ¶
A FilenameHandler is used to process each filename encountered in //line directives. The returned value is used as the absolute filename.
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() src.Pos // contains filtered or unexported methods }
type Operator ¶
type Operator uint
const ( 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 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 src.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 src.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