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
- func Parse(base *src.PosBase, src io.Reader, errh ErrorHandler, pragh PragmaHandler, ...) (_ *File, first error)
- func ParseBytes(base *src.PosBase, src []byte, errh ErrorHandler, pragh PragmaHandler, ...) (*File, error)
- func ParseFile(filename string, errh ErrorHandler, pragh PragmaHandler, mode Mode) (*File, error)
- 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 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, 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 no correct package clause was found. The base argument is only used for position information.
If errh != nil, it is called with each error encountered, and Parse will process as much source as possible. If errh is nil, Parse will terminate immediately upon encountering an error.
If a PragmaHandler is provided, it is called with each pragma encountered.
The Mode argument is currently ignored.
func ParseBytes ¶
func ParseBytes(base *src.PosBase, src []byte, errh ErrorHandler, pragh PragmaHandler, mode Mode) (*File, error)
ParseBytes behaves like Parse but it reads the source from the []byte slice provided.
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() 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 //line and //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