package Ġdev . bl ach ut . svelte . lang . psi Ċ Ċ import Ġcom . intellij . lang . Psi Builder Ċ import Ġcom . intellij . lang . javascript . J ST o ken Types Ċ import Ġcom . intellij . lang . javascript . parsing . JavaScript Parser Ċ import Ġcom . intellij . psi . tree . Token Set Ċ import Ġdev . bl ach ut . svelte . lang . parsing . html . S velte Tag Parsing Ċ Ċ object ĠS velte Tag Element Types Ġ{ ĊĠĠĠ Ġval ĠIF _ START Ġ= Ġobject Ġ: ĠS velte JS Block Lazy ElementType (" IF _ START ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġno Tokens ErrorMessage Ġ= Ġ" expression Ġexpected " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġparse Tokens ( builder : ĠPsi Builder , Ġparser : ĠJavaScript Parser < *, Ġ*, Ġ*, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠJ ST o ken Types . SH ARP ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS velte Tag Parsing . parse Not Allowed Whitespace ( builder , Ġ"# ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠS velte Token Types . IF _ KEYWORD ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser . expression Parser . parse Expression () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠELSE _ CLA USE Ġ= Ġobject Ġ: ĠS velte JS Block Lazy ElementType (" ELSE _ CLA USE ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġno Tokens ErrorMessage Ġ= Ġ" expression Ġexpected " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġparse Tokens ( builder : ĠPsi Builder , Ġparser : ĠJavaScript Parser < *, Ġ*, Ġ*, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠJ ST o ken Types . COL ON ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS velte Tag Parsing . parse Not Allowed Whitespace ( builder , Ġ": ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠS velte Token Types . ELSE _ KEYWORD ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( builder . token Type Ġ=== ĠS velte Token Types . IF _ KEYWORD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . expression Parser . parse Expression () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠE ACH _ START Ġ= Ġobject Ġ: ĠS velte JS Block Lazy ElementType (" EACH _ START ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġno Tokens ErrorMessage Ġ= Ġ" expression Ġexpected " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġparse Tokens ( builder : ĠPsi Builder , Ġparser : ĠJavaScript Parser < *, Ġ*, Ġ*, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠJ ST o ken Types . SH ARP ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS velte Tag Parsing . parse Not Allowed Whitespace ( builder , Ġ"# ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . remap Current Token ( S velte Token Types . EACH _ KEYWORD ) Ġ// Ġtodo Ġmight Ġbe Ġokay Ġto Ġremove Ġall Ġthose Ġremap Current Token ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠJ ST o ken Types . IDENTIFIER Ġ-- Ġfake ĠE ACH _ KEYWORD ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser . expression Parser . parse Expression () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( builder . token Type Ġ=== ĠS velte Token Types . AS _ KEYWORD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . error (" as Ġexpected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser . expression Parser . parse Dest ruct uring Element ( S velte J SE lement Types . PARAMETER , Ġfalse , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( builder . token Type Ġ=== ĠJ ST o ken Types . COMMA ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġdis allow Ġdestruct uring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . expression Parser . parse Dest ruct uring Element ( S velte J SE lement Types . PARAMETER , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( builder . token Type Ġ=== ĠJ ST o ken Types . L PAR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Expression Marker Ġ= Ġbuilder . mark () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . expression Parser . parse Expression () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( builder . token Type Ġ=== ĠJ ST o ken Types . R PAR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . error (" ) Ġexpected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Expression Marker . done ( TAG _ DEPEND ENT _ EXPRESSION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠA WAIT _ START Ġ= Ġobject Ġ: ĠS velte JS Block Lazy ElementType (" AW A IT _ START ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġno Tokens ErrorMessage Ġ= Ġ" expression Ġexpected " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġparse Tokens ( builder : ĠPsi Builder , Ġparser : ĠJavaScript Parser < *, Ġ*, Ġ*, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠJ ST o ken Types . SH ARP ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS velte Tag Parsing . parse Not Allowed Whitespace ( builder , Ġ"# ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠS velte Token Types . AW A IT _ KEYWORD ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser . expression Parser . parse Expression () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( builder . token Type Ġ=== ĠJ ST o ken Types . IDENTIFIER Ġ&& Ġbuilder . token Text Ġ== Ġ" then ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . remap Current Token ( S velte Token Types . THEN _ KEYWORD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . expression Parser . parse Dest ruct uring Element ( S velte J SE lement Types . PARAMETER , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( builder . token Type Ġ=== ĠS velte Token Types . CATCH _ KEYWORD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . expression Parser . parse Dest ruct uring Element ( S velte J SE lement Types . PARAMETER , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠKEY _ START Ġ= Ġobject Ġ: ĠS velte JS Block Lazy ElementType (" KEY _ START ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġno Tokens ErrorMessage Ġ= Ġ" expression Ġexpected " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġparse Tokens ( builder : ĠPsi Builder , Ġparser : ĠJavaScript Parser < *, Ġ*, Ġ*, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠJ ST o ken Types . SH ARP ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS velte Tag Parsing . parse Not Allowed Whitespace ( builder , Ġ"# ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠS velte Token Types . KEY _ KEYWORD ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser . expression Parser . parse Expression () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠTHEN _ CLA USE Ġ= Ġobject Ġ: ĠS velte JS Block Lazy ElementType (" THEN _ CLA USE ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġno Tokens ErrorMessage Ġ= Ġ" expression Ġexpected " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġparse Tokens ( builder : ĠPsi Builder , Ġparser : ĠJavaScript Parser < *, Ġ*, Ġ*, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠJ ST o ken Types . COL ON ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS velte Tag Parsing . parse Not Allowed Whitespace ( builder , Ġ": ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . remap Current Token ( S velte Token Types . THEN _ KEYWORD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠJ ST o ken Types . IDENTIFIER Ġ-- Ġfake ĠTHEN _ KEYWORD ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO ĠCheck Ġweird ĠR BRACE Ġplacement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser . expression Parser . parse Dest ruct uring Element ( S velte J SE lement Types . PARAMETER , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠCATCH _ CLA USE Ġ= Ġobject Ġ: ĠS velte JS Block Lazy ElementType (" CATCH _ CLA USE ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġno Tokens ErrorMessage Ġ= Ġ" expression Ġexpected " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġparse Tokens ( builder : ĠPsi Builder , Ġparser : ĠJavaScript Parser < *, Ġ*, Ġ*, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠJ ST o ken Types . COL ON ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS velte Tag Parsing . parse Not Allowed Whitespace ( builder , Ġ": ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . advance Lexer () Ġ// ĠS velte Token Types . CATCH _ KEYWORD ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser . expression Parser . parse Dest ruct uring Element ( S velte J SE lement Types . PARAMETER , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠTAG _ DEPEND ENT _ EXPRESSION Ġ= ĠS velte J SE lement Type (" TAG _ DEPEND ENT _ EXPRESSION ") ĊĊĠĠĠ Ġval ĠIF _ END Ġ= ĠS velte J SE lement Type (" IF _ END ") ĊĠĠĠ Ġval ĠE ACH _ END Ġ= ĠS velte J SE lement Type (" EACH _ END ") ĊĠĠĠ Ġval ĠA WAIT _ END Ġ= ĠS velte J SE lement Type (" AW A IT _ END ") ĊĠĠĠ Ġval ĠKEY _ END Ġ= ĠS velte J SE lement Type (" KEY _ END ") ĊĊĠĠĠ Ġval ĠSTART _ TAGS Ġ= ĠToken Set . create ( IF _ START , ĠE ACH _ START , ĠA WAIT _ START , ĠKEY _ START ) ĊĠĠĠ Ġval ĠINNER _ TAGS Ġ= ĠToken Set . create ( ELSE _ CLA USE , ĠTHEN _ CLA USE , ĠCATCH _ CLA USE ) ĊĠĠĠ Ġval ĠEND _ TAGS Ġ= ĠToken Set . create ( IF _ END , ĠE ACH _ END , ĠA WAIT _ END , ĠKEY _ END ) ĊĠĠĠ Ġval ĠINITIAL _ TAGS Ġ= ĠToken Set . or Set ( START _ TAGS , ĠINNER _ TAGS ) ĊĠĠĠ Ġval ĠT AIL _ TAGS Ġ= ĠToken Set . or Set ( INNER _ TAGS , ĠEND _ TAGS ) Ċ } Ċ