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)

A branch in a case expression

pub type CaseBranch {
  CaseBranch(pattern: String, body: List(Node), span: Span)
}

Constructors

  • CaseBranch(pattern: String, body: List(Node), span: Span)

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

  • 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)

Parse error with location information

pub type ParseError {
  ParseError(span: Span, message: String)
}

Constructors

  • ParseError(span: Span, message: String)

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)

Span of source text

pub type Span {
  Span(start: Position, end: Position)
}

Constructors

Parsed template with metadata and body

pub type Template {
  Template(
    imports: List(String),
    params: List(#(String, String)),
    body: List(Node),
  )
}

Constructors

  • Template(
      imports: List(String),
      params: List(#(String, String)),
      body: List(Node),
    )

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)
  • 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)

Values

pub fn point_span(pos: Position) -> Span

Create a zero-length span at a position

pub fn start_position() -> Position

Create a position at line 1, column 1

Search Document