tsparser

    Yet another TypeScript parser.

    parser
    typescript
    ts
    Download zip
    Author
    Version
    0.1.2
    License
    Apache-2.0
    Last updated
    7 months ago
    Downloads
    18

    #sennenki/tsparser

    Yet another TypeScript parser.

    Currently ECMA versions and file formats other than .ts and .d.ts are not supported.

    Usage:

    // Construct a Parser instance

    ///|
    let parser = Parser::new(source)
    // Specify file name
    // The second argument of parse_source_file will be used in the output SourceFile struct
    // Usually it's expected to be the same as the argument of Parser::new

    ///|
    let result = parser.parse_source_file("filename.ts", source) catch {
    ParseError(span~, kind~) as e =>
    match kind {
    // Pattern match on the caught error to inspect the exact reason of parsing failure
    UnexpectedToken(token_kind) => ...
    // ...
    // Or just print the error message as ParseError implements Show
    _ => abort(e)
    }
    }

    ParseError

    pub suberror ParseError {
    ParseError(Span, ParseErrorKind)
    }

    impl Eq for ParseError
    impl Show for ParseError

    AccessibilityModifier

    pub enum AccessibilityModifier {
    Public
    Private
    Protected
    }

    Accessibility modifiers (mutually exclusive)

    ArrayBindingElement

    pub enum ArrayBindingElement {
    BindingElement(BindingElement)
    OmittedExpr
    }

    ArrowFunction

    pub struct ArrowFunction {
    is_async : Bool
    type_parameters : NodeArray[TypeParameterDecl]?
    parameters : NodeArray[ParameterDecl]
    type_node : TypeNode?
    body : ArrowFunctionBody
    }

    Arrow function (e.g., x => x + 1, (x) => { return x })
    impl Eq for ArrowFunction

    ArrowFunction::new

    fn ArrowFunction::new(is_async : Bool, type_parameters : NodeArray[TypeParameterDecl]?, parameters : NodeArray[ParameterDecl], type_node : TypeNode?, body : ArrowFunctionBody) -> ArrowFunction

    ArrowFunctionBody

    pub enum ArrowFunctionBody {
    Expr(Expr)
    Block(Array[Stmt])
    }

    Arrow function body

    AsExpr

    pub struct AsExpr {
    expression : Expr
    type_node : TypeNode
    }

    Type assertion and as expressions
    impl Eq for AsExpr
    impl Show for AsExpr

    AsExpr::new

    fn AsExpr::new(expression : Expr, type_node : TypeNode) -> AsExpr

    BigIntLiteral

    pub struct BigIntLiteral {
    text : String
    is_unterminated : Bool
    has_extended_unicode_escape : Bool
    span : Span
    }

    BigInt literal
    impl Eq for BigIntLiteral

    BigIntLiteral::new

    fn BigIntLiteral::new(text : String, span : Span) -> BigIntLiteral

    BinaryExpr

    pub struct BinaryExpr {
    left : Expr
    operator : BinaryOperator
    right : Expr
    }

    Binary Expr (e.g., a + b, x === y)
    impl Eq for BinaryExpr
    impl Show for BinaryExpr

    BinaryExpr::new

    fn BinaryExpr::new(left : Expr, operator : BinaryOperator, right : Expr) -> BinaryExpr

    BinaryOperator

    pub enum BinaryOperator {
    Equals
    PlusEquals
    MinusEquals
    AsteriskEquals
    AsteriskAsteriskEquals
    SlashEquals
    PercentEquals
    AmpersandEquals
    BarEquals
    CaretEquals
    ShiftLeftEquals
    ShiftRightEquals
    ShiftRightUnsignedEquals
    AmpersandAmpersandEquals
    BarBarEquals
    QuestionQuestionEquals
    Plus
    Minus
    Asterisk
    Slash
    Percent
    AsteriskAsterisk
    ShiftLeft
    ShiftRight
    ShiftRightUnsigned
    LessThan
    GreaterThan
    LessThanEquals
    GreaterThanEquals
    In
    InstanceOf
    EqualsEquals
    ExclamationEquals
    EqualsEqualsEquals
    ExclamationEqualsEquals
    BitwiseAnd
    BitwiseXor
    BitwiseOr
    AmpersandAmpersand
    BarBar
    QuestionQuestion
    }

    Binary operator kinds (simplified - extend as needed)

    BindingElement

    pub struct BindingElement {
    property_name : PropertyName?
    is_rest : Bool
    name : BindingName
    initializer : Expr?
    }

    BindingElement::new

    fn BindingElement::new(name : BindingName, property_name : PropertyName?, is_rest : Bool, initializer : Expr?) -> BindingElement

    BindingName

    pub enum BindingName {
    Identifier(Identifier)
    ObjectBindingPattern(NodeArray[BindingElement])
    ArrayBindingPattern(NodeArray[ArrayBindingElement])
    }

    Binding name - used in destructuring
    impl Eq for BindingName
    impl Show for BindingName

    CallExpr

    pub struct CallExpr {
    expression : Expr
    is_null_coalescing : Bool
    type_arguments : NodeArray[TypeNode]?
    arguments : NodeArray[Expr]
    }

    Call Expr (e.g., func(args))
    impl Eq for CallExpr
    impl Show for CallExpr

    CallExpr::new

    fn CallExpr::new(expression : Expr, type_arguments : NodeArray[TypeNode]?, arguments : NodeArray[Expr], is_null_coalescing : Bool) -> CallExpr

    CallSignatureDecl

    pub struct CallSignatureDecl {
    type_parameters : NodeArray[TypeParameterDecl]?
    parameters : NodeArray[ParameterDecl]
    type_node : TypeNode?
    }

    CallSignatureDecl::new

    fn CallSignatureDecl::new(type_parameters : NodeArray[TypeParameterDecl]?, parameters : NodeArray[ParameterDecl], type_node : TypeNode?) -> CallSignatureDecl

    CaseBlock

    pub struct CaseBlock {
    clauses : NodeArray[CaseOrDefaultClause]
    }

    impl Eq for CaseBlock
    impl Show for CaseBlock

    CaseBlock::new

    CaseClause

    pub struct CaseClause {
    expression : Expr
    stmts : NodeArray[Stmt]
    }

    impl Eq for CaseClause
    impl Show for CaseClause

    CaseClause::new

    fn CaseClause::new(expression : Expr, stmts : NodeArray[Stmt]) -> CaseClause

    CaseOrDefaultClause

    pub enum CaseOrDefaultClause {
    CaseClause(CaseClause)
    DefaultClause(NodeArray[Stmt])
    }

    CatchClause

    pub struct CatchClause {
    variable_declaration : VariableDecl?
    block : Array[Stmt]
    }

    impl Eq for CatchClause
    impl Show for CatchClause

    CatchClause::new

    fn CatchClause::new(variable_declaration : VariableDecl?, block : Array[Stmt]) -> CatchClause

    ClassDecl

    pub struct ClassDecl {
    doc_comment : String?
    decorators : NodeArray[Expr]?
    modifiers : TopLevelModifiers
    name : Identifier?
    type_parameters : NodeArray[TypeParameterDecl]?
    heritage_clauses : NodeArray[HeritageClause]?
    members : NodeArray[ClassElement]
    }

    Class Decl
    impl Eq for ClassDecl
    impl Show for ClassDecl

    ClassDecl::new

    fn ClassDecl::new(doc_comment : String?, decorators : NodeArray[Expr]?, modifiers : TopLevelModifiers, name : Identifier?, type_parameters : NodeArray[TypeParameterDecl]?, heritage_clauses : NodeArray[HeritageClause]?, members : NodeArray[ClassElement]) -> ClassDecl

    ClassElement

    pub enum ClassElement {
    PropertyDecl(PropertyDecl)
    MethodDecl(MethodDecl)
    Constructor(ConstructorDecl)
    GetAccessor(GetAccessorDecl)
    SetAccessor(SetAccessorDecl)
    IndexSignature(IndexSignatureDecl)
    SemicolonClassElement
    ClassStaticBlockDecl(ClassStaticBlockDecl)
    }

    Class elements
    impl Eq for ClassElement

    ClassExpr

    pub struct ClassExpr {
    name : Identifier?
    type_parameters : NodeArray[TypeParameterDecl]?
    heritage_clauses : NodeArray[HeritageClause]?
    members : NodeArray[ClassElement]
    }

    Class expression (e.g., class Foo {}, class extends Base {})
    impl Eq for ClassExpr
    impl Show for ClassExpr

    ClassExpr::new

    fn ClassExpr::new(name : Identifier?, type_parameters : NodeArray[TypeParameterDecl]?, heritage_clauses : NodeArray[HeritageClause]?, members : NodeArray[ClassElement]) -> ClassExpr

    ClassMemberModifiers

    pub struct ClassMemberModifiers {
    accessibility : AccessibilityModifier?
    is_static : Bool
    is_abstract : Bool
    is_readonly : Bool
    is_override : Bool
    is_accessor : Bool
    is_async : Bool
    }

    Modifiers for class members

    ClassMemberModifiers::new

    ClassStaticBlockDecl

    pub struct ClassStaticBlockDecl {
    body : Array[Stmt]
    }

    ClassStaticBlockDecl::new

    ConditionalExpr

    pub struct ConditionalExpr {
    condition : Expr
    when_true : Expr
    when_false : Expr
    }

    Conditional Expr (e.g., cond ? a : b)

    ConditionalExpr::new

    fn ConditionalExpr::new(condition : Expr, when_true : Expr, when_false : Expr) -> ConditionalExpr

    ConditionalTypeNode

    pub struct ConditionalTypeNode {
    check_type : TypeNode
    extends_type : TypeNode
    true_type : TypeNode
    false_type : TypeNode
    }

    Conditional type (e.g., T extends U ? X : Y)

    ConditionalTypeNode::new

    fn ConditionalTypeNode::new(check_type : TypeNode, extends_type : TypeNode, true_type : TypeNode, false_type : TypeNode) -> ConditionalTypeNode

    ConstructSignatureDecl

    pub struct ConstructSignatureDecl {
    type_parameters : NodeArray[TypeParameterDecl]?
    parameters : NodeArray[ParameterDecl]
    type_node : TypeNode?
    }

    ConstructSignatureDecl::new

    fn ConstructSignatureDecl::new(type_parameters : NodeArray[TypeParameterDecl]?, parameters : NodeArray[ParameterDecl], type_node : TypeNode?) -> ConstructSignatureDecl

    ConstructorDecl

    pub struct ConstructorDecl {
    doc_comment : String?
    modifiers : ClassMemberModifiers
    parameters : NodeArray[ParameterDecl]
    body : Array[Stmt]?
    }

    ConstructorDecl::new

    fn ConstructorDecl::new(doc_comment : String?, modifiers : ClassMemberModifiers, parameters : NodeArray[ParameterDecl], body : Array[Stmt]?) -> ConstructorDecl

    ConstructorTypeNode

    pub struct ConstructorTypeNode {
    is_abstract : Bool
    type_parameters : NodeArray[TypeParameterDecl]?
    parameters : NodeArray[ParameterDecl]
    type_node : TypeNode?
    }

    ConstructorTypeNode::new

    fn ConstructorTypeNode::new(is_abstract : Bool, type_parameters : NodeArray[TypeParameterDecl]?, parameters : NodeArray[ParameterDecl], type_node : TypeNode?) -> ConstructorTypeNode

    DoStmt

    pub struct DoStmt {
    statement : Stmt
    expression : Expr
    }

    Do Stmt
    impl Eq for DoStmt
    impl Show for DoStmt

    DoStmt::new

    fn DoStmt::new(statement : Stmt, expression : Expr) -> DoStmt

    ElementAccessExpr

    pub struct ElementAccessExpr {
    expression : Expr
    is_null_coalescing : Bool
    argument_expression : Expr
    }

    Elem access Expr (e.g., obj[index])

    ElementAccessExpr::new

    fn ElementAccessExpr::new(expression : Expr, argument_expression : Expr, is_null_coalescing : Bool) -> ElementAccessExpr

    EntityName

    pub enum EntityName {
    Identifier(Identifier)
    QualifiedName(QualifiedName)
    }

    EntityName - either an Identifier or QualifiedName
    impl Eq for EntityName
    impl Show for EntityName

    EnumDecl

    pub struct EnumDecl {
    doc_comment : String?
    modifiers : TopLevelModifiers
    name : Identifier
    members : NodeArray[EnumMember]
    }

    Enum Decl
    impl Eq for EnumDecl
    impl Show for EnumDecl

    EnumDecl::new

    fn EnumDecl::new(doc_comment : String?, modifiers : TopLevelModifiers, name : Identifier, members : NodeArray[EnumMember]) -> EnumDecl

    EnumMember

    pub struct EnumMember {
    doc_comment : String?
    name : PropertyName
    initializer : Expr?
    }

    impl Eq for EnumMember
    impl Show for EnumMember

    EnumMember::new

    fn EnumMember::new(doc_comment : String?, name : PropertyName, initializer : Expr?) -> EnumMember

    ExportAssignment

    pub struct ExportAssignment {
    modifiers : NodeArray[ModifierKind]?
    is_export_equals : Bool
    expression : Expr
    }

    ExportAssignment::new

    fn ExportAssignment::new(modifiers : NodeArray[ModifierKind]?, is_export_equals : Bool, expression : Expr) -> ExportAssignment

    ExportDecl

    pub struct ExportDecl {
    modifiers : NodeArray[ModifierKind]?
    is_type_only : Bool
    export_clause : NamedExportBindings?
    module_specifier : Expr?
    attributes : ImportAttributes?
    }

    Export Decl
    impl Eq for ExportDecl
    impl Show for ExportDecl

    ExportDecl::new

    fn ExportDecl::new(modifiers : NodeArray[ModifierKind]?, is_type_only : Bool, export_clause : NamedExportBindings?, module_specifier : Expr?, attributes : ImportAttributes?) -> ExportDecl

    ExportSpecifier

    pub struct ExportSpecifier {
    is_type_only : Bool
    property_name : Identifier?
    name : Identifier
    }

    ExportSpecifier::new

    fn ExportSpecifier::new(is_type_only : Bool, property_name : Identifier?, name : Identifier) -> ExportSpecifier

    Expr

    pub struct Expr {
    kind : ExprKind
    span : Span
    }

    Expression AST node
    impl Eq for Expr
    impl Show for Expr

    Expr::new

    fn Expr::new(kind : ExprKind, span : Span) -> Expr

    ExprKind

    pub enum ExprKind {
    Identifier(Identifier)
    NumericLiteral(NumericLiteral)
    StringLiteral(StringLiteral)
    BinaryExpr(BinaryExpr)
    PrefixUnaryExpr(PrefixUnaryExpr)
    PostfixUnaryExpr(PostfixUnaryExpr)
    PropertyAccessExpr(PropertyAccessExpr)
    ElementAccessExpr(ElementAccessExpr)
    CallExpr(CallExpr)
    NewExpr(NewExpr)
    ImportExpr(NodeArray[Expr])
    ArrayLiteralExpr(NodeArray[Expr])
    ObjectLiteralExpr(NodeArray[ObjectLiteralElementLike])
    FunctionExpr(FunctionExpr)
    ArrowFunction(ArrowFunction)
    ConditionalExpr(ConditionalExpr)
    TemplateExpr(TemplateExpr)
    TaggedTemplateExpr(TaggedTemplateExpr)
    AsExpr(AsExpr)
    ParenthesizedExpr(Expr)
    SatisfiesExpr(SatisfiesExpr)
    TypeAssertionExpr(TypeAssertionExpr)
    NonNullExpr(Expr)
    MetaProperty(MetaPropertyKind)
    CommaListExpr(NodeArray[Expr])
    ThisExpr
    SuperExpr
    NullLiteral
    TrueLiteral
    FalseLiteral
    RegularExprLiteral(RegularExprLiteral)
    NoSubstitutionTemplateLiteral(NoSubstitutionTemplateLiteral)
    DeleteExpr(Expr)
    TypeOfExpr(Expr)
    VoidExpr(Expr)
    AwaitExpr(Expr)
    YieldExpr(YieldExpr)
    SpreadElement(Expr)
    OmittedExpr
    ClassExpr(ClassExpr)
    }

    Expression node kinds
    impl Eq for ExprKind
    impl Show for ExprKind

    ExprWithTypeArguments

    pub struct ExprWithTypeArguments {
    expression : Expr
    type_arguments : NodeArray[TypeNode]?
    }

    ExprWithTypeArguments::new

    fn ExprWithTypeArguments::new(expression : Expr, type_arguments : NodeArray[TypeNode]?) -> ExprWithTypeArguments

    ForInStmt

    pub struct ForInStmt {
    initializer : ForInitializer
    expression : Expr
    statement : Stmt
    }

    For-in Stmt
    impl Eq for ForInStmt
    impl Show for ForInStmt

    ForInStmt::new

    fn ForInStmt::new(initializer : ForInitializer, expression : Expr, statement : Stmt) -> ForInStmt

    ForInitializer

    pub enum ForInitializer {
    VariableDeclList(NodeArray[VariableDecl])
    UsingDeclList(NodeArray[UsingDecl], Bool)
    Expr(Expr)
    }

    ForOfStmt

    pub struct ForOfStmt {
    initializer : ForInitializer
    expression : Expr
    statement : Stmt
    is_await : Bool
    }

    For-of Stmt
    impl Eq for ForOfStmt
    impl Show for ForOfStmt

    ForOfStmt::new

    fn ForOfStmt::new(initializer : ForInitializer, expression : Expr, statement : Stmt, is_await : Bool) -> ForOfStmt

    ForStmt

    pub struct ForStmt {
    initializer : ForInitializer?
    condition : Expr?
    incrementor : Expr?
    statement : Stmt
    }

    For Stmt
    impl Eq for ForStmt
    impl Show for ForStmt

    ForStmt::new

    fn ForStmt::new(initializer : ForInitializer?, condition : Expr?, incrementor : Expr?, statement : Stmt) -> ForStmt

    FunctionDecl

    pub struct FunctionDecl {
    doc_comment : String?
    modifiers : TopLevelModifiers
    is_async : Bool
    is_generator : Bool
    name : Identifier?
    type_parameters : NodeArray[TypeParameterDecl]?
    parameters : NodeArray[ParameterDecl]
    type_node : TypeNode?
    body : Array[Stmt]?
    }

    Function Decl
    impl Eq for FunctionDecl

    FunctionDecl::new

    fn FunctionDecl::new(doc_comment : String?, modifiers : TopLevelModifiers, is_async : Bool, is_generator : Bool, name : Identifier?, type_parameters : NodeArray[TypeParameterDecl]?, parameters : NodeArray[ParameterDecl], type_node : TypeNode?, body : Array[Stmt]?) -> FunctionDecl

    FunctionExpr

    pub struct FunctionExpr {
    is_async : Bool
    is_generator : Bool
    name : Identifier?
    type_parameters : NodeArray[TypeParameterDecl]?
    parameters : NodeArray[ParameterDecl]
    type_node : TypeNode?
    body : Array[Stmt]?
    }

    Function expression (e.g., function foo() {}, function*() {})
    impl Eq for FunctionExpr

    FunctionExpr::new

    fn FunctionExpr::new(is_async : Bool, is_generator : Bool, name : Identifier?, type_parameters : NodeArray[TypeParameterDecl]?, parameters : NodeArray[ParameterDecl], type_node : TypeNode?, body : Array[Stmt]?) -> FunctionExpr

    FunctionTypeNode

    pub struct FunctionTypeNode {
    type_parameters : NodeArray[TypeParameterDecl]?
    parameters : NodeArray[ParameterDecl]
    type_node : TypeNode?
    }

    FunctionTypeNode::new

    fn FunctionTypeNode::new(type_parameters : NodeArray[TypeParameterDecl]?, parameters : NodeArray[ParameterDecl], type_node : TypeNode?) -> FunctionTypeNode

    GetAccessorDecl

    pub struct GetAccessorDecl {
    doc_comment : String?
    decorators : NodeArray[Expr]?
    modifiers : ClassMemberModifiers
    name : PropertyName
    parameters : NodeArray[ParameterDecl]
    type_node : TypeNode?
    body : Array[Stmt]?
    }

    GetAccessorDecl::new

    fn GetAccessorDecl::new(doc_comment : String?, decorators : NodeArray[Expr]?, modifiers : ClassMemberModifiers, name : PropertyName, parameters : NodeArray[ParameterDecl], type_node : TypeNode?, body : Array[Stmt]?) -> GetAccessorDecl

    HeritageClause

    pub struct HeritageClause {
    kind : HeritageKind
    types : NodeArray[ExprWithTypeArguments]
    }

    Heritage clause (extends/implements)

    HeritageClause::new

    HeritageKind

    pub enum HeritageKind {
    Extends
    Implements
    }

    Heritage clause kinds
    impl Eq for HeritageKind

    Identifier

    pub struct Identifier {
    text : String
    has_extended_unicode_escape : Bool
    is_in_jsdoc_namespace : Bool
    span : Span
    }

    Identifier node
    impl Eq for Identifier
    impl Show for Identifier

    Identifier::new

    fn Identifier::new(text : String, span : Span) -> Identifier

    IfStmt

    pub struct IfStmt {
    expression : Expr
    then_statement : Stmt
    else_statement : Stmt?
    }

    If Stmt
    impl Eq for IfStmt
    impl Show for IfStmt

    IfStmt::new

    fn IfStmt::new(expression : Expr, then_statement : Stmt, else_statement : Stmt?) -> IfStmt

    ImportAttribute

    pub struct ImportAttribute {
    name : ImportAttributeName
    value : Expr
    }

    ImportAttribute::new

    ImportAttributeName

    pub enum ImportAttributeName {
    Identifier(Identifier)
    StringLiteral(StringLiteral)
    }

    ImportAttributes

    pub struct ImportAttributes {
    elements : NodeArray[ImportAttribute]
    }

    ImportAttributes::new

    ImportClause

    pub struct ImportClause {
    is_type_only : Bool
    name : Identifier?
    named_bindings : NamedImportBindings?
    }

    impl Eq for ImportClause

    ImportClause::new

    fn ImportClause::new(is_type_only : Bool, name : Identifier?, named_bindings : NamedImportBindings?) -> ImportClause

    ImportDecl

    pub struct ImportDecl {
    import_clause : ImportClause?
    module_specifier : Expr
    attributes : ImportAttributes?
    phase : ImportPhase
    }

    impl Eq for ImportDecl
    impl Show for ImportDecl

    ImportDecl::new

    fn ImportDecl::new(import_clause : ImportClause?, module_specifier : Expr, attributes : ImportAttributes?, phase : ImportPhase) -> ImportDecl

    ImportEqualsDecl

    pub struct ImportEqualsDecl {
    is_type_only : Bool
    name : Identifier
    module_ref : ImportEqualsModuleRef
    }

    ImportEqualsDecl::new

    fn ImportEqualsDecl::new(is_type_only : Bool, name : Identifier, module_ref : ImportEqualsModuleRef) -> ImportEqualsDecl

    ImportEqualsModuleRef

    pub enum ImportEqualsModuleRef {
    EntityName(EntityName)
    ExternalModuleRef(Expr)
    }

    ImportPhase

    pub enum ImportPhase {
    Normal
    Type
    Defer
    }

    Import/Export declarations
    impl Eq for ImportPhase
    impl Show for ImportPhase

    ImportSpecifier

    pub struct ImportSpecifier {
    is_type_only : Bool
    property_name : Identifier?
    name : Identifier
    }

    ImportSpecifier::new

    fn ImportSpecifier::new(is_type_only : Bool, property_name : Identifier?, name : Identifier) -> ImportSpecifier

    ImportTypeNode

    pub struct ImportTypeNode {
    argument : Expr
    qualifier : EntityName?
    type_arguments : NodeArray[TypeNode]?
    }

    Import type (e.g., import("x").Foo)

    ImportTypeNode::new

    fn ImportTypeNode::new(argument : Expr, qualifier : EntityName?, type_arguments : NodeArray[TypeNode]?) -> ImportTypeNode

    IndexSignatureDecl

    pub struct IndexSignatureDecl {
    is_readonly : Bool
    parameters : NodeArray[ParameterDecl]
    type_node : TypeNode
    }

    IndexSignatureDecl::new

    fn IndexSignatureDecl::new(is_readonly : Bool, parameters : NodeArray[ParameterDecl], type_node : TypeNode) -> IndexSignatureDecl

    IndexedAccessTypeNode

    pub struct IndexedAccessTypeNode {
    object_type : TypeNode
    index_type : TypeNode
    }

    Indexed access type (e.g., T[K])

    IndexedAccessTypeNode::new

    fn IndexedAccessTypeNode::new(object_type : TypeNode, index_type : TypeNode) -> IndexedAccessTypeNode

    InterfaceDecl

    pub struct InterfaceDecl {
    doc_comment : String?
    modifiers : TopLevelModifiers
    name : Identifier
    type_parameters : NodeArray[TypeParameterDecl]?
    heritage_clauses : NodeArray[HeritageClause]?
    members : NodeArray[TypeElement]
    }

    Interface Decl
    impl Eq for InterfaceDecl

    InterfaceDecl::new

    fn InterfaceDecl::new(doc_comment : String?, modifiers : TopLevelModifiers, name : Identifier, type_parameters : NodeArray[TypeParameterDecl]?, heritage_clauses : NodeArray[HeritageClause]?, members : NodeArray[TypeElement]) -> InterfaceDecl

    LabeledStmt

    pub struct LabeledStmt {
    label : Identifier
    statement : Stmt
    }

    Labeled Stmt
    impl Eq for LabeledStmt
    impl Show for LabeledStmt

    LabeledStmt::new

    fn LabeledStmt::new(label : Identifier, statement : Stmt) -> LabeledStmt

    LexKind

    pub enum LexKind {
    Identifier(String)
    PrivateIdentifier(String)
    Number(String)
    String(String)
    Regex(String)
    DocComment(String)
    NoSubTemplate(String, String)
    TemplateHead(String, String)
    TemplateMiddle(String, String)
    TemplateTail(String, String)
    KeywordLet
    KeywordConst
    KeywordVar
    KeywordUsing
    KeywordFunction
    KeywordReturn
    KeywordIf
    KeywordElse
    KeywordWhile
    KeywordFor
    KeywordDo
    KeywordBreak
    KeywordContinue
    KeywordSwitch
    KeywordCase
    KeywordDefault
    KeywordDebugger
    KeywordTry
    KeywordCatch
    KeywordFinally
    KeywordThrow
    KeywordWith
    KeywordNew
    KeywordClass
    KeywordInterface
    KeywordType
    KeywordEnum
    KeywordModule
    KeywordNamespace
    KeywordImport
    KeywordExport
    KeywordAssert
    KeywordGlobal
    KeywordFrom
    KeywordExtends
    KeywordImplements
    KeywordIn
    KeywordInstanceof
    KeywordOf
    KeywordAs
    KeywordSatisfies
    KeywordDelete
    KeywordTypeof
    KeywordVoid
    KeywordAwait
    KeywordYield
    KeywordThis
    KeywordSuper
    KeywordTrue
    KeywordFalse
    KeywordNull
    LParen
    RParen
    LBrace
    RBrace
    LBracket
    RBracket
    Comma
    Dot
    DotDotDot
    Semicolon
    Colon
    Question
    QuestionDot
    Plus
    PlusPlus
    PlusEq
    Minus
    MinusMinus
    MinusEq
    Star
    StarStar
    StarEq
    StarStarEq
    Slash
    SlashEq
    Percent
    PercentEq
    Bang
    Tilde
    Eq
    EqEq
    Arrow
    EqEqEq
    BangEq
    BangEqEq
    Lt
    LtLt
    LtLtEq
    LtSlash
    Gt
    GtGt
    GtGtGt
    GtGtEq
    GtGtGtEq
    LtEq
    GtEq
    Ampersand
    AmpAmp
    AmpersandEq
    AmpAmpEq
    Bar
    BarBar
    BarEq
    BarBarEq
    Caret
    CaretEq
    QuestionQuestion
    QuestionQuestionEq
    At
    Eof
    }

    impl Eq for LexKind

    LexToken

    pub struct LexToken {
    kind : LexKind
    start : Int
    end : Int
    has_leading_line_break : Bool
    }

    impl Show for LexToken

    MappedTypeNode

    pub struct MappedTypeNode {
    is_readonly : Bool
    type_parameter : TypeParameterDecl
    name_type : TypeNode?
    is_optional : Bool
    type_node : TypeNode?
    }

    Mapped type (e.g., { [K in keyof T]?: U })

    MappedTypeNode::new

    fn MappedTypeNode::new(is_readonly : Bool, type_parameter : TypeParameterDecl, name_type : TypeNode?, is_optional : Bool, type_node : TypeNode?) -> MappedTypeNode

    MetaPropertyKind

    pub enum MetaPropertyKind {
    NewTarget
    ImportMeta
    }

    Meta property (e.g., new.target, import.meta)

    MethodDecl

    pub struct MethodDecl {
    doc_comment : String?
    decorators : NodeArray[Expr]?
    modifiers : ClassMemberModifiers
    is_generator : Bool
    name : PropertyName
    is_optional : Bool
    type_parameters : NodeArray[TypeParameterDecl]?
    parameters : NodeArray[ParameterDecl]
    type_node : TypeNode?
    body : Array[Stmt]?
    }

    impl Eq for MethodDecl
    impl Show for MethodDecl

    MethodDecl::new

    fn MethodDecl::new(doc_comment : String?, decorators : NodeArray[Expr]?, modifiers : ClassMemberModifiers, is_generator : Bool, name : PropertyName, is_optional : Bool, type_parameters : NodeArray[TypeParameterDecl]?, parameters : NodeArray[ParameterDecl], type_node : TypeNode?, body : Array[Stmt]?) -> MethodDecl

    MethodSignature

    pub struct MethodSignature {
    doc_comment : String?
    name : PropertyName
    is_optional : Bool
    type_parameters : NodeArray[TypeParameterDecl]?
    parameters : NodeArray[ParameterDecl]
    type_node : TypeNode?
    }

    MethodSignature::new

    fn MethodSignature::new(doc_comment : String?, name : PropertyName, is_optional : Bool, type_parameters : NodeArray[TypeParameterDecl]?, parameters : NodeArray[ParameterDecl], type_node : TypeNode?) -> MethodSignature

    ModifierKind

    pub enum ModifierKind {
    Abstract
    Accessor
    Async
    Const
    Declare
    Default
    Export
    In
    Public
    Private
    Protected
    Readonly
    Override
    Out
    Static
    }

    Legacy ModifierKind enum (kept for backward compatibility during migration)
    impl Eq for ModifierKind

    ModuleBody

    pub enum ModuleBody {
    ModuleBlock(NodeArray[Stmt])
    ModuleDecl(ModuleDecl)
    }

    impl Eq for ModuleBody
    impl Show for ModuleBody

    ModuleDecl

    pub struct ModuleDecl {
    doc_comment : String?
    modifiers : TopLevelModifiers
    name : ModuleName
    body : ModuleBody?
    }

    Module/Namespace Decl
    impl Eq for ModuleDecl
    impl Show for ModuleDecl

    ModuleDecl::new

    fn ModuleDecl::new(doc_comment : String?, modifiers : TopLevelModifiers, name : ModuleName, body : ModuleBody?) -> ModuleDecl

    ModuleName

    pub enum ModuleName {
    Identifier(Identifier)
    StringLiteral(StringLiteral)
    }

    impl Eq for ModuleName
    impl Show for ModuleName

    NamedExportBindings

    pub enum NamedExportBindings {
    NamespaceExport(Identifier)
    NamedExports(NodeArray[ExportSpecifier])
    }

    NamedImportBindings

    pub enum NamedImportBindings {
    NamespaceImport(Identifier)
    NamedImports(NodeArray[ImportSpecifier])
    }

    NamespaceExportDecl

    pub struct NamespaceExportDecl {
    name : Identifier
    }

    NamespaceExportDecl::new

    NewExpr

    pub struct NewExpr {
    expression : Expr
    type_arguments : NodeArray[TypeNode]?
    arguments : NodeArray[Expr]?
    }

    New Expr (e.g., new Class())
    impl Eq for NewExpr
    impl Show for NewExpr

    NewExpr::new

    fn NewExpr::new(expression : Expr, type_arguments : NodeArray[TypeNode]?, arguments : NodeArray[Expr]?) -> NewExpr

    NoSubstitutionTemplateLiteral

    pub struct NoSubstitutionTemplateLiteral {
    text : String
    raw_text : String
    is_unterminated : Bool
    has_extended_unicode_escape : Bool
    }

    Template literal

    NoSubstitutionTemplateLiteral::new

    fn NoSubstitutionTemplateLiteral::new(text : String, raw_text : String) -> NoSubstitutionTemplateLiteral

    NodeArray

    pub struct NodeArray[T] {
    elements : Array[T]
    start : Span
    end : Span
    has_trailing_comma : Bool
    is_missing_list : Bool
    }

    Node array - a list of nodes with text range information
    impl Eq for NodeArray[T]
    impl Show for NodeArray[T]

    NodeArray::get

    fn[T] NodeArray::get(self : NodeArray[T], index : Int) -> T?

    NodeArray::iter

    fn[T] NodeArray::iter(self : NodeArray[T]) -> Iter[T]

    NodeArray::length

    fn[T] NodeArray::length(self : NodeArray[T]) -> Int

    NumericLiteral

    pub struct NumericLiteral {
    text : String
    is_unterminated : Bool
    has_extended_unicode_escape : Bool
    is_octal_literal : Bool
    span : Span
    }

    Numeric literal

    NumericLiteral::new

    fn NumericLiteral::new(text : String, span : Span) -> NumericLiteral

    ObjectLiteralElementLike

    pub enum ObjectLiteralElementLike {
    PropertyAssignment(PropertyAssignment)
    ShorthandPropertyAssignment(ShorthandPropertyAssignment)
    SpreadAssignment(Expr)
    MethodDecl(MethodDecl)
    GetAccessor(GetAccessorDecl)
    SetAccessor(SetAccessorDecl)
    }

    Object literal Elem types

    ParameterDecl

    pub struct ParameterDecl {
    modifiers : ParameterModifiers
    is_rest : Bool
    name : BindingName
    is_optional : Bool
    type_node : TypeNode?
    initializer : Expr?
    span : Span
    }

    Param Decl
    impl Eq for ParameterDecl

    ParameterDecl::new

    fn ParameterDecl::new(name : BindingName, modifiers : ParameterModifiers, is_rest : Bool, is_optional : Bool, type_node : TypeNode?, initializer : Expr?, span : Span) -> ParameterDecl

    ParameterModifiers

    pub struct ParameterModifiers {
    accessibility : AccessibilityModifier?
    is_readonly : Bool
    }

    Modifiers for constructor parameters (can be property declarations)

    ParameterModifiers::new

    ParseErrorKind

    pub enum ParseErrorKind {
    UnexpectedToken(LexKind)
    UnexpectedPrimary(LexKind)
    ExpectedToken(LexKind, LexKind)
    ExpectedNumericLiteralAfterMinus(LexKind)
    ExpectedStringLiteralInImportType(LexKind)
    ExpectedStringLiteralInModuleSpecifier(LexKind)
    ExpectedTemplateLiteralTypeSpan(LexKind)
    ExpectedTemplateSpan(LexKind)
    InvalidBinaryOperator(LexKind)
    InvalidNamespaceNameStringLiteral(LexKind)
    StringLiteralModuleNameOnlyInDeclare
    InvalidModuleBody
    ModuleBodyRequiredWithoutDeclare
    DecoratorsNotAllowedHere
    LineBreakAfterThrow
    LineBreakAfterTypeKeyword
    ForAwaitMustUseOf(LexKind)
    TopLevelAwaitOnlyInModule
    MissingFunctionBodyOrSemicolon(LexKind)
    LeadingCommaInImportAttributes
    LeadingCommaInNamedImports
    LeadingCommaInNamedExports
    MissingDeclarationAfterModifiers(LexKind)
    DuplicateModifier(ModifierKind)
    InvalidVarianceOrder(ModifierKind, ModifierKind)
    YieldOnlyInGenerator
    RestParameterMustBeLastInParameterList
    RestBindingMustBeLastInPattern
    DeclarationFileStatementNotAllowed
    ExportAssignmentOnlyInDeclarationFile
    ExportAssignmentCannotBeUsedWithOtherExports
    ExportNamespaceOnlyInDeclarationFile
    ExportNamespaceOnlyInModule
    AwaitOnlyInAsyncFunction
    AwaitUsingOnlyInAsyncFunction
    ForAwaitOnlyInAsyncFunction
    ForAwaitOnlyInModule
    AwaitUsingOnlyInModule
    IdentifierAfterNumericLiteral
    NumericSeparatorAtEnd
    InvalidChar(Char)
    UnterminatedString
    InvalidSlice(Int)
    MultipleAccessibilityModifiers
    InvalidModifierForClassMember(ModifierKind)
    InvalidModifierForParameter(ModifierKind)
    InvalidModifierForTopLevel(ModifierKind)
    InvalidModifierForTypeParameter(ModifierKind)
    AbstractAndStaticCannotCombine
    AbstractMembersCannotBePrivate
    AbstractAndAsyncCannotCombine
    AccessorAndAbstractCannotCombine
    AbstractOnlyValidOnClasses
    ConstOnlyValidOnEnums
    InferTypeOnlyInConditionalExtends
    }

    Parser

    pub struct Parser {
    tokens : Array[LexToken]
    index : Int
    line_starts : Array[Int]
    is_module : Bool
    script_kind : ScriptKind
    in_generator : Int
    in_function : Int
    in_async_function : Int
    in_conditional_extends : Int
    has_import_syntax : Bool
    has_export_syntax : Bool
    has_non_namespace_export : Bool
    has_export_assignment : Bool
    export_namespace_range : (Int, Int)?
    top_level_await_range : (Int, Int)?
    for_await_range : (Int, Int)?
    await_using_range : (Int, Int)?
    pending_doc_comment : String?
    allow_doc_comments : Bool
    }

    impl Show for Parser

    Parser::new

    fn Parser::new(text : String, script_kind? : ScriptKind, is_module? : Bool) -> Parser raise ParseError

    Parser::parse_source_file

    fn Parser::parse_source_file(self : Parser, file_name : String, text : String) -> SourceFile raise ParseError

    PostfixUnaryExpr

    pub struct PostfixUnaryExpr {
    operand : Expr
    operator : UnaryOperator
    }

    Postfix unary Expr (e.g., x++, y--)

    PostfixUnaryExpr::new

    fn PostfixUnaryExpr::new(operand : Expr, operator : UnaryOperator) -> PostfixUnaryExpr

    PrefixUnaryExpr

    pub struct PrefixUnaryExpr {
    operator : UnaryOperator
    operand : Expr
    }

    Prefix unary Expr (e.g., ++x, -y, !z)

    PrefixUnaryExpr::new

    fn PrefixUnaryExpr::new(operator : UnaryOperator, operand : Expr) -> PrefixUnaryExpr

    PropertyAccessExpr

    pub struct PropertyAccessExpr {
    expression : Expr
    is_null_coalescing : Bool
    name : Identifier
    }

    Property access Expr (e.g., obj.prop)

    PropertyAccessExpr::new

    fn PropertyAccessExpr::new(expression : Expr, name : Identifier, is_null_coalescing : Bool) -> PropertyAccessExpr

    PropertyAssignment

    pub struct PropertyAssignment {
    name : PropertyName
    initializer : Expr
    }

    Property assignment (e.g., a: expr)

    PropertyAssignment::new

    fn PropertyAssignment::new(name : PropertyName, initializer : Expr) -> PropertyAssignment

    PropertyDecl

    pub struct PropertyDecl {
    doc_comment : String?
    decorators : NodeArray[Expr]?
    modifiers : ClassMemberModifiers
    name : PropertyName
    is_optional : Bool
    is_definite : Bool
    type_node : TypeNode?
    initializer : Expr?
    }

    impl Eq for PropertyDecl

    PropertyDecl::new

    fn PropertyDecl::new(doc_comment : String?, decorators : NodeArray[Expr]?, modifiers : ClassMemberModifiers, name : PropertyName, is_optional : Bool, is_definite : Bool, type_node : TypeNode?, initializer : Expr?) -> PropertyDecl

    PropertyName

    pub enum PropertyName {
    Identifier(Identifier)
    StringLiteral(StringLiteral)
    NumericLiteral(NumericLiteral)
    ComputedPropertyName(Expr)
    PrivateIdentifier(String)
    }

    Property name - can be various types
    impl Eq for PropertyName

    PropertySignature

    pub struct PropertySignature {
    doc_comment : String?
    is_readonly : Bool
    name : PropertyName
    is_optional : Bool
    type_node : TypeNode?
    }

    Type elements for interfaces and type literals

    PropertySignature::new

    fn PropertySignature::new(doc_comment : String?, is_readonly : Bool, name : PropertyName, is_optional : Bool, type_node : TypeNode?) -> PropertySignature

    QualifiedName

    pub struct QualifiedName {
    left : EntityName
    right : Identifier
    }

    Qualified name (e.g., A.B.C)
    impl Eq for QualifiedName

    QualifiedName::new

    fn QualifiedName::new(left : EntityName, right : Identifier) -> QualifiedName

    RegularExprLiteral

    pub struct RegularExprLiteral {
    text : String
    is_unterminated : Bool
    has_extended_unicode_escape : Bool
    span : Span
    }

    Regular Expr literal

    RegularExprLiteral::new

    fn RegularExprLiteral::new(text : String, span : Span) -> RegularExprLiteral

    SatisfiesExpr

    pub struct SatisfiesExpr {
    expression : Expr
    type_node : TypeNode
    }

    Satisfies Expr (e.g., expr satisfies T)
    impl Eq for SatisfiesExpr

    SatisfiesExpr::new

    fn SatisfiesExpr::new(expression : Expr, type_node : TypeNode) -> SatisfiesExpr

    ScriptKind

    pub(all) enum ScriptKind {
    Unknown
    JS
    JSX
    TS
    TSX
    TSDeclarations
    External
    JSON
    Deferred
    }

    Script kind
    impl Eq for ScriptKind
    impl Show for ScriptKind

    ScriptTarget

    pub(all) enum ScriptTarget {
    ES3
    ES5
    ES2015
    ES2016
    ES2017
    ES2018
    ES2019
    ES2020
    ES2021
    ES2022
    ES2023
    ESNext
    Latest
    }

    Script target (ECMAScript version)
    impl Eq for ScriptTarget

    SetAccessorDecl

    pub struct SetAccessorDecl {
    doc_comment : String?
    decorators : NodeArray[Expr]?
    modifiers : ClassMemberModifiers
    name : PropertyName
    parameters : NodeArray[ParameterDecl]
    body : Array[Stmt]?
    }

    SetAccessorDecl::new

    fn SetAccessorDecl::new(doc_comment : String?, decorators : NodeArray[Expr]?, modifiers : ClassMemberModifiers, name : PropertyName, parameters : NodeArray[ParameterDecl], body : Array[Stmt]?) -> SetAccessorDecl

    ShorthandPropertyAssignment

    pub struct ShorthandPropertyAssignment {
    name : Identifier
    object_assignment_initializer : Expr?
    }

    Shorthand property assignment (e.g., {a})

    ShorthandPropertyAssignment::new

    SourceFile

    pub struct SourceFile {
    stmts : NodeArray[Stmt]
    file_name : String
    text : String
    script_kind : ScriptKind
    is_module : Bool
    }

    Source file - the root of the AST
    impl Show for SourceFile

    Span

    pub struct Span {
    start : Int
    end : Int
    line : Int
    column : Int
    end_line : Int
    end_column : Int
    }

    Core AST node types and structures
    impl Eq for Span
    impl Show for Span

    Span::with_line_info

    fn Span::with_line_info(start : Int, end : Int, line : Int, column : Int, end_line : Int, end_column : Int) -> Span

    Stmt

    pub struct Stmt {
    kind : StmtKind
    span : Span
    }

    Statement AST node
    impl Eq for Stmt
    impl Show for Stmt

    Stmt::new

    fn Stmt::new(kind : StmtKind, span : Span) -> Stmt

    StmtKind

    pub enum StmtKind {
    Block(Array[Stmt])
    VariableStmt(VariableStmt)
    UsingStmt(UsingStmt)
    ExprStmt(Expr)
    IfStmt(IfStmt)
    DoStmt(DoStmt)
    WhileStmt(WhileStmt)
    ForStmt(ForStmt)
    ForInStmt(ForInStmt)
    ForOfStmt(ForOfStmt)
    ContinueStmt(Identifier?)
    BreakStmt(Identifier?)
    ReturnStmt(Expr?)
    WithStmt(WithStmt)
    SwitchStmt(SwitchStmt)
    LabeledStmt(LabeledStmt)
    ThrowStmt(Expr)
    TryStmt(TryStmt)
    DebuggerStmt
    FunctionDecl(FunctionDecl)
    ClassDecl(ClassDecl)
    InterfaceDecl(InterfaceDecl)
    TypeAliasDecl(TypeAliasDecl)
    EnumDecl(EnumDecl)
    ModuleDecl(ModuleDecl)
    ImportDecl(ImportDecl)
    ImportEqualsDecl(ImportEqualsDecl)
    ExportDecl(ExportDecl)
    ExportAssignment(ExportAssignment)
    NamespaceExportDecl(NamespaceExportDecl)
    EmptyStmt
    }

    Statement node kinds
    impl Eq for StmtKind
    impl Show for StmtKind

    StringLiteral

    pub struct StringLiteral {
    text : String
    is_unterminated : Bool
    has_extended_unicode_escape : Bool
    is_octal_literal : Bool
    span : Span
    }

    String literal
    impl Eq for StringLiteral

    StringLiteral::new

    fn StringLiteral::new(text : String, span : Span) -> StringLiteral

    SwitchStmt

    pub struct SwitchStmt {
    expression : Expr
    case_block : CaseBlock
    }

    Switch Stmt
    impl Eq for SwitchStmt
    impl Show for SwitchStmt

    SwitchStmt::new

    fn SwitchStmt::new(expression : Expr, case_block : CaseBlock) -> SwitchStmt

    TaggedTemplateExpr

    pub struct TaggedTemplateExpr {
    tag : Expr
    type_arguments : NodeArray[TypeNode]?
    template : Expr
    }

    Tagged template Expr (e.g., tagtext)

    TaggedTemplateExpr::new

    fn TaggedTemplateExpr::new(tag : Expr, type_arguments : NodeArray[TypeNode]?, template : Expr) -> TaggedTemplateExpr

    TemplateExpr

    pub struct TemplateExpr {
    head : TemplateHead
    template_spans : NodeArray[TemplateSpan]
    }

    Template Expr with substitutions
    impl Eq for TemplateExpr

    TemplateExpr::new

    fn TemplateExpr::new(head : TemplateHead, template_spans : NodeArray[TemplateSpan]) -> TemplateExpr

    TemplateHead

    pub struct TemplateHead {
    text : String
    raw_text : String
    is_unterminated : Bool
    has_extended_unicode_escape : Bool
    }

    Template head
    impl Eq for TemplateHead

    TemplateHead::new

    fn TemplateHead::new(text : String, raw_text : String) -> TemplateHead

    TemplateLiteralTypeNode

    pub struct TemplateLiteralTypeNode {
    head : TemplateHead
    template_spans : NodeArray[TemplateLiteralTypeSpan]
    }

    TemplateLiteralTypeNode::new

    TemplateLiteralTypeSpan

    pub struct TemplateLiteralTypeSpan {
    type_node : TypeNode
    literal : TemplateMiddleOrTemplateTail
    }

    TemplateLiteralTypeSpan::new

    TemplateMiddle

    pub struct TemplateMiddle {
    text : String
    raw_text : String
    is_unterminated : Bool
    has_extended_unicode_escape : Bool
    }

    Template middle

    TemplateMiddle::new

    fn TemplateMiddle::new(text : String, raw_text : String) -> TemplateMiddle

    TemplateMiddleOrTemplateTail

    pub enum TemplateMiddleOrTemplateTail {
    TemplateMiddle(TemplateMiddle)
    TemplateTail(TemplateTail)
    }

    TemplateSpan

    pub struct TemplateSpan {
    expression : Expr
    literal : TemplateMiddleOrTemplateTail
    }

    impl Eq for TemplateSpan

    TemplateSpan::new

    fn TemplateSpan::new(expression : Expr, literal : TemplateMiddleOrTemplateTail) -> TemplateSpan

    TemplateTail

    pub struct TemplateTail {
    text : String
    raw_text : String
    is_unterminated : Bool
    has_extended_unicode_escape : Bool
    }

    Template tail
    impl Eq for TemplateTail

    TemplateTail::new

    fn TemplateTail::new(text : String, raw_text : String) -> TemplateTail

    TopLevelModifiers

    pub struct TopLevelModifiers {
    is_export : Bool
    is_default : Bool
    is_declare : Bool
    }

    Modifiers for top-level declarations

    TopLevelModifiers::new

    TryStmt

    pub struct TryStmt {
    try_block : Array[Stmt]
    catch_clause : CatchClause?
    finally_block : Array[Stmt]?
    }

    Try Stmt
    impl Eq for TryStmt
    impl Show for TryStmt

    TryStmt::new

    fn TryStmt::new(try_block : Array[Stmt], catch_clause : CatchClause?, finally_block : Array[Stmt]?) -> TryStmt

    TupleElement

    pub struct TupleElement {
    label : Identifier?
    is_optional : Bool
    is_rest : Bool
    type_node : TypeNode
    span : Span
    }

    impl Eq for TupleElement

    TupleElement::new

    fn TupleElement::new(label : Identifier?, is_optional : Bool, is_rest : Bool, type_node : TypeNode, span : Span) -> TupleElement

    TypeAliasDecl

    pub struct TypeAliasDecl {
    doc_comment : String?
    modifiers : TopLevelModifiers
    name : Identifier
    type_parameters : NodeArray[TypeParameterDecl]?
    type_node : TypeNode
    }

    Type alias Decl
    impl Eq for TypeAliasDecl

    TypeAliasDecl::new

    fn TypeAliasDecl::new(doc_comment : String?, modifiers : TopLevelModifiers, name : Identifier, type_parameters : NodeArray[TypeParameterDecl]?, type_node : TypeNode) -> TypeAliasDecl

    TypeAssertionExpr

    pub struct TypeAssertionExpr {
    type_node : TypeNode
    expression : Expr
    }

    TypeAssertionExpr::new

    fn TypeAssertionExpr::new(type_node : TypeNode, expression : Expr) -> TypeAssertionExpr

    TypeElement

    pub enum TypeElement {
    PropertySignature(PropertySignature)
    MethodSignature(MethodSignature)
    CallSignature(CallSignatureDecl)
    ConstructSignature(ConstructSignatureDecl)
    IndexSignature(IndexSignatureDecl)
    GetAccessor(GetAccessorDecl)
    SetAccessor(SetAccessorDecl)
    }

    TypeElement enum for interface and type literal members
    impl Eq for TypeElement
    impl Show for TypeElement

    TypeKeyword

    pub enum TypeKeyword {
    Any
    Unknown
    Number
    BigInt
    Object
    Boolean
    String
    Symbol
    Void
    Undefined
    Null
    Never
    }

    Type keyword kinds
    impl Eq for TypeKeyword
    impl Show for TypeKeyword

    TypeNode

    pub struct TypeNode {
    kind : TypeNodeKind
    span : Span
    }

    Type AST node
    impl Eq for TypeNode
    impl Show for TypeNode

    TypeNode::new

    fn TypeNode::new(kind : TypeNodeKind, span : Span) -> TypeNode

    TypeNodeKind

    pub enum TypeNodeKind {
    KeywordType(TypeKeyword)
    TypeReference(TypeReferenceNode)
    ArrayType(TypeNode)
    TupleType(NodeArray[TupleElement])
    UnionType(NodeArray[TypeNode])
    IntersectionType(NodeArray[TypeNode])
    FunctionType(FunctionTypeNode)
    ConstructorType(ConstructorTypeNode)
    TypeLiteral(NodeArray[TypeElement])
    LiteralType(Expr)
    ThisType
    ParenthesizedType(TypeNode)
    TypeQuery(TypeQueryNode)
    TypeOperator(TypeOperatorNode)
    IndexedAccessType(IndexedAccessTypeNode)
    ConditionalType(ConditionalTypeNode)
    MappedType(MappedTypeNode)
    InferType(TypeParameterDecl)
    ImportType(ImportTypeNode)
    TemplateLiteralType(TemplateLiteralTypeNode)
    }

    Type node kinds
    impl Eq for TypeNodeKind

    TypeOperatorKind

    pub enum TypeOperatorKind {
    KeyOf
    Readonly
    Unique
    }

    TypeOperatorNode

    pub struct TypeOperatorNode {
    operator : TypeOperatorKind
    type_node : TypeNode
    }

    Type operator (e.g., keyof, readonly, unique)

    TypeOperatorNode::new

    fn TypeOperatorNode::new(operator : TypeOperatorKind, type_node : TypeNode) -> TypeOperatorNode

    TypeParameterDecl

    pub struct TypeParameterDecl {
    modifiers : TypeParameterModifiers
    name : Identifier
    constraint : TypeNode?
    default_type : TypeNode?
    }

    Type Param Decl

    TypeParameterDecl::new

    fn TypeParameterDecl::new(name : Identifier, modifiers : TypeParameterModifiers, constraint : TypeNode?, default_type : TypeNode?) -> TypeParameterDecl

    TypeParameterModifiers

    pub struct TypeParameterModifiers {
    variance : VarianceModifier?
    is_const : Bool
    }

    Modifiers for type parameters

    TypeParameterModifiers::new

    TypeQueryExprName

    pub enum TypeQueryExprName {
    EntityName(EntityName)
    ImportType(ImportTypeNode)
    }

    TypeQueryNode

    pub struct TypeQueryNode {
    expr_name : TypeQueryExprName
    type_arguments : NodeArray[TypeNode]?
    }

    Type query (typeof)
    impl Eq for TypeQueryNode

    TypeQueryNode::new

    fn TypeQueryNode::new(expr_name : TypeQueryExprName, type_arguments : NodeArray[TypeNode]?) -> TypeQueryNode

    TypeReferenceNode

    pub struct TypeReferenceNode {
    type_name : EntityName
    type_arguments : NodeArray[TypeNode]?
    }

    TypeReferenceNode::new

    fn TypeReferenceNode::new(type_name : EntityName, type_arguments : NodeArray[TypeNode]?) -> TypeReferenceNode

    UnaryOperator

    pub enum UnaryOperator {
    PlusPlus
    MinusMinus
    Plus
    Minus
    Tilde
    Exclamation
    }

    Unary operator kinds
    impl Eq for UnaryOperator

    UsingDecl

    pub struct UsingDecl {
    name : Identifier
    type_node : TypeNode?
    initializer : Expr?
    }

    Using Decl (e.g., using x = foo())
    impl Eq for UsingDecl
    impl Show for UsingDecl

    UsingDecl::new

    fn UsingDecl::new(name : Identifier, type_node : TypeNode?, initializer : Expr?) -> UsingDecl

    UsingStmt

    pub struct UsingStmt {
    modifiers : NodeArray[ModifierKind]?
    declaration_list : NodeArray[UsingDecl]
    is_await : Bool
    }

    impl Eq for UsingStmt
    impl Show for UsingStmt

    UsingStmt::new

    fn UsingStmt::new(modifiers : NodeArray[ModifierKind]?, declaration_list : NodeArray[UsingDecl], is_await : Bool) -> UsingStmt

    VariableDecl

    pub struct VariableDecl {
    kind : VariableDeclKind
    name : BindingName
    type_node : TypeNode?
    initializer : Expr?
    }

    Variable Decl (e.g., const x = 1)
    impl Eq for VariableDecl

    VariableDecl::new

    fn VariableDecl::new(kind : VariableDeclKind, name : BindingName, type_node : TypeNode?, initializer : Expr?) -> VariableDecl

    VariableDeclKind

    pub enum VariableDeclKind {
    Let
    Const
    Var
    }

    VariableStmt

    pub struct VariableStmt {
    doc_comment : String?
    modifiers : NodeArray[ModifierKind]?
    declaration_list : NodeArray[VariableDecl]
    }

    impl Eq for VariableStmt

    VariableStmt::new

    fn VariableStmt::new(doc_comment : String?, modifiers : NodeArray[ModifierKind]?, declaration_list : NodeArray[VariableDecl]) -> VariableStmt

    VarianceModifier

    pub enum VarianceModifier {
    In
    Out
    InOut
    }

    Variance modifiers for type parameters (mutually exclusive)

    WhileStmt

    pub struct WhileStmt {
    expression : Expr
    statement : Stmt
    }

    While Stmt
    impl Eq for WhileStmt
    impl Show for WhileStmt

    WhileStmt::new

    fn WhileStmt::new(expression : Expr, statement : Stmt) -> WhileStmt

    WithStmt

    pub struct WithStmt {
    expression : Expr
    statement : Stmt
    }

    With Stmt
    impl Eq for WithStmt
    impl Show for WithStmt

    WithStmt::new

    fn WithStmt::new(expression : Expr, statement : Stmt) -> WithStmt

    YieldExpr

    pub struct YieldExpr {
    is_delegate : Bool
    expression : Expr?
    }

    Yield Expr
    impl Eq for YieldExpr
    impl Show for YieldExpr

    YieldExpr::new

    fn YieldExpr::new(is_delegate : Bool, expression : Expr?) -> YieldExpr