Skip to content

Commit ed58ba1

Browse files
wip
1 parent 2b35bb0 commit ed58ba1

File tree

9 files changed

+87
-163
lines changed

9 files changed

+87
-163
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"resolutions": {
3232
"prettier": "3.5.3",
3333
"@lezer/common": "1.3.0",
34+
"@lezer/lr": "1.4.3",
3435
"qs": "^6.14.2",
3536
"rollup": "^4.59.0",
3637
"cacache/glob": "^10.5.0",
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { styleTags, tags as t } from "@lezer/highlight";
2+
3+
export const highlight = styleTags({
4+
FilterKeyword: t.keyword,
5+
QuotedTerm: t.quote,
6+
Term: t.invalid,
7+
NegateExpr: t.operator,
8+
OrExpr: t.keyword,
9+
});
Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,38 @@
11
// This file was generated by lezer-generator. You probably shouldn't edit it.
22
export const
3-
negate = 23,
4-
openParen = 24,
5-
word = 25,
6-
closeParen = 26,
7-
or = 27,
3+
negate = 34,
4+
openParen = 35,
5+
word = 36,
6+
closeParen = 37,
7+
or = 38,
88
Program = 1,
99
OrExpr = 2,
1010
AndExpr = 3,
1111
NegateExpr = 4,
1212
PrefixExpr = 5,
1313
ArchivedExpr = 6,
14-
RevisionExpr = 7,
15-
ContentExpr = 8,
16-
ContextExpr = 9,
17-
FileExpr = 10,
18-
ForkExpr = 11,
19-
VisibilityExpr = 12,
20-
RepoExpr = 13,
21-
LangExpr = 14,
22-
SymExpr = 15,
23-
RepoSetExpr = 16,
24-
ParenExpr = 17,
25-
QuotedTerm = 18,
26-
Term = 19,
14+
archivedFilterKw = 7,
15+
RevisionExpr = 8,
16+
revisionFilterKw = 9,
17+
ContentExpr = 10,
18+
contentFilterKw = 11,
19+
ContextExpr = 12,
20+
contextFilterKw = 13,
21+
FileExpr = 14,
22+
fileFilterKw = 15,
23+
ForkExpr = 16,
24+
forkFilterKw = 17,
25+
VisibilityExpr = 18,
26+
visibilityFilterKw = 19,
27+
RepoExpr = 20,
28+
repoFilterKw = 21,
29+
LangExpr = 22,
30+
langFilterKw = 23,
31+
SymExpr = 24,
32+
symFilterKw = 25,
33+
RepoSetExpr = 26,
34+
reposetFilterKw = 27,
35+
ParenExpr = 28,
36+
QuotedTerm = 29,
37+
Term = 30,
2738
Dialect_regex = 0
Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
// This file was generated by lezer-generator. You probably shouldn't edit it.
22
import {LRParser} from "@lezer/lr"
33
import {negateToken, parenToken, wordToken, closeParenToken, orToken} from "./tokens"
4+
import {highlight} from "./highlight"
45
export const parser = LRParser.deserialize({
56
version: 14,
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",
9-
nodeNames: "⚠ Program OrExpr AndExpr NegateExpr PrefixExpr ArchivedExpr RevisionExpr ContentExpr ContextExpr FileExpr ForkExpr VisibilityExpr RepoExpr LangExpr SymExpr RepoSetExpr ParenExpr QuotedTerm Term",
10-
maxTerm: 53,
7+
states: "(|OVQwOOOOQO'#Cc'#CcOOQS'#Ce'#CeO!WQtO'#CdOOQS'#Cg'#CgO!WQtO'#CfOOQS'#Ci'#CiO!WQtO'#ChOOQS'#Ck'#CkO!WQtO'#CjOOQO'#Cm'#CmO!`QpO'#ClOOQO'#Co'#CoO!kQpO'#CnOOQS'#Cq'#CqO!WQtO'#CpOOQS'#Cs'#CsO!WQtO'#CrOOQS'#Cu'#CuO!WQtO'#CtOOQS'#Cw'#CwO!WQtO'#CvOOQo'#Ca'#CaO!vQ!PO'#CxO!}QrO'#C`OOQo'#Cy'#CyOOQo'#Cz'#CzOOQo'#DX'#DXO#uQ!aO'#DWO$SQ!YO'#DWO$_Q!QO'#C^OOQW'#DV'#DVQOQpOOO!`QpO'#CbOOQo'#D_'#D_OOQo,59O,59OOOQo,59Q,59QOOQo,59S,59SOOQo,59U,59UOOQo'#De'#DeOOQo,59W,59WOOQo'#Dg'#DgOOQo,59Y,59YOOQo,59[,59[OOQo,59^,59^OOQo,59`,59`OOQo,59b,59bOOQo,59d,59dO$dQxO,59dOOQo,58z,58zOOQo'#C{'#C{O$iQ!aO,58yOVQwO'#C|O$vQ!YO,58xOOQo,58|,58|OOQo1G/O1G/OOOQo-E6y-E6yO%RQ!aO'#DWOOQh'#DW'#DWOOQh,59h,59hOOQh-E6z-E6z",
8+
stateData: "%n~OxOS~OrhOsgOtjO|PO!QQO!SiO!TSO!UUO!VWO!WYO!Y[O!_^O!``O!abO!bdO~OtrO!SrO~O}wO!OwO!PwO~O![yO!]yO!^yO~Ou!PO~PVOsgO|PO!QQO!TSO!UUO!VWO!WYO!Y[O!_^O!``O!abO!bdO~OqyXvzXuyX~PVOqyXvzXuyX~Ov!UO~Ou!XO~OqRavRauRa~PVOv!UOqQauQa~OqzXvzXuzX~PVO!S|!Q!T!U!V!W!Y!_!`!a!b!W~",
9+
goto: "&v![PP!]!a!h!p!{#U!{#_!{#h!{#q!{#z!{$T!{$^!{$g!{$p!{$y!{%S!p!h!h%]%dPPPPPPPP%j%p%wPPPPP&TPPPPP&mP&sToOgSmOgR![!U]kOgl!T!U!Z[kOgl!T!U!ZR!Rh_fOghl!T!U!Z_qOghl!T!U!Z_ROghl!T!U!Z_TOghl!T!U!Z_VOghl!T!U!Z_XOghl!T!U!Z_ZOghl!T!U!Z_]Oghl!T!U!Z__Oghl!T!U!Z_aOghl!T!U!Z_cOghl!T!U!Z_eOghl!T!U!ZS!Tl!ZR!Y!TQ!VnR!^!VQpOR!QgSnOgR!]!USlOgU!Sl!T!ZR!Z!UQsRQtTQuVQvXQ{_Q|aQ}cR!OeQxZR!WqRz]",
10+
nodeNames: "⚠ Program OrExpr AndExpr NegateExpr PrefixExpr ArchivedExpr FilterKeyword RevisionExpr FilterKeyword ContentExpr FilterKeyword ContextExpr FilterKeyword FileExpr FilterKeyword ForkExpr FilterKeyword VisibilityExpr FilterKeyword RepoExpr FilterKeyword LangExpr FilterKeyword SymExpr FilterKeyword RepoSetExpr FilterKeyword ParenExpr QuotedTerm Term",
11+
maxTerm: 64,
12+
propSources: [highlight],
1113
skippedNodes: [0],
1214
repeatNodeCount: 2,
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~",
15+
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~!VRx~XY!QYZ!Qpq!Q~!cWOY!`Zr!`rs!{s#O!`#O#P#Q#P;'S!`;'S;=`#|<%lO!`~#QO!S~~#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!^~~$kP#V#W$n~$qP#[#]$t~$wP#]#^$z~$}P#j#k%Q~%TP#X#Y%W~%ZP#W#X%^~%aP![!]%d~%iO|~~%lQ![!]%r#c#d%w~%wO!T~~%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![!]&|~'RO!U~~'UR![!]'_#]#^'d#c#d'v~'dO!V~~'gP#`#a'j~'mP#X#Y'p~'sP![!]'_~'yP#f#g'|~(PP#_#`(S~(VP![!](Y~(_O!W~~(bP#T#U(e~(hP#b#c(k~(nP#Z#[(q~(tP![!](w~(|O!`~~)PP#c#d)S~)XO!O~~)[P#b#c)_~)bP#`#a)e~)hP#m#n)k~)pO!P~~)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!]~~*qP#U#V*t~*wP#`#a*z~*}P#]#^+Q~+TP#V#W+W~+]O![~~+`Q![!]+f#X#Y+k~+kO!_~~+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!b~~,oP![!],r~,wO!Q~~,zP#m#n,}~-QP#a#b-T~-WP![!]-Z~-`O!a~~-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!Y~~.vP#X#Y.y~.|P#g#h/P~/UO}~",
1416
tokenizers: [negateToken, parenToken, wordToken, closeParenToken, orToken, 0],
1517
topRules: {"Program":[0,1]},
1618
dialects: {regex: 0},
1719
tokenPrec: 200,
18-
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"}
20+
termNames: {"0":"⚠","1":"@top","2":"OrExpr","3":"AndExpr","4":"NegateExpr","5":"PrefixExpr","6":"ArchivedExpr","7":"archivedFilterKw","8":"RevisionExpr","9":"revisionFilterKw","10":"ContentExpr","11":"contentFilterKw","12":"ContextExpr","13":"contextFilterKw","14":"FileExpr","15":"fileFilterKw","16":"ForkExpr","17":"forkFilterKw","18":"VisibilityExpr","19":"visibilityFilterKw","20":"RepoExpr","21":"repoFilterKw","22":"LangExpr","23":"langFilterKw","24":"SymExpr","25":"symFilterKw","26":"RepoSetExpr","27":"reposetFilterKw","28":"ParenExpr","29":"QuotedTerm","30":"Term","31":"expr+","32":"(or andExpr)+","33":"␄","34":"negate","35":"openParen","36":"word","37":"closeParen","38":"or","39":"%mainskip","40":"space","41":"query","42":"andExpr","43":"expr","44":"archivedKw","45":"\"yes\"","46":"\"no\"","47":"\"only\"","48":"revisionKw","49":"value","50":"quotedString","51":"contentKw","52":"contextKw","53":"fileKw","54":"forkKw","55":"forkValue","56":"visibilityKw","57":"visibilityValue","58":"\"public\"","59":"\"private\"","60":"\"any\"","61":"repoKw","62":"langKw","63":"symKw","64":"reposetKw"}
1921
})

packages/queryLanguage/src/query.grammar

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
@external tokens closeParenToken from "./tokens" { closeParen }
55
@external tokens orToken from "./tokens" { or }
66

7+
@external propSource highlight from "./highlight"
8+
79
@dialects { regex }
810

911
@top Program { query }
@@ -52,19 +54,31 @@ PrefixExpr {
5254
RepoSetExpr
5355
}
5456

55-
RevisionExpr { revisionKw value }
56-
ContentExpr { contentKw value }
57-
ContextExpr { contextKw value }
58-
FileExpr { fileKw value }
59-
RepoExpr { repoKw value }
60-
LangExpr { langKw value }
61-
SymExpr { symKw value }
62-
RepoSetExpr { reposetKw value }
57+
RevisionExpr { revisionFilterKw value }
58+
ContentExpr { contentFilterKw value }
59+
ContextExpr { contextFilterKw value }
60+
FileExpr { fileFilterKw value }
61+
RepoExpr { repoFilterKw value }
62+
LangExpr { langFilterKw value }
63+
SymExpr { symFilterKw value }
64+
RepoSetExpr { reposetFilterKw value }
6365

6466
// Modifiers
65-
ArchivedExpr { archivedKw archivedValue }
66-
ForkExpr { forkKw forkValue }
67-
VisibilityExpr { visibilityKw visibilityValue }
67+
ArchivedExpr { archivedFilterKw archivedValue }
68+
ForkExpr { forkFilterKw forkValue }
69+
VisibilityExpr { visibilityFilterKw visibilityValue }
70+
71+
revisionFilterKw[@name=FilterKeyword] { revisionKw }
72+
contentFilterKw[@name=FilterKeyword] { contentKw }
73+
contextFilterKw[@name=FilterKeyword] { contextKw }
74+
fileFilterKw[@name=FilterKeyword] { fileKw }
75+
repoFilterKw[@name=FilterKeyword] { repoKw }
76+
langFilterKw[@name=FilterKeyword] { langKw }
77+
symFilterKw[@name=FilterKeyword] { symKw }
78+
reposetFilterKw[@name=FilterKeyword] { reposetKw }
79+
archivedFilterKw[@name=FilterKeyword] { archivedKw }
80+
forkFilterKw[@name=FilterKeyword] { forkKw }
81+
visibilityFilterKw[@name=FilterKeyword] { visibilityKw }
6882

6983
archivedValue { "yes" | "no" | "only" }
7084
forkValue { "yes" | "no" | "only" }

packages/web/src/app/[domain]/components/searchBar/searchBar.tsx

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ import {
2626
selectLineBoundaryBackward,
2727
selectLineBoundaryForward
2828
} from "@codemirror/commands";
29-
import { tags as t } from '@lezer/highlight';
30-
import { createTheme } from '@uiw/codemirror-themes';
3129
import CodeMirror, { Annotation, EditorView, KeyBinding, keymap, ReactCodeMirrorRef } from "@uiw/react-codemirror";
3230
import { cva } from "class-variance-authority";
3331
import { useRouter } from "next/navigation";
@@ -42,12 +40,12 @@ import { Separator } from "@/components/ui/separator";
4240
import { Tooltip, TooltipTrigger, TooltipContent } from "@/components/ui/tooltip";
4341
import { Toggle } from "@/components/ui/toggle";
4442
import { useDomain } from "@/hooks/useDomain";
45-
import tailwind from "@/tailwind";
4643
import React from "react";
4744
import Link from "next/link";
4845
import { CaseSensitiveIcon, RegexIcon, Wand2Icon } from "lucide-react";
4946
import { SearchAssistBox } from "./searchAssistBox";
5047
import useCaptureEvent from "@/hooks/useCaptureEvent";
48+
import { useCodeMirrorTheme } from "@/hooks/useCodeMirrorTheme";
5149

5250
const LANGUAGE_MODEL_DOCS_URL = "https://docs.sourcebot.dev/docs/configuration/language-model-providers";
5351

@@ -155,40 +153,13 @@ export const SearchBar = ({
155153
suggestionQuery,
156154
});
157155

158-
const theme = useMemo(() => {
159-
return createTheme({
160-
theme: 'light',
161-
settings: {
162-
background: tailwind.theme.colors.background,
163-
foreground: tailwind.theme.colors.foreground,
164-
caret: '#AEAFAD',
165-
},
166-
styles: [
167-
{
168-
tag: t.keyword,
169-
color: tailwind.theme.colors.highlight,
170-
},
171-
{
172-
tag: t.string,
173-
color: '#2aa198',
174-
},
175-
{
176-
tag: t.operator,
177-
color: '#d33682',
178-
},
179-
{
180-
tag: t.paren,
181-
color: tailwind.theme.colors.highlight,
182-
},
183-
],
184-
});
185-
}, []);
156+
const theme = useCodeMirrorTheme();
186157

187158
const extensions = useMemo(() => {
188159
return [
160+
zoekt(),
189161
keymap.of(searchBarKeymap),
190162
history(),
191-
zoekt(),
192163
EditorView.lineWrapping,
193164
EditorView.updateListener.of(update => {
194165
if (update.selectionSet) {
Lines changed: 8 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,11 @@
1-
import { LanguageSupport, StreamLanguage } from "@codemirror/language";
2-
import { tags as t } from "@lezer/highlight";
1+
import { LRLanguage, LanguageSupport } from "@codemirror/language";
2+
import { parser } from "@sourcebot/query-language";
33

4-
export const zoekt = () => {
5-
const zoektLanguage = StreamLanguage.define({
6-
startState() {
7-
return {
8-
inString: false,
9-
escaped: false
10-
};
11-
},
12-
token(stream, state) {
13-
// Handle strings
14-
if (state.inString) {
15-
if (state.escaped) {
16-
state.escaped = false;
17-
stream.next();
18-
return t.string.toString();
19-
}
20-
const ch = stream.next();
21-
if (ch === "\\") {
22-
state.escaped = true;
23-
return t.string.toString();
24-
} else if (ch === '"') {
25-
// End of string
26-
state.inString = false;
27-
return t.string.toString();
28-
} else {
29-
return t.string.toString();
30-
}
31-
}
32-
33-
// Skip whitespace
34-
if (stream.eatSpace()) {
35-
return null;
36-
}
37-
38-
// Negation operator
39-
if (stream.match(/-/)) {
40-
return t.operator.toString();
41-
}
42-
43-
// Parentheses
44-
if (stream.match("(") || stream.match(")")) {
45-
return t.paren.toString();
46-
}
47-
48-
// Check for prefixes first
49-
// If these match, we return 'keyword'
50-
if (stream.match(/(archived:|rev:|content:|f:|file:|fork:|visibility:|r:|repo:|regex:|lang:|sym:|t:|type:|context:)/)) {
51-
return t.keyword.toString();
52-
}
53-
54-
// Now try matching a standalone word
55-
// If the word is "or", return keyword; else nothing special
56-
if (stream.match(/[A-Za-z0-9_]+/)) {
57-
const word = stream.current();
58-
if (word === "or") {
59-
return t.keyword.toString();
60-
}
61-
return null;
62-
}
63-
64-
// Double-quoted string start
65-
if (stream.peek() === '"') {
66-
stream.next(); // consume opening quote
67-
state.inString = true;
68-
return t.string.toString();
69-
}
70-
71-
// If we reach here, consume a single character and return null
72-
stream.next();
73-
return null;
74-
}
75-
});
4+
const zoektLanguage = LRLanguage.define({
5+
name: "zoekt",
6+
parser,
7+
});
768

9+
export const zoekt = () => {
7710
return new LanguageSupport(zoektLanguage);
78-
};
11+
}

packages/web/src/app/globals.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@
9292
--editor-tag-processing: #164;
9393
--editor-tag-separator: #219;
9494
--editor-tag-invalid: #f00;
95-
--editor-tag-quote: #a11;
95+
--editor-tag-quote: #509f98;
9696
--editor-tag-annotation-special: #f00;
9797
--editor-tag-number: #219;
9898
--editor-tag-regexp: #e40;

yarn.lock

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3677,25 +3677,7 @@ __metadata:
36773677
languageName: node
36783678
linkType: hard
36793679

3680-
"@lezer/lr@npm:^0.15.0":
3681-
version: 0.15.8
3682-
resolution: "@lezer/lr@npm:0.15.8"
3683-
dependencies:
3684-
"@lezer/common": "npm:^0.15.0"
3685-
checksum: 10c0/5cd5123aca5cb2f268d265b6c21922ba3426ba60b9bbc1df85f4bfeed48097a444c656e642557fa93de8a8eb00d3254f502ce2796ae9edc1d186f14fa540a863
3686-
languageName: node
3687-
linkType: hard
3688-
3689-
"@lezer/lr@npm:^1.0.0, @lezer/lr@npm:^1.1.0, @lezer/lr@npm:^1.3.0, @lezer/lr@npm:^1.3.1, @lezer/lr@npm:^1.3.10, @lezer/lr@npm:^1.3.3, @lezer/lr@npm:^1.3.7, @lezer/lr@npm:^1.4.0, @lezer/lr@npm:^1.4.2, @lezer/lr@npm:^1.x":
3690-
version: 1.4.2
3691-
resolution: "@lezer/lr@npm:1.4.2"
3692-
dependencies:
3693-
"@lezer/common": "npm:^1.0.0"
3694-
checksum: 10c0/22bb5d0d4b33d0de5eb0706b7e5b5f2d20f570e112d9110009bd35b62ff10f2eb4eff8da4cf373dd4ddf5e06a304120b8f039add7ed9997c981c13945d5329cd
3695-
languageName: node
3696-
linkType: hard
3697-
3698-
"@lezer/lr@npm:^1.4.3":
3680+
"@lezer/lr@npm:1.4.3":
36993681
version: 1.4.3
37003682
resolution: "@lezer/lr@npm:1.4.3"
37013683
dependencies:
@@ -8833,6 +8815,7 @@ __metadata:
88338815
dependencies:
88348816
"@lezer/common": "npm:^1.3.0"
88358817
"@lezer/generator": "npm:^1.8.0"
8818+
"@lezer/highlight": "npm:^1.2.1"
88368819
"@lezer/lr": "npm:^1.4.3"
88378820
tsx: "npm:^4.19.1"
88388821
typescript: "npm:^5.7.3"

0 commit comments

Comments
 (0)