Skip to content

Commit 507fc8b

Browse files
authored
fix(parser): Allow parenthesis in query and filter terms (#788)
* update lexer/parser * fix ParenExpr with word with paren inside * changelog
1 parent 204fc82 commit 507fc8b

File tree

7 files changed

+593
-48
lines changed

7 files changed

+593
-48
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Fixed
1111
- Properly map all hotkeys in UI based on the platform [#784](https://github.com/sourcebot-dev/sourcebot/pull/784)
12+
- Allow parenthesis in query and filter terms [#788](https://github.com/sourcebot-dev/sourcebot/pull/788)
1213

1314
## [4.10.16] - 2026-01-22
1415

packages/queryLanguage/src/parser.terms.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
// This file was generated by lezer-generator. You probably shouldn't edit it.
22
export const
33
negate = 23,
4+
openParen = 24,
5+
word = 25,
6+
closeParen = 26,
7+
or = 27,
48
Program = 1,
59
OrExpr = 2,
610
AndExpr = 3,
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
// This file was generated by lezer-generator. You probably shouldn't edit it.
22
import {LRParser} from "@lezer/lr"
3-
import {negateToken} from "./tokens"
3+
import {negateToken, parenToken, wordToken, closeParenToken, orToken} from "./tokens"
44
export const parser = LRParser.deserialize({
55
version: 14,
6-
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",
7-
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~",
8-
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",
6+
states: "'hOVQwOOO!WQtO'#CcO!WQtO'#CdO!WQtO'#CeO!WQtO'#CfO!`QpO'#CgO!kQpO'#ChO!WQtO'#CiO!WQtO'#CjO!WQtO'#CkO!WQtO'#ClOOQo'#Ca'#CaO!vQ!PO'#CmO!}QrO'#C`OOQo'#Cn'#CnOOQo'#Co'#CoOOQo'#C|'#C|O#uQ!aO'#C{O$SQ!YO'#C{O$_Q!QO'#C^OOQW'#Cz'#CzQOQpOOO!`QpO'#CbOOQo'#DS'#DSOOQo,58},58}OOQo,59O,59OOOQo,59P,59POOQo,59Q,59QOOQo'#DY'#DYOOQo,59R,59ROOQo'#D['#D[OOQo,59S,59SOOQo,59T,59TOOQo,59U,59UOOQo,59V,59VOOQo,59W,59WOOQo,59X,59XO$dQxO,59XOOQo,58z,58zOOQo'#Cp'#CpO$iQ!aO,58yOVQwO'#CqO$vQ!YO,58xOOQo,58|,58|OOQo1G.s1G.sOOQo-E6n-E6nO%RQ!aO'#C{OOQh'#C{'#C{OOQh,59],59]OOQh-E6o-E6o",
7+
stateData: "%n~OmOS~Og]Oh[Oi_OqfOuPOw^OxQOyROzSO{TO}UO!SVO!TWO!UXO!VYO~OigOwgO~OrlOslOtlO~O!PnO!QnO!RnO~OjtO~PVOh[OqfOuPOxQOyROzSO{TO}UO!SVO!TWO!UXO!VYO~OfnXkoXjnX~PVOfnXkoXjnX~OkyO~Oj|O~OfRakRajRa~PVOkyOfQajQa~OfoXkoXjoX~PVOwquxyz{}!S!T!U!V{~",
8+
goto: "$d!PPP!Q!U!]!e!p!p!p!p!p!p!p!p!p!p!p!e!]!]!y#QPPPPPPPP#W#^#ePPPPP#qPPPPP$ZP$aTdO[SbO[R!Py]`O[axy!O[`O[axy!ORv]_ZO[]axy!OSxa!OR}xQzcR!RzQeORu[ScO[R!QySaO[Uwax!OR!OyQhPQiQQjRQkSQpVQqWQrXRsYQmTR{fRoU",
99
nodeNames: "⚠ Program OrExpr AndExpr NegateExpr PrefixExpr ArchivedExpr RevisionExpr ContentExpr ContextExpr FileExpr ForkExpr VisibilityExpr RepoExpr LangExpr SymExpr RepoSetExpr ParenExpr QuotedTerm Term",
1010
maxTerm: 53,
1111
skippedNodes: [0],
1212
repeatNodeCount: 2,
13-
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![!]<e!];'S#V;'S;=`#z<%lO#V~<lYv~tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!];'S#V;'S;=`#z<%lO#V~=a^tPOX#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!<W#h;'S#V;'S;=`#z<%lO#V~!<][tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#]#V#]#^!=R#^;'S#V;'S;=`#z<%lO#V~!=W[tPOX#VZp#Vqx#Vz}#V}!O#V!O![#V![!]#V!]#U#V#U#V!=|#V;'S#V;'S;=`#z<%lO#V~!>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",
14-
tokenizers: [negateToken, 0, 1],
13+
tokenData: "/U~R_XY!QYZ!Qpq!Qrs!`#T#U$S#V#W%i#Y#Z'R#`#a(_#b#c(|#c#d)X#d#e)p#f#g+]#g#h,w#j#k-`#m#n.s~!VRm~XY!QYZ!Qpq!Q~!cWOY!`Zr!`rs!{s#O!`#O#P#Q#P;'S!`;'S;=`#|<%lO!`~#QOw~~#TRO;'S!`;'S;=`#^;=`O!`~#aXOY!`Zr!`rs!{s#O!`#O#P#Q#P;'S!`;'S;=`#|;=`<%l!`<%lO!`~$PP;=`<%l!`~$VQ#b#c$]#f#g$h~$`P#m#n$c~$hO!R~~$kP#V#W$n~$qP#[#]$t~$wP#]#^$z~$}P#j#k%Q~%TP#X#Y%W~%ZP#W#X%^~%aP![!]%d~%iOq~~%lQ![!]%r#c#d%w~%wOx~~%zP#b#c%}~&QP#h#i&T~&WP#X#Y&Z~&^Q#b#c&d#l#m&p~&gP#h#i&j~&mP![!]%r~&sP#h#i&v~&yP![!]&|~'ROy~~'UR![!]'_#]#^'d#c#d'v~'dOz~~'gP#`#a'j~'mP#X#Y'p~'sP![!]'_~'yP#f#g'|~(PP#_#`(S~(VP![!](Y~(_O{~~(bP#T#U(e~(hP#b#c(k~(nP#Z#[(q~(tP![!](w~(|O!T~~)PP#c#d)S~)XOs~~)[P#b#c)_~)bP#`#a)e~)hP#m#n)k~)pOt~~)sQ#f#g)y#i#j*n~)|P#]#^*P~*SP#j#k*V~*YP#T#U*]~*`P#h#i*c~*fP#X#Y*i~*nO!Q~~*qP#U#V*t~*wP#`#a*z~*}P#]#^+Q~+TP#V#W+W~+]O!P~~+`Q![!]+f#X#Y+k~+kO!S~~+nQ#d#e+t#j#k,l~+wP#c#d+z~+}Q![!]+f#g#h,T~,WP#X#Y,Z~,^P#h#i,a~,dP![!],g~,lO!V~~,oP![!],r~,wOu~~,zP#m#n,}~-QP#a#b-T~-WP![!]-Z~-`O!U~~-cP#]#^-f~-iP#g#h-l~-oP#]#^-r~-uP#U#V-x~-{P#]#^.O~.RP#`#a.U~.XP#]#^.[~._P#h#i.b~.eP#m#n.h~.kP![!].n~.sO}~~.vP#X#Y.y~.|P#g#h/P~/UOr~",
14+
tokenizers: [negateToken, parenToken, wordToken, closeParenToken, orToken, 0],
1515
topRules: {"Program":[0,1]},
1616
tokenPrec: 200,
17-
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"}
17+
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":"openParen","25":"word","26":"closeParen","27":"or","28":"%mainskip","29":"space","30":"query","31":"andExpr","32":"expr","33":"archivedKw","34":"\"yes\"","35":"\"no\"","36":"\"only\"","37":"revisionKw","38":"value","39":"quotedString","40":"contentKw","41":"contextKw","42":"fileKw","43":"forkKw","44":"forkValue","45":"visibilityKw","46":"visibilityValue","47":"\"public\"","48":"\"private\"","49":"\"any\"","50":"repoKw","51":"langKw","52":"symKw","53":"reposetKw"}
1818
})

packages/queryLanguage/src/query.grammar

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
@external tokens negateToken from "./tokens" { negate }
2+
@external tokens parenToken from "./tokens" { openParen }
3+
@external tokens wordToken from "./tokens" { word }
4+
@external tokens closeParenToken from "./tokens" { closeParen }
5+
@external tokens orToken from "./tokens" { or }
26

37
@top Program { query }
48

@@ -30,7 +34,7 @@ expr {
3034

3135
NegateExpr { !negate negate (PrefixExpr | ParenExpr) }
3236

33-
ParenExpr { "(" query? ")" }
37+
ParenExpr { openParen query? closeParen }
3438

3539
PrefixExpr {
3640
ArchivedExpr |
@@ -83,20 +87,19 @@ value { quotedString | word }
8387
langKw { "lang:" }
8488
symKw { "sym:" }
8589
reposetKw { "reposet:" }
86-
87-
or { "or" ![a-zA-Z0-9_] }
88-
90+
91+
// 'or' is now handled by external orToken tokenizer
92+
8993
quotedString { '"' (!["\\\n] | "\\" _)* '"' }
9094

91-
word { (![ \t\n()]) (![ \t\n():] | ":" | "-")* }
95+
// word is now handled by external wordToken tokenizer
9296

9397
space { $[ \t\n]+ }
9498

95-
@precedence {
99+
@precedence {
96100
quotedString,
97-
archivedKw, revisionKw, contentKw, contextKw, fileKw,
98-
forkKw, visibilityKw, repoKw, langKw,
99-
symKw, reposetKw, or,
100-
word
101+
archivedKw, revisionKw, contentKw, contextKw, fileKw,
102+
forkKw, visibilityKw, repoKw, langKw,
103+
symKw, reposetKw
101104
}
102105
}

0 commit comments

Comments
 (0)