ghtml/types
Type definitions for the Lustre template parser and code generator.
This module defines all core types including source positions, tokens, AST nodes, and the parsed template structure.
Types
Attribute types for HTML elements
pub type Attr {
StaticAttr(name: String, value: String)
DynamicAttr(name: String, expr: String)
EventAttr(event: String, handler: String)
BooleanAttr(name: String)
}
Constructors
-
StaticAttr(name: String, value: String) -
DynamicAttr(name: String, expr: String) -
EventAttr(event: String, handler: String) -
BooleanAttr(name: String)
AST Node representing parsed template structure
pub type Node {
Element(
tag: String,
attrs: List(Attr),
children: List(Node),
span: Span,
)
TextNode(content: String, span: Span)
ExprNode(expr: String, span: Span)
IfNode(
condition: String,
then_branch: List(Node),
else_branch: List(Node),
span: Span,
)
EachNode(
collection: String,
item: String,
index: option.Option(String),
body: List(Node),
span: Span,
)
CaseNode(expr: String, branches: List(CaseBranch), span: Span)
Fragment(children: List(Node), span: Span)
}
Constructors
-
-
TextNode(content: String, span: Span) -
ExprNode(expr: String, span: Span) -
-
EachNode( collection: String, item: String, index: option.Option(String), body: List(Node), span: Span, ) -
CaseNode(expr: String, branches: List(CaseBranch), span: Span) -
Result type for parsing operations
pub type ParseResult(a) =
Result(a, List(ParseError))
Position in source file for error reporting
pub type Position {
Position(line: Int, column: Int)
}
Constructors
-
Position(line: Int, column: Int)
Token types produced by the tokenizer
pub type Token {
Import(content: String, span: Span)
Params(params: List(#(String, String)), span: Span)
HtmlOpen(
tag: String,
attrs: List(Attr),
self_closing: Bool,
span: Span,
)
HtmlClose(tag: String, span: Span)
Text(content: String, span: Span)
Expr(content: String, span: Span)
IfStart(condition: String, span: Span)
Else(span: Span)
IfEnd(span: Span)
EachStart(
collection: String,
item: String,
index: option.Option(String),
span: Span,
)
EachEnd(span: Span)
CaseStart(expr: String, span: Span)
CasePattern(pattern: String, span: Span)
CaseEnd(span: Span)
Comment(span: Span)
}
Constructors
-
Import(content: String, span: Span) -
Params(params: List(#(String, String)), span: Span) -
-
HtmlClose(tag: String, span: Span) -
Text(content: String, span: Span) -
Expr(content: String, span: Span) -
IfStart(condition: String, span: Span) -
Else(span: Span) -
IfEnd(span: Span) -
EachStart( collection: String, item: String, index: option.Option(String), span: Span, ) -
EachEnd(span: Span) -
CaseStart(expr: String, span: Span) -
CasePattern(pattern: String, span: Span) -
CaseEnd(span: Span) -
Comment(span: Span)