ErrIsExpression reports whether a label is an expression. This error is never returned directly. Use errors.Is.
var ErrIsExpression = errors.New("not a concrete label")
func AddComment(n Node, cg *CommentGroup)
AddComment adds the given comment to the node if it supports it. If a node does not support comments, such as for CommentGroup or Comment, this call has no effect.
func Embed(x Expr) *embedding
Embed can be used in conjunction with NewStruct to embed values.
func IsValidIdent(ident string) bool
IsValidIdent reports whether str is a valid identifier. Note that the underscore "_" string is considered valid, for top.
func LabelName(l Label) (name string, isIdent bool, err error)
LabelName reports the name of a label, whether it is an identifier (it binds a value to a scope), and whether it is valid. Keywords that are allowed in label positions are interpreted accordingly.
Examples:
Label Result foo "foo" true nil true "true" true nil "foo" "foo" false nil "x-y" "x-y" false nil "foo "" false invalid string "\(x)" "" false errors.Is(err, ErrIsExpression) X=foo "foo" true nil
func Name(n Node) string
Name describes the type of n.
func ParseIdent(n *Ident) (string, error)
ParseIdent unquotes a possibly quoted identifier and validates if the result is valid.
Deprecated: quoted identifiers are deprecated. Use aliases.
func SetComments(n Node, cgs []*CommentGroup)
SetComments replaces all comments of n with the given set of comments. If a node does not support comments, such as for CommentGroup or Comment, this call has no effect.
func SetPos(n Node, p token.Pos)
SetPos sets a node to the given position, if possible.
func SetRelPos(n Node, p token.RelPos)
SetRelPos sets the relative position of a node without modifying its file position. Setting it to token.NoRelPos allows a node to adopt default formatting.
func Walk(node Node, before func(Node) bool, after func(Node))
Walk traverses an AST in depth-first order: It starts by calling f(node); node must not be nil. If before returns true, Walk invokes f recursively for each of the non-nil children of node, followed by a call of after. Both functions may be nil. If before is nil, it is assumed to always return true.
An Alias binds another field to the alias name in the current struct.
type Alias struct { Ident *Ident // field name, always an Ident Equal token.Pos // position of "=" Expr Expr // An Ident or SelectorExpr // contains filtered or unexported fields }
func (c *Alias) AddComment(cg *CommentGroup)
func (c *Alias) Comments() []*CommentGroup
func (a *Alias) End() token.Pos
func (a *Alias) Pos() token.Pos
func (c *Alias) SetComments(cgs []*CommentGroup)
An Attribute provides meta data about a field.
type Attribute struct { At token.Pos Text string // must be a valid attribute format. // contains filtered or unexported fields }
func (c *Attribute) AddComment(cg *CommentGroup)
func (c *Attribute) Comments() []*CommentGroup
func (a *Attribute) End() token.Pos
func (a *Attribute) Pos() token.Pos
func (c *Attribute) SetComments(cgs []*CommentGroup)
func (a *Attribute) Split() (key, body string)
A BadDecl node is a placeholder for declarations containing syntax errors for which no correct declaration nodes can be created.
type BadDecl struct { From, To token.Pos // position range of bad declaration // contains filtered or unexported fields }
func (c *BadDecl) AddComment(cg *CommentGroup)
func (c *BadDecl) Comments() []*CommentGroup
func (d *BadDecl) End() token.Pos
func (d *BadDecl) Pos() token.Pos
func (c *BadDecl) SetComments(cgs []*CommentGroup)
A BadExpr node is a placeholder for expressions containing syntax errors for which no correct expression nodes can be created. This is different from an ErrorExpr which represents an explicitly marked error in the source.
type BadExpr struct { From, To token.Pos // position range of bad expression // contains filtered or unexported fields }
func (c *BadExpr) AddComment(cg *CommentGroup)
func (c *BadExpr) Comments() []*CommentGroup
func (x *BadExpr) End() token.Pos
func (x *BadExpr) Pos() token.Pos
func (c *BadExpr) SetComments(cgs []*CommentGroup)
A BasicLit node represents a literal of basic type.
type BasicLit struct { ValuePos token.Pos // literal position Kind token.Token // INT, FLOAT, DURATION, or STRING Value string // literal string; e.g. 42, 0x7f, 3.14, 1_234_567, 1e-9, 2.4i, 'a', '\x7f', "foo", or '\m\n\o' // contains filtered or unexported fields }
func NewBool(b bool) *BasicLit
NewBool creates a new BasicLit with a bool value without position. Useful for ASTs generated by code other than the CUE parser.
func NewLit(tok token.Token, s string) *BasicLit
NewLit creates a new BasicLit with from a token type and string without position. Useful for ASTs generated by code other than the CUE parser.
func NewNull() *BasicLit
NewNull creates a new BasicLit configured to be a null value. Useful for ASTs generated by code other than the CUE parser.
func NewString(str string) *BasicLit
NewString creates a new BasicLit with a string value without position. It quotes the given string. Useful for ASTs generated by code other than the CUE parser.
func (c *BasicLit) AddComment(cg *CommentGroup)
func (c *BasicLit) Comments() []*CommentGroup
func (x *BasicLit) End() token.Pos
func (x *BasicLit) Pos() token.Pos
func (c *BasicLit) SetComments(cgs []*CommentGroup)
A BinaryExpr node represents a binary expression.
type BinaryExpr struct { X Expr // left operand OpPos token.Pos // position of Op Op token.Token // operator Y Expr // right operand // contains filtered or unexported fields }
func (c *BinaryExpr) AddComment(cg *CommentGroup)
func (c *BinaryExpr) Comments() []*CommentGroup
func (x *BinaryExpr) End() token.Pos
func (x *BinaryExpr) Pos() token.Pos
func (c *BinaryExpr) SetComments(cgs []*CommentGroup)
A BottomLit indicates an error.
type BottomLit struct { Bottom token.Pos // contains filtered or unexported fields }
func (c *BottomLit) AddComment(cg *CommentGroup)
func (c *BottomLit) Comments() []*CommentGroup
func (x *BottomLit) End() token.Pos
func (x *BottomLit) Pos() token.Pos
func (c *BottomLit) SetComments(cgs []*CommentGroup)
A CallExpr node represents an expression followed by an argument list.
type CallExpr struct { Fun Expr // function expression Lparen token.Pos // position of "(" Args []Expr // function arguments; or nil Rparen token.Pos // position of ")" // contains filtered or unexported fields }
func NewCall(fun Expr, args ...Expr) *CallExpr
NewCall creates a new CallExpr. Useful for ASTs generated by code other than the CUE parser.
func (c *CallExpr) AddComment(cg *CommentGroup)
func (c *CallExpr) Comments() []*CommentGroup
func (x *CallExpr) End() token.Pos
func (x *CallExpr) Pos() token.Pos
func (c *CallExpr) SetComments(cgs []*CommentGroup)
Clause nodes are part of comprehensions.
type Clause interface { Node // contains filtered or unexported methods }
A Comment node represents a single //-style or /*-style comment.
type Comment struct { Slash token.Pos // position of "/" starting the comment Text string // comment text (excluding '\n' for //-style comments) }
func (c *Comment) AddComment(*CommentGroup)
func (c *Comment) Comments() []*CommentGroup
func (c *Comment) End() token.Pos
func (c *Comment) Pos() token.Pos
A CommentGroup represents a sequence of comments with no other tokens and no empty lines between.
type CommentGroup struct { // TODO: remove and use the token position of the first comment. Doc bool Line bool // true if it is on the same line as the node's end pos. // Position indicates where a comment should be attached if a node has // multiple tokens. 0 means before the first token, 1 means before the // second, etc. For instance, for a field, the positions are: // <0> Label <1> ":" <2> Expr <3> "," <4> Position int8 List []*Comment // len(List) > 0 // contains filtered or unexported fields }
func Comments(n Node) []*CommentGroup
Comments returns all comments associated with a given node.
func (g *CommentGroup) AddComment(*CommentGroup)
func (g *CommentGroup) Comments() []*CommentGroup
func (g *CommentGroup) End() token.Pos
func (g *CommentGroup) Pos() token.Pos
func (g *CommentGroup) Text() string
Text returns the text of the comment. Comment markers (//, /*, and */), the first space of a line comment, and leading and trailing empty lines are removed. Multiple empty lines are reduced to one, and trailing space on lines is trimmed. Unless the result is empty, it is newline-terminated.
A Comprehension node represents a comprehension declaration.
type Comprehension struct { Clauses []Clause // There must be at least one clause. Value Expr // Must be a struct TODO: change to Struct // contains filtered or unexported fields }
func (c *Comprehension) AddComment(cg *CommentGroup)
func (c *Comprehension) Comments() []*CommentGroup
func (x *Comprehension) End() token.Pos
func (x *Comprehension) Pos() token.Pos
func (c *Comprehension) SetComments(cgs []*CommentGroup)
A Decl node is implemented by all declarations.
type Decl interface { Node // contains filtered or unexported methods }
type Ellipsis struct { Ellipsis token.Pos // open list if set Type Expr // type for the remaining elements // contains filtered or unexported fields }
func (c *Ellipsis) AddComment(cg *CommentGroup)
func (c *Ellipsis) Comments() []*CommentGroup
func (x *Ellipsis) End() token.Pos
func (x *Ellipsis) Pos() token.Pos
func (c *Ellipsis) SetComments(cgs []*CommentGroup)
An EmbedDecl node represents a single expression used as a declaration. The expressions in this declaration is what will be emitted as configuration output.
An EmbedDecl may only appear at the top level.
type EmbedDecl struct { Expr Expr // contains filtered or unexported fields }
func (c *EmbedDecl) AddComment(cg *CommentGroup)
func (c *EmbedDecl) Comments() []*CommentGroup
func (d *EmbedDecl) End() token.Pos
func (d *EmbedDecl) Pos() token.Pos
func (c *EmbedDecl) SetComments(cgs []*CommentGroup)
An Expr is implemented by all expression nodes.
type Expr interface { Node // contains filtered or unexported methods }
func NewBinExpr(op token.Token, operands ...Expr) Expr
NewBinExpr creates for list of expressions of length 2 or greater a chained binary expression of the form (((x1 op x2) op x3) ...). For lists of length 1 it returns the expression itself. It panics for empty lists. Useful for ASTs generated by code other than the CUE parser.
func NewSel(x Expr, sel ...string) Expr
NewSel creates a sequence of selectors. Useful for ASTs generated by code other than the CUE parser.
A Field represents a field declaration in a struct.
type Field struct { Label Label // must have at least one element. Optional token.Pos // Deprecated Constraint token.Token // token.ILLEGAL, token.OPTION, or token.NOT // No TokenPos: Value must be an StructLit with one field. TokenPos token.Pos Token token.Token // Deprecated: always token.COLON Value Expr // the value associated with this field. Attrs []*Attribute // contains filtered or unexported fields }
func (c *Field) AddComment(cg *CommentGroup)
func (c *Field) Comments() []*CommentGroup
func (d *Field) End() token.Pos
func (d *Field) Pos() token.Pos
func (c *Field) SetComments(cgs []*CommentGroup)
A File node represents a Go source file.
The Comments list contains all comments in the source file in order of appearance, including the comments that are pointed to from other nodes via Doc and Comment fields.
type File struct { Filename string Decls []Decl // top-level declarations; or nil Imports []*ImportSpec // imports in this file Unresolved []*Ident // unresolved identifiers in this file // contains filtered or unexported fields }
func (c *File) AddComment(cg *CommentGroup)
func (c *File) Comments() []*CommentGroup
func (f *File) End() token.Pos
func (f *File) PackageName() string
PackageName returns the package name associated with this file or "" if no package is associated.
func (f *File) Pos() token.Pos
func (f *File) Preamble() []Decl
Preamble returns the declarations of the preamble.
func (c *File) SetComments(cgs []*CommentGroup)
func (f *File) VisitImports(fn func(d *ImportDecl))
A ForClause node represents a for clause in a comprehension.
type ForClause struct { For token.Pos Key *Ident // allow pattern matching? // TODO: change to Comma Colon token.Pos Value *Ident // allow pattern matching? In token.Pos Source Expr // contains filtered or unexported fields }
func (c *ForClause) AddComment(cg *CommentGroup)
func (c *ForClause) Comments() []*CommentGroup
func (x *ForClause) End() token.Pos
func (x *ForClause) Pos() token.Pos
func (c *ForClause) SetComments(cgs []*CommentGroup)
A Func node represents a function type.
This is an experimental type and the contents will change without notice.
type Func struct { Func token.Pos // position of "func" Args []Expr // list of elements; or nil Ret Expr // return type, must not be nil // contains filtered or unexported fields }
func (c *Func) AddComment(cg *CommentGroup)
func (c *Func) Comments() []*CommentGroup
func (x *Func) End() token.Pos
func (x *Func) Pos() token.Pos
func (c *Func) SetComments(cgs []*CommentGroup)
An Ident node represents an left-hand side identifier, including the underscore "_" identifier to represent top.
type Ident struct { NamePos token.Pos // identifier position // This LHS path element may be an identifier. Possible forms: // foo: a normal identifier // "foo": JSON compatible Name string Scope Node // scope in which node was found or nil if referring directly Node Node // contains filtered or unexported fields }
func NewIdent(name string) *Ident
NewIdent creates a new Ident without position. Useful for ASTs generated by code other than the CUE parser.
func (c *Ident) AddComment(cg *CommentGroup)
func (c *Ident) Comments() []*CommentGroup
func (x *Ident) End() token.Pos
func (x *Ident) Pos() token.Pos
func (c *Ident) SetComments(cgs []*CommentGroup)
func (id *Ident) String() string
A IfClause node represents an if guard clause in a comprehension.
type IfClause struct { If token.Pos Condition Expr // contains filtered or unexported fields }
func (c *IfClause) AddComment(cg *CommentGroup)
func (c *IfClause) Comments() []*CommentGroup
func (x *IfClause) End() token.Pos
func (x *IfClause) Pos() token.Pos
func (c *IfClause) SetComments(cgs []*CommentGroup)
A ImportDecl node represents a series of import declarations. A valid Lparen position (Lparen.Line > 0) indicates a parenthesized declaration.
type ImportDecl struct { Import token.Pos Lparen token.Pos // position of '(', if any Specs []*ImportSpec Rparen token.Pos // position of ')', if any // contains filtered or unexported fields }
func (c *ImportDecl) AddComment(cg *CommentGroup)
func (c *ImportDecl) Comments() []*CommentGroup
func (d *ImportDecl) End() token.Pos
func (d *ImportDecl) Pos() token.Pos
func (c *ImportDecl) SetComments(cgs []*CommentGroup)
An ImportSpec node represents a single package import.
type ImportSpec struct { Name *Ident // local package name (including "."); or nil Path *BasicLit // import path EndPos token.Pos // end of spec (overrides Path.Pos if nonzero) // contains filtered or unexported fields }
func NewImport(name *Ident, importPath string) *ImportSpec
func (c *ImportSpec) AddComment(cg *CommentGroup)
func (c *ImportSpec) Comments() []*CommentGroup
func (s *ImportSpec) End() token.Pos
func (s *ImportSpec) Pos() token.Pos
func (c *ImportSpec) SetComments(cgs []*CommentGroup)
An IndexExpr node represents an expression followed by an index.
type IndexExpr struct { X Expr // expression Lbrack token.Pos // position of "[" Index Expr // index expression Rbrack token.Pos // position of "]" // contains filtered or unexported fields }
func (c *IndexExpr) AddComment(cg *CommentGroup)
func (c *IndexExpr) Comments() []*CommentGroup
func (x *IndexExpr) End() token.Pos
func (x *IndexExpr) Pos() token.Pos
func (c *IndexExpr) SetComments(cgs []*CommentGroup)
A Interpolation node represents a string or bytes interpolation.
type Interpolation struct { Elts []Expr // interleaving of strings and expressions. // contains filtered or unexported fields }
func (c *Interpolation) AddComment(cg *CommentGroup)
func (c *Interpolation) Comments() []*CommentGroup
func (x *Interpolation) End() token.Pos
func (x *Interpolation) Pos() token.Pos
func (c *Interpolation) SetComments(cgs []*CommentGroup)
A Label is any production that can be used as a LHS label.
type Label interface { Node // contains filtered or unexported methods }
A LetClause node represents a let clause in a comprehension.
type LetClause struct { Let token.Pos Ident *Ident Equal token.Pos Expr Expr // contains filtered or unexported fields }
func (c *LetClause) AddComment(cg *CommentGroup)
func (c *LetClause) Comments() []*CommentGroup
func (x *LetClause) End() token.Pos
func (x *LetClause) Pos() token.Pos
func (c *LetClause) SetComments(cgs []*CommentGroup)
A ListLit node represents a literal list.
type ListLit struct { Lbrack token.Pos // position of "[" // TODO: change to embedding or similar. Elts []Expr // list of composite elements; or nil Rbrack token.Pos // position of "]" // contains filtered or unexported fields }
func NewList(exprs ...Expr) *ListLit
NewList creates a list of Expressions. Useful for ASTs generated by code other than the CUE parser.
func (c *ListLit) AddComment(cg *CommentGroup)
func (c *ListLit) Comments() []*CommentGroup
func (x *ListLit) End() token.Pos
func (x *ListLit) Pos() token.Pos
func (c *ListLit) SetComments(cgs []*CommentGroup)
A Node represents any node in the abstract syntax tree.
type Node interface { Pos() token.Pos // position of first character belonging to the node End() token.Pos // position of first character immediately after the node // Deprecated: use [Comments] Comments() []*CommentGroup // Deprecated: use [AddComment] AddComment(*CommentGroup) // contains filtered or unexported methods }
A Package represents a package clause.
type Package struct { PackagePos token.Pos // position of "package" pseudo-keyword Name *Ident // package name // contains filtered or unexported fields }
func (c *Package) AddComment(cg *CommentGroup)
func (c *Package) Comments() []*CommentGroup
func (p *Package) End() token.Pos
func (p *Package) Pos() token.Pos
func (c *Package) SetComments(cgs []*CommentGroup)
A ParenExpr node represents a parenthesized expression.
type ParenExpr struct { Lparen token.Pos // position of "(" X Expr // parenthesized expression Rparen token.Pos // position of ")" // contains filtered or unexported fields }
func (c *ParenExpr) AddComment(cg *CommentGroup)
func (c *ParenExpr) Comments() []*CommentGroup
func (x *ParenExpr) End() token.Pos
func (x *ParenExpr) Pos() token.Pos
func (c *ParenExpr) SetComments(cgs []*CommentGroup)
A SelectorExpr node represents an expression followed by a selector.
type SelectorExpr struct { X Expr // expression Sel Label // field selector // contains filtered or unexported fields }
func (c *SelectorExpr) AddComment(cg *CommentGroup)
func (c *SelectorExpr) Comments() []*CommentGroup
func (x *SelectorExpr) End() token.Pos
func (x *SelectorExpr) Pos() token.Pos
func (c *SelectorExpr) SetComments(cgs []*CommentGroup)
An SliceExpr node represents an expression followed by slice indices.
type SliceExpr struct { X Expr // expression Lbrack token.Pos // position of "[" Low Expr // begin of slice range; or nil High Expr // end of slice range; or nil Rbrack token.Pos // position of "]" // contains filtered or unexported fields }
func (c *SliceExpr) AddComment(cg *CommentGroup)
func (c *SliceExpr) Comments() []*CommentGroup
func (x *SliceExpr) End() token.Pos
func (x *SliceExpr) Pos() token.Pos
func (c *SliceExpr) SetComments(cgs []*CommentGroup)
type Spec interface { Node // contains filtered or unexported methods }
A StructLit node represents a literal struct.
type StructLit struct { Lbrace token.Pos // position of "{" Elts []Decl // list of elements; or nil Rbrace token.Pos // position of "}" // contains filtered or unexported fields }
func NewStruct(fields ...interface{}) *StructLit
NewStruct creates a struct from the given fields.
A field is either a *Field, an *Ellipsis, *LetClause, a *CommentGroup, or a Label, optionally followed by a token.OPTION or token.NOT to indicate the field is optional or required, followed by an expression for the field value.
It will panic if a values not matching these patterns are given. Useful for ASTs generated by code other than the CUE parser.
func (c *StructLit) AddComment(cg *CommentGroup)
func (c *StructLit) Comments() []*CommentGroup
func (x *StructLit) End() token.Pos
func (x *StructLit) Pos() token.Pos
func (c *StructLit) SetComments(cgs []*CommentGroup)
A UnaryExpr node represents a unary expression.
type UnaryExpr struct { OpPos token.Pos // position of Op Op token.Token // operator X Expr // operand // contains filtered or unexported fields }
func (c *UnaryExpr) AddComment(cg *CommentGroup)
func (c *UnaryExpr) Comments() []*CommentGroup
func (x *UnaryExpr) End() token.Pos
func (x *UnaryExpr) Pos() token.Pos
func (c *UnaryExpr) SetComments(cgs []*CommentGroup)