diff --git a/packages/queryLanguage/src/parser.terms.ts b/packages/queryLanguage/src/parser.terms.ts index 1682bb04..c093620e 100644 --- a/packages/queryLanguage/src/parser.terms.ts +++ b/packages/queryLanguage/src/parser.terms.ts @@ -1,6 +1,6 @@ // This file was generated by lezer-generator. You probably shouldn't edit it. export const - negate = 22, + negate = 23, Program = 1, OrExpr = 2, AndExpr = 3, @@ -18,4 +18,5 @@ export const SymExpr = 15, RepoSetExpr = 16, ParenExpr = 17, - Term = 18 + QuotedTerm = 18, + Term = 19 diff --git a/packages/queryLanguage/src/parser.ts b/packages/queryLanguage/src/parser.ts index fb867c4f..a254524c 100644 --- a/packages/queryLanguage/src/parser.ts +++ b/packages/queryLanguage/src/parser.ts @@ -3,16 +3,16 @@ import {LRParser} from "@lezer/lr" import {negateToken} from "./tokens" export const parser = LRParser.deserialize({ version: 14, - states: "'[OVQROOO!WQQO'#CcO!WQQO'#CdO!WQQO'#CeO!WQQO'#CfO!`QSO'#CgO!kQSO'#ChO!WQQO'#CiO!WQQO'#CjO!WQQO'#CkO!WQQO'#ClOOQP'#Ca'#CaOVQRO'#CmO!vQQO'#C`OOQP'#Cn'#CnOOQP'#Cw'#CwO#nQRO'#CvO#{QQO'#CvO$WQQO'#C^OOQO'#Cu'#CuQOQQOOO!`QSO'#CbOOQP'#C}'#C}OOQP,58},58}OOQP,59O,59OOOQP,59P,59POOQP,59Q,59QOOQP'#DU'#DUOOQP,59R,59ROOQP'#DW'#DWOOQP,59S,59SOOQP,59T,59TOOQP,59U,59UOOQP,59V,59VOOQP,59W,59WO$]QQO,59XOOQP,58z,58zOOQP'#Co'#CoO$bQRO,58yOVQRO'#CpO$oQQO,58xOOQP,58|,58|OOQP1G.s1G.sOOQP-E6m-E6mO$zQRO'#CvOOQO'#Cv'#CvOOQO,59[,59[OOQO-E6n-E6n", - stateData: "%i~OhOS~Of]OleOpPOr^Os^OtQOuROvSOwTOyUO!OVO!PWO!QXO!RYO!S[O~OrfOsfO~OmkOnkOokO~O{mO|mO}mO~OleOpPOtQOuROvSOwTOyUO!OVO!PWO!QXO!RYO!S[O~OeiX!UjX!TiX~PVOeiX!UjX!TiX~O!UwO~O!TzO~OeRa!URa!TRa~PVO!UwOeQa!TQa~OejX!UjX!TjX~PVOrlptuvwy!O!P!Q!R!Usy~", - goto: "$`{PP|!Q!X!a!l!l!l!l!l!l!l!l!l!l!l!a!X!u!|PPPP#S#Y#aPPPPP#mPPPPPP$VP$]TcO[SaO[R}w]_O[`vw|[_O[`vw|Rt]_ZO[]`vw|Sv`|R{vQxbR!PxQdORs[SbO[R!OwS`O[Uu`v|R|wQgPQhQQiRQjSQoVQpWQqXRrYQlTRyeRnU", - nodeNames: "⚠ Program OrExpr AndExpr NegateExpr PrefixExpr ArchivedExpr RevisionExpr ContentExpr ContextExpr FileExpr ForkExpr VisibilityExpr RepoExpr LangExpr SymExpr RepoSetExpr ParenExpr Term", - maxTerm: 52, + states: "'hOVQROOO!WQQO'#CcO!WQQO'#CdO!WQQO'#CeO!WQQO'#CfO!`QSO'#CgO!kQSO'#ChO!WQQO'#CiO!WQQO'#CjO!WQQO'#CkO!WQQO'#ClOOQP'#Ca'#CaO!vQRO'#CmO!}QQO'#C`OOQP'#Cn'#CnOOQP'#Co'#CoOOQP'#Cx'#CxO#uQRO'#CwO$SQQO'#CwO$_QQO'#C^OOQO'#Cv'#CvQOQQOOO!`QSO'#CbOOQP'#DO'#DOOOQP,58},58}OOQP,59O,59OOOQP,59P,59POOQP,59Q,59QOOQP'#DV'#DVOOQP,59R,59ROOQP'#DX'#DXOOQP,59S,59SOOQP,59T,59TOOQP,59U,59UOOQP,59V,59VOOQP,59W,59WOOQP,59X,59XO$dQQO,59XOOQP,58z,58zOOQP'#Cp'#CpO$iQRO,58yOVQRO'#CqO$vQQO,58xOOQP,58|,58|OOQP1G.s1G.sOOQP-E6n-E6nO%RQRO'#CwOOQO'#Cw'#CwOOQO,59],59]OOQO-E6o-E6o", + stateData: "%p~OiOS~Og]OmfOqPOs^Ot_OuQOvROwSOxTOzUO!PVO!QWO!RXO!SYO!T[O~OsgOtgO~OnlOolOplO~O|nO}nO!OnO~O!UtO~PVOmfOqPOuQOvROwSOxTOzUO!PVO!QWO!RXO!SYO!T[O~OfjX!VkX!UjX~PVOfjX!VkX!UjX~O!VyO~O!U|O~OfRa!VRa!URa~PVO!VyOfQa!UQa~OfkX!VkX!UkX~PVOsmquvwxz!P!Q!R!S!Vtz~", + goto: "$a|PP}!R!Y!b!m!m!m!m!m!m!m!m!m!m!m!b!Y!Y!v!}PPPP#T#Z#bPPPPP#nPPPPPP$WP$^TdO[SbO[R!Py]`O[axy!O[`O[axy!ORv]_ZO[]axy!OSxa!OR}xQzcR!RzQeORu[ScO[R!QySaO[Uwax!OR!OyQhPQiQQjRQkSQpVQqWQrXRsYQmTR{fRoU", + nodeNames: "⚠ Program OrExpr AndExpr NegateExpr PrefixExpr ArchivedExpr RevisionExpr ContentExpr ContextExpr FileExpr ForkExpr VisibilityExpr RepoExpr LangExpr SymExpr RepoSetExpr ParenExpr QuotedTerm Term", + maxTerm: 53, skippedNodes: [0], repeatNodeCount: 2, - tokenData: "!Hc~RpOX#VXY$TYZ$TZp#Vpq$Tqr#Vrs$csx#Vxy&Vyz&[z#T#V#T#U&a#U#V#V#V#W0q#W#Y#V#Y#Z:{#Z#`#V#`#aCZ#a#b#V#b#cGu#c#dIm#d#e!!V#e#f#V#f#g!-k#g#h!7q#h#j#V#j#k!;_#k#m#V#m#n!Em#n;'S#V;'S;=`#}<%lO#VP#[ZsPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#}<%lO#VP$QP;=`<%l#V~$YRh~XY$TYZ$Tpq$T~$fWOY$cZr$crs%Os#O$c#O#P%T#P;'S$c;'S;=`&P<%lO$c~%TOr~~%WRO;'S$c;'S;=`%a;=`O$c~%dXOY$cZr$crs%Os#O$c#O#P%T#P;'S$c;'S;=`&P;=`<%l$c<%lO$c~&SP;=`<%l$c~&[O!S~~&aO!T~~&f_sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#b#V#b#c'e#c#f#V#f#g)]#g;'S#V;'S;=`#}<%lO#VR'j]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#m#V#m#n(c#n;'S#V;'S;=`#}<%lO#VR(jZ}QsPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#}<%lO#V~)b]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#V#V#V#W*Z#W;'S#V;'S;=`#}<%lO#V~*`]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#[#V#[#]+X#];'S#V;'S;=`#}<%lO#V~+^]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#]#V#]#^,V#^;'S#V;'S;=`#}<%lO#V~,[]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#j#V#j#k-T#k;'S#V;'S;=`#}<%lO#V~-Y]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#X#V#X#Y.R#Y;'S#V;'S;=`#}<%lO#V~.W]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#W#V#W#X/P#X;'S#V;'S;=`#}<%lO#V~/UZsPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]/w!];'S#V;'S;=`#}<%lO#V~0OZl~sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#}<%lO#V~0v]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]1o!]#c#V#c#d2i#d;'S#V;'S;=`#}<%lO#V~1vZt~sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#}<%lO#V~2n]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#b#V#b#c3g#c;'S#V;'S;=`#}<%lO#V~3l]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#h#V#h#i4e#i;'S#V;'S;=`#}<%lO#V~4j]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#X#V#X#Y5c#Y;'S#V;'S;=`#}<%lO#V~5h_sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#b#V#b#c6g#c#l#V#l#m8]#m;'S#V;'S;=`#}<%lO#V~6l]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#h#V#h#i7e#i;'S#V;'S;=`#}<%lO#V~7jZsPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]1o!];'S#V;'S;=`#}<%lO#V~8b]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#h#V#h#i9Z#i;'S#V;'S;=`#}<%lO#V~9`ZsPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]:R!];'S#V;'S;=`#}<%lO#V~:YZu~sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#}<%lO#V~;Q_sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]u#Y;'S#V;'S;=`#}<%lO#V~>zZsPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]X#^;'S#V;'S;=`#}<%lO#V~!>^]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#U#V#U#V!?V#V;'S#V;'S;=`#}<%lO#V~!?[]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#]#V#]#^!@T#^;'S#V;'S;=`#}<%lO#V~!@Y]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#`#V#`#a!AR#a;'S#V;'S;=`#}<%lO#V~!AW]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#]#V#]#^!BP#^;'S#V;'S;=`#}<%lO#V~!BU]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#h#V#h#i!B}#i;'S#V;'S;=`#}<%lO#V~!CS]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#m#V#m#n!C{#n;'S#V;'S;=`#}<%lO#V~!DQZsPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]!Ds!];'S#V;'S;=`#}<%lO#V~!DzZy~sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#}<%lO#VR!Er]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#X#V#X#Y!Fk#Y;'S#V;'S;=`#}<%lO#VR!Fp]sPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!]#g#V#g#h!Gi#h;'S#V;'S;=`#}<%lO#VR!GpZmQsPOX#VZp#Vqr#Vsx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#}<%lO#V", + tokenData: "!Fj~RpOX#VXY$QYZ$QZp#Vpq$Qqr#Vrs$`sx#Vxy)zyz*Pz#T#V#T#U*U#U#V#V#V#W3s#W#Y#V#Y#Z=[#Z#`#V#`#aD}#a#b#V#b#cIY#c#dJz#d#e!!}#e#f#V#f#g!-m#g#h!7Q#h#j#V#j#k!:b#k#m#V#m#n!C}#n;'S#V;'S;=`#z<%lO#VP#[YtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#VP#}P;=`<%l#V~$VRi~XY$QYZ$Qpq$Q~$eatPOX$`XY%jZp$`pq%jqr$`rs'^sx$`xz%jz}$`}!O$`!O![$`![!]$`!]#O$`#O#P(T#P;'S$`;'S;=`)t<%lO$`~%mWOY%jZr%jrs&Vs#O%j#O#P&[#P;'S%j;'S;=`'W<%lO%j~&[Os~~&_RO;'S%j;'S;=`&h;=`O%j~&kXOY%jZr%jrs&Vs#O%j#O#P&[#P;'S%j;'S;=`'W;=`<%l%j<%lO%j~'ZP;=`<%l%j~'eYs~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~(Y^tPOX$`XZ%jZp$`pq%jqx$`xz%jz}$`}!O$`!O![$`![!]$`!];'S$`;'S;=`)U;=`<%l%j<%lO$`~)XXOY%jZr%jrs&Vs#O%j#O#P&[#P;'S%j;'S;=`'W;=`<%l$`<%lO%j~)wP;=`<%l$`~*PO!T~~*UO!U~~*Z^tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#b#V#b#c+V#c#f#V#f#g,w#g;'S#V;'S;=`#z<%lO#VR+[[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#m#V#m#n,Q#n;'S#V;'S;=`#z<%lO#VR,XY!OQtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~,|[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#V#V#V#W-r#W;'S#V;'S;=`#z<%lO#V~-w[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#[#V#[#].m#];'S#V;'S;=`#z<%lO#V~.r[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#]#V#]#^/h#^;'S#V;'S;=`#z<%lO#V~/m[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#j#V#j#k0c#k;'S#V;'S;=`#z<%lO#V~0h[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#X#V#X#Y1^#Y;'S#V;'S;=`#z<%lO#V~1c[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#W#V#W#X2X#X;'S#V;'S;=`#z<%lO#V~2^YtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]2|!];'S#V;'S;=`#z<%lO#V~3TYm~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~3x[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]4n!]#c#V#c#d5e#d;'S#V;'S;=`#z<%lO#V~4uYu~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~5j[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#b#V#b#c6`#c;'S#V;'S;=`#z<%lO#V~6e[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#h#V#h#i7Z#i;'S#V;'S;=`#z<%lO#V~7`[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#X#V#X#Y8U#Y;'S#V;'S;=`#z<%lO#V~8Z^tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#b#V#b#c9V#c#l#V#l#m:u#m;'S#V;'S;=`#z<%lO#V~9[[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#h#V#h#i:Q#i;'S#V;'S;=`#z<%lO#V~:VYtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]4n!];'S#V;'S;=`#z<%lO#V~:z[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#h#V#h#i;p#i;'S#V;'S;=`#z<%lO#V~;uYtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]]!]#]#V#]#^?S#^#c#V#c#dAm#d;'S#V;'S;=`#z<%lO#V~>dYw~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~?X[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#`#V#`#a?}#a;'S#V;'S;=`#z<%lO#V~@S[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#X#V#X#Y@x#Y;'S#V;'S;=`#z<%lO#V~@}YtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]>]!];'S#V;'S;=`#z<%lO#V~Ar[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#f#V#f#gBh#g;'S#V;'S;=`#z<%lO#V~Bm[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#_#V#_#`Cc#`;'S#V;'S;=`#z<%lO#V~ChYtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]DW!];'S#V;'S;=`#z<%lO#V~D_Yx~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~ES[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#T#V#T#UEx#U;'S#V;'S;=`#z<%lO#V~E}[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#b#V#b#cFs#c;'S#V;'S;=`#z<%lO#V~Fx[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#Z#V#Z#[Gn#[;'S#V;'S;=`#z<%lO#V~GsYtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]Hc!];'S#V;'S;=`#z<%lO#V~HjY!Q~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#VRI_[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#c#V#c#dJT#d;'S#V;'S;=`#z<%lO#VRJ[YoQtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~KP^tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#b#V#b#cK{#c#f#V#f#gNh#g;'S#V;'S;=`#z<%lO#VRLQ[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#`#V#`#aLv#a;'S#V;'S;=`#z<%lO#VRL{[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#m#V#m#nMq#n;'S#V;'S;=`#z<%lO#VRMxYpQtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~NmdtPOX! {XZ!!rZp! {pq!!rqx! {xz!!rz}! {}!O! {!O!Q! {!Q![#V![!]! {!]!c! {!c!}#V!}#R! {#R#S#V#S#T! {#T#o#V#o;'S! {;'S;=`!!w<%lO! {~!!SY!V~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~!!wO!V~~!!zP;=`<%l! {R!#S^tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#f#V#f#g!$O#g#i#V#i#j!)[#j;'S#V;'S;=`#z<%lO#VR!$T[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#]#V#]#^!$y#^;'S#V;'S;=`#z<%lO#VR!%O[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#j#V#j#k!%t#k;'S#V;'S;=`#z<%lO#VR!%y[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#T#V#T#U!&o#U;'S#V;'S;=`#z<%lO#VR!&t[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#h#V#h#i!'j#i;'S#V;'S;=`#z<%lO#VR!'o[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#X#V#X#Y!(e#Y;'S#V;'S;=`#z<%lO#VR!(lY}QtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#VR!)a[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#U#V#U#V!*V#V;'S#V;'S;=`#z<%lO#VR!*[[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#`#V#`#a!+Q#a;'S#V;'S;=`#z<%lO#VR!+V[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#]#V#]#^!+{#^;'S#V;'S;=`#z<%lO#VR!,Q[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#V#V#V#W!,v#W;'S#V;'S;=`#z<%lO#VR!,}Y|QtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~!-r[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]!.h!]#X#V#X#Y!/_#Y;'S#V;'S;=`#z<%lO#V~!.oY!P~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~!/d^tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#d#V#d#e!0`#e#j#V#j#k!5f#k;'S#V;'S;=`#z<%lO#V~!0e[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#c#V#c#d!1Z#d;'S#V;'S;=`#z<%lO#V~!1`[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]!.h!]#g#V#g#h!2U#h;'S#V;'S;=`#z<%lO#V~!2Z[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#X#V#X#Y!3P#Y;'S#V;'S;=`#z<%lO#V~!3U[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#h#V#h#i!3z#i;'S#V;'S;=`#z<%lO#V~!4PYtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]!4o!];'S#V;'S;=`#z<%lO#V~!4vY!S~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~!5kYtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]!6Z!];'S#V;'S;=`#z<%lO#V~!6bYq~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~!7V[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#m#V#m#n!7{#n;'S#V;'S;=`#z<%lO#V~!8Q[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#a#V#a#b!8v#b;'S#V;'S;=`#z<%lO#V~!8{YtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]!9k!];'S#V;'S;=`#z<%lO#V~!9rY!R~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~!:g[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#]#V#]#^!;]#^;'S#V;'S;=`#z<%lO#V~!;b[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#g#V#g#h!R[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#]#V#]#^!>w#^;'S#V;'S;=`#z<%lO#V~!>|[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#`#V#`#a!?r#a;'S#V;'S;=`#z<%lO#V~!?w[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#]#V#]#^!@m#^;'S#V;'S;=`#z<%lO#V~!@r[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#h#V#h#i!Ah#i;'S#V;'S;=`#z<%lO#V~!Am[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#m#V#m#n!Bc#n;'S#V;'S;=`#z<%lO#V~!BhYtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]!CW!];'S#V;'S;=`#z<%lO#V~!C_Yz~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#VR!DS[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#X#V#X#Y!Dx#Y;'S#V;'S;=`#z<%lO#VR!D}[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#g#V#g#h!Es#h;'S#V;'S;=`#z<%lO#VR!EzYnQtPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V", tokenizers: [negateToken, 0, 1], topRules: {"Program":[0,1]}, - tokenPrec: 193, - termNames: {"0":"⚠","1":"@top","2":"OrExpr","3":"AndExpr","4":"NegateExpr","5":"PrefixExpr","6":"ArchivedExpr","7":"RevisionExpr","8":"ContentExpr","9":"ContextExpr","10":"FileExpr","11":"ForkExpr","12":"VisibilityExpr","13":"RepoExpr","14":"LangExpr","15":"SymExpr","16":"RepoSetExpr","17":"ParenExpr","18":"Term","19":"expr+","20":"(or andExpr)+","21":"␄","22":"negate","23":"%mainskip","24":"space","25":"query","26":"andExpr","27":"expr","28":"archivedKw","29":"\"yes\"","30":"\"no\"","31":"\"only\"","32":"revisionKw","33":"value","34":"quotedString","35":"word","36":"contentKw","37":"contextKw","38":"fileKw","39":"forkKw","40":"forkValue","41":"visibilityKw","42":"visibilityValue","43":"\"public\"","44":"\"private\"","45":"\"any\"","46":"repoKw","47":"langKw","48":"symKw","49":"reposetKw","50":"\"(\"","51":"\")\"","52":"or"} + tokenPrec: 200, + termNames: {"0":"⚠","1":"@top","2":"OrExpr","3":"AndExpr","4":"NegateExpr","5":"PrefixExpr","6":"ArchivedExpr","7":"RevisionExpr","8":"ContentExpr","9":"ContextExpr","10":"FileExpr","11":"ForkExpr","12":"VisibilityExpr","13":"RepoExpr","14":"LangExpr","15":"SymExpr","16":"RepoSetExpr","17":"ParenExpr","18":"QuotedTerm","19":"Term","20":"expr+","21":"(or andExpr)+","22":"␄","23":"negate","24":"%mainskip","25":"space","26":"query","27":"andExpr","28":"expr","29":"archivedKw","30":"\"yes\"","31":"\"no\"","32":"\"only\"","33":"revisionKw","34":"value","35":"quotedString","36":"word","37":"contentKw","38":"contextKw","39":"fileKw","40":"forkKw","41":"forkValue","42":"visibilityKw","43":"visibilityValue","44":"\"public\"","45":"\"private\"","46":"\"any\"","47":"repoKw","48":"langKw","49":"symKw","50":"reposetKw","51":"\"(\"","52":"\")\"","53":"or"} }) diff --git a/packages/queryLanguage/src/query.grammar b/packages/queryLanguage/src/query.grammar index 66c0ee83..f42b21b4 100644 --- a/packages/queryLanguage/src/query.grammar +++ b/packages/queryLanguage/src/query.grammar @@ -24,12 +24,13 @@ expr { NegateExpr | ParenExpr | PrefixExpr | + QuotedTerm | Term } NegateExpr { !negate negate (PrefixExpr | ParenExpr) } -ParenExpr { "(" query ")" } +ParenExpr { "(" query? ")" } PrefixExpr { ArchivedExpr | @@ -63,7 +64,8 @@ archivedValue { "yes" | "no" | "only" } forkValue { "yes" | "no" | "only" } visibilityValue { "public" | "private" | "any" } -Term { quotedString | word } +QuotedTerm { quotedString } +Term { word } value { quotedString | word } @@ -86,9 +88,7 @@ value { quotedString | word } quotedString { '"' (!["\\\n] | "\\" _)* '"' } - // Allow almost anything in a word except spaces, parens, quotes - // Colons and dashes are allowed anywhere in words (including at the start) - word { (![ \t\n()"]) (![ \t\n()":] | ":" | "-")* } + word { (![ \t\n()]) (![ \t\n():] | ":" | "-")* } space { $[ \t\n]+ } diff --git a/packages/queryLanguage/test/grouping.txt b/packages/queryLanguage/test/grouping.txt index e8c7798e..1c1c084b 100644 --- a/packages/queryLanguage/test/grouping.txt +++ b/packages/queryLanguage/test/grouping.txt @@ -4,7 +4,7 @@ ==> -Program(ParenExpr(Term(⚠))) +Program(ParenExpr) # Simple grouping diff --git a/packages/queryLanguage/test/negation.txt b/packages/queryLanguage/test/negation.txt index 716da115..c229324c 100644 --- a/packages/queryLanguage/test/negation.txt +++ b/packages/queryLanguage/test/negation.txt @@ -12,7 +12,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Dash in middle @@ -244,7 +244,7 @@ Program(NegateExpr(ParenExpr(AndExpr(PrefixExpr(FileExpr),PrefixExpr(LangExpr))) ==> -Program(NegateExpr(ParenExpr(Term(⚠)))) +Program(NegateExpr(ParenExpr)) # Negate with space after dash diff --git a/packages/queryLanguage/test/operators.txt b/packages/queryLanguage/test/operators.txt index 0ff1f6d8..d3c7061a 100644 --- a/packages/queryLanguage/test/operators.txt +++ b/packages/queryLanguage/test/operators.txt @@ -36,7 +36,7 @@ Program(OrExpr(Term,NegateExpr(PrefixExpr(FileExpr)))) ==> -Program(OrExpr(Term,Term)) +Program(OrExpr(QuotedTerm,QuotedTerm)) # OR with different prefixes @@ -260,7 +260,7 @@ Program(OrExpr(PrefixExpr(FileExpr),PrefixExpr(FileExpr))) ==> -Program(OrExpr(ParenExpr(Term(⚠)),ParenExpr(Term(⚠)))) +Program(OrExpr(ParenExpr,ParenExpr)) # OR with negated groups diff --git a/packages/queryLanguage/test/precedence.txt b/packages/queryLanguage/test/precedence.txt index d43e5b34..f25d3db9 100644 --- a/packages/queryLanguage/test/precedence.txt +++ b/packages/queryLanguage/test/precedence.txt @@ -156,7 +156,7 @@ Program(AndExpr(ParenExpr(OrExpr(Term,Term)),ParenExpr(OrExpr(Term,Term)))) ==> -Program(Term) +Program(QuotedTerm) # Prefix with OR value doesn't split @@ -188,7 +188,7 @@ Program(OrExpr(Term,ParenExpr(AndExpr(Term,Term)))) ==> -Program(OrExpr(ParenExpr(Term(⚠)),AndExpr(Term,Term))) +Program(OrExpr(ParenExpr,AndExpr(Term,Term))) # Negation of empty group @@ -196,5 +196,5 @@ Program(OrExpr(ParenExpr(Term(⚠)),AndExpr(Term,Term))) ==> -Program(AndExpr(NegateExpr(ParenExpr(Term(⚠))),Term)) +Program(AndExpr(NegateExpr(ParenExpr),Term)) diff --git a/packages/queryLanguage/test/quoted.txt b/packages/queryLanguage/test/quoted.txt index 088ed0d3..b918ea04 100644 --- a/packages/queryLanguage/test/quoted.txt +++ b/packages/queryLanguage/test/quoted.txt @@ -4,6 +4,22 @@ ==> +Program(QuotedTerm) + +# Leading unclosed quote + +"hello + +==> + +Program(Term) + +# Trailing unclosed quote + +hello" + +==> + Program(Term) # Quoted string with spaces @@ -12,7 +28,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Multiple words in quotes @@ -20,7 +36,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with escaped quote @@ -28,7 +44,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with escaped backslash @@ -36,7 +52,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Double backslash @@ -44,7 +60,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Multiple escaped quotes @@ -52,7 +68,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Mixed escaped characters @@ -60,7 +76,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Empty quoted string @@ -68,7 +84,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with only spaces @@ -76,7 +92,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string in file prefix @@ -116,7 +132,7 @@ Program(PrefixExpr(RevisionExpr)) ==> -Program(AndExpr(Term,Term)) +Program(AndExpr(QuotedTerm,QuotedTerm)) # Quoted and unquoted mixed @@ -124,7 +140,7 @@ unquoted "quoted string" another ==> -Program(AndExpr(Term,Term,Term)) +Program(AndExpr(Term,QuotedTerm,Term)) # Quoted string with parentheses inside @@ -132,7 +148,7 @@ Program(AndExpr(Term,Term,Term)) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with brackets @@ -140,7 +156,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with special chars @@ -148,7 +164,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with colons @@ -156,7 +172,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with dashes @@ -164,7 +180,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with dots @@ -172,7 +188,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with regex pattern @@ -180,7 +196,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with forward slashes @@ -188,7 +204,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with underscores @@ -196,7 +212,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with numbers @@ -204,7 +220,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with mixed case @@ -212,7 +228,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted prefix value with spaces @@ -236,7 +252,7 @@ Program(AndExpr(PrefixExpr(FileExpr),PrefixExpr(RepoExpr))) ==> -Program(ParenExpr(Term)) +Program(ParenExpr(QuotedTerm)) # Multiple quoted in parentheses @@ -244,7 +260,7 @@ Program(ParenExpr(Term)) ==> -Program(ParenExpr(AndExpr(Term,Term))) +Program(ParenExpr(AndExpr(QuotedTerm,QuotedTerm))) # Quoted with escaped newline @@ -252,7 +268,7 @@ Program(ParenExpr(AndExpr(Term,Term))) ==> -Program(Term) +Program(QuotedTerm) # Quoted with tab character @@ -260,7 +276,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Lang prefix with quoted value @@ -292,7 +308,7 @@ Program(PrefixExpr(ContentExpr)) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with hash @@ -300,7 +316,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with dollar sign @@ -308,7 +324,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with percent @@ -316,7 +332,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with ampersand @@ -324,7 +340,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with asterisk @@ -332,7 +348,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with plus @@ -340,7 +356,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with equals @@ -348,7 +364,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with angle brackets @@ -356,7 +372,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with pipe @@ -364,7 +380,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with tilde @@ -372,7 +388,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with backtick @@ -380,7 +396,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with question mark @@ -388,7 +404,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with exclamation @@ -396,7 +412,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with semicolon @@ -404,7 +420,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted string with comma @@ -412,7 +428,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Multiple quotes in content @@ -428,7 +444,7 @@ Program(PrefixExpr(ContentExpr)) ==> -Program(Term) +Program(QuotedTerm) # Quoted file prefix as literal @@ -436,7 +452,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted lang prefix as literal @@ -444,7 +460,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Quoted partial prefix @@ -452,7 +468,7 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) # Mix of quoted prefix and real prefix @@ -460,7 +476,7 @@ Program(Term) ==> -Program(AndExpr(Term,PrefixExpr(FileExpr))) +Program(AndExpr(QuotedTerm,PrefixExpr(FileExpr))) # Quoted short form prefix @@ -468,7 +484,7 @@ Program(AndExpr(Term,PrefixExpr(FileExpr))) ==> -Program(Term) +Program(QuotedTerm) # Quoted revision prefix @@ -476,4 +492,12 @@ Program(Term) ==> -Program(Term) +Program(QuotedTerm) + +# Quotes can be used within words + +name\s*=\s*"projectmanagementlugapi lang:HCL + +==> + +Program(AndExpr(Term, PrefixExpr(LangExpr))) \ No newline at end of file diff --git a/packages/web/src/features/search/parser.ts b/packages/web/src/features/search/parser.ts index 21cf7473..e3e9d41a 100644 --- a/packages/web/src/features/search/parser.ts +++ b/packages/web/src/features/search/parser.ts @@ -18,6 +18,7 @@ import { SymExpr, SyntaxNode, Term, + QuotedTerm, Tree, VisibilityExpr, } from '@sourcebot/query-language'; @@ -175,8 +176,12 @@ const transformTreeToIR = async ({ // PrefixExpr contains specific prefix types return transformPrefixExpr(node); + case QuotedTerm: case Term: { - const termText = input.substring(node.from, node.to).replace(/^"|"$/g, ''); + const fullText = input.substring(node.from, node.to); + // If the term is quoted, then we remove the quotes as they are + // not interpreted. + const termText = node.type.id === QuotedTerm ? fullText.replace(/^"|"$/g, '') : fullText; return isRegexEnabled ? { regexp: {