Files
paseo/packages/highlight/src/nix/parser.ts
T
Mohamed Boudra 1f1289641d fix(highlight): vendor pure-Lezer Nix and C# parsers
The Nix grammar package imports @codemirror/autocomplete at the top level
for its keyword snippets, but only declares it as a peer dependency.
electron-builder packs node_modules by walking declared production
dependencies, so it omitted the package from app.asar and the desktop
daemon died on startup with ERR_MODULE_NOT_FOUND. Dev and CI never saw it
because the workspace hoists everything.

This is the same failure that just shipped for Svelte, and the previous
fix removed @codemirror/autocomplete on the assumption Svelte was its only
consumer. Vendoring both remaining grammars removes the class of bug
rather than the current instance: these packages are interactive editor
extensions, so importing one drags a DOM editor runtime into a headless
token highlighter.

The vendored language modules keep upstream's indent and fold props. The
web file editor consumes getLanguageForFile().extension, so dropping them
would have silently degraded editing for .nix and .cs.

The new dependency-closure test replicates electron-builder's traversal
statically and would have failed both PRs. It is scoped to
@getpaseo/highlight because that tree is small and pure; the same walk
over the server tree is dominated by false positives from optional
dependencies loaded behind try/catch.
2026-08-19 10:16:32 +02:00

50 lines
10 KiB
TypeScript

// Generated by lezer-generator, taken from @replit/codemirror-lang-nix@6.0.1.
// Vendored so the daemon never loads the editor-only runtime those packages
// pull in at import time (@codemirror/autocomplete, view, state). Only pure
// Lezer primitives are used here. See packages/highlight/src/svelte for the
// same treatment applied to Svelte.
import { LRParser } from "@lezer/lr";
import { nixHighlighting } from "./highlight.js";
import { scanIndString, scanString } from "./tokens.js";
const spec_Identifier = new Map<string, number>([
["assert", 22],
["with", 26],
["let", 30],
["inherit", 42],
["in", 48],
["if", 52],
["then", 54],
["else", 56],
["builtins", 70],
["null", 214],
["true", 216],
["false", 216],
["rec", 100],
["or", 108],
]);
export const parser = /*@__PURE__*/ LRParser.deserialize({
version: 14,
states:
"7QO]QSOOO!sQWO'#DyO#XQ`O'#EjO&QQSO'#C`O&YQTO'#CnO'lQWO'#EWO(VQSO'#C|O(VQSO'#C|OOQO'#DQ'#DQOOQO'#DT'#DTO)dQUO'#DUO*yQSO'#DcOOQO'#Ej'#EjO,XQ`O'#EiOOQO'#Ei'#EiO-wQ`O'#EXOOQO'#Eh'#EhOOQO'#EX'#EXOOQO'#EW'#EWOOQO'#Dw'#DwO]QSO'#CfO]QSO'#ChO/dQSO'#D^O]QSO'#CuO]QSO'#D[O/xQSO'#D_QOQSOOO/}QSO'#CdO0`Q`O,5:eO3XQSO,5:eO3aQSO,5:eO4sQSO'#EOOOQO'#Cm'#CmOOQO'#Df'#DfO4}QSO,59wO]QSO'#CpO5`QSO'#ClO5eQSO'#EUO]QSO,58zO5sQSO,58zO5xQSO,58zOOQP'#EQ'#EQOOQP'#Dg'#DgO5}QTO,59YOOQO,59Y,59YO]QSO'#CoO6]QSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO6|QWO,59hO8VQSO'#D]O/xQSO'#D^OOQO,59h,59hOOQQ'#En'#EnOOQQ'#Dj'#DjO8hQUO,59pOOQO,59p,59pO]QSO'#DVOOQO'#Dk'#DkO8vQSO,59}OOQO,59},59}O8}QSO'#EiO6]QSO,59jOOQO,59i,59iO9XQSO,59QO9^QSO,59SO9cQSO,59UO]QSO,59UOOQO,59x,59xO9tQSO,59aO9yQSO,59vOOQO,59y,59yO:OQSO'#DhO;hQSO,5:jO]QSO,59OO;rQWO1G0PO;zQSO1G0POOQO1G0P1G0POOQO-E7d-E7dOOQO1G/c1G/cO<SQSO,59[O]QSO,59WOOQO'#Di'#DiO<XQSO,5:pO]QSO,5:qOOQO1G.f1G.fO<gQWO'#DyO<rQSO1G.fOOQP-E7e-E7eOOQO1G.t1G.tO<wQSO,59ZO<|Q`O'#EOOOQO1G/P1G/PO@PQWO1G/PO@WQWO1G/POAuQWO1G/POA|QWO1G/POBTQWO1G/POC^QWO1G/PODgQWO1G/POEpQWO1G/POFyQWO1G/POHSQWO1G/POI]QWO1G/POJfQWO1G/POKoQWO1G/POOQO,59w,59wOOQQ-E7h-E7hOOQO1G/[1G/[OLYQSO,59qOOQO-E7i-E7iOOQO1G/i1G/iOMfQ`O1G/UO]QSO1G.lO]QSO1G.nO]QSO1G.pOOQO1G.p1G.pO]QSO1G.{OOQO1G/b1G/bOOQO,5:S,5:SOOQO-E7f-E7fOOQO1G.j1G.jO! UQSO'#CdOOQO,5:P,5:PO! aQSO7+%kO! fQWO7+%kOOQO-E7c-E7cOOQO7+%k7+%kOOQO1G.v1G.vO! nQSO1G.rOOQO-E7g-E7gOOQO1G0[1G0[O! sQSO1G0]OOQO,5:e,5:eO]QSO7+$QOOQP1G.u1G.uO! xQ`O,5:jOOQQ1G/]1G/]O!#eQSO1G/UO)rQSO7+$pOOQO7+$W7+$WOOQO7+$Y7+$YOOQO7+$[7+$[O!#oQSO7+$gOOQO<<IV<<IVO!#tQSO<<IVP!#yQSO'#DeOOQO7+$^7+$^O!$OQSO7+%wOOQO<<Gl<<GlOOQO<<H[<<H[O]QSO<<HROOQOAN>qAN>qO!$ZQSO<<IcOOQOAN=mAN=mOOQOAN>}AN>}O!$iQSO,59jO)rQSO7+$p",
stateData:
"!$x~O!jOSPOSQOS~OTQOUPOZdO]eO_fOfhOjgOs[Ou[Ov[Oz[O{[O|[O}[O!SiO!UZO!sSO#QVO#ZUO#_WO#`XO#aYO~OTkOVlOXnOeuO!sSO!usO~O!lvO!pwOT#^XU#^X_#^Xf#^Xn#^Xo#^Xs#^Xu#^Xv#^Xz#^X{#^X|#^X}#^X!S#^X!U#^X!`#^X!n#^X!s#^X!v#^X!|#^X!}#^X#O#^X#P#^X#Q#^X#R#^X#S#^X#T#^X#U#^X#V#^X#W#^X#X#^X#Y#^X#_#^X#`#^X#a#^X!q#^Xk#^Xg#^XV#^X!o#^Xl#^X~O!lvO!pxO~O!ayO!b}O!c|O!dyO~On!TOo!VO!n!OO!|!PO!}!PO#O!QO#P!RO#Q!SO#R!TO#S!UO#T!WO#U!XO#V!YO#W!ZO#X![O#Y!]O~O!`!zX!q!zXk!zXg!zXV!zX!o!zXl!zX~P&hOT[OU!_O_!`OfhOs[Ou[Ov[Oz[O{[O|[O}[O!SiO!UZO!sSO#QVO#ZUO#_WO#`XO#aYO~O!e!bO!f!fO!g!eO!h!bO~OT[OU!_O_!`OfhOs[Ou[Ov[Oz[O{[O|[O}[O!SiO!UZO!sSO#_WO#`XO#aYO~O!T!iO~P)rOT#]XU#]X_#]Xf#]Xs#]Xu#]Xv#]Xz#]X{#]X|#]X}#]X!S#]X!U#]X!s#]X#_#]X#`#]X#a#]X~O!v!kOn#]Xo#]X!`#]X!n#]X!|#]X!}#]X#O#]X#P#]X#Q#]X#R#]X#S#]X#T#]X#U#]X#V#]X#W#]X#X#]X#Y#]X!q#]Xk#]Xg#]XV#]X!o#]Xl#]X~P+QOn!{Xo!{X!`!{X!n!{X!|!{X!}!{X#O!{X#P!{X#Q!{X#R!{X#S!{X#T!{X#U!{X#V!{X#W!{X#X!{X#Y!{X!q!{Xk!{Xg!{XV!{X!o!{Xl!{X~P)rOToOU!_OeuOh!pO!sSO!usO~OU!_O~O!n!wO!v!uOVWX!oWX!w!rX~OT!PaU!Pa_!Paf!Pan!Pao!Pas!Pau!Pav!Paz!Pa{!Pa|!Pa}!Pa!S!Pa!U!Pa!`!Pa!l!ma!n!Pa!p!ma!s!Pa!v!Pa!|!Pa!}!Pa#O!Pa#P!Pa#Q!Pa#R!Pa#S!Pa#T!Pa#U!Pa#V!Pa#W!Pa#X!Pa#Y!Pa#_!Pa#`!Pa#a!Pa!q!Pak!Pag!PaV!Pa!o!Pal!Pa~OV!zO!o!xO~OV!zO~O!v!uOT!rXU!rX_!rXf!rXs!rXu!rXv!rXz!rX{!rX|!rX}!rX!S!rX!U!rX!W!rX!s!rX#_!rX#`!rX#a!rX~O!w!rX!T!rX~P3fOToOV!|OeuO!sSO!usO~O!w#OO~OT#POf#RO!sSO!usO~OU#TO~OT#UO~O!ayO!b}O!c#WO!dyO~OT#YO!sSO!usO~O!n!OO!|!PO!}!PO#O!QO#P!RO#Q!SO~Onpaopa!`pa#Rpa#Spa#Tpa#Upa#Vpa#Wpa#Xpa#Ypa!qpakpagpaVpa!opalpa~P6hOToOV#iOeuO!sSO!usO~O!e!bO!f!fO!g#kO!h!bO~O!T#nO~P)rO!v$mO!T#]X~P+QO!q#pO~O!q#qO~OToOeuOh#rO!sSO!usO~Ok#tO~Og#uO~OT#vO!sSO!usO~O!v!uOT!raU!ra_!raf!ras!rau!rav!raz!ra{!ra|!ra}!ra!S!ra!U!ra!W!ra!s!ra#_!ra#`!ra#a!ra~O!w!ra!T!ra~P:ZOT#yOX#{O~OV$OO!o#|O~OV$PO~OT#PO!q$SO!sSO!usO~OT#yOV$UOXnO~O!l$VO~OV$WO~On!rXo!rX!`!rX!n!rX!|!rX!}!rX#O!rX#P!rX#Q!rX#R!rX#S!rX#T!rX#U!rX#V!rX#W!rX#X!rX#Y!rX!q!rXk!rXg!rXV!rX!o!rXl!rX~P3fO!n!OO!|!POnmiomi!`mi#Omi#Pmi#Qmi#Rmi#Smi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~O!}mi~P>iO!}!PO~P>iO!n!OO!|!PO!}!PO#O!QOnmiomi!`mi#Qmi#Rmi#Smi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~O#Pmi~P@_O#P!RO~P@_O#R!TOnmiomi!`mi#Smi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TO#R!TOomi!`mi#Smi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TO#R!TO#S!UOomi!`mi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO!`mi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO#T!WO!`mi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO#T!WO#U!XO!`mi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO#T!WO#U!XO#V!YO!`mi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO#T!WO#U!XO#V!YO#W!ZO!`mi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hO!`mi!qmikmigmiVmi!omilmi~P&hOV$YO~OTriUri_rifrisriurivrizri{ri|ri}ri!Sri!Uri!sri#_ri#`ri#ari~O!W$[Onriori!`ri!nri!|ri!}ri#Ori#Pri#Qri#Rri#Sri#Tri#Uri#Vri#Wri#Xri#Yri!qrikrigriVri!orilri~PL_O!n!wOVWX!oWX~OV$aO~OT#yOX$bO~O!q$dO~Og$eO~On!rao!ra!`!ra!n!ra!|!ra!}!ra#O!ra#P!ra#Q!ra#R!ra#S!ra#T!ra#U!ra#V!ra#W!ra#X!ra#Y!ra!q!rak!rag!raV!ra!o!ral!ra~P:ZO!W$nO!Tri~PL_Ol$hO~OV$iO~OT#yO~OT#PO!sSO!usO~OT#PO!q$lO!sSO!usO~OToO!sSO!usO~Oz!v!v~",
goto: "2g#cPPPP#dPPP#yP#dP#dP#dP$S$Z$k%{%fPPPP&PPPP&fPP&f'[(QP({PP({({)vPPPP({)z({({PPP({P*|+S+_+e+p+z,QPPPPPPPPPPP,WP-cPPPP-{P.VPPP$S$S#d.ZPPPPPPPPPPPPPP/o0e1fPPP2cwcOdeghsv}!f!p!w#O#R#p#q#r#t$V$hSmP#TV#z!x#|$cZqPfr!_!oYtPfr!_!oQ#Z!OQ#o!kR$Z$m!p[OUVZ_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!h!p!w#O#R#p#q#r#t$V$[$h$n[oPfr!_!o$mW#Pu#Q$e$jS#Y!O!kR#v!uTyS{wbOdeghsv}!f!p!w#O#R#p#q#r#t$V$h!gaOUVdeghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$h!g`OUVdeghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$h!q^OUVZ_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!h!p!w#O#R#p#q#r#t$V$[$h$n!q[OUVZ_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!h!p!w#O#R#p#q#r#t$V$[$h$nT!bY!d!p[OUVZ_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!h!p!w#O#R#p#q#r#t$V$[$h$nS!qf!`R!tiQ!ymR#}!ySrP!_Q!ofT!{r!oQ{SR#V{S!vkoS#w!v$XR$X#YQ#QuS$R#Q$jR$j$eQ!dYR#j!dQ!hZR#m!hQjOQ!mdQ!neQ!rgQ!shQ!}sQ#SvQ#X}Q#l!fQ#s!pQ#x!wQ$Q#OQ$T#RQ$]#pQ$^#qQ$_#rQ$`#tQ$f$VR$k$hvROdeghsv}!f!p!w#O#R#p#q#r#t$V$hR#UwapPfr!O!_!k!o$mTzS{vTOdeghsv}!f!p!w#O#R#p#q#r#t$V$hQ!^UQ!aVQ#[!PQ#]!QQ#^!RQ#_!SQ#`!TQ#a!UQ#b!VQ#c!WQ#d!XQ#e!YQ#f!ZQ#g![R#h!]!g_OUVdeghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$h!f`OUVdeghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$hS!gZ!hQ!l_T$g$[$n!j]OUV_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$[$hV!jZ!h$nT!cY!d",
nodeNames:
"⚠ LineComment BlockComment Program Function Identifier { } Formal Ellipses Assert assert With with Let let Bind AttrPath String Interpolation Interpolation inherit ( ) in IfExpr if then else BinaryExpr < > UnaryExpr App Select builtins Null Integer Float Boolean IndentedString Interpolation Path HPath SPath URI Parenthesized AttrSet LetAttrSet RecAttrSet rec ] [ List or",
maxTerm: 110,
nodeProps: [
["closedBy", 6, "}", 22, ")", 52, "]"],
["openedBy", 7, "{", 23, "(", 51, "["],
],
skippedNodes: [0, 1, 2],
repeatNodeCount: 7,
tokenData:
">P~RtXY#cYZ#c]^#cpq#cqr#trs$Rst$Wtu$ovw$zwx%Vxy%byz%gz{%l{|%q|})]}!O)b!O!P*X!P!Q.r!Q!R0l!R![2e![!]3S!]!^3X!^!_3^!_!`5_!`!a5l!a!b5y!b!c6O!c!}6T!}#O;g#P#Q;l#R#S:u#T#o6T#o#p;q#p#q;v#q#r<R#r#s<W~#hS!j~XY#cYZ#c]^#cpq#cV#yP#ZP!_!`#|U$RO#VU~$WO!s~~$]SP~OY$WZ;'S$W;'S;=`$i<%lO$W~$lP;=`<%l$W~$rP#o#p$u~$zO!u~~$}Pvw%Q~%VO#W~~%YPwx%]~%bO#a~~%gOf~~%lOg~~%qO!}~~%vW#P~{|&`}!O&}!O!P&}!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}~&eW!|~{|&}}!O&}!O!P&}!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}T'QW{|&}}!O&}!O!P&}!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}T'mV{|(S}!O(S!O!P(S!Q![(S!c!}(S#R#S(S#T#o(ST(XWzT{|(S}!O(S!O!P(S!P!Q(q!Q![(S!c!}(S#R#S(S#T#o(ST(vVzT{|(S}!O(S!O!P(S!Q![(S!c!}(S#R#S(S#T#o(S~)bO!o~~)gX#Q~{|&}}!O&}!O!P&}!P!Q'j!Q![&}!`!a*S!c!}&}#R#S&}#T#o&}~*XO#Y~~*^W!vT{|&}}!O&}!O!P*v!P!Q'j!Q![,Q!c!}&}#R#S&}#T#o&}V*yW{|&}}!O&}!O!P+c!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}V+hWXQ{|&}}!O&}!O!P&}!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}~,V[v~{|&}}!O&}!O!P&}!P!Q'j!Q![,Q!c!g&}!g!h,{!h!}&}#R#S&}#T#X&}#X#Y,{#Y#o&}~-OW{|-h}!O-h!O!P&}!P!Q'j!Q![.T!c!}&}#R#S&}#T#o&}~-kW{|&}}!O&}!O!P&}!P!Q'j!Q![.T!c!}&}#R#S&}#T#o&}~.YWv~{|&}}!O&}!O!P&}!P!Q'j!Q![.T!c!}&}#R#S&}#T#o&}~.wX#O~z{/d{|(S}!O(S!O!P(S!P!Q0g!Q![(S!c!}(S#R#S(S#T#o(S~/iTQ~Oz/dz{/x{;'S/d;'S;=`0a<%lO/d~/{TO!P/d!P!Q0[!Q;'S/d;'S;=`0a<%lO/d~0aOQ~~0dP;=`<%l/d~0lO#R~~0qWu~{|&}}!O&}!O!P1Z!P!Q'j!Q![1v!c!}&}#R#S&}#T#o&}~1^W{|&}}!O&}!O!P&}!P!Q'j!Q![,Q!c!}&}#R#S&}#T#o&}~1{Wu~{|&}}!O&}!O!P&}!P!Q'j!Q![1v!c!}&}#R#S&}#T#o&}~2jWu~{|&}}!O&}!O!P,Q!P!Q'j!Q![2e!c!}&}#R#S&}#T#o&}~3XO!l~~3^O!q~~3cWn~{|3{}!O3{!O!P3{!Q![3{!_!`5Y!c!}3{#R#S3{#T#o3{~4OX{|3{}!O3{!O!P3{!P!Q4k!Q![3{!`!a5T!c!}3{#R#S3{#T#o3{~4nV{|3{}!O3{!O!P3{!Q![3{!c!}3{#R#S3{#T#o3{~5YO|~~5_O#S~V5dP!wP!_!`5gU5lO#UU~5qPo~!_!`5t~5yO#T~~6OO!n~~6TO!p~~6YYT~wx6x{|7a}!O6T!O!P7a!P!Q'j!Q![6T![!]8P!c!}6T#R#S:u#T#o6T~6}UT~wx6x}!O6x!Q![6x!c!}6x#R#S6x#T#o6x~7dX{|7a}!O7a!O!P7a!P!Q'j!Q![7a![!]8P!c!}7a#R#S&}#T#o7a~8Sdqr9btu9buv9bvw9bwx9bz{9b{|9b|}9b}!O9b!O!P9b!P!Q9b!Q![9b![!]9b!_!`9b!a!b9b!b!c9b!c!}9b#R#S9b#T#o9b#r#s9b~9gd}~qr9btu9buv9bvw9bwx9bz{9b{|9b|}9b}!O9b!O!P9b!P!Q9b!Q![9b![!]9b!_!`9b!a!b9b!b!c9b!c!}9b#R#S9b#T#o9b#r#s9b~:zXT~wx6x{|&}}!O:u!O!P&}!P!Q'j!Q![:u!c!}:u#R#S:u#T#o:u~;lO!U~~;qO!T~~;vOU~~;yP#p#q;|~<RO#X~~<WOV~~<ZP!P!Q<^~<aV{|<v}!O<v!O!P<v!Q![<v!c!}<v#R#S<v#T#o<v~<{W{~{|<v}!O<v!O!P<v!P!Q=e!Q![<v!c!}<v#R#S<v#T#o<v~=jV{~{|<v}!O<v!O!P<v!Q![<v!c!}<v#R#S<v#T#o<v",
tokenizers: [scanString, scanIndString, 0, 1, 2],
topRules: { Program: [0, 3] },
specialized: [{ term: 5, get: (value: string) => spec_Identifier.get(value) ?? -1 }],
propSources: [nixHighlighting],
tokenPrec: 2290,
});