Merge pull request 'failing test for multiline function' (#6) from multiline-fn into main

Reviewed-on: #6
This commit is contained in:
probablycorey 2025-10-27 19:37:40 +00:00
commit cdcaf5c9d3
4 changed files with 36 additions and 5 deletions

View File

@ -85,6 +85,21 @@ describe('compiler', () => {
expect(`bloop = do: 'bloop' end; bloop`).toEvaluateTo('bloop') expect(`bloop = do: 'bloop' end; bloop`).toEvaluateTo('bloop')
}) })
test('function call with if statement and multiple expressions', () => {
expect(`
abc = do:
if false:
echo nope
end
true
end
abc
`)
.toEvaluateTo(true)
})
test('simple conditionals', () => { test('simple conditionals', () => {
expect(`(3 < 6)`).toEvaluateTo(true) expect(`(3 < 6)`).toEvaluateTo(true)
expect(`(10 > 20)`).toEvaluateTo(false) expect(`(10 > 20)`).toEvaluateTo(false)

View File

@ -204,5 +204,5 @@ expressionWithoutIdentifier {
} }
block { block {
(consumeToTerminator newlineOrSemicolon)* (consumeToTerminator? newlineOrSemicolon)*
} }

View File

@ -7,9 +7,9 @@ import {highlighting} from "./highlight"
const spec_Identifier = {__proto__:null,do:52, end:58, null:74, if:88, elseif:96, else:100} const spec_Identifier = {__proto__:null,do:52, end:58, null:74, if:88, elseif:96, else:100}
export const parser = LRParser.deserialize({ export const parser = LRParser.deserialize({
version: 14, version: 14,
states: ".pQYQbOOO#[QcO'#CrO$UQRO'#CsO$dQcO'#DnO${QbO'#DtOOQ`'#Cu'#CuO%TQbO'#CqO%uOSO'#CzOOQa'#Dr'#DrO&TOpO'#DSO&YQcO'#DqOOQ`'#Do'#DoO&qQbO'#DnO'PQbO'#EROOQ`'#DX'#DXO'nQRO'#DaOOQ`'#Dn'#DnO'sQQO'#DmOOQ`'#Dm'#DmOOQ`'#Db'#DbQYQbOOOOQa'#Dq'#DqOOQ`'#Cp'#CpO'{QbO'#DUOOQ`'#Dp'#DpOOQ`'#Dc'#DcO(VQbO,59ZO'PQbO,59_O'PQbO,59_OOQ`'#Dd'#DdO(sQbO'#CwO({QQO,5:`O)lQRO'#CsO)|QRO,59]O*_QRO,59]O*YQQO,59]O+YQQO,59]O+bQbO'#C|O+jQWO'#C}OOOO'#Dz'#DzOOOO'#Df'#DfO,OOSO,59fOOQa,59f,59fO,^O`O,59nO,cQbO'#DgO,hQbO,59YO,yQRO,5:mO-QQQO,5:mO-VQbO,59{OOQ`,5:X,5:XOOQ`-E7`-E7`OOQ`,59p,59pOOQ`-E7a-E7aOOQa1G.y1G.yO-aQcO1G.yOOQ`-E7b-E7bO-{QbO1G/zO'PQbO,59`O'PQbO,59`OOQa1G.w1G.wOOOO,59h,59hOOOO,59i,59iOOOO-E7d-E7dOOQa1G/Q1G/QOOQa1G/Y1G/YO!TQbO'#CrOOQ`,5:R,5:ROOQ`-E7e-E7eO.YQbO1G0XOOQ`1G/g1G/gO.gQbO7+%fO.lQbO7+%gOOQO1G.z1G.zO.yQRO1G.zOOQ`'#DZ'#DZO/TQbO7+%sO/YQbO7+%tOOQ`<<IQ<<IQO/mQQO'#DeO/rQbO'#DwO0VQbO<<IROOQ`<<I_<<I_OOQ`'#D['#D[O0[QbO<<I`OOQ`,5:P,5:POOQ`-E7c-E7cOOQ`AN>mAN>mO'PQbO'#D]OOQ`'#Dh'#DhO0gQbOAN>zO0rQQO'#D_OOQ`AN>zAN>zO0wQbOAN>zO0|QRO,59wO1TQQO,59wOOQ`-E7f-E7fOOQ`G24fG24fO1YQbOG24fO1_QQO,59yO1dQQO1G/cOOQ`LD*QLD*QO.lQbO1G/eO/YQbO7+$}OOQ`7+%P7+%POOQ`<<Hi<<Hi", states: ".vQYQbOOO#[QcO'#CrO$UQRO'#CsO$dQcO'#DnO${QbO'#DtOOQ`'#Cu'#CuO%TQbO'#CqO%uOSO'#CzOOQa'#Dr'#DrO&TOpO'#DSO&YQcO'#DqOOQ`'#Do'#DoO&qQbO'#DnO'PQbO'#EROOQ`'#DX'#DXO'nQRO'#DaOOQ`'#Dn'#DnO'sQQO'#DmOOQ`'#Dm'#DmOOQ`'#Db'#DbQYQbOOOOQa'#Dq'#DqOOQ`'#Cp'#CpO'{QbO'#DUOOQ`'#Dp'#DpOOQ`'#Dc'#DcO(VQbO,59ZO'PQbO,59_O'PQbO,59_OOQ`'#Dd'#DdO(sQbO'#CwO({QQO,5:`O)lQRO'#CsO)|QRO,59]O*_QRO,59]O*YQQO,59]O+YQQO,59]O+bQbO'#C|O+jQWO'#C}OOOO'#Dz'#DzOOOO'#Df'#DfO,OOSO,59fOOQa,59f,59fO,^O`O,59nO,cQbO'#DgO,hQbO,59YO,yQRO,5:mO-QQQO,5:mO-VQbO,59{OOQ`,5:X,5:XOOQ`-E7`-E7`OOQ`,59p,59pOOQ`-E7a-E7aOOQa1G.y1G.yO-aQcO1G.yOOQ`-E7b-E7bO-{QbO1G/zO'PQbO,59`O'PQbO,59`OOQa1G.w1G.wOOOO,59h,59hOOOO,59i,59iOOOO-E7d-E7dOOQa1G/Q1G/QOOQa1G/Y1G/YO!TQbO'#CrOOQ`,5:R,5:ROOQ`-E7e-E7eO.YQbO1G0XOOQ`1G/g1G/gO.gQbO7+%fO.lQbO7+%gOOQO1G.z1G.zO.|QRO1G.zOOQ`'#DZ'#DZO/WQbO7+%sO/]QbO7+%tOOQ`<<IQ<<IQOOQ`'#De'#DeO/sQQO'#DeO/xQbO'#DwO0`QbO<<IROOQ`<<I_<<I_OOQ`'#D['#D[O0eQbO<<I`OOQ`,5:P,5:POOQ`-E7c-E7cOOQ`AN>mAN>mO'PQbO'#D]OOQ`'#Dh'#DhO0pQbOAN>zO0{QQO'#D_OOQ`AN>zAN>zO1QQbOAN>zO1VQRO,59wO1^QQO,59wOOQ`-E7f-E7fOOQ`G24fG24fO1cQbOG24fO1hQQO,59yO1mQQO1G/cOOQ`LD*QLD*QO.lQbO1G/eO/]QbO7+$}OOQ`7+%P7+%POOQ`<<Hi<<Hi",
stateData: "1l~O!_OS!`OS~O]PO^_O_WO`XOjSOrWOsWOtWOuWO|]O!gUO!jbO!mVO~O]eO_WO`XOjSOrWOsWOtWOuWOwfOygO!gUO!mVOzfX!jfX!wfX!lfXmfX~OP!eXQ!eXR!eXS!eXT!eXU!eXV!eXW!eXX!eXY!eXZ!eX[!eX~P!TOPkOQkORlOSlO~OPkOQkORlOSlO!j!bX!w!bXm!bX~O^mOlkP~O]PO_WO`XOjSOrWOsWOtWOuWO!gUO!mVO~OowO!mzO!ouO!pvO~O!t{O~OP!eXQ!eXR!eXS!eX!j!bX!w!bXm!bX~Oz|O!j!bX!w!bXm!bX~O]eO_WO`XOrWOsWOtWOuWO!gUO!mVO~OV!QO~O!j!RO!w!RO~OjSOw!TO~P'POjSOwfOygOzca!jca!wca!lcamca~P'PO^mOlkX~Ol!YO~OT![OU![OV!ZOW!ZOX!ZOY!ZOZ!ZO[!ZO~OPkOQkORlOSlO~P)QOPkOQkORlOSlO!l!]O~O!l!]OP!eXQ!eXR!eXS!eXT!eXU!eXV!eXW!eXX!eXY!eXZ!eX[!eX~Oz|O!l!]O~O]!^O!gUO~O!m!_O!o!_O!p!_O!q!_O!r!_O!s!_O~OowO!m!aO!ouO!pvO~O]!bO~O]!cO~Oz|O!jba!wba!lbamba~Ol!fO~P)QOl!fO~O^_O|]O~P%TOPkOQkORgiSgi!jgi!wgi!lgimgi~O^_O|]O!j!iO~P%TO^_O|]O!j!nO~P%TOm!oO~O^_O|]Om!kP~P%TO!lhilhi~P)QOm!sO~O^_O|]Om!kP!Q!kP!S!kP~P%TO!j!vO~O^_O|]Om!kX!Q!kX!S!kX~P%TOm!xO~Om!}O!Q!yO!S!|O~Om#SO!Q!yO!S!|O~Ol#UO~Om#SO~Ol#VO~P)QOl#VO~Om#WO~O!j#XO~O!j#YO~Ort~", stateData: "1u~O!_OS!`OS~O]PO^_O_WO`XOjSOrWOsWOtWOuWO|]O!gUO!jbO!mVO~O]eO_WO`XOjSOrWOsWOtWOuWOwfOygO!gUO!mVOzfX!jfX!wfX!lfXmfX~OP!eXQ!eXR!eXS!eXT!eXU!eXV!eXW!eXX!eXY!eXZ!eX[!eX~P!TOPkOQkORlOSlO~OPkOQkORlOSlO!j!bX!w!bXm!bX~O^mOlkP~O]PO_WO`XOjSOrWOsWOtWOuWO!gUO!mVO~OowO!mzO!ouO!pvO~O!t{O~OP!eXQ!eXR!eXS!eX!j!bX!w!bXm!bX~Oz|O!j!bX!w!bXm!bX~O]eO_WO`XOrWOsWOtWOuWO!gUO!mVO~OV!QO~O!j!RO!w!RO~OjSOw!TO~P'POjSOwfOygOzca!jca!wca!lcamca~P'PO^mOlkX~Ol!YO~OT![OU![OV!ZOW!ZOX!ZOY!ZOZ!ZO[!ZO~OPkOQkORlOSlO~P)QOPkOQkORlOSlO!l!]O~O!l!]OP!eXQ!eXR!eXS!eXT!eXU!eXV!eXW!eXX!eXY!eXZ!eX[!eX~Oz|O!l!]O~O]!^O!gUO~O!m!_O!o!_O!p!_O!q!_O!r!_O!s!_O~OowO!m!aO!ouO!pvO~O]!bO~O]!cO~Oz|O!jba!wba!lbamba~Ol!fO~P)QOl!fO~O^_O|]O~P%TOPkOQkORgiSgi!jgi!wgi!lgimgi~O^_O|]O!j!iO~P%TO^_O|]O!j!nO~P%TOm!oO~O^_O|]O!j!pOm!kP~P%TO!lhilhi~P)QOm!tO~O^_O|]O!j!pOm!kP!Q!kP!S!kP~P%TO!j!wO~O^_O|]O!j!pOm!kX!Q!kX!S!kX~P%TOm!yO~Om#OO!Q!zO!S!}O~Om#TO!Q!zO!S!}O~Ol#VO~Om#TO~Ol#WO~P)QOl#WO~Om#XO~O!j#YO~O!j#ZO~Ort~",
goto: "+r!wPPPPPPPPPPPPPPPPPP!x#X#g#l#X$W$m$yP%bPP%eP%|%|PPPP&QP#gPP&kP&w&z'TP'XP&k'_'e'l'r'{(R(YPPPP(`(d(x)[)a*[P*w*wP+YPP+bPPPPPP+f+fd`Od!Q!Y!f!i!n!q#X#YRsUiZOUd|!Q!Y!f!i!n!q#X#YVhPj!czWOPU]dgjkl!Q!Y!Z![!c!f!i!n!q!y#X#YR!^udROd!Q!Y!f!i!n!q#X#YQqUQ!VkR!WlQsUQ!P]Q!j![R#Q!yd`Od!Q!Y!f!i!n!q#X#YUfPj!cQsUR!TgRoS{WOPU]dgjkl!Q!Y!Z![!c!f!i!n!q!y#X#YTwVydYOd!Q!Y!f!i!n!q#X#YgePU]gjkl!Z![!c!ye`Od!Q!Y!f!i!n!q#X#YR!m!fQ!u!nQ#Z#XR#[#YT!z!u!{Q#O!uR#T!{QdOR!SdSjP!cR!UjQnSR!XnW!q!i!n#X#YR!w!qQyVR!`yS}[tR!e}Q!{!uR#R!{TcOdSaOdQ!g!QQ!h!YQ!l!fZ!p!i!n!q#X#Yd[Od!Q!Y!f!i!n!q#X#YQtUR!d|ViPj!cdQOd!Q!Y!f!i!n!q#X#YUfPj!cQpUQ!O]Q!TgQ!VkQ!WlQ!j!ZQ!k![R#P!ydYOd!Q!Y!f!i!n!q#X#YdeP]gjkl!Z![!c!yRrUoTOPUdgj!Q!Y!c!f!i!n!q#X#YQ!r!iV!t!n#X#YTxVye^Od!Q!Y!f!i!n!q#X#Y", goto: "+r!wPPPPPPPPPPPPPPPPPP!x#X#g#l#X$W$m$yP%bPP%eP%|%|PPPP&QP#gPP&kP&w&z'TP'XP&k'_'e'l'r'{(R(YPPPP(`(d(x)[)a*[P*w*wP+YPP+bPPPPPP+f+fd`Od!Q!Y!f!i!n!r#Y#ZRsUiZOUd|!Q!Y!f!i!n!r#Y#ZVhPj!czWOPU]dgjkl!Q!Y!Z![!c!f!i!n!r!z#Y#ZR!^udROd!Q!Y!f!i!n!r#Y#ZQqUQ!VkR!WlQsUQ!P]Q!j![R#R!zd`Od!Q!Y!f!i!n!r#Y#ZUfPj!cQsUR!TgRoS{WOPU]dgjkl!Q!Y!Z![!c!f!i!n!r!z#Y#ZTwVydYOd!Q!Y!f!i!n!r#Y#ZgePU]gjkl!Z![!c!ze`Od!Q!Y!f!i!n!r#Y#ZR!m!fQ!v!nQ#[#YR#]#ZT!{!v!|Q#P!vR#U!|QdOR!SdSjP!cR!UjQnSR!XnW!r!i!n#Y#ZR!x!rQyVR!`yS}[tR!e}Q!|!vR#S!|TcOdSaOdQ!g!QQ!h!YQ!l!fZ!q!i!n!r#Y#Zd[Od!Q!Y!f!i!n!r#Y#ZQtUR!d|ViPj!cdQOd!Q!Y!f!i!n!r#Y#ZUfPj!cQpUQ!O]Q!TgQ!VkQ!WlQ!j!ZQ!k![R#Q!zdYOd!Q!Y!f!i!n!r#Y#ZdeP]gjkl!Z![!c!zRrUoTOPUdgj!Q!Y!c!f!i!n!r#Y#ZQ!s!iV!u!n#Y#ZTxVye^Od!Q!Y!f!i!n!r#Y#Z",
nodeNames: "⚠ Star Slash Plus Minus And Or Eq Neq Lt Lte Gt Gte Identifier AssignableIdentifier Word IdentifierBeforeDot Program PipeExpr FunctionCall PositionalArg ParenExpr FunctionCallOrIdentifier BinOp ConditionalOp FunctionDef keyword Params colon keyword String StringFragment Interpolation EscapeSeq Number Boolean Regex Null DotGet Underscore NamedArg NamedArgPrefix operator IfExpr keyword SingleLineThenBlock ThenBlock ElseIfExpr keyword ElseExpr keyword Assign", nodeNames: "⚠ Star Slash Plus Minus And Or Eq Neq Lt Lte Gt Gte Identifier AssignableIdentifier Word IdentifierBeforeDot Program PipeExpr FunctionCall PositionalArg ParenExpr FunctionCallOrIdentifier BinOp ConditionalOp FunctionDef keyword Params colon keyword String StringFragment Interpolation EscapeSeq Number Boolean Regex Null DotGet Underscore NamedArg NamedArgPrefix operator IfExpr keyword SingleLineThenBlock ThenBlock ElseIfExpr keyword ElseExpr keyword Assign",
maxTerm: 85, maxTerm: 85,
context: trackScope, context: trackScope,
@ -23,5 +23,5 @@ export const parser = LRParser.deserialize({
tokenizers: [operatorTokenizer, 1, 2, 3, tokenizer, new LocalTokenGroup("[~RP!O!PU~ZO!t~~", 11)], tokenizers: [operatorTokenizer, 1, 2, 3, tokenizer, new LocalTokenGroup("[~RP!O!PU~ZO!t~~", 11)],
topRules: {"Program":[0,17]}, topRules: {"Program":[0,17]},
specialized: [{term: 13, get: (value: keyof typeof spec_Identifier) => spec_Identifier[value] || -1}], specialized: [{term: 13, get: (value: keyof typeof spec_Identifier) => spec_Identifier[value] || -1}],
tokenPrec: 761 tokenPrec: 770
}) })

View File

@ -71,4 +71,20 @@ end
keyword end keyword end
`) `)
}) })
test('multiline with empty lines', () => {
expect(`
do:
2
end
`).toMatchTree(`
FunctionDef
keyword do
Params
colon :
Number 2
keyword end
`)
})
}) })