Makes the behaviour of logic expressions consistent in all cases (#898)

* Returned the value of a logic expression in all cases

* Remove legacy call syntax

* Correct test

* Remove old call syntax from docs/library

* Corrected docs for call syntax

* Add null coalescing operator
pull/917/head
MrMugame 2024-07-02 19:12:40 +02:00 committed by GitHub
parent 5226c43552
commit 9ed493aa00
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 26 additions and 30 deletions

View File

@ -3,16 +3,16 @@ import {LRParser} from "@lezer/lr"
const spec_Identifier = {__proto__:null,null:22, and:36, or:38, where:48, limit:52, select:66, as:70, render:74, each:76, all:78} const spec_Identifier = {__proto__:null,null:22, and:36, or:38, where:48, limit:52, select:66, as:70, render:74, each:76, all:78}
export const parser = LRParser.deserialize({ export const parser = LRParser.deserialize({
version: 14, version: 14,
states: ",fOYQPOOOOQO'#Cc'#CcO!ZQPO'#ChOOQO'#C`'#C`Q!bQQOOOOQO'#Ck'#CkOYQPO'#ClO#lQSO'#D]OYQPO'#DVO%XQQO'#C_OOQO'#C_'#C_O&RQQO'#DhO&`QPO,59SOOQO,59S,59SO&eQPO,59UOYQPO,59sOYQPO,59sOYQPO,59sOYQPO,59uOYQPO,59XOYQPO,59XO&jQQO,59WO'SQPO'#CqO'ZQPO,59[O'`QPO'#D^O'eQPO'#ESO'mQPO,59wOOQO,59w,59wO'rQQO,59qO)uQPO,59vOYQPO'#D_O)|QPO,5:SOOQO1G.n1G.nOOQO1G.p1G.pO,UQQO1G/_O.YQQO1G/_O.gQQO1G/_O.qQQO1G/aO0xQQO1G.sO1PQQO1G.sOOQO1G.r1G.rOYQPO'#CwOOQO'#D`'#D`O1WQPO,59]OYQPO'#CsOYQPO'#CuO1_QPO'#C|O2`QPO'#DQOOQO1G.v1G.vOYQPO,59xO2kQPO'#DcO2pQPO,5:nOOQO1G/c1G/cO2xQPO1G/bOOQO1G/b1G/bO2}QQO,59yOOQO-E7]-E7]OYQPO7+${O3[QQO'#CyO3xQPO'#DoOOQO,59c,59cOOQO-E7^-E7^O4aQQO,59_O4wQQO,59aO5_QQO'#DOO5fQQO'#DOO6PQPO'#DpOOQO,59h,59hOOQO,59l,59lO6hQPO,59lO6mQQO1G/dOOQO,59},59}OOQO-E7a-E7aOOQO7+$|7+$|O6wQQO<<HgOOQO'#Cz'#CzOOQO,59e,59eOYQPO'#DaO8zQPO,5:ZO9cQPO,59jO1_QPO'#DbO9hQPO,5:[OOQO1G/W1G/WOOQO,59{,59{OOQO-E7_-E7_OOQO1G/U1G/UOOQO,59|,59|OOQO-E7`-E7`", states: ",rOYQPOOOOQO'#Cc'#CcO!ZQPO'#ChOOQO'#C`'#C`Q!bQQOOOOQO'#Ck'#CkOYQPO'#ClO#oQSO'#D]OYQPO'#DVO%_QQO'#C_OOQO'#C_'#C_O&XQQO'#DhO&fQPO,59SOOQO,59S,59SO&kQPO,59UOYQPO,59sOYQPO,59sOYQPO,59sOYQPO,59sOYQPO,59uOYQPO,59XOYQPO,59XO&pQQO,59WO'YQPO'#CqO'aQPO,59[O'fQPO'#D^O'kQPO'#ETO'sQPO,59wOOQO,59w,59wO'xQQO,59qO*OQPO,59vOYQPO'#D_O*VQPO,5:SOOQO1G.n1G.nOOQO1G.p1G.pO,bQQO1G/_O.iQQO1G/_O.vQQO1G/_O0XQQO1G/_O1[QQO1G/aO3fQQO1G.sO3mQQO1G.sOOQO1G.r1G.rOYQPO'#CwOOQO'#D`'#D`O3tQPO,59]OYQPO'#CsOYQPO'#CuO3{QPO'#C|O4|QPO'#DQOOQO1G.v1G.vOYQPO,59xO5XQPO'#DcO5^QPO,5:oOOQO1G/c1G/cO5fQPO1G/bOOQO1G/b1G/bO5kQQO,59yOOQO-E7]-E7]OYQPO7+${O5xQQO'#CyO6fQPO'#DoOOQO,59c,59cOOQO-E7^-E7^O6}QQO,59_O7eQQO,59aO7{QQO'#DOO8SQQO'#DOO8mQPO'#DpOOQO,59h,59hOOQO,59l,59lO9UQPO,59lO9ZQQO1G/dOOQO,59},59}OOQO-E7a-E7aOOQO7+$|7+$|O9eQQO<<HgOOQO'#Cz'#CzOOQO,59e,59eOYQPO'#DaO;kQPO,5:ZO<SQPO,59jO3{QPO'#DbO<XQPO,5:[OOQO1G/W1G/WOOQO,59{,59{OOQO-E7_-E7_OOQO1G/U1G/UOOQO,59|,59|OOQO-E7`-E7`",
stateData: ":Y~O!YOSPOS~OTROUROWPOXROYXOZRO]YOxYOzWO!ZQO!_TO!`UO!bVO!fWO!gWO~O!^]O~PYObcOcdO|_O!_^O!gaO!h_O!i_O!j_O!k_O!l_O!m_O!n_O!o_O!p`O!q`O!r`O!saO!tbO~OUhOffO!ekO~O!`mObRXcRX|RX!_RX!gRX!hRX!iRX!jRX!kRX!lRX!mRX!nRX!oRX!pRX!qRX!rRX!sRX!tRXsRX~O!WRX!]RX!^RX!aRX!uRXhRXjRXlRXoRXqRXuRX!eRX~P#wO!]nO!^![X!a![X~P!bO!^pO~OYqO~O!axO~P!bOh|Oj}OlyOq!OOu!PO~O!eeX~P&qO!e!QO~O!u!RO~O!]!SO!e!vX~O!e!UO~O!_^Obyacya|ya!Wya!gya!hya!iya!jya!kya!lya!mya!nya!oya!pya!qya!rya!sya!tya!]ya!^ya!aya!uyahyajyalyaoyaqyauya!eyasya~O!a!WO~PYO!]nO!^![a!a![a~O!_^O!p`O!q`O!r`Ob{ic{i|{i!W{i!h{i!i{i!j{i!k{i!l{i!m{i!n{i!o{i!t{i!]{i!^{i!a{i!u{ih{ij{il{io{iq{iu{i!e{is{i~O!gaO!saO~P*XO!_^Ob{ic{i|{i!W{i!g{i!h{i!i{i!j{i!k{i!l{i!m{i!n{i!o{i!s{i!t{i!]{i!^{i!a{i!u{ih{ij{il{io{iq{iu{i!e{is{i~O!p{i!q{i!r{i~P,`O!g{i!s{i~P*XO!u!ZO~P!bO|_O!_^O!gaO!h_O!i_O!j_O!k_O!l_O!m_O!n_O!o_O!p`O!q`O!r`O!saO!tbOcai!Wai!]ai!^ai!aai!uaihaijailaioaiqaiuai!eaisai~Obai~P.xObcO~P.xO!eea~P&qOTROUROWPOXROY!cOZRO]YOxYOzWO!ZQO!_TO!`UO!bVO!fWO!gWO~Ov!gOw!gOx!fO~OUhO~O!]!SO!e!va~O!a!kO~O!]!Ra!^!Ra!a!Ra~P!bOo!mOhmXjmXlmXqmXumX!]mX!emX~P!bO!]!oOh!cXj!cXl!cXq!cXu!cX!e!cX~Ohgajgalgaqgauga!ega~P!bOhiajialiaqiauia!eia~P!bOs!qO~P!bOhrXjrXlrXqrXurX!]rX!erX~P#wO!]!rOh!dXj!dXl!dXq!dXu!dX!e!dX~Ox!tO~O!]!Qi!e!Qi~P!bO|_O!_^O!gaO!h_O!i_O!j_O!k_O!l_O!m_O!n_O!o_O!p`O!q`O!r`O!saOb}yc}y!W}y!t}y!]}y!^}y!a}y!u}yh}yj}yl}yo}yq}yu}y!e}ys}y~O!]!oOh!caj!cal!caq!cau!ca!e!ca~OY!wO~O!]!rOh!daj!dal!daq!dau!da!e!da~OlW|ozYTo~", stateData: "<y~O!YOSPOS~OTROUROWPOXROYXOZRO]YOxYOzWO!ZQO!_TO!`UO!bVO!fWO!gWO~O!^]O~PYObdOceO|_O!_^O!gaO!h_O!i_O!j_O!k_O!l_O!m_O!n_O!o_O!p`O!q`O!r`O!saO!tbO!ucO~OUiOfgO!elO~O!`nObRXcRX|RX!_RX!gRX!hRX!iRX!jRX!kRX!lRX!mRX!nRX!oRX!pRX!qRX!rRX!sRX!tRX!uRXsRX~O!WRX!]RX!^RX!aRX!vRXhRXjRXlRXoRXqRXuRX!eRX~P#zO!]oO!^![X!a![X~P!bO!^qO~OYrO~O!azO~P!bOh!OOj!POl{Oq!QOu!RO~O!eeX~P&wO!e!SO~O!v!TO~O!]!UO!e!wX~O!e!WO~O!_^Obyacya|ya!Wya!gya!hya!iya!jya!kya!lya!mya!nya!oya!pya!qya!rya!sya!tya!uya!]ya!^ya!aya!vyahyajyalyaoyaqyauya!eyasya~O!a!YO~PYO!]oO!^![a!a![a~O!_^O!p`O!q`O!r`Ob{ic{i|{i!W{i!h{i!i{i!j{i!k{i!l{i!m{i!n{i!o{i!t{i!u{i!]{i!^{i!a{i!v{ih{ij{il{io{iq{iu{i!e{is{i~O!gaO!saO~P*bO!_^Ob{ic{i|{i!W{i!g{i!h{i!i{i!j{i!k{i!l{i!m{i!n{i!o{i!s{i!t{i!u{i!]{i!^{i!a{i!v{ih{ij{il{io{iq{iu{i!e{is{i~O!p{i!q{i!r{i~P,lO!g{i!s{i~P*bObdO|_O!_^O!gaO!h_O!i_O!j_O!k_O!l_O!m_O!n_O!o_O!p`O!q`O!r`O!saO!ucO~Oc{i!W{i!t{i!]{i!^{i!a{i!v{ih{ij{il{io{iq{iu{i!e{is{i~P/QO!v!]O~P!bO|_O!_^O!gaO!h_O!i_O!j_O!k_O!l_O!m_O!n_O!o_O!p`O!q`O!r`O!saO!ucOcai!Wai!tai!]ai!^ai!aai!vaihaijailaioaiqaiuai!eaisai~Obai~P1cObdO~P1cO!eea~P&wOTROUROWPOXROY!eOZRO]YOxYOzWO!ZQO!_TO!`UO!bVO!fWO!gWO~Ov!iOw!iOx!hO~OUiO~O!]!UO!e!wa~O!a!mO~O!]!Ra!^!Ra!a!Ra~P!bOo!oOhmXjmXlmXqmXumX!]mX!emX~P!bO!]!qOh!cXj!cXl!cXq!cXu!cX!e!cX~Ohgajgalgaqgauga!ega~P!bOhiajialiaqiauia!eia~P!bOs!sO~P!bOhrXjrXlrXqrXurX!]rX!erX~P#zO!]!tOh!dXj!dXl!dXq!dXu!dX!e!dX~Ox!vO~O!]!Qi!e!Qi~P!bO|_O!_^O!gaO!h_O!i_O!j_O!k_O!l_O!m_O!n_O!o_O!p`O!q`O!r`O!saOb}yc}y!W}y!t}y!u}y!]}y!^}y!a}y!v}yh}yj}yl}yo}yq}yu}y!e}ys}y~O!]!qOh!caj!cal!caq!cau!ca!e!ca~OY!yO~O!]!tOh!daj!dal!daq!dau!da!e!da~OlW|ozYTo~",
goto: "&k!wPPP!x$QPP$hPPPP$hP$Q$Q$Q$QPP$Q%OP%RP%RP%RP%V%]P%RP%`P%RPPPP$QP$QP$Q$Q$Q%f%l%r%x&O&UPPPP&[PPPPPP&b&ePPPPPPPPPPPPPPPPP&hQSOSZQmQeUQlWQr_Qs`QtaQubQvcQwdQ!XnS![y!oQ!`|Q!a}S!b!O!rQ!h!RR!l!ZyYOQUW_`abcdmny|}!O!R!Z!o!ryROQUW_`abcdmny|}!O!R!Z!o!rRgVTzf{Q!]yR!u!oR!n![Q!d!OR!x!rQiVR!i!SQoZR!YoQ{fR!_{Q!p!]R!v!pQ!s!dR!y!sQ!TiR!j!TQ[QR!VmR!^yR!e!ORjV", goto: "&q!xPPP!y$UPP$mPPPP$mP$U$U$U$UPP$U%UP%XP%XP%XP%]%cP%XP%fP%XPPPP$UP$UP$U$U$U%l%r%x&O&U&[PPPP&bPPPPPP&h&kPPPPPPPPPPPPPPPPPP&nQSOSZQnQfUQmWQs_Qt`QuaQvbQwcQxdQyeQ!ZoS!^{!qQ!b!OQ!c!PS!d!Q!tQ!j!TR!n!]{YOQUW_`abcdeno{!O!P!Q!T!]!q!t{ROQUW_`abcdeno{!O!P!Q!T!]!q!tRhVT|g}Q!_{R!w!qR!p!^Q!f!QR!z!tQjVR!k!UQpZR![pQ}gR!a}Q!r!_R!x!rQ!u!fR!{!uQ!VjR!l!VQ[QR!XnR!`{R!g!QRkV",
nodeNames: "⚠ LineComment Program Expression Value Number String Bool BooleanKW Regex Identifier null List GlobalIdentifier Attribute TopLevelVal ParenthesizedExpression LogicalExpression and or QueryExpression Query TagIdentifier WhereClause where LimitClause limit OrderClause Order OrderBy OrderDirection OrderKW SelectClause select Select as RenderClause render each all PageRef UnaryExpression NotKW BinExpression InKW TernaryExpression Call Object KeyVal", nodeNames: "⚠ LineComment Program Expression Value Number String Bool BooleanKW Regex Identifier null List GlobalIdentifier Attribute TopLevelVal ParenthesizedExpression LogicalExpression and or QueryExpression Query TagIdentifier WhereClause where LimitClause limit OrderClause Order OrderBy OrderDirection OrderKW SelectClause select Select as RenderClause render each all PageRef UnaryExpression NotKW BinExpression InKW TernaryExpression Call Object KeyVal",
maxTerm: 84, maxTerm: 85,
skippedNodes: [0,1], skippedNodes: [0,1],
repeatNodeCount: 5, repeatNodeCount: 5,
tokenData: "=`~R!RX^$[pq$[qr%Prs%fst&Tuv&lwx&qxy'Zyz'`z{'e{|'j|}'o}!O't!O!P'y!P!Q(O!Q![*g![!]*o!^!_*t!_!`+R!`!a+`!a!b+m!b!c+r!c!},a!}#O-c#P#Q.`#S#T.e#T#U/S#U#W,a#W#X1P#X#Y,a#Y#Z1p#Z#],a#]#^4z#^#b,a#b#c6W#c#d8T#d#h,a#h#i;t#i#o,a#o#p=U#q#r=Z#y#z$[$f$g$[#BY#BZ$[$IS$I_$[$I|$JO$[$JT$JU$[$KV$KW$[&FU&FV$[~$aY!Y~X^$[pq$[#y#z$[$f$g$[#BY#BZ$[$IS$I_$[$I|$JO$[$JT$JU$[$KV$KW$[&FU&FV$[R%UP!fP!_!`%XQ%^P!kQ#r#s%aQ%fO!oQ~%iTOr%frs%xs;'S%f;'S;=`%}<%lO%f~%}OU~~&QP;=`<%l%f~&YSP~OY&TZ;'S&T;'S;=`&f<%lO&T~&iP;=`<%l&T~&qO!r~~&tTOw&qwx%xx;'S&q;'S;=`'T<%lO&q~'WP;=`<%l&q~'`O!`~~'eO!a~~'jO!p~~'oO!s~~'tO!]~~'yO!g~~(OO!_~R(TW!qQOY(mZ](m^!P(m!Q#O(m#O#P)b#P;'S(m;'S;=`*a<%lO(mP(pXOY(mZ](m^!P(m!P!Q)]!Q#O(m#O#P)b#P;'S(m;'S;=`*a<%lO(mP)bOXPP)eRO;'S(m;'S;=`)n;=`O(mP)qYOY(mZ](m^!P(m!P!Q)]!Q#O(m#O#P)b#P;'S(m;'S;=`*a;=`<%l(m<%lO(mP*dP;=`<%l(m~*lPT~!Q![*g~*tO!u~~*yP!h~!_!`*|~+RO!i~~+WP!j~#r#s+Z~+`O!n~~+eP!m~!_!`+h~+mO!l~~+rO!t~~+uQ!c!}+{#T#o+{~,QT]~}!O+{!Q![+{!c!}+{#R#S+{#T#o+{V,hUfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#o,aS-PUfS}!O,z!P!Q,z!Q![,z!c!},z#R#S,z#T#o,z~-hP!Z~!}#O-k~-nTO#P-k#P#Q-}#Q;'S-k;'S;=`.Y<%lO-k~.QP#P#Q.T~.YOx~~.]P;=`<%l-k~.eO!^~R.hTO#S.e#S#T.w#T;'S.e;'S;=`.|<%lO.eR.|OYRR/PP;=`<%l.eV/ZWfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#g,a#g#h/s#h#o,aV/zWfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#V,a#V#W0d#W#o,aV0mUfSoQYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#o,aV1WWfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#X,a#X#Y/S#Y#o,aV1wVfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#U2^#U#o,aV2eWfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#`,a#`#a2}#a#o,aV3UWfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#g,a#g#h3n#h#o,aV3uWfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#X,a#X#Y4_#Y#o,aV4hUfSWPYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#o,aV5RWfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#b,a#b#c5k#c#o,aV5tUfS|QYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#o,aV6_WfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#c,a#c#d6w#d#o,aV7OWfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#h,a#h#i7h#i#o,aV7qUfSzPYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#o,aV8[WfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#f,a#f#g8t#g#o,aV8{WfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#W,a#W#X9e#X#o,aV9lWfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#X,a#X#Y:U#Y#o,aV:]WfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#f,a#f#g:u#g#o,aV:|VfSYRpq;c}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#o,aR;fP#U#V;iR;lP#m#n;oR;tOlRV;{WfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#f,a#f#g<e#g#o,aV<lWfSYR}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#i,a#i#j3n#j#o,a~=ZO!b~~=`O!e~", tokenData: "=h~R!RX^$[pq$[qr%Prs%fst&Tuv&lwx&qxy'Zyz'`z{'e{|'j|}'o}!O't!O!P'y!P!Q(O!Q![*g![!]*o!^!_*t!_!`+R!`!a+`!a!b+m!b!c+z!c!},i!}#O-k#P#Q.h#S#T.m#T#U/[#U#W,i#W#X1X#X#Y,i#Y#Z1x#Z#],i#]#^5S#^#b,i#b#c6`#c#d8]#d#h,i#h#i;|#i#o,i#o#p=^#q#r=c#y#z$[$f$g$[#BY#BZ$[$IS$I_$[$I|$JO$[$JT$JU$[$KV$KW$[&FU&FV$[~$aY!Y~X^$[pq$[#y#z$[$f$g$[#BY#BZ$[$IS$I_$[$I|$JO$[$JT$JU$[$KV$KW$[&FU&FV$[R%UP!fP!_!`%XQ%^P!kQ#r#s%aQ%fO!oQ~%iTOr%frs%xs;'S%f;'S;=`%}<%lO%f~%}OU~~&QP;=`<%l%f~&YSP~OY&TZ;'S&T;'S;=`&f<%lO&T~&iP;=`<%l&T~&qO!r~~&tTOw&qwx%xx;'S&q;'S;=`'T<%lO&q~'WP;=`<%l&q~'`O!`~~'eO!a~~'jO!p~~'oO!s~~'tO!]~~'yO!g~~(OO!_~R(TW!qQOY(mZ](m^!P(m!Q#O(m#O#P)b#P;'S(m;'S;=`*a<%lO(mP(pXOY(mZ](m^!P(m!P!Q)]!Q#O(m#O#P)b#P;'S(m;'S;=`*a<%lO(mP)bOXPP)eRO;'S(m;'S;=`)n;=`O(mP)qYOY(mZ](m^!P(m!P!Q)]!Q#O(m#O#P)b#P;'S(m;'S;=`*a;=`<%l(m<%lO(mP*dP;=`<%l(m~*lPT~!Q![*g~*tO!v~~*yP!h~!_!`*|~+RO!i~~+WP!j~#r#s+Z~+`O!n~~+eP!m~!_!`+h~+mO!l~~+rP!u~!a!b+u~+zO!t~~+}Q!c!},T#T#o,T~,YT]~}!O,T!Q![,T!c!},T#R#S,T#T#o,TV,pUfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#o,iS-XUfS}!O-S!P!Q-S!Q![-S!c!}-S#R#S-S#T#o-S~-pP!Z~!}#O-s~-vTO#P-s#P#Q.V#Q;'S-s;'S;=`.b<%lO-s~.YP#P#Q.]~.bOx~~.eP;=`<%l-s~.mO!^~R.pTO#S.m#S#T/P#T;'S.m;'S;=`/U<%lO.mR/UOYRR/XP;=`<%l.mV/cWfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#g,i#g#h/{#h#o,iV0SWfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#V,i#V#W0l#W#o,iV0uUfSoQYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#o,iV1`WfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#X,i#X#Y/[#Y#o,iV2PVfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#U2f#U#o,iV2mWfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#`,i#`#a3V#a#o,iV3^WfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#g,i#g#h3v#h#o,iV3}WfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#X,i#X#Y4g#Y#o,iV4pUfSWPYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#o,iV5ZWfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#b,i#b#c5s#c#o,iV5|UfS|QYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#o,iV6gWfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#c,i#c#d7P#d#o,iV7WWfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#h,i#h#i7p#i#o,iV7yUfSzPYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#o,iV8dWfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#f,i#f#g8|#g#o,iV9TWfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#W,i#W#X9m#X#o,iV9tWfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#X,i#X#Y:^#Y#o,iV:eWfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#f,i#f#g:}#g#o,iV;UVfSYRpq;k}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#o,iR;nP#U#V;qR;tP#m#n;wR;|OlRV<TWfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#f,i#f#g<m#g#o,iV<tWfSYR}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#i,i#i#j3v#j#o,i~=cO!b~~=hO!e~",
tokenizers: [0, 1, 2], tokenizers: [0, 1, 2],
topRules: {"Program":[0,2]}, topRules: {"Program":[0,2]},
specialized: [{term: 10, get: (value) => spec_Identifier[value] || -1}], specialized: [{term: 10, get: (value) => spec_Identifier[value] || -1}],
tokenPrec: 1151 tokenPrec: 1274
}) })

View File

@ -3,16 +3,16 @@ import {LRParser} from "@lezer/lr"
const spec_Identifier = {__proto__:null,where:14, null:30, and:44, or:46, limit:70, select:84, as:88, render:92, each:94, all:96} const spec_Identifier = {__proto__:null,where:14, null:30, and:44, or:46, limit:70, select:84, as:88, render:92, each:94, all:96}
export const parser = LRParser.deserialize({ export const parser = LRParser.deserialize({
version: 14, version: 14,
states: ",fOYQPOOOpQQO'#C_QOQPOOOzQQO'#DQOOQO'#D_'#D_O!{QQO,58yOzQQO'#CaOzQQO'#DOO#VQQO'#DVO$WQQO'#DZOOQO'#Ch'#ChO$cQQO'#ClOOQO'#Ce'#CeO%tQSO'#DSOOQO'#Co'#CoOzQQO'#CpO&eQPO'#C|OzQQO'#CuO(QQSO'#CdOOQO'#Cd'#CdO(zQQO'#EROOQO,59l,59lOOQO-E7]-E7]O)fQSO,58{O*PQSO,59jO*jQSO'#DXO*qQSO'#CdO+_QQO'#ESOOQO,59q,59qOOQO,59u,59uO+yQPO,59uO,OQSO'#DhO,]QPO,59WOOQO,59W,59WO,bQQO,59YOzQQO,59cOzQQO,59cOzQQO,59cOzQQO,59eOOQO'#DT'#DTOOQO,59n,59nOzQQO,59]OzQQO,59]O,gQSO,59[O,nQPO,59`O,sQPO'#C}O,xQPO'#EQO-QQPO,59hOOQO,59h,59hO-VQSO,59aO/YQQO,59fOzQQO'#DbO/aQQO,5:mO/{QQO,59sO#VQQO'#DcO0QQQO,5:nOOQO1G/a1G/aOzQQO'#D`O0lQPO,5:SOOQO1G.r1G.rOOQO1G.t1G.tO2tQSO1G.}O4xQSO1G.}O5VQSO1G.}O5aQSO1G/PO7hQSO1G.wO7oQSO1G.wOOQO1G.v1G.vOOQO1G.z1G.zOzQQO,59iO7vQPO'#DaO7{QPO,5:lOOQO1G/S1G/SO8TQPO1G/QOOQO1G/Q1G/QOOQO,59|,59|OOQO-E7`-E7`OOQO1G/_1G/_OOQO,59},59}OOQO-E7a-E7aO8YQSO,59zOOQO-E7^-E7^OzQQO7+$kO8gQSO1G/TOOQO,59{,59{OOQO-E7_-E7_OOQO7+$l7+$lO8qQSO<<HV", states: ",rOYQPOOOpQQO'#C_QOQPOOOzQQO'#DQOOQO'#D_'#D_O!{QQO,58yOzQQO'#CaOzQQO'#DOO#VQQO'#DVO$WQQO'#DZOOQO'#Ch'#ChO$cQQO'#ClOOQO'#Ce'#CeO%wQSO'#DSOOQO'#Co'#CoOzQQO'#CpO&hQPO'#C|OzQQO'#CuO(WQSO'#CdOOQO'#Cd'#CdO)QQQO'#ESOOQO,59l,59lOOQO-E7]-E7]O)lQSO,58{O*VQSO,59jO*pQSO'#DXO*wQSO'#CdO+eQQO'#ETOOQO,59q,59qOOQO,59u,59uO,PQPO,59uO,UQSO'#DhO,cQPO,59WOOQO,59W,59WO,hQQO,59YOzQQO,59cOzQQO,59cOzQQO,59cOzQQO,59cOzQQO,59eOOQO'#DT'#DTOOQO,59n,59nOzQQO,59]OzQQO,59]O,mQSO,59[O,tQPO,59`O,yQPO'#C}O-OQPO'#ERO-WQPO,59hOOQO,59h,59hO-]QSO,59aO/cQQO,59fOzQQO'#DbO/jQQO,5:nO0UQQO,59sO#VQQO'#DcO0ZQQO,5:oOOQO1G/a1G/aOzQQO'#D`O0uQPO,5:SOOQO1G.r1G.rOOQO1G.t1G.tO3QQSO1G.}O5XQSO1G.}O5fQSO1G.}O6wQSO1G.}O7zQSO1G/PO:UQSO1G.wO:]QSO1G.wOOQO1G.v1G.vOOQO1G.z1G.zOzQQO,59iO:dQPO'#DaO:iQPO,5:mOOQO1G/S1G/SO:qQPO1G/QOOQO1G/Q1G/QOOQO,59|,59|OOQO-E7`-E7`OOQO1G/_1G/_OOQO,59},59}OOQO-E7a-E7aO:vQSO,59zOOQO-E7^-E7^OzQQO7+$kO;TQSO1G/TOOQO,59{,59{OOQO-E7_-E7_OOQO7+$l7+$lO;_QSO<<HV",
stateData: ":}~O!YOSPOS~OSPO~OVUOsVOuROzWO!OXO~O!WRX!cRX~P_OUbOY[OZ[O]YO^[O_[OacOjaOocO!ZZO!_^O!`_O!b`O!daO!eaO~O!WRa!cRa~P_OUjOY[OZ[O]YO^[O_[OacOjaOocO!ZZO!_^O!`_O!b`O!daO!eaO~OomO!PnO!QnO~O!^qO~PzOfyOgzOlsO!_rO!euO!fsO!gsO!hsO!isO!jsO!ksO!lsO!msO!ntO!otO!ptO!quO!rvO~OxwOVvXsvXuvXzvX!OvX!WvX!]vX!cvX~P$jOSPOZ}O!c!QO~O!`!SOfWXgWXlWX!_WX!eWX!fWX!gWX!hWX!iWX!jWX!kWX!lWX!mWX!nWX!oWX!pWX!qWX!rWX|WX~OVWXsWXuWXxWXzWX!OWX!WWX!]WX!^WX!aWX!sWX!cWX~P&pO!]!TOV!uXs!uXu!uXz!uX!O!uX!W!uX!c!uX~OVTasTauTazTa!OTa!WTa!cTa~P$jOVrasraurazra!Ora!Wra!cra~P$jO|!VO~P$jOV{Xs{Xu{Xz{X!O{X!W{X!]{X!c{X~P&pO!]!WOV!vXs!vXu!vXz!vX!O!vX!W!vX!c!vX~Oo!YO~O!]!ZO!^![X!a![X~P$jO!^!]O~OU!^O~O!a!eO~P$jO!c!fO~O!s!gO~O!]!hO!c!tX~O!c!jO~O!_rOViafiagialiasiauiaxiazia!Oia!Wia!]ia!eia!fia!gia!hia!iia!jia!kia!lia!mia!nia!oia!pia!qia!ria|ia!^ia!aia!sia!cia~O!a!lO~PzO!]!TOV!uas!uau!uaz!ua!O!ua!W!ua!c!ua~OU!oO~O!]!WOV!vas!vau!vaz!va!O!va!W!va!c!va~O!]!ZO!^![a!a![a~O!_rO!ntO!otO!ptOVkifkigkilkiskiukixkizki!Oki!Wki!]ki!fki!gki!hki!iki!jki!kki!lki!mki!rki|ki!^ki!aki!ski!cki~O!euO!quO~P0wO!_rOVkifkigkilkiskiukixkizki!Oki!Wki!]ki!eki!fki!gki!hki!iki!jki!kki!lki!mki!qki!rki|ki!^ki!aki!ski!cki~O!nki!oki!pki~P3OO!eki!qki~P0wO!s!tO~P$jOlsO!_rO!euO!fsO!gsO!hsO!isO!jsO!ksO!lsO!msO!ntO!otO!ptO!quO!rvOVeigeiseiueixeizei!Oei!Wei!]ei|ei!^ei!aei!sei!cei~Ofei~P5hOfyO~P5hOZ}O~O!]!hO!c!ta~O!a!xO~O!]!Sa!^!Sa!a!Sa~P$jO!]qi!cqi~P$jOlsO!_rO!euO!fsO!gsO!hsO!isO!jsO!ksO!lsO!msO!ntO!otO!ptO!quOVmyfmygmysmyumyxmyzmy!Omy!Wmy!]my!rmy|my!^my!amy!smy!cmy~Ou]lxjUYx~", stateData: "=n~O!YOSPOS~OSPO~OVUOsVOuROzWO!OXO~O!WRX!cRX~P_OUbOY[OZ[O]YO^[O_[OacOjaOocO!ZZO!_^O!`_O!b`O!daO!eaO~O!WRa!cRa~P_OUjOY[OZ[O]YO^[O_[OacOjaOocO!ZZO!_^O!`_O!b`O!daO!eaO~OomO!PnO!QnO~O!^qO~PzOfzOg{OlsO!_rO!euO!fsO!gsO!hsO!isO!jsO!ksO!lsO!msO!ntO!otO!ptO!quO!rvO!swO~OxxOVvXsvXuvXzvX!OvX!WvX!]vX!cvX~P$jOSPOZ!OO!c!RO~O!`!TOfWXgWXlWX!_WX!eWX!fWX!gWX!hWX!iWX!jWX!kWX!lWX!mWX!nWX!oWX!pWX!qWX!rWX!sWX|WX~OVWXsWXuWXxWXzWX!OWX!WWX!]WX!^WX!aWX!tWX!cWX~P&sO!]!UOV!vXs!vXu!vXz!vX!O!vX!W!vX!c!vX~OVTasTauTazTa!OTa!WTa!cTa~P$jOVrasraurazra!Ora!Wra!cra~P$jO|!WO~P$jOV{Xs{Xu{Xz{X!O{X!W{X!]{X!c{X~P&sO!]!XOV!wXs!wXu!wXz!wX!O!wX!W!wX!c!wX~Oo!ZO~O!]![O!^![X!a![X~P$jO!^!^O~OU!_O~O!a!gO~P$jO!c!hO~O!t!iO~O!]!jO!c!uX~O!c!lO~O!_rOViafiagialiasiauiaxiazia!Oia!Wia!]ia!eia!fia!gia!hia!iia!jia!kia!lia!mia!nia!oia!pia!qia!ria!sia|ia!^ia!aia!tia!cia~O!a!nO~PzO!]!UOV!vas!vau!vaz!va!O!va!W!va!c!va~OU!qO~O!]!XOV!was!wau!waz!wa!O!wa!W!wa!c!wa~O!]![O!^![a!a![a~O!_rO!ntO!otO!ptOVkifkigkilkiskiukixkizki!Oki!Wki!]ki!fki!gki!hki!iki!jki!kki!lki!mki!rki!ski|ki!^ki!aki!tki!cki~O!euO!quO~P1QO!_rOVkifkigkilkiskiukixkizki!Oki!Wki!]ki!eki!fki!gki!hki!iki!jki!kki!lki!mki!qki!rki!ski|ki!^ki!aki!tki!cki~O!nki!oki!pki~P3[O!eki!qki~P1QOfzOlsO!_rO!euO!fsO!gsO!hsO!isO!jsO!ksO!lsO!msO!ntO!otO!ptO!quO!swO~OVkigkiskiukixkizki!Oki!Wki!]ki!rki|ki!^ki!aki!tki!cki~P5pO!t!vO~P$jOlsO!_rO!euO!fsO!gsO!hsO!isO!jsO!ksO!lsO!msO!ntO!otO!ptO!quO!swOVeigeiseiueixeizei!Oei!Wei!]ei!rei|ei!^ei!aei!tei!cei~Ofei~P8ROfzO~P8ROZ!OO~O!]!jO!c!ua~O!a!zO~O!]!Sa!^!Sa!a!Sa~P$jO!]qi!cqi~P$jOlsO!_rO!euO!fsO!gsO!hsO!isO!jsO!ksO!lsO!msO!ntO!otO!ptO!quOVmyfmygmysmyumyxmyzmy!Omy!Wmy!]my!rmy!smy|my!^my!amy!tmy!cmy~Ou]lxjUYx~",
goto: "&i!wPPP!xP#OPP#S$XPP$nPPP$nP$X$X$X$XPP$X$XP$XP$X$XP$X%T#OP#OP%Z%aP#OP%dP#OPPP%j%p%v%|&SPPPP&YPPPPPPPPPPPPPPPPPPPPPPP&`&c&fQQOR|`TSPTS]R!TQgUQhVSiW!WSoZ!SQ{_Q!RaQ!_sQ!`tQ!auQ!bvQ!cyQ!dzQ!r!ZQ!u!gR!y!twcRUVWZ_astuvyz!S!T!W!Z!g!tw[RUVWZ_astuvyz!S!T!W!Z!g!tQ!O`R!v!hQdRR!m!TRx]QkWR!p!WQTPRfTQ![oR!s![Q!i!OR!w!iQ!UdR!n!UQ!XkR!q!XQpZR!k!SR!P`ReRRlW", goto: "&o!xPPP!yP#PPP#T$]PP$sPPP$sP$]$]$]$]PP$]$]P$]P$]$]P$]%Z#PP#PP%a%gP#PP%jP#PPPP%p%v%|&S&YPPPP&`PPPPPPPPPPPPPPPPPPPPPPPP&f&i&lQQOR}`TSPTS]R!UQgUQhVSiW!XSoZ!TQ|_Q!SaQ!`sQ!atQ!buQ!cvQ!dwQ!ezQ!f{Q!t![Q!w!iR!{!vycRUVWZ_astuvwz{!T!U!X![!i!vy[RUVWZ_astuvwz{!T!U!X![!i!vQ!P`R!x!jQdRR!o!URy]QkWR!r!XQTPRfTQ!]oR!u!]Q!k!PR!y!kQ!VdR!p!VQ!YkR!s!YQpZR!m!TR!Q`ReRRlW",
nodeNames: "⚠ LineComment Program Query TagIdentifier WhereClause Identifier where Expression Value Number String Bool BooleanKW Regex null List GlobalIdentifier Attribute TopLevelVal ParenthesizedExpression LogicalExpression and or QueryExpression UnaryExpression NotKW BinExpression InKW TernaryExpression Call PageRef Object KeyVal LimitClause limit OrderClause Order OrderBy OrderDirection OrderKW SelectClause select Select as RenderClause render each all", nodeNames: "⚠ LineComment Program Query TagIdentifier WhereClause Identifier where Expression Value Number String Bool BooleanKW Regex null List GlobalIdentifier Attribute TopLevelVal ParenthesizedExpression LogicalExpression and or QueryExpression UnaryExpression NotKW BinExpression InKW TernaryExpression Call PageRef Object KeyVal LimitClause limit OrderClause Order OrderBy OrderDirection OrderKW SelectClause select Select as RenderClause render each all",
maxTerm: 84, maxTerm: 85,
skippedNodes: [0,1], skippedNodes: [0,1],
repeatNodeCount: 5, repeatNodeCount: 5,
tokenData: "=`~R!RX^$[pq$[qr%Prs%fst&Tuv&lwx&qxy'Zyz'`z{'e{|'j|}'o}!O't!O!P'y!P!Q(O!Q![*g![!]*o!^!_*t!_!`+R!`!a+`!a!b+m!b!c+r!c!},a!}#O-c#P#Q.`#S#T.e#T#U/S#U#W,a#W#X1P#X#Y,a#Y#Z1p#Z#],a#]#^4z#^#b,a#b#c6W#c#d8T#d#h,a#h#i;t#i#o,a#o#p=U#q#r=Z#y#z$[$f$g$[#BY#BZ$[$IS$I_$[$I|$JO$[$JT$JU$[$KV$KW$[&FU&FV$[~$aY!Y~X^$[pq$[#y#z$[$f$g$[#BY#BZ$[$IS$I_$[$I|$JO$[$JT$JU$[$KV$KW$[&FU&FV$[U%UP!dQ!_!`%XS%^P!iS#r#s%aS%fO!mS~%iTOr%frs%xs;'S%f;'S;=`%}<%lO%f~%}OZ~~&QP;=`<%l%f~&YSP~OY&TZ;'S&T;'S;=`&f<%lO&T~&iP;=`<%l&T~&qO!p~~&tTOw&qwx%xx;'S&q;'S;=`'T<%lO&q~'WP;=`<%l&q~'`O!`~~'eO!a~~'jO!n~~'oO!q~~'tO!]~~'yO!e~~(OO!_~U(TW!oSOY(mZ](m^!P(m!Q#O(m#O#P)b#P;'S(m;'S;=`*a<%lO(mQ(pXOY(mZ](m^!P(m!P!Q)]!Q#O(m#O#P)b#P;'S(m;'S;=`*a<%lO(mQ)bO^QQ)eRO;'S(m;'S;=`)n;=`O(mQ)qYOY(mZ](m^!P(m!P!Q)]!Q#O(m#O#P)b#P;'S(m;'S;=`*a;=`<%l(m<%lO(mQ*dP;=`<%l(m~*lPY~!Q![*g~*tO!s~~*yP!f~!_!`*|~+RO!g~~+WP!h~#r#s+Z~+`O!l~~+eP!k~!_!`+h~+mO!j~~+rO!r~~+uQ!c!}+{#T#o+{~,QTa~}!O+{!Q![+{!c!}+{#R#S+{#T#o+{V,hUSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#o,aP-PUSP}!O,z!P!Q,z!Q![,z!c!},z#R#S,z#T#o,z~-hP!Z~!}#O-k~-nTO#P-k#P#Q-}#Q;'S-k;'S;=`.Y<%lO-k~.QP#P#Q.T~.YOo~~.]P;=`<%l-k~.eO!^~U.hTO#S.e#S#T.w#T;'S.e;'S;=`.|<%lO.eU.|OUUU/PP;=`<%l.eV/ZWSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#g,a#g#h/s#h#o,aV/zWSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#V,a#V#W0d#W#o,aV0mUSPxSUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#o,aV1WWSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#X,a#X#Y/S#Y#o,aV1wVSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#U2^#U#o,aV2eWSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#`,a#`#a2}#a#o,aV3UWSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#g,a#g#h3n#h#o,aV3uWSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#X,a#X#Y4_#Y#o,aV4hUSP]QUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#o,aV5RWSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#b,a#b#c5k#c#o,aV5tUSPlSUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#o,aV6_WSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#c,a#c#d6w#d#o,aV7OWSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#h,a#h#i7h#i#o,aV7qUSPjQUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#o,aV8[WSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#f,a#f#g8t#g#o,aV8{WSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#W,a#W#X9e#X#o,aV9lWSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#X,a#X#Y:U#Y#o,aV:]WSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#f,a#f#g:u#g#o,aV:|VSPUUpq;c}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#o,aU;fP#U#V;iU;lP#m#n;oU;tOuUV;{WSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#f,a#f#g<e#g#o,aV<lWSPUU}!O,a!P!Q,z!Q![,a!c!},a#R#S,a#T#i,a#i#j3n#j#o,a~=ZO!b~~=`O!c~", tokenData: "=h~R!RX^$[pq$[qr%Prs%fst&Tuv&lwx&qxy'Zyz'`z{'e{|'j|}'o}!O't!O!P'y!P!Q(O!Q![*g![!]*o!^!_*t!_!`+R!`!a+`!a!b+m!b!c+z!c!},i!}#O-k#P#Q.h#S#T.m#T#U/[#U#W,i#W#X1X#X#Y,i#Y#Z1x#Z#],i#]#^5S#^#b,i#b#c6`#c#d8]#d#h,i#h#i;|#i#o,i#o#p=^#q#r=c#y#z$[$f$g$[#BY#BZ$[$IS$I_$[$I|$JO$[$JT$JU$[$KV$KW$[&FU&FV$[~$aY!Y~X^$[pq$[#y#z$[$f$g$[#BY#BZ$[$IS$I_$[$I|$JO$[$JT$JU$[$KV$KW$[&FU&FV$[U%UP!dQ!_!`%XS%^P!iS#r#s%aS%fO!mS~%iTOr%frs%xs;'S%f;'S;=`%}<%lO%f~%}OZ~~&QP;=`<%l%f~&YSP~OY&TZ;'S&T;'S;=`&f<%lO&T~&iP;=`<%l&T~&qO!p~~&tTOw&qwx%xx;'S&q;'S;=`'T<%lO&q~'WP;=`<%l&q~'`O!`~~'eO!a~~'jO!n~~'oO!q~~'tO!]~~'yO!e~~(OO!_~U(TW!oSOY(mZ](m^!P(m!Q#O(m#O#P)b#P;'S(m;'S;=`*a<%lO(mQ(pXOY(mZ](m^!P(m!P!Q)]!Q#O(m#O#P)b#P;'S(m;'S;=`*a<%lO(mQ)bO^QQ)eRO;'S(m;'S;=`)n;=`O(mQ)qYOY(mZ](m^!P(m!P!Q)]!Q#O(m#O#P)b#P;'S(m;'S;=`*a;=`<%l(m<%lO(mQ*dP;=`<%l(m~*lPY~!Q![*g~*tO!t~~*yP!f~!_!`*|~+RO!g~~+WP!h~#r#s+Z~+`O!l~~+eP!k~!_!`+h~+mO!j~~+rP!s~!a!b+u~+zO!r~~+}Q!c!},T#T#o,T~,YTa~}!O,T!Q![,T!c!},T#R#S,T#T#o,TV,pUSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#o,iP-XUSP}!O-S!P!Q-S!Q![-S!c!}-S#R#S-S#T#o-S~-pP!Z~!}#O-s~-vTO#P-s#P#Q.V#Q;'S-s;'S;=`.b<%lO-s~.YP#P#Q.]~.bOo~~.eP;=`<%l-s~.mO!^~U.pTO#S.m#S#T/P#T;'S.m;'S;=`/U<%lO.mU/UOUUU/XP;=`<%l.mV/cWSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#g,i#g#h/{#h#o,iV0SWSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#V,i#V#W0l#W#o,iV0uUSPxSUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#o,iV1`WSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#X,i#X#Y/[#Y#o,iV2PVSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#U2f#U#o,iV2mWSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#`,i#`#a3V#a#o,iV3^WSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#g,i#g#h3v#h#o,iV3}WSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#X,i#X#Y4g#Y#o,iV4pUSP]QUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#o,iV5ZWSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#b,i#b#c5s#c#o,iV5|USPlSUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#o,iV6gWSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#c,i#c#d7P#d#o,iV7WWSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#h,i#h#i7p#i#o,iV7yUSPjQUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#o,iV8dWSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#f,i#f#g8|#g#o,iV9TWSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#W,i#W#X9m#X#o,iV9tWSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#X,i#X#Y:^#Y#o,iV:eWSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#f,i#f#g:}#g#o,iV;UVSPUUpq;k}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#o,iU;nP#U#V;qU;tP#m#n;wU;|OuUV<TWSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#f,i#f#g<m#g#o,iV<tWSPUU}!O,i!P!Q-S!Q![,i!c!},i#R#S,i#T#i,i#i#j3v#j#o,i~=cO!b~~=hO!c~",
tokenizers: [0, 1, 2], tokenizers: [0, 1, 2],
topRules: {"Program":[0,2]}, topRules: {"Program":[0,2]},
specialized: [{term: 6, get: (value) => spec_Identifier[value] || -1}], specialized: [{term: 6, get: (value) => spec_Identifier[value] || -1}],
tokenPrec: 1186 tokenPrec: 1309
}) })

View File

@ -99,6 +99,8 @@ BinExpression {
| Expression !mulop "%" Expression | Expression !mulop "%" Expression
| Expression !addop "+" Expression | Expression !addop "+" Expression
| Expression !addop "-" Expression | Expression !addop "-" Expression
| Expression !or "??" Expression
} }
TernaryExpression { TernaryExpression {

View File

@ -18,7 +18,7 @@ Deno.test("Test template", () => {
]], "}"]], ]], "}"]],
]]]); ]]]);
assertEquals(parseTemplate(`{{escapeRegexp @page.name}}`), ["Template", [ assertEquals(parseTemplate(`{{escapeRegexp(@page.name)}}`), ["Template", [
"TemplateElement", "TemplateElement",
["ExpressionDirective", ["Expression", [ ["ExpressionDirective", ["Expression", [
"Call", "Call",

View File

@ -41,17 +41,8 @@ function processTree(tree: AST): AST {
case "TemplateElement": case "TemplateElement":
return ["TemplateElement", ...(tree.slice(1) as AST[]).map(processTree)]; return ["TemplateElement", ...(tree.slice(1) as AST[]).map(processTree)];
case "ExpressionDirective": { case "ExpressionDirective": {
let exprString = tree[2][1] as string; const exprString = tree[2][1] as string;
const legacyCallSyntax = /^([A-Za-z]+)\s+([^(]+$)/.exec(exprString);
if (legacyCallSyntax) {
// Translates "escapeRegex @page.name" -> "escapeRegex(@page.name)"
const [_, fn, args] = legacyCallSyntax;
exprString = `${fn}(${args})`;
console.warn(
"Translated legacy function call to new syntax",
exprString,
);
}
const expressionTree = parseTreeToAST(parse( const expressionTree = parseTreeToAST(parse(
expressionLanguage, expressionLanguage,
exprString, exprString,

View File

@ -25,7 +25,7 @@ export function evalQueryExpression(
} else if (op1Val) { } else if (op1Val) {
return evalQueryExpression(val[2], obj, variables, functionMap); return evalQueryExpression(val[2], obj, variables, functionMap);
} else { } else {
return false; return op1Val;
} }
} }
case "or": { case "or": {
@ -41,7 +41,7 @@ export function evalQueryExpression(
evalQueryExpression(val[2], obj, variables, functionMap) evalQueryExpression(val[2], obj, variables, functionMap)
); );
} else if (op1Val) { } else if (op1Val) {
return true; return op1Val;
} else { } else {
return evalQueryExpression(val[2], obj, variables, functionMap); return evalQueryExpression(val[2], obj, variables, functionMap);
} }
@ -274,6 +274,8 @@ function evalSimpleExpression(type: string, val1: any, val2: any, val3: any) {
return val2.includes(val1); return val2.includes(val1);
case "?": case "?":
return val1 ? val2 : val3; return val1 ? val2 : val3;
case "??":
return val1 ?? val2;
default: default:
throw new Error(`Unupported operator: ${type}`); throw new Error(`Unupported operator: ${type}`);
} }

View File

@ -28,10 +28,11 @@ Attribute of variable: {{@page.name}}
# Function calls # Function calls
* `functionName(argument1, argument2, ...)`: call function `functionName` * `functionName(argument1, argument2, ...)`: call function `functionName`
* `functionName`: call `functionName` without any arguments * `functionName()` or `functionName`: call function `functionName` without arguments
## Examples ## Examples
```template ```template
contains with argument list: {{contains("FizzBuzz", "Fizz")}}
Today with argument list: {{today()}} Today with argument list: {{today()}}
Today without an argument list: {{today}} Today without an argument list: {{today}}
``` ```

View File

@ -13,13 +13,13 @@ To import this library, run the {[Library: Import]} command in your SilverBullet
# Included templates # Included templates
```query ```query
template template
where name =~ /^{{escapeRegexp @page.name}}\// where name =~ /^{{escapeRegexp(@page.name)}}\//
render [[Library/Core/Query/Template]] render [[Library/Core/Query/Template]]
``` ```
# Included utility pages # Included utility pages
```query ```query
page page
where name =~ /^{{escapeRegexp @page.name}}\// and tags != "template" where name =~ /^{{escapeRegexp(@page.name)}}\// and tags != "template"
render [[Library/Core/Query/Page]] render [[Library/Core/Query/Page]]
``` ```

View File

@ -8,7 +8,7 @@ To import this library, run the {[Library: Import]} command in your SilverBullet
# Included templates # Included templates
```query ```query
page page
where name =~ /^{{escapeRegexp @page.name}}\// where name =~ /^{{escapeRegexp(@page.name)}}\//
render [[Library/Core/Query/Page]] render [[Library/Core/Query/Page]]
``` ```