Documentation ¶
Overview ¶
Package ast declares the types used to represent the syntax tree for Flux source code.
Index ¶
- Variables
- func Format(n Node) string
- func Walk(v Visitor, node Node)
- type ArrayExpression
- type BaseNode
- type BinaryExpression
- type Block
- type BooleanLiteral
- type CallExpression
- type ConditionalExpression
- type DateTimeLiteral
- type Duration
- type DurationLiteral
- type Expression
- type ExpressionStatement
- type FloatLiteral
- type FunctionExpression
- type Identifier
- type ImportDeclaration
- type IndexExpression
- type IntegerLiteral
- type Literal
- type LogicalExpression
- type LogicalOperatorKind
- type MemberExpression
- type Node
- type ObjectExpression
- type OperatorKind
- type OptionStatement
- type PackageClause
- type PipeExpression
- type PipeLiteral
- type Position
- type Program
- type Property
- type RegexpLiteral
- type ReturnStatement
- type SourceLocation
- type Statement
- type StringLiteral
- type UnaryExpression
- type UnsignedIntegerLiteral
- type VariableAssignment
- type Visitor
Constants ¶
This section is empty.
Variables ¶
var LogicalOperatorTokens = map[LogicalOperatorKind]string{ AndOperator: "and", OrOperator: "or", }
LogicalOperatorTokens converts LogicalOperatorKind to string
var OperatorTokens = map[OperatorKind]string{ MultiplicationOperator: "*", DivisionOperator: "/", AdditionOperator: "+", SubtractionOperator: "-", LessThanEqualOperator: "<=", LessThanOperator: "<", GreaterThanOperator: ">", GreaterThanEqualOperator: ">=", InOperator: "in", NotOperator: "not", NotEmptyOperator: "not empty", EmptyOperator: "empty", StartsWithOperator: "startswith", EqualOperator: "==", NotEqualOperator: "!=", RegexpMatchOperator: "=~", NotRegexpMatchOperator: "!~", }
OperatorTokens converts OperatorKind to string
Functions ¶
func Format ¶ added in v0.8.0
Returns a valid script for a given AST rooted at node `n`.
Formatting rules:
- In a list of statements, if two statements are of a different type (e.g. an `OptionStatement` followed by an `ExpressionStatement`), they are separated by a double newline.
- In a function call (or object definition), if the arguments (or properties) are more than 3, they are split into multiple lines.
func Walk ¶ added in v0.8.0
`Walk` recursively visits every children of a given `Node` given a `Visitor`. It performs a pre-order visit of the AST (visit parent node, then visit children from left to right). If a call to `Visit` for a node returns a nil visitor, walk stops and doesn't visit the AST rooted at that node, otherwise it uses the returned visitor to continue walking. Once Walk has finished visiting a node (the node itself and its children), it invokes `Done` on the node's visitor. NOTE: `Walk` doesn't visit `nil` nodes.
Types ¶
type ArrayExpression ¶
type ArrayExpression struct { BaseNode Elements []Expression `json:"elements"` }
ArrayExpression is used to create and directly specify the elements of an array object
func (*ArrayExpression) Copy ¶
func (e *ArrayExpression) Copy() Node
func (*ArrayExpression) MarshalJSON ¶
func (e *ArrayExpression) MarshalJSON() ([]byte, error)
func (*ArrayExpression) UnmarshalJSON ¶
func (e *ArrayExpression) UnmarshalJSON(data []byte) error
type BaseNode ¶
type BaseNode struct {
Loc *SourceLocation `json:"location,omitempty"`
}
BaseNode holds the attributes every expression or statement should have
func (BaseNode) Location ¶
func (b BaseNode) Location() SourceLocation
Location is the source location of the Node
type BinaryExpression ¶
type BinaryExpression struct { BaseNode Operator OperatorKind `json:"operator"` Left Expression `json:"left"` Right Expression `json:"right"` }
BinaryExpression use binary operators act on two operands in an expression. BinaryExpression includes relational and arithmatic operators
func (*BinaryExpression) Copy ¶
func (e *BinaryExpression) Copy() Node
func (*BinaryExpression) MarshalJSON ¶
func (e *BinaryExpression) MarshalJSON() ([]byte, error)
func (*BinaryExpression) UnmarshalJSON ¶
func (e *BinaryExpression) UnmarshalJSON(data []byte) error
type Block ¶ added in v0.8.0
Block is a set of statements
func (*Block) MarshalJSON ¶ added in v0.8.0
func (*Block) UnmarshalJSON ¶ added in v0.8.0
type BooleanLiteral ¶
BooleanLiteral represent boolean values
func (*BooleanLiteral) Copy ¶
func (l *BooleanLiteral) Copy() Node
func (*BooleanLiteral) MarshalJSON ¶
func (l *BooleanLiteral) MarshalJSON() ([]byte, error)
type CallExpression ¶
type CallExpression struct { BaseNode Callee Expression `json:"callee"` Arguments []Expression `json:"arguments,omitempty"` }
CallExpression represents a function all whose callee may be an Identifier or MemberExpression
func (*CallExpression) Copy ¶
func (e *CallExpression) Copy() Node
func (*CallExpression) MarshalJSON ¶
func (e *CallExpression) MarshalJSON() ([]byte, error)
func (*CallExpression) UnmarshalJSON ¶
func (e *CallExpression) UnmarshalJSON(data []byte) error
type ConditionalExpression ¶
type ConditionalExpression struct { BaseNode Test Expression `json:"test"` Alternate Expression `json:"alternate"` Consequent Expression `json:"consequent"` }
ConditionalExpression selects one of two expressions, `Alternate` or `Consequent` depending on a third, boolean, expression, `Test`.
func (*ConditionalExpression) Copy ¶
func (e *ConditionalExpression) Copy() Node
func (*ConditionalExpression) MarshalJSON ¶
func (e *ConditionalExpression) MarshalJSON() ([]byte, error)
func (*ConditionalExpression) Type ¶
func (*ConditionalExpression) Type() string
Type is the abstract type
func (*ConditionalExpression) UnmarshalJSON ¶
func (e *ConditionalExpression) UnmarshalJSON(data []byte) error
type DateTimeLiteral ¶
DateTimeLiteral represents an instant in time with nanosecond precision using the syntax of golang's RFC3339 Nanosecond variant TODO: this may be better as a class initialization
func (*DateTimeLiteral) Copy ¶
func (l *DateTimeLiteral) Copy() Node
func (*DateTimeLiteral) MarshalJSON ¶
func (l *DateTimeLiteral) MarshalJSON() ([]byte, error)
type Duration ¶
Duration is a pair consisting of length of time and the unit of time measured. It is the atomic unit from which all duration literals are composed.
type DurationLiteral ¶
DurationLiteral represents the elapsed time between two instants as an int64 nanosecond count with syntax of golang's time.Duration TODO: this may be better as a class initialization
func (*DurationLiteral) Copy ¶
func (l *DurationLiteral) Copy() Node
func (*DurationLiteral) MarshalJSON ¶
func (l *DurationLiteral) MarshalJSON() ([]byte, error)
type Expression ¶
type Expression interface { Node // contains filtered or unexported methods }
Expression represents an action that can be performed by InfluxDB that can be evaluated to a value.
type ExpressionStatement ¶
type ExpressionStatement struct { BaseNode Expression Expression `json:"expression"` }
ExpressionStatement may consist of an expression that does not return a value and is executed solely for its side-effects.
func (*ExpressionStatement) Copy ¶
func (s *ExpressionStatement) Copy() Node
func (*ExpressionStatement) MarshalJSON ¶
func (s *ExpressionStatement) MarshalJSON() ([]byte, error)
func (*ExpressionStatement) Type ¶
func (*ExpressionStatement) Type() string
Type is the abstract type
func (*ExpressionStatement) UnmarshalJSON ¶
func (s *ExpressionStatement) UnmarshalJSON(data []byte) error
type FloatLiteral ¶
FloatLiteral represent floating point numbers according to the double representations defined by the IEEE-754-1985
func (*FloatLiteral) Copy ¶
func (l *FloatLiteral) Copy() Node
func (*FloatLiteral) MarshalJSON ¶
func (l *FloatLiteral) MarshalJSON() ([]byte, error)
type FunctionExpression ¶ added in v0.8.0
type FunctionExpression struct { BaseNode Params []*Property `json:"params"` Body Node `json:"body"` }
func (*FunctionExpression) Copy ¶ added in v0.8.0
func (e *FunctionExpression) Copy() Node
func (*FunctionExpression) MarshalJSON ¶ added in v0.8.0
func (e *FunctionExpression) MarshalJSON() ([]byte, error)
func (*FunctionExpression) Type ¶ added in v0.8.0
func (*FunctionExpression) Type() string
Type is the abstract type
func (*FunctionExpression) UnmarshalJSON ¶ added in v0.8.0
func (e *FunctionExpression) UnmarshalJSON(data []byte) error
type Identifier ¶
Identifier represents a name that identifies a unique Node
func (*Identifier) Copy ¶
func (i *Identifier) Copy() Node
func (*Identifier) MarshalJSON ¶
func (i *Identifier) MarshalJSON() ([]byte, error)
type ImportDeclaration ¶ added in v0.8.0
type ImportDeclaration struct { BaseNode As *Identifier `json:"as"` Path *StringLiteral `json:"path"` }
ImportDeclaration declares a single import
func (*ImportDeclaration) Copy ¶ added in v0.8.0
func (d *ImportDeclaration) Copy() Node
func (*ImportDeclaration) MarshalJSON ¶ added in v0.8.0
func (d *ImportDeclaration) MarshalJSON() ([]byte, error)
func (*ImportDeclaration) Type ¶ added in v0.8.0
func (*ImportDeclaration) Type() string
Type is the abstract type
type IndexExpression ¶ added in v0.7.1
type IndexExpression struct { BaseNode Array Expression `json:"array"` Index Expression `json:"index"` }
IndexExpression represents indexing into an array
func (*IndexExpression) Copy ¶ added in v0.7.1
func (e *IndexExpression) Copy() Node
func (*IndexExpression) MarshalJSON ¶ added in v0.7.1
func (e *IndexExpression) MarshalJSON() ([]byte, error)
func (*IndexExpression) Type ¶ added in v0.7.1
func (*IndexExpression) Type() string
func (*IndexExpression) UnmarshalJSON ¶ added in v0.7.1
func (e *IndexExpression) UnmarshalJSON(data []byte) error
type IntegerLiteral ¶
IntegerLiteral represent integer numbers.
func (*IntegerLiteral) Copy ¶
func (l *IntegerLiteral) Copy() Node
func (*IntegerLiteral) MarshalJSON ¶
func (l *IntegerLiteral) MarshalJSON() ([]byte, error)
func (*IntegerLiteral) UnmarshalJSON ¶
func (l *IntegerLiteral) UnmarshalJSON(data []byte) error
type Literal ¶
type Literal interface { Expression // contains filtered or unexported methods }
Literal is the lexical form for a literal expression which defines boolean, string, integer, number, duration, datetime or field values. Literals must be coerced explicitly.
type LogicalExpression ¶
type LogicalExpression struct { BaseNode Operator LogicalOperatorKind `json:"operator"` Left Expression `json:"left"` Right Expression `json:"right"` }
LogicalExpression represent the rule conditions that collectively evaluate to either true or false. `or` expressions compute the disjunction of two boolean expressions and return boolean values. `and“ expressions compute the conjunction of two boolean expressions and return boolean values.
func (*LogicalExpression) Copy ¶
func (e *LogicalExpression) Copy() Node
func (*LogicalExpression) MarshalJSON ¶
func (e *LogicalExpression) MarshalJSON() ([]byte, error)
func (*LogicalExpression) UnmarshalJSON ¶
func (e *LogicalExpression) UnmarshalJSON(data []byte) error
type LogicalOperatorKind ¶
type LogicalOperatorKind int
LogicalOperatorKind are used with boolean (logical) values
const ( AndOperator LogicalOperatorKind OrOperator )
func LogicalOperatorLookup ¶
func LogicalOperatorLookup(op string) LogicalOperatorKind
LogicalOperatorLookup converts the operators to LogicalOperatorKind
func (LogicalOperatorKind) MarshalText ¶
func (o LogicalOperatorKind) MarshalText() ([]byte, error)
func (LogicalOperatorKind) String ¶
func (o LogicalOperatorKind) String() string
func (*LogicalOperatorKind) UnmarshalText ¶
func (o *LogicalOperatorKind) UnmarshalText(data []byte) error
type MemberExpression ¶
type MemberExpression struct { BaseNode Object Expression `json:"object"` Property Expression `json:"property"` }
MemberExpression represents calling a property of a CallExpression
func (*MemberExpression) Copy ¶
func (e *MemberExpression) Copy() Node
func (*MemberExpression) MarshalJSON ¶
func (e *MemberExpression) MarshalJSON() ([]byte, error)
func (*MemberExpression) UnmarshalJSON ¶
func (e *MemberExpression) UnmarshalJSON(data []byte) error
type Node ¶
type Node interface { Type() string // Type property is a string that contains the variant type of the node Location() SourceLocation Copy() Node // All node must support json marshalling json.Marshaler // contains filtered or unexported methods }
Node represents a node in the InfluxDB abstract syntax tree.
func UnmarshalNode ¶
type ObjectExpression ¶
ObjectExpression allows the declaration of an anonymous object within a declaration.
func (*ObjectExpression) Copy ¶
func (e *ObjectExpression) Copy() Node
func (*ObjectExpression) MarshalJSON ¶
func (e *ObjectExpression) MarshalJSON() ([]byte, error)
type OperatorKind ¶
type OperatorKind int
OperatorKind are Equality and Arithmatic operators. Result of evaluating an equality operator is always of type Boolean based on whether the comparison is true Arithmetic operators take numerical values (either literals or variables) as their operands
and return a single numerical value.
const ( MultiplicationOperator OperatorKind DivisionOperator AdditionOperator SubtractionOperator LessThanEqualOperator LessThanOperator GreaterThanEqualOperator GreaterThanOperator StartsWithOperator InOperator NotOperator NotEmptyOperator EmptyOperator EqualOperator NotEqualOperator RegexpMatchOperator NotRegexpMatchOperator )
func OperatorLookup ¶
func OperatorLookup(op string) OperatorKind
OperatorLookup converts the operators to OperatorKind
func (OperatorKind) MarshalText ¶
func (o OperatorKind) MarshalText() ([]byte, error)
func (OperatorKind) String ¶
func (o OperatorKind) String() string
func (*OperatorKind) UnmarshalText ¶
func (o *OperatorKind) UnmarshalText(data []byte) error
type OptionStatement ¶
type OptionStatement struct { BaseNode Assignment *VariableAssignment `json:"assignment"` }
OptionStatement syntactically is a single variable declaration
func (*OptionStatement) Copy ¶
func (s *OptionStatement) Copy() Node
Copy returns a deep copy of an OptionStatement Node
func (*OptionStatement) MarshalJSON ¶
func (s *OptionStatement) MarshalJSON() ([]byte, error)
type PackageClause ¶ added in v0.8.0
type PackageClause struct { BaseNode Name *Identifier `json:"name"` }
PackageClause defines the current package identifier.
func (*PackageClause) Copy ¶ added in v0.8.0
func (c *PackageClause) Copy() Node
func (*PackageClause) MarshalJSON ¶ added in v0.8.0
func (p *PackageClause) MarshalJSON() ([]byte, error)
func (*PackageClause) Type ¶ added in v0.8.0
func (*PackageClause) Type() string
Type is the abstract type
type PipeExpression ¶
type PipeExpression struct { BaseNode Argument Expression `json:"argument"` Call *CallExpression `json:"call"` }
func (*PipeExpression) Copy ¶
func (e *PipeExpression) Copy() Node
func (*PipeExpression) MarshalJSON ¶
func (e *PipeExpression) MarshalJSON() ([]byte, error)
func (*PipeExpression) UnmarshalJSON ¶
func (e *PipeExpression) UnmarshalJSON(data []byte) error
type PipeLiteral ¶
type PipeLiteral struct {
BaseNode
}
PipeLiteral represents an specialized literal value, indicating the left hand value of a pipe expression.
func (*PipeLiteral) Copy ¶
func (i *PipeLiteral) Copy() Node
func (*PipeLiteral) MarshalJSON ¶
func (l *PipeLiteral) MarshalJSON() ([]byte, error)
type Position ¶
type Position struct { Line int `json:"line"` // Line is the line in the source marked by this position Column int `json:"column"` // Column is the column in the source marked by this position }
Position represents a specific location in the source
type Program ¶
type Program struct { BaseNode Package *PackageClause `json:"package"` Imports []*ImportDeclaration `json:"imports"` Body []Statement `json:"body"` }
Program represents a complete program source tree
func (*Program) MarshalJSON ¶
func (*Program) UnmarshalJSON ¶
type Property ¶
type Property struct { BaseNode Key *Identifier `json:"key"` Value Expression `json:"value"` }
Property is the value associated with a key
func (*Property) MarshalJSON ¶
func (*Property) UnmarshalJSON ¶
type RegexpLiteral ¶
RegexpLiteral expressions begin and end with `/` and are regular expressions with syntax accepted by RE2
func (*RegexpLiteral) Copy ¶
func (l *RegexpLiteral) Copy() Node
func (*RegexpLiteral) MarshalJSON ¶
func (l *RegexpLiteral) MarshalJSON() ([]byte, error)
func (*RegexpLiteral) UnmarshalJSON ¶
func (l *RegexpLiteral) UnmarshalJSON(data []byte) error
type ReturnStatement ¶
type ReturnStatement struct { BaseNode Argument Expression `json:"argument"` }
ReturnStatement defines an Expression to return
func (*ReturnStatement) Copy ¶
func (s *ReturnStatement) Copy() Node
func (*ReturnStatement) MarshalJSON ¶
func (s *ReturnStatement) MarshalJSON() ([]byte, error)
func (*ReturnStatement) UnmarshalJSON ¶
func (s *ReturnStatement) UnmarshalJSON(data []byte) error
type SourceLocation ¶
type SourceLocation struct { Start Position `json:"start"` // Start is the location in the source the node starts End Position `json:"end"` // End is the location in the source the node ends Source string `json:"source,omitempty"` // Source is optional raw source }
SourceLocation represents the location of a node in the AST
func (SourceLocation) Less ¶
func (l SourceLocation) Less(o SourceLocation) bool
func (SourceLocation) String ¶
func (l SourceLocation) String() string
type Statement ¶
type Statement interface { Node // contains filtered or unexported methods }
Statement Perhaps we don't even want statements nor expression statements
type StringLiteral ¶
StringLiteral expressions begin and end with double quote marks.
func (*StringLiteral) Copy ¶
func (l *StringLiteral) Copy() Node
func (*StringLiteral) MarshalJSON ¶
func (l *StringLiteral) MarshalJSON() ([]byte, error)
func (*StringLiteral) Type ¶
func (*StringLiteral) Type() string
type UnaryExpression ¶
type UnaryExpression struct { BaseNode Operator OperatorKind `json:"operator"` Argument Expression `json:"argument"` }
UnaryExpression use operators act on a single operand in an expression.
func (*UnaryExpression) Copy ¶
func (e *UnaryExpression) Copy() Node
func (*UnaryExpression) MarshalJSON ¶
func (e *UnaryExpression) MarshalJSON() ([]byte, error)
func (*UnaryExpression) UnmarshalJSON ¶
func (e *UnaryExpression) UnmarshalJSON(data []byte) error
type UnsignedIntegerLiteral ¶
UnsignedIntegerLiteral represent integer numbers.
func (*UnsignedIntegerLiteral) Copy ¶
func (l *UnsignedIntegerLiteral) Copy() Node
func (*UnsignedIntegerLiteral) MarshalJSON ¶
func (l *UnsignedIntegerLiteral) MarshalJSON() ([]byte, error)
func (*UnsignedIntegerLiteral) Type ¶
func (*UnsignedIntegerLiteral) Type() string
Type is the abstract type
func (*UnsignedIntegerLiteral) UnmarshalJSON ¶
func (l *UnsignedIntegerLiteral) UnmarshalJSON(data []byte) error
type VariableAssignment ¶ added in v0.8.0
type VariableAssignment struct { BaseNode ID *Identifier `json:"id"` Init Expression `json:"init"` }
VariableAssignment represents the declaration of a variable
func (*VariableAssignment) Copy ¶ added in v0.8.0
func (d *VariableAssignment) Copy() Node
func (*VariableAssignment) MarshalJSON ¶ added in v0.8.0
func (d *VariableAssignment) MarshalJSON() ([]byte, error)
func (*VariableAssignment) Type ¶ added in v0.8.0
func (*VariableAssignment) Type() string
Type is the abstract type
func (*VariableAssignment) UnmarshalJSON ¶ added in v0.8.0
func (d *VariableAssignment) UnmarshalJSON(data []byte) error
type Visitor ¶ added in v0.8.0
A `Visitor` extracts information from a `Node` to build a result and/or have side-effects on it. The result of `Visit` is a `Visitor` that, in turn, is used by `Walk` to visit the children of the node under exam. To stop walking, `Visit` must return `nil`.
func CreateVisitor ¶ added in v0.8.0
Directories ¶
Path | Synopsis |
---|---|
Package asttest implements utilities for testing the abstract syntax tree.
|
Package asttest implements utilities for testing the abstract syntax tree. |
cmpgen
cmpgen generates comparison options for the asttest package.
|
cmpgen generates comparison options for the asttest package. |