Documentation
¶
Index ¶
- func ErrorAt(filename, source string, localOffset, baseOffset int, message string) error
- func ErrorAtPosition(filename, source string, localOffset, baseOffset int, basePos Position, ...) error
- type BinaryExpr
- type BodyContext
- func (c *BodyContext) ErrorAt(offset int, message string) error
- func (c *BodyContext) Filename() string
- func (c *BodyContext) Offset() int
- func (c *BodyContext) ParseEmbedded(fragment Embedded, context string) (Node, *Terminator, error)
- func (c *BodyContext) Position(offset int) Position
- func (c *BodyContext) SetOffset(offset int)
- func (c *BodyContext) Source() string
- type CallExpr
- type ConditionalExpr
- type Declaration
- type Embedded
- type EnumDecl
- type EnumMember
- type Expr
- type ExpressionNode
- type ExternalDecl
- type Field
- type ForNode
- type FormatParser
- type IdentifierExpr
- type IfNode
- type ImportDecl
- type IndexExpr
- type LiteralExpr
- type MemberExpr
- type Module
- type Node
- type PackageDecl
- type Parameter
- type ParseError
- type Position
- type RootDeclaration
- type TemplateDecl
- type Terminator
- type TerminatorKind
- type TypeDecl
- type TypeRef
- type UnaryExpr
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type BinaryExpr ¶
type BodyContext ¶
type BodyContext struct {
// contains filtered or unexported fields
}
BodyContext is the shared cursor and control orchestrator for one declaration body. Format parsers must use it instead of owning an independent cursor.
func (*BodyContext) Filename ¶
func (c *BodyContext) Filename() string
func (*BodyContext) Offset ¶
func (c *BodyContext) Offset() int
func (*BodyContext) ParseEmbedded ¶
func (c *BodyContext) ParseEmbedded(fragment Embedded, context string) (Node, *Terminator, error)
ParseEmbedded parses one fragment after the active format parser has found its boundaries. It returns either a shared node or a control terminator.
func (*BodyContext) Position ¶
func (c *BodyContext) Position(offset int) Position
func (*BodyContext) SetOffset ¶
func (c *BodyContext) SetOffset(offset int)
func (*BodyContext) Source ¶
func (c *BodyContext) Source() string
type ConditionalExpr ¶
type Declaration ¶
type Declaration interface {
// contains filtered or unexported methods
}
Declaration is implemented by all root declarations.
type Embedded ¶
Embedded is one brace-delimited template fragment discovered by a format parser. Offsets are file-global byte offsets.
type EnumDecl ¶
type EnumDecl struct {
Kind string `json:"kind"`
Pos Position `json:"pos"`
Name string `json:"name"`
Members []EnumMember `json:"members"`
}
type EnumMember ¶
type Expr ¶
type Expr interface {
// contains filtered or unexported methods
}
Expr is the shared expression AST embedded by every output format.
func ParseExpression ¶
ParseExpression parses a complete shared template expression.
type ExpressionNode ¶
type ExpressionNode struct {
Kind string `json:"kind"`
Pos Position `json:"pos"`
Context string `json:"context"`
Expression Expr `json:"expression"`
}
func (*ExpressionNode) NodeType ¶
func (n *ExpressionNode) NodeType() string
type ExternalDecl ¶
type ForNode ¶
type FormatParser ¶
type FormatParser interface {
ParseBody(*BodyContext, string) ([]Node, *Terminator, error)
}
FormatParser owns format tokenization and discovers embedded template boundaries. The shared BodyContext parses those boundaries and recursively calls the same format parser for control bodies.
type IdentifierExpr ¶
type IfNode ¶
type ImportDecl ¶
type LiteralExpr ¶
type MemberExpr ¶
type Module ¶
type Module struct {
Pos Position `json:"pos"`
Package *PackageDecl `json:"package,omitempty"`
Imports []ImportDecl `json:"imports,omitempty"`
Declarations []Declaration `json:"declarations"`
}
Module is the format-neutral root of a template source file.
func ParseModule ¶
func ParseModule(filename, source string, roots []RootDeclaration) (*Module, error)
ParseModule parses standard declarations plus the registered format roots.
type Node ¶
type Node interface {
NodeType() string
}
Node is a body AST node produced either by the shared parser or a registered format parser. Type IDs are namespaced as <language>:<node-type>.
type PackageDecl ¶
type ParseError ¶
ParseError reports a stable source location for syntax diagnostics.
func (*ParseError) Error ¶
func (e *ParseError) Error() string
type Position ¶
Position is a one-based source position. Offset is intentionally not part of the serialized AST; parsers use offsets internally while later compiler stages report the stable line and column pair.
type RootDeclaration ¶
type RootDeclaration struct {
Keyword string
NodeType string
OutputPrefix string
Context string
Parser FormatParser
}
RootDeclaration registers one format-specific declaration with the shared root driver.
type TemplateDecl ¶
type Terminator ¶
type Terminator struct {
Kind TerminatorKind
Pos Position
Header string
HeaderOffset int
ContentOffset int
}
Terminator is discovered by a format parser and interpreted by the shared control parser.
type TerminatorKind ¶
type TerminatorKind string
const ( TerminatorRoot TerminatorKind = "root" TerminatorElse TerminatorKind = "else" TerminatorElseIf TerminatorKind = "else-if" TerminatorEndIf TerminatorKind = "end-if" TerminatorEndFor TerminatorKind = "end-for" )
type TypeRef ¶
type TypeRef struct {
Pos Position `json:"pos"`
Name string `json:"name"`
Arguments []TypeRef `json:"arguments,omitempty"`
Array bool `json:"array,omitempty"`
Optional bool `json:"optional,omitempty"`
}
TypeRef represents named, generic, array, and optional types without binding them to Go types during parsing.