From 7b91d516838e51e14a0279adc657b7a6d0dc4441 Mon Sep 17 00:00:00 2001 From: mhoffm Date: Mon, 14 Jun 2021 00:55:24 +0200 Subject: [PATCH 1/3] handle quoted template expressions and template interpolations --- .github/workflows/unittests.yaml | 1 - .gitignore | 2 + README.md | 30 +- example/example.hcl | 13 +- example/example.png | Bin 0 -> 36919 bytes grammar.js | 90 +- package-lock.json | 13 - package.json | 5 +- src/grammar.json | 197 +- src/node-types.json | 69 +- src/parser.c | 9046 +++++++++++++++--------------- src/scanner.c | 148 + test/corpus/attributes.txt | 10 +- test/corpus/blocks.txt | 9 +- test/corpus/collections.txt | 6 +- test/corpus/for_expressions.txt | 22 +- test/corpus/function_calls.txt | 16 +- test/corpus/literals.txt | 154 - test/corpus/strings.txt | 288 + test/corpus/templates.txt | 13 + 20 files changed, 5381 insertions(+), 4751 deletions(-) create mode 100644 example/example.png delete mode 100644 package-lock.json create mode 100644 src/scanner.c create mode 100644 test/corpus/strings.txt create mode 100644 test/corpus/templates.txt diff --git a/.github/workflows/unittests.yaml b/.github/workflows/unittests.yaml index 057a171..a7e11b4 100644 --- a/.github/workflows/unittests.yaml +++ b/.github/workflows/unittests.yaml @@ -1,7 +1,6 @@ name: unittests on: push: - pull_request: jobs: unittests: diff --git a/.gitignore b/.gitignore index 005c580..a717c7b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ node_modules +queries +package-lock.json build npm-debug.log .env diff --git a/README.md b/README.md index a13763a..bb0da45 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,37 @@ tree-sitter grammar for the [HCL](https://github.com/hashicorp/hcl/blob/main/hclsyntax/spec.md) language -## developing +## Developing It is recommended to use `nix` to fulfill all development dependencies. To activate the development environment simply run `nix-shell` in the project root. -## running tests +## Running Tests To run tests simply run `nix-shell --run 'tree-sitter test'`. -## todo +## Example -* use [UnicodeĀ® Standard Annex #31](https://www.unicode.org/reports/tr31/) (augmented with '-')for identifiers +Highlighting `example/example.hcl`: + +![Highlighting Example](/example/example.png "highlighting example") + +## Quoted Template Expressions + +In principle it is allowed to contain arbitary expressions in quoted template expressions. +Consider for example: + +```hcl +foo = "prefix-${func(\"bar\"}" +``` + +To make parsing a little easier, this parser only checks for valid escape sequences and template chars. +When using this parser one would have to take the content of a template interpolation, unescape it and parse it again to get the syntax tree. The same applies to template directives. + +## String Literals + +String literals are parsed as quoted templates. The calling application should check if the node contains any template interpolations or directives. + +## Todo + +* use [UnicodeĀ® Standard Annex #31](https://www.unicode.org/reports/tr31/) (augmented with '-') for identifiers * add [template expressions](https://github.com/hashicorp/hcl/blob/main/hclsyntax/spec.md#template-expressions) diff --git a/example/example.hcl b/example/example.hcl index c601173..f617438 100644 --- a/example/example.hcl +++ b/example/example.hcl @@ -15,15 +15,18 @@ resource_1 "strlit1" "strlit2" { splat1 = tuple.*.foo.bar[0] splat2 = tuple[*].foo.bar[0] for1 = { for i, v in ["a", "a", "b"] : v => i... } - for2 = [ for k, v in local.map : "${k}-${v}" ] - for3 = { for k, v in local.map : k => v } - for4 = [ for v in local.list : v ] - for5 = { for v in local.list : v => v } - for6 = [ for v in local.list : v if v < 3 ] + for2 = [ for k, v in var.map : "${k}-${v}" ] + for3 = { for k, v in var.map : k => v } + for4 = [ for v in var.list : v ] + for5 = { for v in var.list : v => v } + for6 = [ for v in var.list : v if v < 3 ] func1 = is_number("123") cond1 = (1 == 2) ? 1 : "foobar" bin1 = ((1+2)%3)*4 esc1 = "\" \t \UFF11FF22 \uFFFF \n" + esc2 = "$${} %%{}" + tpl1 = "prefix-${var.bar}" + tpl2 = "prefix-${func(\"bar\"}" nested_resource_1 { attr1 = 2 diff --git a/example/example.png b/example/example.png new file mode 100644 index 0000000000000000000000000000000000000000..e050efc44b3e8afe3ac9d885125d0b283d504d83 GIT binary patch literal 36919 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

YV?G}E<% zj11szJBV-yZsb|Mz^&qD>AwTDCao^NKRY4O5!@ zu`te{!*s=%%_|@)Fvo5l=&9S=UV>M+$_4-v#wqYV=+e}vG zoE2}p(plu>{2->w%s(_#JNAy-AL-A_V`5D%q*r-4rkJ*-nXxdOHJsYUm;3RoiM(2K z&8Lu8>$R1>YHJ_s{VHR7s`vQff8~bBCoe7kbv%@fjqBN&Z{NQ@JbFw_H{y$mVW5!U z#KaZqs;Mn^xIN?0>q9ScGLwA1t=)F+?^ni@EgMR5Iv={}I9WZK+w3R1(3Qn# zh4GA#eHRZUO}%lZjbTCM*$1zVq%;Y9`u42seO~?7tgvRe)rP99&8Ix|Dpsj(Y3+Jb zpZsslG6BUi^B(89KJ=K%Dyn@h@M3diN61qZzxAFn7xONjUDBL)?Je8Sdi_nWGq!9< z<84e~u8?1OFm_6g+0$1~|IP2+wJiRPS>~b>w`OfCy879%IcEQlJGpm$%r=^NY{SQC z_SQ#_dtX~;yoh(h)}``y?!UeAa?4lgGqIwX|6aw!|K`87yJp2Tt@nGZCTaCuIzOXF zj4$)=;@PFU+gC1MzxPh~LZPbg#)N&l*SSpp`f;(=V|nGuo28$`+Lnpf)X%H*TpJn| znvv$raG@t?Ww?I3ue8&t>3{Z`*1g@8p(Q&1+gAVWd51o!O+MbwR%`XA%WnTEWs#`2 zH{`1R)%;p^)=;d7>xRked5a3O)?S+RvgXN4qrImW6)CnQ>aymxv7EVCl-=d@_gdl2 zw;Ta6niFJCD3}}zWjtr|KH>VoLd){aOFHF$o=pm{5d3&sB+K*Zp_V(ppP8^QoPE7( z(oZ$v?O|`u&UV`N-p8WoN$A`!`}};=f>P@mZ64R1IvKa<<3B!Ixh3=lt{Xz~a`a+`>igXI~az zFj*hc)jjphzkBuv=Fk5TbZJ>{sfYXRt*;kFZ+}+*W#Q?*xtv~0w{1F^@_nAm#E#eR zk8|IjFLLQ(*~drQxW#Pt{a0AOt}1`u*W3l~zofqu_mr6F`Sj+-D3#~-YgYyIM@2Vj zWt$iDXskSUWW^;dp61}D3xXc)igz*=&g5lu`0S->?5lQq`qtu-lsEUThVDQ3i&y{O z_wbm-^7SchE-P+xxc8limiVRgy2|I<*;QO$HLe6H-qv-Wmh)j(;2lW`$;+ZEeKX(H zo$7S_ci(u$ozow!SLvH_LwBc~kg)BNKc64p3!fp+{kDI5aSz9`Uz>Sbx7Gi=eCz5*tGeSC_^bYJ z-F<&u^Vf2nz5lm&KYthb`fl@cy;s{mH(c+y_~9axl*!a<>tFx4*%5X%KR95)myg!_ z{#-vXW4rw1>et5{YNK9WzhJ8I^~v7@hUZeI|9PKeTy;O()sy$=&frB;`m^_&oqhhf zP$bQ@zw7yghn((w|IF*A9Njnn-TIiK@{=_eHw0R=2E9+0YX~s{&1)Q;`DKQuynLR| zo9O7aGTZBlKTI4K%&@9jQNGyu5oF}AG*t2QP1TZ{`FYK4C6OQ7ojo#s+6P+BS+vB( zDgB^%kdRB@C-1p#&Z*A77`84+D`%78czsa{Z6X;SoMD?|OiTlP)W-}eU8y?FBMSlnK zuTolitLc)*($WXd&Uas5qV;8#^1qsL-zd*>&(EJ&7uJ-z=+2I$+;v*%XN)K5Ud{7Q zc-Fw)#yYWmJ(hVpgBMlY-=rfXmjkx)%WTiQ`|Q-2m3OA)9kka!RsS(&;`Hdt zR-%=bWpA5;^kX&duIV!7XDBsp{`~FPv3<6h!kre?-}lyh(TGc2wt^jA`pU7S}{9>C<1v`uWtM)cjp)OHC$u@R_WV zkKUvj8onm<=!q%cxliY3a-C{-J@wnw>~&3{ovYNmz_Zgj)%#d{W~qJn__(rzN4f98 z&hB07qNdk8Te4}z1p~R0d#X^7$z$@;HJQ#w(~D*}x3t!)EG~NN^80XZp&hH@l+US4)b_F{e);uk z>7NxI|2czWtG;~vne^wb>gN!llg*;txwp$W=Iz$_ctmjOk}qr0?(Mr+b?VCv=4x3d zC*%D47sPj!ynkz0VsZGKocd%zCl#r+IUJK`Cwtj@A6a@iA~lh5>glzvbMGl1KO%28 zq2iDHj|N8GiC%H{?#Mn(x$UEN^JM45+2M=kZz|>5XuM|U*Kd!G9S!$Ul{s!>Yq8PL zwe-?&E5n%&nl9ycdoXov3P`T`G=23YPm@Sz`NdJ^tqXg;$F6=PeDlr5bE@Usyn!=J z-*`UF6|LO4>C5%bXu2fG(Z^)w$tPPfQsqU8 z9v{yabSl}Wknm~CZf|jsW5-`@ne}h?|APWym*-uo_+xI*@oAA#cHr`vh)r#1d>3iW1Q>vI+~oXX#Oe5qOR%F3k=dyX*Ze6knt4pTAZlAs*U{9w0n;Q@ z?*H9cqR@4=6Qu067`v21J z@5Q^ymhRtsA?sT|KX0_0?KB~ol+QLrA5O*JR&Lqja%aX1#q{%E)Fy6N-p{@^>gGWw zzs659kL0Ci-^J&|L-*?&UkpKqW469-DNiEHaBaKl>?_S;c`I*Uh^OM`#)lDuw7MIHj-eBM;8=sRY z`}t>0%%hL>SB~bFo>}Q#K41UX#EdQ6$@ZJie3rB+7rcL3{pq2bH<+s*US>79P`Z?> z!^U!ZUh3h>9EnT$alZR2uTHA2s6U!iF|*;ApQ_;V)JY=elIIF<&R3tq!jM+Lz`)SU zufxs2u%L2@&pM;^)5C7U<`keWhSE_sW9fzwBoD7|48=HU9YRki0*?Y=nStZ20jf zKTm$xa$3-8E07u_{U-FIoR+ijZ^1fQeiK91b|DD$7*>#IevpA+`PVmYP%%1G| z{oOYf#~#V*$A>p`%gN2TxcJV!X5$+>)P$v`wtkW@d z|90y9!s^=jCufzzGwGv7A|a9LOJ zDVAjad($-I#k|?u?IZU`$;fvLyxRWy!P?5rsV_5a&GY?tmmJ)Bo`I`ba&vw7sn+6O zQc+)IUx=B_IQBIC&MvX7f9rplD%JSwmlhWO+^s6VWZtXCrkX~|O$zt+J~}2N=+!Ib zw7{n^#HlpJ$dRM6x_Ec__WRrRCeBy;Qa95_z-jt&-v!aPzuemM_f5L|{@-5n^AGe| z8vl&5dz*IFbN83|ev1p=+zB$tz4+ zCQR*JYh%6o)3mIeJvphN3k~eP$BA#BsAqG3%b{`}=QAP;XWSEDO66KINv_yOEpP3O z+2*Y|_h%M7@wgi^H}{#E@MFc*VK4VjJLH+d)f{NWcEn?w)4Y?iwd_U>0vp_5GO$tBUZLvGkec_=omv^ZN9T!%N#&)j!fX){r>zktEYMs?iN}XbG9iYt09D`;TgjW9~}{cnG6PDObiSgI3DEHGB7AiWq=UifnP8I zS|bb|hX5^MWB?IxMPTJ%MPLGwong@0Z?L8vWy= z@bibg+y^37>TUd9a<0qUxVE}+_1rxHYWh?5PS-!MY2E!lLN=`m9X&Iql;@p!T$q$3 zTw*1=r;t%Xd+MXxt84pDCa&}sw&wY(V6IvGe9Haqqd_eJ?F;W#`AhpGUyz@_t2E8k z!cl-@;ksn@5~-`R4<@_D))W-Ilq>CgwfY0=x?CFpr{KfSm0R?3Ed@8e+;Q=)A(39RiZ-ks)G;=aL+rM{D zzOYD1PA+?j`DijG?+;(%fiMg08Hq-6nyL)Vk zS5kfUUpW8!&742KXEoaIV%f1(?t-A=lZz+yQ&QH;P7eQnt2Qk$ZQq5voQhjgzg#-2 zTqn5v`Pr|(i`Lzr{>#H?SM`Y#ar}Hth{}_@B@+VefSBw4AJ$iods)gfP zdF+r~8k)Uo)#Z%o1wt!-KiTlOyDa7C{%KD{mf2QkUOptJ_~gaqLk9DUzT^c?3&=Nb z5qM=?{Nir&^!ao4t(aab*A`cvP}TmoHF^X8RLA+HNjno~uZ}*i&@%6T_4#vW3t!!oJMZOM_vlinSD;cekm7gjTM`mUR1FWw%3vg$26xozrR(b*Hf zD1_~o3_jquN7#2^FsokK%#WGBmc5j5%L{6|*j6C({l%02?{6J``a3xE_0?rT-M`z{ zhwMLlCjWW)JDEL+cQ3{6=I=b}`r#O>!c+mLj#CRh%jSMLEY>I6e`>+gy{C$DUrScM zz4>na{}mfHx-H$g;oXPU()QhbvI1u1U*;=MmuQo|UOvY-=h%adTJPW8yBI!A|6+W1 z;iv4APc|1#GFm0KZ)ckNvgz~xNvyq`F@1+qzqKpEO#1!m{-*Id zbL`ww#y|VF<@LA&Pd3l}6O}gochLN7eTB;!ZSlSD^iB#Ezp419l)i8C+Xt@6#gjMl z7^@{8HlP0H$ac4&W#yXorn9s2-#)oMDfzhczM`TlN7)~JvEiEPlpg(YZq6H5J=uTq@qG;{hSS(`QNSG%4`y||Yd@_tp+dbZhO-&D9XwJ$FDEho|?#B=;XEcc%K z6LNCq`rNs)yjq%T?yomyJ0dZyE-h!(#k)^ijij3GQZ7aW zPQR8pQQteIYehHz>Q|vBPQ*zXYGzLKY!kY?d&vY5;i$VH)8y`&>wbFrGXC&ZskJ)m zSA|rm2juw-+kWgWukGn>%t;qlD3pSuGA`; zSzepGJaDg}%zMk!30qeiSUn2-s_%Hiy|%dM)1ya1oIjNKD(V~6tISo|zPz_Aex_nI z_uAg$>IG)tnxvtv;ZBIvE~TpSr-yVGPg`PF%{iAHG7@z~Ji&+&vaaF4qM*#byZYw$ zW~6#0rsmz1kPx<2QL8%9z<93o(#$-bS7z1cBGd0#S#Ps$Wy$AY$mmXuZGvk$h5;v)*_4xF0Nd^`fhENbza1M zK}D6RtNiEq{4I4=aeCoUvE3|}r7id09iiQY!95q9S}x4F`S04blI-lL0Cs63N$yt_ zZhF@hT5fIKdT-m-;`Rr|yR1s9ZcO^%+;=BY()DN5260A*O+wwRt1A3j?52^1A1 zyt#Sx>!qb);IK^5RJ zl3ly5@pP_OQnS{NXCe#3`)n=A6KAF@Uv?@dCnI&HP;}w4v@I7-&;I>+&++Yf&n0f| zxb^b(lFr4;Yi-xnoa~kUzU=&*@Uwb3GQVdXzY(&c!H22gyV=w>{_LMWGs?xq)#my+ zapc|zS*7~%gGJ}iToa?<|Qk$_T1c;$vY;!eR}rpM&*T{Hmq=3 zxLw@b@Zt#*-s6V;{C+t;fw8?v%a2q)CZyW^y$}=ubNw&B&nBQnl0g z!Hta~(b2!Yu4YdA|6u+EjY>IHvp+9COq{Z``}Q#x{+}rx-C10F_wL~2%y;dd-T~@9 zzL|MXMd;g?j|)Pzt!Lc#mlnF$?)diPg1DlG@ns-X9r$pXDnmv}f~*V!!`Xy2EDVr2 z8PHfM1Bd|6kMnx*&MOQGUlV_Q;_;`u9|#KUCZ5%$$d>-yYptryRZ5 zu-r7poUOFcw3zF>)(k(-fXt(z`s-&OOJ1`nwf5vzp$Q*$tG>$O@?9^?z|bwBef3t# zrMGtP`WFpzK5nRA+F|y2|)9 z9jX6eyHC%(;A?^rqcs;pM1Yp$isH$gYjtZsADi&jT1aVrcki|gMKxiNm8naEY-jqk zIIWhw?c6`#6Jgk}CS;ZRzedkh~$ot zRs54ZJ=|{}?Y^xS@!`k6<~^^X*9%YX6qdaI`atZo_?n$<&9WdnW|~M&KKUv2ZA|Qp z-Q}fM?JF~1iRgd+9jQF|WP;e+P2BYc-D1ZU#g;v6-X$e&1j~@!Q!J`-!AX}nECM3t}@+jgWG~hjbL9Hgk@!9$LNIZt&2UAV4^yibAHSD z2a#JB2dh{;TJQAJw{=(HZ%&4@dQ)GWPjOm4`PbKCpC88G?y0IAF*Dzu^5;mjtLw4w6_E>09%=0P z9elF5IMu7EBQR4=uZY9Mditv@9v$R zYjAM$s%yFzQYJ0F>REDR!k0s*jvJdSUQt%c#IPiYcSZ4J&eo>A-KVy%x+du`^y@ zW81xRqrA6uK?5(a>G_YGvTE>zw)V;2zF`dyS&%3=9sS^(|lm zv{V{A=X!a$=1d=+8p~skANq1;VYv4`#3-O$ZE~gk_J8k_el0%!Gx=D>ks~29 zy+HM&hpO_GohMU19AB3smU{l)^j{*YCtuxJC3QOGlV!WzyzHg-hI6ezx@!P{>~5j zyFqC0iY2Se-{khJDZUhTB>(azf9qAwd@Y*mK;^bJpq|M`77N1 zvNSB?1BHJETe2zx10q|4@;10Pnh|h<_x_V#rLynuoV2Xa_&K*#G{NZP_xE)zkC$>k z6W6OM`f)c{+(A+*CgtB z9(y16&Nr|BWW8%K+Uv*A5VA_zW!{|F-9kQ^YaANv?RD4g_P;*+gW=ChpR z(+*2bjSQK(Bcpg>P4U7Sw)u{$wr!YY<-13Hvl}S;Oj>!R{iKRQ!+)h^EBLH$PEebi zRmM1(lflFV6h$fr=HFjA`R?W8&2jstoQwalL@L)I*R9}dj?u;^R*c{|>I*4G$=7UK z1lpZv{tkXUb^o^i6(>{|>qad&>2kg%`&mu)vVYGxBPTtX6)(*+nUi5yd3u3%1@KPs z`kH7Ix!Ee?`@JJaTrvwLoSk#?U$?mZ+Eu08CNpPn&hTOIP%XAB(@DL1>%r@AcAJVB z;fgU|E={tpg|8LRr==Ya8^#1EiEo5`|a&?>i4d^_JUWD zW8plWRr{W-&heac>c`W02X$`o*g5|%mgwFVrem)g9HzHtbwGG%`p?&1|FuK@DC-(- zT$uHWrQtij!Au5*gvbM3!jSO`)S-z5FE3B=QR7fdPd_$Cp2^86=kw>Om(%Zg`%IZ} zQxc@JXX=C#laqH`-Tmtj*N2KLvbT5N**E#}?)R|C8?9|!6BYjrH|MjzG8)t{8GaQIG83GE*t0C_n9}oWW zc%`~O_dFY2gUyr0l8iE^STQcRxio0*Y#$GmH-{U~EkC~`cITD*r@FS(x*xih`?1ur zi5Zj-CcpM7O*P`o(cQ3ZS)j&`}yT0Rv)VH zSDPGjFC}Pa!Pk6QCFP^l-}maozwLQxr`)!EQIO~I^Gnvoh^`EpSzUT`TFYzI32Z!V z6HcuRi8E*t04r{n()vn?%rUU-3+){VSW^{Gv9y#DY(J2?N8186l_6 zoOvlE<)bw5!52n`1i_VCGC%k2wD;X#_Echy9Rq`o($r;$GX|FPGca^}sJgp9+%LXv z#Z@Vg6%j64i4yAq8lJK0`Bch}O!#=6_v-nU0< zFfy!AKd_#K!9jRFXq^wd;fi=eJ&9p5Cj*0+CHxowaCwOs hy#sAkwtDpc{<7=Oj^7E>U|?Wi@O1TaS?83{1OQByG<5&~ literal 0 HcmV?d00001 diff --git a/grammar.js b/grammar.js index 37a186b..01908bd 100644 --- a/grammar.js +++ b/grammar.js @@ -1,4 +1,16 @@ const + PREC = { + unary: 7, + binary_mult: 6, + binary_add: 5, + binary_ord: 4, + binary_comp: 3, + binary_and: 2, + binary_or: 1, + + quoted_string: 2, + quoted_template: 1, + } unicodeLetter = /\p{L}/ unicodePunctuation = /\p{Pc}/ unicodeDigit = /[0-9]/ @@ -7,11 +19,17 @@ module.exports = grammar({ name: 'hcl', conflicts: $ => [ - [$.body], - [$.object_elem, $.variable_expr], - [$.attr_splat], - [$.full_splat], - [$.conditional], + [$.body], + [$.object_elem, $.variable_expr], + [$.attr_splat], + [$.full_splat], + [$.conditional], + ], + + externals: $ => [ + $._template_char, + $._template_char_in_interpolation, + $.escape_sequence, ], extras: $ => [ @@ -57,7 +75,7 @@ module.exports = grammar({ expr_term: $ => choice( $.literal_value, - // $.template_expr, + $.template_expr, $.collection_value, $.variable_expr, $.function_call, @@ -70,36 +88,18 @@ module.exports = grammar({ literal_value: $ => choice( $.numeric_lit, - $.string_lit, $.bool_lit, $.null_lit, ), numeric_lit: $ => /[0-9]+(\.[0-9]+([eE][-+]?[0-9]+)?)?/, - string_lit: $ => seq( - '"', - repeat(choice(token.immediate(prec(1, /[^\\"\n\r\t]+/)), $.escape_sequence)), - '"', - ), - - escape_sequence: $ => token.immediate(seq( - '\\', - choice( - '\\', - '"', - 'n', - 'r', - 't', - /u[0-9a-fA-F]{4}/, - /U[0-9a-fA-F]{8}/ - ) - )), - bool_lit: $ => choice('true', 'false'), null_lit: $ => 'null', + // string_lit is defined as quoted template + collection_value: $ => choice( $.tuple, $.object, @@ -210,16 +210,16 @@ module.exports = grammar({ operation: $ => choice($.unary_operation, $.binary_operation), - unary_operation: $ => prec.left(7, seq(choice('-', '!'), $.expr_term)), + unary_operation: $ => prec.left(PREC.unary, seq(choice('-', '!'), $.expr_term)), binary_operation: $ => { const table = [ - [6, choice('*', '/', '%')], - [5, choice('+', '-')], - [4, choice('>', '>=', '<', '<=')], - [3, choice('==', '!=')], - [2, choice('&&')], - [1, choice('||')], + [PREC.binary_mult, choice('*', '/', '%')], + [PREC.binary_add, choice('+', '-')], + [PREC.binary_ord, choice('>', '>=', '<', '<=')], + [PREC.binary_comp, choice('==', '!=')], + [PREC.binary_and, choice('&&')], + [PREC.binary_or, choice('||')], ]; return choice(...table.map(([precedence, operator]) => @@ -228,6 +228,30 @@ module.exports = grammar({ ); }, + template_expr: $ => choice( + $.quoted_template, + // $.heredoc_template, + ), + + // application should check that no template interpolation is contained + string_lit: $ => $.quoted_template, + + quoted_template: $ => seq( + '"', + repeat(choice( + $._template_char, + $.escape_sequence, + $.template_interpolation, + )), + '"', + ), + + template_interpolation: $ => seq( + choice('${', '${~'), + repeat(choice($._template_char_in_interpolation, $.escape_sequence)), + choice('}', '~}'), + ), + // http://stackoverflow.com/questions/13014947/regex-to-match-a-c-style-multiline-comment/36328890#36328890 comment: $ => token(choice( seq('#', /.*/), diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index c6e2e54..0000000 --- a/package-lock.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "tree-sitter-hcl", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "tree-sitter-cli": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.19.5.tgz", - "integrity": "sha512-kRzKrUAwpDN9AjA3b0tPBwT1hd8N2oQvvvHup2OEsX6mdsSMLmAvR+NSqK9fe05JrRbVvG8mbteNUQsxlMQohQ==" - } - } -} diff --git a/package.json b/package.json index 3094f4d..1ac10bc 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,8 @@ { "name": "tree-sitter-hcl", - "version": "1.0.0", + "version": "0.2.0-snapshot", "description": "", "main": "bindings/node", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, "author": "", "license": "ISC", "dependencies": { diff --git a/src/grammar.json b/src/grammar.json index 4cf1930..f1c3c39 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -152,6 +152,10 @@ "type": "SYMBOL", "name": "literal_value" }, + { + "type": "SYMBOL", + "name": "template_expr" + }, { "type": "SYMBOL", "name": "collection_value" @@ -233,10 +237,6 @@ "type": "SYMBOL", "name": "numeric_lit" }, - { - "type": "SYMBOL", - "name": "string_lit" - }, { "type": "SYMBOL", "name": "bool_lit" @@ -251,87 +251,6 @@ "type": "PATTERN", "value": "[0-9]+(\\.[0-9]+([eE][-+]?[0-9]+)?)?" }, - "string_lit": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "\"" - }, - { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "IMMEDIATE_TOKEN", - "content": { - "type": "PREC", - "value": 1, - "content": { - "type": "PATTERN", - "value": "[^\\\\\"\\n\\r\\t]+" - } - } - }, - { - "type": "SYMBOL", - "name": "escape_sequence" - } - ] - } - }, - { - "type": "STRING", - "value": "\"" - } - ] - }, - "escape_sequence": { - "type": "IMMEDIATE_TOKEN", - "content": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "\\" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": "\\" - }, - { - "type": "STRING", - "value": "\"" - }, - { - "type": "STRING", - "value": "n" - }, - { - "type": "STRING", - "value": "r" - }, - { - "type": "STRING", - "value": "t" - }, - { - "type": "PATTERN", - "value": "u[0-9a-fA-F]{4}" - }, - { - "type": "PATTERN", - "value": "U[0-9a-fA-F]{8}" - } - ] - } - ] - } - }, "bool_lit": { "type": "CHOICE", "members": [ @@ -1086,6 +1005,99 @@ } ] }, + "template_expr": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "quoted_template" + } + ] + }, + "string_lit": { + "type": "SYMBOL", + "name": "quoted_template" + }, + "quoted_template": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "\"" + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_template_char" + }, + { + "type": "SYMBOL", + "name": "escape_sequence" + }, + { + "type": "SYMBOL", + "name": "template_interpolation" + } + ] + } + }, + { + "type": "STRING", + "value": "\"" + } + ] + }, + "template_interpolation": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "${" + }, + { + "type": "STRING", + "value": "${~" + } + ] + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_template_char_in_interpolation" + }, + { + "type": "SYMBOL", + "name": "escape_sequence" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "}" + }, + { + "type": "STRING", + "value": "~}" + } + ] + } + ] + }, "comment": { "type": "TOKEN", "content": { @@ -1167,7 +1179,20 @@ ] ], "precedences": [], - "externals": [], + "externals": [ + { + "type": "SYMBOL", + "name": "_template_char" + }, + { + "type": "SYMBOL", + "name": "_template_char_in_interpolation" + }, + { + "type": "SYMBOL", + "name": "escape_sequence" + } + ], "inline": [], "supertypes": [] } diff --git a/src/node-types.json b/src/node-types.json index c65c8f0..e3cfa1f 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -206,6 +206,10 @@ "type": "splat", "named": true }, + { + "type": "template_expr", + "named": true + }, { "type": "variable_expr", "named": true @@ -452,10 +456,6 @@ { "type": "numeric_lit", "named": true - }, - { - "type": "string_lit", - "named": true } ] } @@ -513,6 +513,25 @@ ] } }, + { + "type": "quoted_template", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "escape_sequence", + "named": true + }, + { + "type": "template_interpolation", + "named": true + } + ] + } + }, { "type": "splat", "named": true, @@ -536,6 +555,36 @@ "type": "string_lit", "named": true, "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "quoted_template", + "named": true + } + ] + } + }, + { + "type": "template_expr", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "quoted_template", + "named": true + } + ] + } + }, + { + "type": "template_interpolation", + "named": true, + "fields": {}, "children": { "multiple": true, "required": false, @@ -604,6 +653,14 @@ "type": "\"", "named": false }, + { + "type": "${", + "named": false + }, + { + "type": "${~", + "named": false + }, { "type": "%", "named": false @@ -743,5 +800,9 @@ { "type": "}", "named": false + }, + { + "type": "~}", + "named": false } ] \ No newline at end of file diff --git a/src/parser.c b/src/parser.c index 89a46ad..c59f109 100644 --- a/src/parser.c +++ b/src/parser.c @@ -6,12 +6,12 @@ #endif #define LANGUAGE_VERSION 13 -#define STATE_COUNT 209 +#define STATE_COUNT 217 #define LARGE_STATE_COUNT 2 -#define SYMBOL_COUNT 77 +#define SYMBOL_COUNT 85 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 40 -#define EXTERNAL_TOKEN_COUNT 0 +#define TOKEN_COUNT 44 +#define EXTERNAL_TOKEN_COUNT 3 #define FIELD_COUNT 1 #define MAX_ALIAS_SEQUENCE_LENGTH 8 #define PRODUCTION_ID_COUNT 2 @@ -24,75 +24,83 @@ enum { anon_sym_LPAREN = 5, anon_sym_RPAREN = 6, sym_numeric_lit = 7, - anon_sym_DQUOTE = 8, - aux_sym_string_lit_token1 = 9, - sym_escape_sequence = 10, - anon_sym_true = 11, - anon_sym_false = 12, - sym_null_lit = 13, - anon_sym_LBRACK = 14, - anon_sym_COMMA = 15, - anon_sym_RBRACK = 16, - anon_sym_COLON = 17, - anon_sym_DOT = 18, - anon_sym_STAR = 19, - anon_sym_EQ_GT = 20, - anon_sym_for = 21, - anon_sym_in = 22, - anon_sym_if = 23, - sym_ellipsis = 24, - anon_sym_QMARK = 25, - anon_sym_DASH = 26, - anon_sym_BANG = 27, - anon_sym_SLASH = 28, - anon_sym_PERCENT = 29, - anon_sym_PLUS = 30, - anon_sym_GT = 31, - anon_sym_GT_EQ = 32, - anon_sym_LT = 33, - anon_sym_LT_EQ = 34, - anon_sym_EQ_EQ = 35, - anon_sym_BANG_EQ = 36, - anon_sym_AMP_AMP = 37, - anon_sym_PIPE_PIPE = 38, - sym_comment = 39, - sym_config_file = 40, - sym_body = 41, - sym_attribute = 42, - sym_block = 43, - sym_expression = 44, - sym_expr_term = 45, - sym_literal_value = 46, - sym_string_lit = 47, - sym_bool_lit = 48, - sym_collection_value = 49, - sym_tuple = 50, - sym_object = 51, - sym_object_elem = 52, - sym_index = 53, - sym_get_attr = 54, - sym_splat = 55, - sym_attr_splat = 56, - sym_full_splat = 57, - sym_for_expr = 58, - sym_for_tuple_expr = 59, - sym_for_object_expr = 60, - sym_for_intro = 61, - sym_for_cond = 62, - sym_variable_expr = 63, - sym_function_call = 64, - sym_function_arguments = 65, - sym_conditional = 66, - sym_operation = 67, - sym_unary_operation = 68, - sym_binary_operation = 69, - aux_sym_body_repeat1 = 70, - aux_sym_block_repeat1 = 71, - aux_sym_string_lit_repeat1 = 72, - aux_sym_tuple_repeat1 = 73, - aux_sym_object_repeat1 = 74, - aux_sym_attr_splat_repeat1 = 75, - aux_sym_full_splat_repeat1 = 76, + anon_sym_true = 8, + anon_sym_false = 9, + sym_null_lit = 10, + anon_sym_LBRACK = 11, + anon_sym_COMMA = 12, + anon_sym_RBRACK = 13, + anon_sym_COLON = 14, + anon_sym_DOT = 15, + anon_sym_STAR = 16, + anon_sym_EQ_GT = 17, + anon_sym_for = 18, + anon_sym_in = 19, + anon_sym_if = 20, + sym_ellipsis = 21, + anon_sym_QMARK = 22, + anon_sym_DASH = 23, + anon_sym_BANG = 24, + anon_sym_SLASH = 25, + anon_sym_PERCENT = 26, + anon_sym_PLUS = 27, + anon_sym_GT = 28, + anon_sym_GT_EQ = 29, + anon_sym_LT = 30, + anon_sym_LT_EQ = 31, + anon_sym_EQ_EQ = 32, + anon_sym_BANG_EQ = 33, + anon_sym_AMP_AMP = 34, + anon_sym_PIPE_PIPE = 35, + anon_sym_DQUOTE = 36, + anon_sym_DOLLAR_LBRACE = 37, + anon_sym_DOLLAR_LBRACE_TILDE = 38, + anon_sym_TILDE_RBRACE = 39, + sym_comment = 40, + sym__template_char = 41, + sym__template_char_in_interpolation = 42, + sym_escape_sequence = 43, + sym_config_file = 44, + sym_body = 45, + sym_attribute = 46, + sym_block = 47, + sym_expression = 48, + sym_expr_term = 49, + sym_literal_value = 50, + sym_bool_lit = 51, + sym_collection_value = 52, + sym_tuple = 53, + sym_object = 54, + sym_object_elem = 55, + sym_index = 56, + sym_get_attr = 57, + sym_splat = 58, + sym_attr_splat = 59, + sym_full_splat = 60, + sym_for_expr = 61, + sym_for_tuple_expr = 62, + sym_for_object_expr = 63, + sym_for_intro = 64, + sym_for_cond = 65, + sym_variable_expr = 66, + sym_function_call = 67, + sym_function_arguments = 68, + sym_conditional = 69, + sym_operation = 70, + sym_unary_operation = 71, + sym_binary_operation = 72, + sym_template_expr = 73, + sym_string_lit = 74, + sym_quoted_template = 75, + sym_template_interpolation = 76, + aux_sym_body_repeat1 = 77, + aux_sym_block_repeat1 = 78, + aux_sym_tuple_repeat1 = 79, + aux_sym_object_repeat1 = 80, + aux_sym_attr_splat_repeat1 = 81, + aux_sym_full_splat_repeat1 = 82, + aux_sym_quoted_template_repeat1 = 83, + aux_sym_template_interpolation_repeat1 = 84, }; static const char * const ts_symbol_names[] = { @@ -104,9 +112,6 @@ static const char * const ts_symbol_names[] = { [anon_sym_LPAREN] = "(", [anon_sym_RPAREN] = ")", [sym_numeric_lit] = "numeric_lit", - [anon_sym_DQUOTE] = "\"", - [aux_sym_string_lit_token1] = "string_lit_token1", - [sym_escape_sequence] = "escape_sequence", [anon_sym_true] = "true", [anon_sym_false] = "false", [sym_null_lit] = "null_lit", @@ -135,7 +140,14 @@ static const char * const ts_symbol_names[] = { [anon_sym_BANG_EQ] = "!=", [anon_sym_AMP_AMP] = "&&", [anon_sym_PIPE_PIPE] = "||", + [anon_sym_DQUOTE] = "\"", + [anon_sym_DOLLAR_LBRACE] = "${", + [anon_sym_DOLLAR_LBRACE_TILDE] = "${~", + [anon_sym_TILDE_RBRACE] = "~}", [sym_comment] = "comment", + [sym__template_char] = "_template_char", + [sym__template_char_in_interpolation] = "_template_char_in_interpolation", + [sym_escape_sequence] = "escape_sequence", [sym_config_file] = "config_file", [sym_body] = "body", [sym_attribute] = "attribute", @@ -143,7 +155,6 @@ static const char * const ts_symbol_names[] = { [sym_expression] = "expression", [sym_expr_term] = "expr_term", [sym_literal_value] = "literal_value", - [sym_string_lit] = "string_lit", [sym_bool_lit] = "bool_lit", [sym_collection_value] = "collection_value", [sym_tuple] = "tuple", @@ -166,13 +177,18 @@ static const char * const ts_symbol_names[] = { [sym_operation] = "operation", [sym_unary_operation] = "unary_operation", [sym_binary_operation] = "binary_operation", + [sym_template_expr] = "template_expr", + [sym_string_lit] = "string_lit", + [sym_quoted_template] = "quoted_template", + [sym_template_interpolation] = "template_interpolation", [aux_sym_body_repeat1] = "body_repeat1", [aux_sym_block_repeat1] = "block_repeat1", - [aux_sym_string_lit_repeat1] = "string_lit_repeat1", [aux_sym_tuple_repeat1] = "tuple_repeat1", [aux_sym_object_repeat1] = "object_repeat1", [aux_sym_attr_splat_repeat1] = "attr_splat_repeat1", [aux_sym_full_splat_repeat1] = "full_splat_repeat1", + [aux_sym_quoted_template_repeat1] = "quoted_template_repeat1", + [aux_sym_template_interpolation_repeat1] = "template_interpolation_repeat1", }; static const TSSymbol ts_symbol_map[] = { @@ -184,9 +200,6 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_LPAREN] = anon_sym_LPAREN, [anon_sym_RPAREN] = anon_sym_RPAREN, [sym_numeric_lit] = sym_numeric_lit, - [anon_sym_DQUOTE] = anon_sym_DQUOTE, - [aux_sym_string_lit_token1] = aux_sym_string_lit_token1, - [sym_escape_sequence] = sym_escape_sequence, [anon_sym_true] = anon_sym_true, [anon_sym_false] = anon_sym_false, [sym_null_lit] = sym_null_lit, @@ -215,7 +228,14 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_BANG_EQ] = anon_sym_BANG_EQ, [anon_sym_AMP_AMP] = anon_sym_AMP_AMP, [anon_sym_PIPE_PIPE] = anon_sym_PIPE_PIPE, + [anon_sym_DQUOTE] = anon_sym_DQUOTE, + [anon_sym_DOLLAR_LBRACE] = anon_sym_DOLLAR_LBRACE, + [anon_sym_DOLLAR_LBRACE_TILDE] = anon_sym_DOLLAR_LBRACE_TILDE, + [anon_sym_TILDE_RBRACE] = anon_sym_TILDE_RBRACE, [sym_comment] = sym_comment, + [sym__template_char] = sym__template_char, + [sym__template_char_in_interpolation] = sym__template_char_in_interpolation, + [sym_escape_sequence] = sym_escape_sequence, [sym_config_file] = sym_config_file, [sym_body] = sym_body, [sym_attribute] = sym_attribute, @@ -223,7 +243,6 @@ static const TSSymbol ts_symbol_map[] = { [sym_expression] = sym_expression, [sym_expr_term] = sym_expr_term, [sym_literal_value] = sym_literal_value, - [sym_string_lit] = sym_string_lit, [sym_bool_lit] = sym_bool_lit, [sym_collection_value] = sym_collection_value, [sym_tuple] = sym_tuple, @@ -246,13 +265,18 @@ static const TSSymbol ts_symbol_map[] = { [sym_operation] = sym_operation, [sym_unary_operation] = sym_unary_operation, [sym_binary_operation] = sym_binary_operation, + [sym_template_expr] = sym_template_expr, + [sym_string_lit] = sym_string_lit, + [sym_quoted_template] = sym_quoted_template, + [sym_template_interpolation] = sym_template_interpolation, [aux_sym_body_repeat1] = aux_sym_body_repeat1, [aux_sym_block_repeat1] = aux_sym_block_repeat1, - [aux_sym_string_lit_repeat1] = aux_sym_string_lit_repeat1, [aux_sym_tuple_repeat1] = aux_sym_tuple_repeat1, [aux_sym_object_repeat1] = aux_sym_object_repeat1, [aux_sym_attr_splat_repeat1] = aux_sym_attr_splat_repeat1, [aux_sym_full_splat_repeat1] = aux_sym_full_splat_repeat1, + [aux_sym_quoted_template_repeat1] = aux_sym_quoted_template_repeat1, + [aux_sym_template_interpolation_repeat1] = aux_sym_template_interpolation_repeat1, }; static const TSSymbolMetadata ts_symbol_metadata[] = { @@ -288,18 +312,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [anon_sym_DQUOTE] = { - .visible = true, - .named = false, - }, - [aux_sym_string_lit_token1] = { - .visible = false, - .named = false, - }, - [sym_escape_sequence] = { - .visible = true, - .named = true, - }, [anon_sym_true] = { .visible = true, .named = false, @@ -412,10 +424,38 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, + [anon_sym_DQUOTE] = { + .visible = true, + .named = false, + }, + [anon_sym_DOLLAR_LBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_DOLLAR_LBRACE_TILDE] = { + .visible = true, + .named = false, + }, + [anon_sym_TILDE_RBRACE] = { + .visible = true, + .named = false, + }, [sym_comment] = { .visible = true, .named = true, }, + [sym__template_char] = { + .visible = false, + .named = true, + }, + [sym__template_char_in_interpolation] = { + .visible = false, + .named = true, + }, + [sym_escape_sequence] = { + .visible = true, + .named = true, + }, [sym_config_file] = { .visible = true, .named = true, @@ -444,10 +484,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym_string_lit] = { - .visible = true, - .named = true, - }, [sym_bool_lit] = { .visible = true, .named = true, @@ -536,6 +572,22 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym_template_expr] = { + .visible = true, + .named = true, + }, + [sym_string_lit] = { + .visible = true, + .named = true, + }, + [sym_quoted_template] = { + .visible = true, + .named = true, + }, + [sym_template_interpolation] = { + .visible = true, + .named = true, + }, [aux_sym_body_repeat1] = { .visible = false, .named = false, @@ -544,10 +596,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = false, }, - [aux_sym_string_lit_repeat1] = { - .visible = false, - .named = false, - }, [aux_sym_tuple_repeat1] = { .visible = false, .named = false, @@ -564,6 +612,14 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = false, }, + [aux_sym_quoted_template_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_template_interpolation_repeat1] = { + .visible = false, + .named = false, + }, }; enum { @@ -2139,623 +2195,480 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(42); - if (lookahead == '!') ADVANCE(94); - if (lookahead == '"') ADVANCE(66); - if (lookahead == '#') ADVANCE(107); - if (lookahead == '%') ADVANCE(96); - if (lookahead == '&') ADVANCE(7); - if (lookahead == '(') ADVANCE(61); - if (lookahead == ')') ADVANCE(62); - if (lookahead == '*') ADVANCE(84); - if (lookahead == '+') ADVANCE(97); - if (lookahead == ',') ADVANCE(80); - if (lookahead == '-') ADVANCE(92); - if (lookahead == '.') ADVANCE(83); - if (lookahead == '/') ADVANCE(95); - if (lookahead == ':') ADVANCE(82); - if (lookahead == '<') ADVANCE(100); - if (lookahead == '=') ADVANCE(45); - if (lookahead == '>') ADVANCE(98); - if (lookahead == '?') ADVANCE(91); - if (lookahead == '[') ADVANCE(79); - if (lookahead == '\\') ADVANCE(29); - if (lookahead == ']') ADVANCE(81); - if (lookahead == 'f') ADVANCE(14); - if (lookahead == 'i') ADVANCE(18); - if (lookahead == 'n') ADVANCE(26); - if (lookahead == 't') ADVANCE(23); - if (lookahead == '{') ADVANCE(46); - if (lookahead == '|') ADVANCE(27); - if (lookahead == '}') ADVANCE(47); + if (eof) ADVANCE(32); + if (lookahead == '!') ADVANCE(77); + if (lookahead == '"') ADVANCE(89); + if (lookahead == '#') ADVANCE(94); + if (lookahead == '$') ADVANCE(25); + if (lookahead == '%') ADVANCE(79); + if (lookahead == '&') ADVANCE(5); + if (lookahead == '(') ADVANCE(51); + if (lookahead == ')') ADVANCE(52); + if (lookahead == '*') ADVANCE(67); + if (lookahead == '+') ADVANCE(80); + if (lookahead == ',') ADVANCE(63); + if (lookahead == '-') ADVANCE(75); + if (lookahead == '.') ADVANCE(66); + if (lookahead == '/') ADVANCE(78); + if (lookahead == ':') ADVANCE(65); + if (lookahead == '<') ADVANCE(83); + if (lookahead == '=') ADVANCE(35); + if (lookahead == '>') ADVANCE(81); + if (lookahead == '?') ADVANCE(74); + if (lookahead == '[') ADVANCE(62); + if (lookahead == ']') ADVANCE(64); + if (lookahead == 'f') ADVANCE(12); + if (lookahead == 'i') ADVANCE(16); + if (lookahead == 'n') ADVANCE(24); + if (lookahead == 't') ADVANCE(21); + if (lookahead == '{') ADVANCE(36); + if (lookahead == '|') ADVANCE(26); + if (lookahead == '}') ADVANCE(37); + if (lookahead == '~') ADVANCE(27); if (lookahead == '\t' || lookahead == '\n' || lookahead == '\r' || - lookahead == ' ') SKIP(40) - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(63); + lookahead == ' ') SKIP(0) + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(53); END_STATE(); case 1: - if (lookahead == ' ') ADVANCE(67); - if (lookahead == '"') ADVANCE(66); - if (lookahead == '#') ADVANCE(71); - if (lookahead == '/') ADVANCE(68); - if (lookahead == '\\') ADVANCE(29); + if (lookahead == '!') ADVANCE(10); + if (lookahead == '#') ADVANCE(94); + if (lookahead == '%') ADVANCE(79); + if (lookahead == '&') ADVANCE(5); + if (lookahead == '(') ADVANCE(51); + if (lookahead == '*') ADVANCE(67); + if (lookahead == '+') ADVANCE(80); + if (lookahead == '-') ADVANCE(75); + if (lookahead == '.') ADVANCE(66); + if (lookahead == '/') ADVANCE(78); + if (lookahead == ':') ADVANCE(65); + if (lookahead == '<') ADVANCE(83); + if (lookahead == '=') ADVANCE(34); + if (lookahead == '>') ADVANCE(81); + if (lookahead == '?') ADVANCE(74); + if (lookahead == '[') ADVANCE(62); + if (lookahead == ']') ADVANCE(64); + if (lookahead == 'i') ADVANCE(15); + if (lookahead == '|') ADVANCE(26); + if (lookahead == '}') ADVANCE(37); if (lookahead == '\t' || lookahead == '\n' || - lookahead == '\r') SKIP(6) - if (lookahead != 0) ADVANCE(71); + lookahead == '\r' || + lookahead == ' ') SKIP(1) END_STATE(); case 2: - if (lookahead == '!') ADVANCE(12); - if (lookahead == '#') ADVANCE(107); - if (lookahead == '%') ADVANCE(96); - if (lookahead == '&') ADVANCE(7); - if (lookahead == '(') ADVANCE(61); - if (lookahead == '*') ADVANCE(84); - if (lookahead == '+') ADVANCE(97); - if (lookahead == '-') ADVANCE(92); - if (lookahead == '.') ADVANCE(83); - if (lookahead == '/') ADVANCE(95); - if (lookahead == ':') ADVANCE(82); - if (lookahead == '<') ADVANCE(100); - if (lookahead == '=') ADVANCE(44); - if (lookahead == '>') ADVANCE(98); - if (lookahead == '?') ADVANCE(91); - if (lookahead == '[') ADVANCE(79); - if (lookahead == ']') ADVANCE(81); - if (lookahead == 'i') ADVANCE(17); - if (lookahead == '|') ADVANCE(27); - if (lookahead == '}') ADVANCE(47); + if (lookahead == '!') ADVANCE(76); + if (lookahead == '"') ADVANCE(89); + if (lookahead == '#') ADVANCE(94); + if (lookahead == '(') ADVANCE(51); + if (lookahead == ')') ADVANCE(52); + if (lookahead == '*') ADVANCE(67); + if (lookahead == '-') ADVANCE(75); + if (lookahead == '/') ADVANCE(6); + if (lookahead == '=') ADVANCE(11); + if (lookahead == '?') ADVANCE(74); + if (lookahead == '[') ADVANCE(62); + if (lookahead == 'f') ADVANCE(39); + if (lookahead == 'n') ADVANCE(49); + if (lookahead == 't') ADVANCE(46); + if (lookahead == '{') ADVANCE(36); if (lookahead == '\t' || lookahead == '\n' || lookahead == '\r' || lookahead == ' ') SKIP(2) + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(53); + if (sym_identifier_character_set_1(lookahead)) ADVANCE(50); END_STATE(); case 3: - if (lookahead == '!') ADVANCE(93); - if (lookahead == '"') ADVANCE(66); - if (lookahead == '#') ADVANCE(107); - if (lookahead == '(') ADVANCE(61); - if (lookahead == ')') ADVANCE(62); - if (lookahead == '*') ADVANCE(84); - if (lookahead == '-') ADVANCE(92); - if (lookahead == '/') ADVANCE(8); - if (lookahead == '=') ADVANCE(13); - if (lookahead == '?') ADVANCE(91); - if (lookahead == '[') ADVANCE(79); - if (lookahead == 'f') ADVANCE(49); - if (lookahead == 'n') ADVANCE(59); - if (lookahead == 't') ADVANCE(56); - if (lookahead == '{') ADVANCE(46); + if (lookahead == '!') ADVANCE(76); + if (lookahead == '"') ADVANCE(89); + if (lookahead == '#') ADVANCE(94); + if (lookahead == '(') ADVANCE(51); + if (lookahead == '-') ADVANCE(75); + if (lookahead == '/') ADVANCE(6); + if (lookahead == ':') ADVANCE(65); + if (lookahead == '=') ADVANCE(33); + if (lookahead == '?') ADVANCE(74); + if (lookahead == '[') ADVANCE(62); + if (lookahead == ']') ADVANCE(64); + if (lookahead == 'f') ADVANCE(38); + if (lookahead == 'n') ADVANCE(49); + if (lookahead == 't') ADVANCE(46); + if (lookahead == '{') ADVANCE(36); + if (lookahead == '}') ADVANCE(37); if (lookahead == '\t' || lookahead == '\n' || lookahead == '\r' || lookahead == ' ') SKIP(3) - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(63); - if (sym_identifier_character_set_1(lookahead)) ADVANCE(60); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(53); + if (sym_identifier_character_set_1(lookahead)) ADVANCE(50); END_STATE(); case 4: - if (lookahead == '!') ADVANCE(93); - if (lookahead == '"') ADVANCE(66); - if (lookahead == '#') ADVANCE(107); - if (lookahead == '(') ADVANCE(61); - if (lookahead == '-') ADVANCE(92); - if (lookahead == '/') ADVANCE(8); - if (lookahead == ':') ADVANCE(82); - if (lookahead == '=') ADVANCE(43); - if (lookahead == '?') ADVANCE(91); - if (lookahead == '[') ADVANCE(79); - if (lookahead == ']') ADVANCE(81); - if (lookahead == 'f') ADVANCE(48); - if (lookahead == 'n') ADVANCE(59); - if (lookahead == 't') ADVANCE(56); - if (lookahead == '{') ADVANCE(46); - if (lookahead == '}') ADVANCE(47); + if (lookahead == '"') ADVANCE(89); + if (lookahead == '#') ADVANCE(94); + if (lookahead == '/') ADVANCE(6); + if (lookahead == '=') ADVANCE(33); + if (lookahead == '{') ADVANCE(36); if (lookahead == '\t' || lookahead == '\n' || lookahead == '\r' || lookahead == ' ') SKIP(4) - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(63); - if (sym_identifier_character_set_1(lookahead)) ADVANCE(60); + if (sym_identifier_character_set_1(lookahead)) ADVANCE(50); END_STATE(); case 5: - if (lookahead == '"') ADVANCE(66); - if (lookahead == '#') ADVANCE(107); - if (lookahead == '/') ADVANCE(8); - if (lookahead == '=') ADVANCE(43); - if (lookahead == '{') ADVANCE(46); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\r' || - lookahead == ' ') SKIP(5) - if (sym_identifier_character_set_1(lookahead)) ADVANCE(60); + if (lookahead == '&') ADVANCE(87); END_STATE(); case 6: - if (lookahead == '"') ADVANCE(66); - if (lookahead == '#') ADVANCE(107); - if (lookahead == '/') ADVANCE(8); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\r' || - lookahead == ' ') SKIP(6) + if (lookahead == '*') ADVANCE(8); + if (lookahead == '/') ADVANCE(94); END_STATE(); case 7: - if (lookahead == '&') ADVANCE(104); + if (lookahead == '*') ADVANCE(7); + if (lookahead == '/') ADVANCE(93); + if (lookahead != 0) ADVANCE(8); END_STATE(); case 8: - if (lookahead == '*') ADVANCE(10); - if (lookahead == '/') ADVANCE(107); + if (lookahead == '*') ADVANCE(7); + if (lookahead != 0) ADVANCE(8); END_STATE(); case 9: - if (lookahead == '*') ADVANCE(9); - if (lookahead == '/') ADVANCE(106); - if (lookahead != 0) ADVANCE(10); + if (lookahead == '.') ADVANCE(73); END_STATE(); case 10: - if (lookahead == '*') ADVANCE(9); - if (lookahead != 0) ADVANCE(10); + if (lookahead == '=') ADVANCE(86); END_STATE(); case 11: - if (lookahead == '.') ADVANCE(90); + if (lookahead == '>') ADVANCE(68); END_STATE(); case 12: - if (lookahead == '=') ADVANCE(103); + if (lookahead == 'a') ADVANCE(17); + if (lookahead == 'o') ADVANCE(20); END_STATE(); case 13: - if (lookahead == '>') ADVANCE(85); + if (lookahead == 'e') ADVANCE(56); END_STATE(); case 14: - if (lookahead == 'a') ADVANCE(19); - if (lookahead == 'o') ADVANCE(22); + if (lookahead == 'e') ADVANCE(58); END_STATE(); case 15: - if (lookahead == 'e') ADVANCE(73); + if (lookahead == 'f') ADVANCE(72); END_STATE(); case 16: - if (lookahead == 'e') ADVANCE(75); + if (lookahead == 'f') ADVANCE(72); + if (lookahead == 'n') ADVANCE(71); END_STATE(); case 17: - if (lookahead == 'f') ADVANCE(89); + if (lookahead == 'l') ADVANCE(22); END_STATE(); case 18: - if (lookahead == 'f') ADVANCE(89); - if (lookahead == 'n') ADVANCE(88); + if (lookahead == 'l') ADVANCE(60); END_STATE(); case 19: - if (lookahead == 'l') ADVANCE(24); + if (lookahead == 'l') ADVANCE(18); END_STATE(); case 20: - if (lookahead == 'l') ADVANCE(77); + if (lookahead == 'r') ADVANCE(69); END_STATE(); case 21: - if (lookahead == 'l') ADVANCE(20); + if (lookahead == 'r') ADVANCE(23); END_STATE(); case 22: - if (lookahead == 'r') ADVANCE(86); + if (lookahead == 's') ADVANCE(14); END_STATE(); case 23: - if (lookahead == 'r') ADVANCE(25); + if (lookahead == 'u') ADVANCE(13); END_STATE(); case 24: - if (lookahead == 's') ADVANCE(16); + if (lookahead == 'u') ADVANCE(19); END_STATE(); case 25: - if (lookahead == 'u') ADVANCE(15); + if (lookahead == '{') ADVANCE(90); END_STATE(); case 26: - if (lookahead == 'u') ADVANCE(21); + if (lookahead == '|') ADVANCE(88); END_STATE(); case 27: - if (lookahead == '|') ADVANCE(105); + if (lookahead == '}') ADVANCE(92); END_STATE(); case 28: if (lookahead == '+' || - lookahead == '-') ADVANCE(31); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(65); + lookahead == '-') ADVANCE(30); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(55); END_STATE(); case 29: - if (lookahead == '"' || - lookahead == '\\' || - lookahead == 'n' || - lookahead == 'r' || - lookahead == 't') ADVANCE(72); - if (lookahead == 'U') ADVANCE(39); - if (lookahead == 'u') ADVANCE(35); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(54); END_STATE(); case 30: - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(64); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(55); END_STATE(); case 31: - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(65); + if (eof) ADVANCE(32); + if (lookahead == '!') ADVANCE(10); + if (lookahead == '"') ADVANCE(89); + if (lookahead == '#') ADVANCE(94); + if (lookahead == '%') ADVANCE(79); + if (lookahead == '&') ADVANCE(5); + if (lookahead == '(') ADVANCE(51); + if (lookahead == ')') ADVANCE(52); + if (lookahead == '*') ADVANCE(67); + if (lookahead == '+') ADVANCE(80); + if (lookahead == ',') ADVANCE(63); + if (lookahead == '-') ADVANCE(75); + if (lookahead == '.') ADVANCE(66); + if (lookahead == '/') ADVANCE(78); + if (lookahead == ':') ADVANCE(65); + if (lookahead == '<') ADVANCE(83); + if (lookahead == '=') ADVANCE(35); + if (lookahead == '>') ADVANCE(81); + if (lookahead == '?') ADVANCE(74); + if (lookahead == '[') ADVANCE(62); + if (lookahead == ']') ADVANCE(64); + if (lookahead == '{') ADVANCE(36); + if (lookahead == '|') ADVANCE(26); + if (lookahead == '}') ADVANCE(37); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(31) + if (sym_identifier_character_set_1(lookahead)) ADVANCE(50); END_STATE(); case 32: - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(72); - END_STATE(); - case 33: - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(32); - END_STATE(); - case 34: - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(33); - END_STATE(); - case 35: - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(34); - END_STATE(); - case 36: - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(35); - END_STATE(); - case 37: - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(36); - END_STATE(); - case 38: - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(37); - END_STATE(); - case 39: - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(38); - END_STATE(); - case 40: - if (eof) ADVANCE(42); - if (lookahead == '!') ADVANCE(94); - if (lookahead == '"') ADVANCE(66); - if (lookahead == '#') ADVANCE(107); - if (lookahead == '%') ADVANCE(96); - if (lookahead == '&') ADVANCE(7); - if (lookahead == '(') ADVANCE(61); - if (lookahead == ')') ADVANCE(62); - if (lookahead == '*') ADVANCE(84); - if (lookahead == '+') ADVANCE(97); - if (lookahead == ',') ADVANCE(80); - if (lookahead == '-') ADVANCE(92); - if (lookahead == '.') ADVANCE(83); - if (lookahead == '/') ADVANCE(95); - if (lookahead == ':') ADVANCE(82); - if (lookahead == '<') ADVANCE(100); - if (lookahead == '=') ADVANCE(45); - if (lookahead == '>') ADVANCE(98); - if (lookahead == '?') ADVANCE(91); - if (lookahead == '[') ADVANCE(79); - if (lookahead == ']') ADVANCE(81); - if (lookahead == 'f') ADVANCE(14); - if (lookahead == 'i') ADVANCE(18); - if (lookahead == 'n') ADVANCE(26); - if (lookahead == 't') ADVANCE(23); - if (lookahead == '{') ADVANCE(46); - if (lookahead == '|') ADVANCE(27); - if (lookahead == '}') ADVANCE(47); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\r' || - lookahead == ' ') SKIP(40) - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(63); - END_STATE(); - case 41: - if (eof) ADVANCE(42); - if (lookahead == '!') ADVANCE(12); - if (lookahead == '"') ADVANCE(66); - if (lookahead == '#') ADVANCE(107); - if (lookahead == '%') ADVANCE(96); - if (lookahead == '&') ADVANCE(7); - if (lookahead == '(') ADVANCE(61); - if (lookahead == ')') ADVANCE(62); - if (lookahead == '*') ADVANCE(84); - if (lookahead == '+') ADVANCE(97); - if (lookahead == ',') ADVANCE(80); - if (lookahead == '-') ADVANCE(92); - if (lookahead == '.') ADVANCE(83); - if (lookahead == '/') ADVANCE(95); - if (lookahead == ':') ADVANCE(82); - if (lookahead == '<') ADVANCE(100); - if (lookahead == '=') ADVANCE(45); - if (lookahead == '>') ADVANCE(98); - if (lookahead == '?') ADVANCE(91); - if (lookahead == '[') ADVANCE(79); - if (lookahead == ']') ADVANCE(81); - if (lookahead == '{') ADVANCE(46); - if (lookahead == '|') ADVANCE(27); - if (lookahead == '}') ADVANCE(47); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\r' || - lookahead == ' ') SKIP(41) - if (sym_identifier_character_set_1(lookahead)) ADVANCE(60); - END_STATE(); - case 42: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 43: + case 33: ACCEPT_TOKEN(anon_sym_EQ); END_STATE(); - case 44: + case 34: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(102); + if (lookahead == '=') ADVANCE(85); END_STATE(); - case 45: + case 35: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(102); - if (lookahead == '>') ADVANCE(85); + if (lookahead == '=') ADVANCE(85); + if (lookahead == '>') ADVANCE(68); END_STATE(); - case 46: + case 36: ACCEPT_TOKEN(anon_sym_LBRACE); END_STATE(); - case 47: + case 37: ACCEPT_TOKEN(anon_sym_RBRACE); END_STATE(); + case 38: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(42); + if (lookahead == 'o') ADVANCE(45); + if (sym_identifier_character_set_2(lookahead)) ADVANCE(50); + END_STATE(); + case 39: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(42); + if (sym_identifier_character_set_2(lookahead)) ADVANCE(50); + END_STATE(); + case 40: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(57); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); + END_STATE(); + case 41: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(59); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); + END_STATE(); + case 42: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'l') ADVANCE(47); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); + END_STATE(); + case 43: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'l') ADVANCE(61); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); + END_STATE(); + case 44: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'l') ADVANCE(43); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); + END_STATE(); + case 45: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'r') ADVANCE(70); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); + END_STATE(); + case 46: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'r') ADVANCE(48); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); + END_STATE(); + case 47: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 's') ADVANCE(41); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); + END_STATE(); case 48: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'a') ADVANCE(52); - if (lookahead == 'o') ADVANCE(55); - if (sym_identifier_character_set_2(lookahead)) ADVANCE(60); + if (lookahead == 'u') ADVANCE(40); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); END_STATE(); case 49: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'a') ADVANCE(52); - if (sym_identifier_character_set_2(lookahead)) ADVANCE(60); + if (lookahead == 'u') ADVANCE(44); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); END_STATE(); case 50: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'e') ADVANCE(74); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); END_STATE(); case 51: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'e') ADVANCE(76); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); - END_STATE(); - case 52: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'l') ADVANCE(57); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); - END_STATE(); - case 53: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'l') ADVANCE(78); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); - END_STATE(); - case 54: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'l') ADVANCE(53); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); - END_STATE(); - case 55: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'r') ADVANCE(87); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); - END_STATE(); - case 56: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'r') ADVANCE(58); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); - END_STATE(); - case 57: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == 's') ADVANCE(51); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); - END_STATE(); - case 58: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'u') ADVANCE(50); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); - END_STATE(); - case 59: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'u') ADVANCE(54); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); - END_STATE(); - case 60: - ACCEPT_TOKEN(sym_identifier); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); - END_STATE(); - case 61: ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); - case 62: + case 52: ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); - case 63: + case 53: ACCEPT_TOKEN(sym_numeric_lit); - if (lookahead == '.') ADVANCE(30); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(63); + if (lookahead == '.') ADVANCE(29); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(53); END_STATE(); - case 64: + case 54: ACCEPT_TOKEN(sym_numeric_lit); if (lookahead == 'E' || lookahead == 'e') ADVANCE(28); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(64); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(54); END_STATE(); - case 65: + case 55: ACCEPT_TOKEN(sym_numeric_lit); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(65); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(55); END_STATE(); - case 66: - ACCEPT_TOKEN(anon_sym_DQUOTE); - END_STATE(); - case 67: - ACCEPT_TOKEN(aux_sym_string_lit_token1); - if (lookahead == ' ') ADVANCE(67); - if (lookahead == '#') ADVANCE(71); - if (lookahead == '/') ADVANCE(68); - if (lookahead != 0 && - lookahead != '\t' && - lookahead != '\n' && - lookahead != '\r' && - lookahead != '"' && - lookahead != '\\') ADVANCE(71); - END_STATE(); - case 68: - ACCEPT_TOKEN(aux_sym_string_lit_token1); - if (lookahead == '*') ADVANCE(70); - if (lookahead == '/') ADVANCE(71); - if (lookahead != 0 && - lookahead != '\t' && - lookahead != '\n' && - lookahead != '\r' && - lookahead != '"' && - lookahead != '\\') ADVANCE(71); - END_STATE(); - case 69: - ACCEPT_TOKEN(aux_sym_string_lit_token1); - if (lookahead == '*') ADVANCE(69); - if (lookahead == '/') ADVANCE(71); - if (lookahead != 0 && - lookahead != '\t' && - lookahead != '\n' && - lookahead != '\r' && - lookahead != '"' && - lookahead != '\\') ADVANCE(70); - END_STATE(); - case 70: - ACCEPT_TOKEN(aux_sym_string_lit_token1); - if (lookahead == '*') ADVANCE(69); - if (lookahead != 0 && - lookahead != '\t' && - lookahead != '\n' && - lookahead != '\r' && - lookahead != '"' && - lookahead != '\\') ADVANCE(70); - END_STATE(); - case 71: - ACCEPT_TOKEN(aux_sym_string_lit_token1); - if (lookahead != 0 && - lookahead != '\t' && - lookahead != '\n' && - lookahead != '\r' && - lookahead != '"' && - lookahead != '\\') ADVANCE(71); - END_STATE(); - case 72: - ACCEPT_TOKEN(sym_escape_sequence); - END_STATE(); - case 73: + case 56: ACCEPT_TOKEN(anon_sym_true); END_STATE(); - case 74: + case 57: ACCEPT_TOKEN(anon_sym_true); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); END_STATE(); - case 75: + case 58: ACCEPT_TOKEN(anon_sym_false); END_STATE(); - case 76: + case 59: ACCEPT_TOKEN(anon_sym_false); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); END_STATE(); - case 77: + case 60: ACCEPT_TOKEN(sym_null_lit); END_STATE(); - case 78: + case 61: ACCEPT_TOKEN(sym_null_lit); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); END_STATE(); - case 79: + case 62: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 80: + case 63: ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); - case 81: + case 64: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 82: + case 65: ACCEPT_TOKEN(anon_sym_COLON); END_STATE(); - case 83: + case 66: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(11); + if (lookahead == '.') ADVANCE(9); END_STATE(); - case 84: + case 67: ACCEPT_TOKEN(anon_sym_STAR); END_STATE(); - case 85: + case 68: ACCEPT_TOKEN(anon_sym_EQ_GT); END_STATE(); - case 86: + case 69: ACCEPT_TOKEN(anon_sym_for); END_STATE(); - case 87: + case 70: ACCEPT_TOKEN(anon_sym_for); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(60); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(50); END_STATE(); - case 88: + case 71: ACCEPT_TOKEN(anon_sym_in); END_STATE(); - case 89: + case 72: ACCEPT_TOKEN(anon_sym_if); END_STATE(); - case 90: + case 73: ACCEPT_TOKEN(sym_ellipsis); END_STATE(); - case 91: + case 74: ACCEPT_TOKEN(anon_sym_QMARK); END_STATE(); - case 92: + case 75: ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); - case 93: + case 76: ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); - case 94: + case 77: ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(103); + if (lookahead == '=') ADVANCE(86); END_STATE(); - case 95: + case 78: ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '*') ADVANCE(10); - if (lookahead == '/') ADVANCE(107); + if (lookahead == '*') ADVANCE(8); + if (lookahead == '/') ADVANCE(94); END_STATE(); - case 96: + case 79: ACCEPT_TOKEN(anon_sym_PERCENT); END_STATE(); - case 97: + case 80: ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); - case 98: + case 81: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(99); + if (lookahead == '=') ADVANCE(82); END_STATE(); - case 99: + case 82: ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); - case 100: + case 83: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '=') ADVANCE(101); + if (lookahead == '=') ADVANCE(84); END_STATE(); - case 101: + case 84: ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); - case 102: + case 85: ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); - case 103: + case 86: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 104: + case 87: ACCEPT_TOKEN(anon_sym_AMP_AMP); END_STATE(); - case 105: + case 88: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); END_STATE(); - case 106: + case 89: + ACCEPT_TOKEN(anon_sym_DQUOTE); + END_STATE(); + case 90: + ACCEPT_TOKEN(anon_sym_DOLLAR_LBRACE); + if (lookahead == '~') ADVANCE(91); + END_STATE(); + case 91: + ACCEPT_TOKEN(anon_sym_DOLLAR_LBRACE_TILDE); + END_STATE(); + case 92: + ACCEPT_TOKEN(anon_sym_TILDE_RBRACE); + END_STATE(); + case 93: ACCEPT_TOKEN(sym_comment); END_STATE(); - case 107: + case 94: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - lookahead != '\n') ADVANCE(107); + lookahead != '\n') ADVANCE(94); END_STATE(); default: return false; @@ -2763,215 +2676,251 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { } static const TSLexMode ts_lex_modes[STATE_COUNT] = { - [0] = {.lex_state = 0}, - [1] = {.lex_state = 41}, - [2] = {.lex_state = 4}, - [3] = {.lex_state = 4}, - [4] = {.lex_state = 4}, - [5] = {.lex_state = 41}, - [6] = {.lex_state = 4}, - [7] = {.lex_state = 3}, - [8] = {.lex_state = 3}, - [9] = {.lex_state = 3}, - [10] = {.lex_state = 41}, - [11] = {.lex_state = 41}, - [12] = {.lex_state = 3}, - [13] = {.lex_state = 3}, - [14] = {.lex_state = 3}, - [15] = {.lex_state = 3}, - [16] = {.lex_state = 41}, - [17] = {.lex_state = 3}, - [18] = {.lex_state = 3}, - [19] = {.lex_state = 41}, - [20] = {.lex_state = 3}, - [21] = {.lex_state = 3}, - [22] = {.lex_state = 41}, - [23] = {.lex_state = 3}, - [24] = {.lex_state = 3}, - [25] = {.lex_state = 41}, - [26] = {.lex_state = 3}, - [27] = {.lex_state = 41}, - [28] = {.lex_state = 3}, - [29] = {.lex_state = 3}, - [30] = {.lex_state = 3}, - [31] = {.lex_state = 3}, - [32] = {.lex_state = 3}, - [33] = {.lex_state = 3}, - [34] = {.lex_state = 3}, - [35] = {.lex_state = 3}, - [36] = {.lex_state = 3}, - [37] = {.lex_state = 3}, - [38] = {.lex_state = 3}, - [39] = {.lex_state = 3}, - [40] = {.lex_state = 41}, - [41] = {.lex_state = 3}, - [42] = {.lex_state = 41}, - [43] = {.lex_state = 41}, - [44] = {.lex_state = 41}, - [45] = {.lex_state = 41}, - [46] = {.lex_state = 41}, - [47] = {.lex_state = 41}, - [48] = {.lex_state = 41}, - [49] = {.lex_state = 41}, - [50] = {.lex_state = 41}, - [51] = {.lex_state = 41}, - [52] = {.lex_state = 41}, - [53] = {.lex_state = 41}, - [54] = {.lex_state = 41}, - [55] = {.lex_state = 41}, - [56] = {.lex_state = 41}, - [57] = {.lex_state = 41}, - [58] = {.lex_state = 41}, - [59] = {.lex_state = 41}, - [60] = {.lex_state = 41}, - [61] = {.lex_state = 41}, - [62] = {.lex_state = 41}, - [63] = {.lex_state = 41}, - [64] = {.lex_state = 41}, - [65] = {.lex_state = 41}, - [66] = {.lex_state = 2}, - [67] = {.lex_state = 2}, - [68] = {.lex_state = 2}, - [69] = {.lex_state = 2}, - [70] = {.lex_state = 2}, + [0] = {.lex_state = 0, .external_lex_state = 1}, + [1] = {.lex_state = 31}, + [2] = {.lex_state = 3}, + [3] = {.lex_state = 3}, + [4] = {.lex_state = 3}, + [5] = {.lex_state = 3}, + [6] = {.lex_state = 31}, + [7] = {.lex_state = 2}, + [8] = {.lex_state = 2}, + [9] = {.lex_state = 2}, + [10] = {.lex_state = 2}, + [11] = {.lex_state = 2}, + [12] = {.lex_state = 2}, + [13] = {.lex_state = 2}, + [14] = {.lex_state = 2}, + [15] = {.lex_state = 2}, + [16] = {.lex_state = 2}, + [17] = {.lex_state = 2}, + [18] = {.lex_state = 2}, + [19] = {.lex_state = 2}, + [20] = {.lex_state = 2}, + [21] = {.lex_state = 2}, + [22] = {.lex_state = 2}, + [23] = {.lex_state = 2}, + [24] = {.lex_state = 2}, + [25] = {.lex_state = 2}, + [26] = {.lex_state = 2}, + [27] = {.lex_state = 2}, + [28] = {.lex_state = 2}, + [29] = {.lex_state = 2}, + [30] = {.lex_state = 31}, + [31] = {.lex_state = 2}, + [32] = {.lex_state = 31}, + [33] = {.lex_state = 2}, + [34] = {.lex_state = 2}, + [35] = {.lex_state = 2}, + [36] = {.lex_state = 31}, + [37] = {.lex_state = 31}, + [38] = {.lex_state = 31}, + [39] = {.lex_state = 31}, + [40] = {.lex_state = 31}, + [41] = {.lex_state = 31}, + [42] = {.lex_state = 31}, + [43] = {.lex_state = 31}, + [44] = {.lex_state = 31}, + [45] = {.lex_state = 31}, + [46] = {.lex_state = 31}, + [47] = {.lex_state = 31}, + [48] = {.lex_state = 31}, + [49] = {.lex_state = 31}, + [50] = {.lex_state = 31}, + [51] = {.lex_state = 31}, + [52] = {.lex_state = 31}, + [53] = {.lex_state = 31}, + [54] = {.lex_state = 31}, + [55] = {.lex_state = 31}, + [56] = {.lex_state = 31}, + [57] = {.lex_state = 31}, + [58] = {.lex_state = 31}, + [59] = {.lex_state = 31}, + [60] = {.lex_state = 31}, + [61] = {.lex_state = 31}, + [62] = {.lex_state = 31}, + [63] = {.lex_state = 31}, + [64] = {.lex_state = 31}, + [65] = {.lex_state = 31}, + [66] = {.lex_state = 31}, + [67] = {.lex_state = 1}, + [68] = {.lex_state = 1}, + [69] = {.lex_state = 1}, + [70] = {.lex_state = 1}, [71] = {.lex_state = 2}, [72] = {.lex_state = 2}, - [73] = {.lex_state = 3}, - [74] = {.lex_state = 3}, - [75] = {.lex_state = 3}, - [76] = {.lex_state = 3}, - [77] = {.lex_state = 3}, - [78] = {.lex_state = 3}, - [79] = {.lex_state = 3}, - [80] = {.lex_state = 3}, - [81] = {.lex_state = 3}, + [73] = {.lex_state = 2}, + [74] = {.lex_state = 2}, + [75] = {.lex_state = 2}, + [76] = {.lex_state = 1}, + [77] = {.lex_state = 2}, + [78] = {.lex_state = 2}, + [79] = {.lex_state = 2}, + [80] = {.lex_state = 1}, + [81] = {.lex_state = 2}, [82] = {.lex_state = 2}, - [83] = {.lex_state = 3}, - [84] = {.lex_state = 3}, - [85] = {.lex_state = 3}, - [86] = {.lex_state = 3}, - [87] = {.lex_state = 3}, - [88] = {.lex_state = 2}, - [89] = {.lex_state = 2}, - [90] = {.lex_state = 2}, - [91] = {.lex_state = 2}, - [92] = {.lex_state = 2}, - [93] = {.lex_state = 2}, - [94] = {.lex_state = 2}, - [95] = {.lex_state = 2}, - [96] = {.lex_state = 2}, - [97] = {.lex_state = 2}, - [98] = {.lex_state = 2}, - [99] = {.lex_state = 2}, - [100] = {.lex_state = 2}, - [101] = {.lex_state = 2}, - [102] = {.lex_state = 2}, - [103] = {.lex_state = 2}, - [104] = {.lex_state = 2}, - [105] = {.lex_state = 2}, - [106] = {.lex_state = 2}, - [107] = {.lex_state = 2}, - [108] = {.lex_state = 2}, - [109] = {.lex_state = 2}, - [110] = {.lex_state = 2}, - [111] = {.lex_state = 2}, - [112] = {.lex_state = 2}, - [113] = {.lex_state = 2}, - [114] = {.lex_state = 41}, - [115] = {.lex_state = 41}, - [116] = {.lex_state = 41}, - [117] = {.lex_state = 41}, - [118] = {.lex_state = 41}, - [119] = {.lex_state = 41}, - [120] = {.lex_state = 41}, - [121] = {.lex_state = 0}, - [122] = {.lex_state = 0}, + [83] = {.lex_state = 2}, + [84] = {.lex_state = 2}, + [85] = {.lex_state = 2}, + [86] = {.lex_state = 2}, + [87] = {.lex_state = 1}, + [88] = {.lex_state = 1}, + [89] = {.lex_state = 1}, + [90] = {.lex_state = 1}, + [91] = {.lex_state = 1}, + [92] = {.lex_state = 1}, + [93] = {.lex_state = 1}, + [94] = {.lex_state = 1}, + [95] = {.lex_state = 1}, + [96] = {.lex_state = 1}, + [97] = {.lex_state = 1}, + [98] = {.lex_state = 1}, + [99] = {.lex_state = 1}, + [100] = {.lex_state = 1}, + [101] = {.lex_state = 1}, + [102] = {.lex_state = 1}, + [103] = {.lex_state = 1}, + [104] = {.lex_state = 1}, + [105] = {.lex_state = 1}, + [106] = {.lex_state = 1}, + [107] = {.lex_state = 1}, + [108] = {.lex_state = 1}, + [109] = {.lex_state = 1}, + [110] = {.lex_state = 1}, + [111] = {.lex_state = 1}, + [112] = {.lex_state = 1}, + [113] = {.lex_state = 1}, + [114] = {.lex_state = 1}, + [115] = {.lex_state = 1}, + [116] = {.lex_state = 31}, + [117] = {.lex_state = 31}, + [118] = {.lex_state = 31}, + [119] = {.lex_state = 31}, + [120] = {.lex_state = 31}, + [121] = {.lex_state = 31}, + [122] = {.lex_state = 31}, [123] = {.lex_state = 0}, [124] = {.lex_state = 0}, [125] = {.lex_state = 0}, [126] = {.lex_state = 0}, [127] = {.lex_state = 0}, - [128] = {.lex_state = 41}, - [129] = {.lex_state = 3}, - [130] = {.lex_state = 41}, - [131] = {.lex_state = 3}, - [132] = {.lex_state = 41}, - [133] = {.lex_state = 5}, - [134] = {.lex_state = 41}, - [135] = {.lex_state = 41}, - [136] = {.lex_state = 41}, - [137] = {.lex_state = 41}, - [138] = {.lex_state = 0}, - [139] = {.lex_state = 0}, - [140] = {.lex_state = 0}, - [141] = {.lex_state = 0}, - [142] = {.lex_state = 0}, - [143] = {.lex_state = 0}, - [144] = {.lex_state = 0}, - [145] = {.lex_state = 41}, - [146] = {.lex_state = 0}, - [147] = {.lex_state = 41}, - [148] = {.lex_state = 0}, - [149] = {.lex_state = 41}, - [150] = {.lex_state = 1}, - [151] = {.lex_state = 1}, - [152] = {.lex_state = 1}, - [153] = {.lex_state = 0}, - [154] = {.lex_state = 1}, + [128] = {.lex_state = 0}, + [129] = {.lex_state = 0}, + [130] = {.lex_state = 31}, + [131] = {.lex_state = 31}, + [132] = {.lex_state = 2}, + [133] = {.lex_state = 2}, + [134] = {.lex_state = 31}, + [135] = {.lex_state = 0, .external_lex_state = 2}, + [136] = {.lex_state = 4}, + [137] = {.lex_state = 0, .external_lex_state = 2}, + [138] = {.lex_state = 0, .external_lex_state = 2}, + [139] = {.lex_state = 0, .external_lex_state = 2}, + [140] = {.lex_state = 0, .external_lex_state = 2}, + [141] = {.lex_state = 31}, + [142] = {.lex_state = 31}, + [143] = {.lex_state = 31}, + [144] = {.lex_state = 31}, + [145] = {.lex_state = 31}, + [146] = {.lex_state = 31}, + [147] = {.lex_state = 0}, + [148] = {.lex_state = 0, .external_lex_state = 3}, + [149] = {.lex_state = 0}, + [150] = {.lex_state = 0}, + [151] = {.lex_state = 0, .external_lex_state = 3}, + [152] = {.lex_state = 0, .external_lex_state = 2}, + [153] = {.lex_state = 0, .external_lex_state = 3}, + [154] = {.lex_state = 0}, [155] = {.lex_state = 0}, - [156] = {.lex_state = 1}, - [157] = {.lex_state = 0}, + [156] = {.lex_state = 0}, + [157] = {.lex_state = 0, .external_lex_state = 2}, [158] = {.lex_state = 0}, [159] = {.lex_state = 0}, [160] = {.lex_state = 0}, [161] = {.lex_state = 0}, - [162] = {.lex_state = 0}, + [162] = {.lex_state = 31}, [163] = {.lex_state = 0}, [164] = {.lex_state = 0}, - [165] = {.lex_state = 41}, + [165] = {.lex_state = 0}, [166] = {.lex_state = 0}, [167] = {.lex_state = 0}, - [168] = {.lex_state = 41}, + [168] = {.lex_state = 31}, [169] = {.lex_state = 0}, - [170] = {.lex_state = 4}, - [171] = {.lex_state = 0}, - [172] = {.lex_state = 41}, - [173] = {.lex_state = 0}, + [170] = {.lex_state = 0}, + [171] = {.lex_state = 31}, + [172] = {.lex_state = 0}, + [173] = {.lex_state = 3}, [174] = {.lex_state = 0}, - [175] = {.lex_state = 41}, + [175] = {.lex_state = 0}, [176] = {.lex_state = 0}, [177] = {.lex_state = 0}, [178] = {.lex_state = 0}, - [179] = {.lex_state = 3}, + [179] = {.lex_state = 31}, [180] = {.lex_state = 0}, - [181] = {.lex_state = 0}, - [182] = {.lex_state = 0}, + [181] = {.lex_state = 31}, + [182] = {.lex_state = 31}, [183] = {.lex_state = 0}, - [184] = {.lex_state = 3}, - [185] = {.lex_state = 41}, + [184] = {.lex_state = 2}, + [185] = {.lex_state = 0}, [186] = {.lex_state = 0}, [187] = {.lex_state = 0}, [188] = {.lex_state = 0}, [189] = {.lex_state = 0}, - [190] = {.lex_state = 41}, - [191] = {.lex_state = 0}, + [190] = {.lex_state = 0}, + [191] = {.lex_state = 2}, [192] = {.lex_state = 0}, [193] = {.lex_state = 0}, [194] = {.lex_state = 0}, - [195] = {.lex_state = 0}, - [196] = {.lex_state = 0}, + [195] = {.lex_state = 31}, + [196] = {.lex_state = 31}, [197] = {.lex_state = 0}, - [198] = {.lex_state = 0}, + [198] = {.lex_state = 31}, [199] = {.lex_state = 0}, - [200] = {.lex_state = 0}, + [200] = {.lex_state = 31}, [201] = {.lex_state = 0}, - [202] = {.lex_state = 41}, + [202] = {.lex_state = 0}, [203] = {.lex_state = 0}, [204] = {.lex_state = 0}, - [205] = {.lex_state = 41}, - [206] = {.lex_state = 0}, - [207] = {.lex_state = 41}, + [205] = {.lex_state = 0}, + [206] = {.lex_state = 31}, + [207] = {.lex_state = 0}, [208] = {.lex_state = 0}, + [209] = {.lex_state = 0}, + [210] = {.lex_state = 0}, + [211] = {.lex_state = 0}, + [212] = {.lex_state = 0}, + [213] = {.lex_state = 0}, + [214] = {.lex_state = 0}, + [215] = {.lex_state = 0}, + [216] = {.lex_state = 0}, +}; + +enum { + ts_external_token__template_char = 0, + ts_external_token__template_char_in_interpolation = 1, + ts_external_token_escape_sequence = 2, +}; + +static const TSSymbol ts_external_scanner_symbol_map[EXTERNAL_TOKEN_COUNT] = { + [ts_external_token__template_char] = sym__template_char, + [ts_external_token__template_char_in_interpolation] = sym__template_char_in_interpolation, + [ts_external_token_escape_sequence] = sym_escape_sequence, +}; + +static const bool ts_external_scanner_states[4][EXTERNAL_TOKEN_COUNT] = { + [1] = { + [ts_external_token__template_char] = true, + [ts_external_token__template_char_in_interpolation] = true, + [ts_external_token_escape_sequence] = true, + }, + [2] = { + [ts_external_token__template_char] = true, + [ts_external_token_escape_sequence] = true, + }, + [3] = { + [ts_external_token__template_char_in_interpolation] = true, + [ts_external_token_escape_sequence] = true, + }, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -2983,8 +2932,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LPAREN] = ACTIONS(1), [anon_sym_RPAREN] = ACTIONS(1), [sym_numeric_lit] = ACTIONS(1), - [anon_sym_DQUOTE] = ACTIONS(1), - [sym_escape_sequence] = ACTIONS(1), [anon_sym_true] = ACTIONS(1), [anon_sym_false] = ACTIONS(1), [sym_null_lit] = ACTIONS(1), @@ -3013,21 +2960,28 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_BANG_EQ] = ACTIONS(1), [anon_sym_AMP_AMP] = ACTIONS(1), [anon_sym_PIPE_PIPE] = ACTIONS(1), + [anon_sym_DQUOTE] = ACTIONS(1), + [anon_sym_DOLLAR_LBRACE] = ACTIONS(1), + [anon_sym_DOLLAR_LBRACE_TILDE] = ACTIONS(1), + [anon_sym_TILDE_RBRACE] = ACTIONS(1), [sym_comment] = ACTIONS(3), + [sym__template_char] = ACTIONS(1), + [sym__template_char_in_interpolation] = ACTIONS(1), + [sym_escape_sequence] = ACTIONS(1), }, [1] = { - [sym_config_file] = STATE(208), - [sym_body] = STATE(206), - [sym_attribute] = STATE(134), - [sym_block] = STATE(134), - [aux_sym_body_repeat1] = STATE(134), + [sym_config_file] = STATE(216), + [sym_body] = STATE(214), + [sym_attribute] = STATE(145), + [sym_block] = STATE(145), + [aux_sym_body_repeat1] = STATE(145), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 22, + [0] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -3040,50 +2994,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_for, - STATE(5), 1, + ACTIONS(27), 1, + anon_sym_DQUOTE, + STATE(6), 1, sym_expr_term, - STATE(31), 1, + STATE(23), 1, sym_for_intro, - STATE(164), 1, - sym_object_elem, - STATE(170), 1, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(173), 1, sym_expression, - ACTIONS(19), 2, + STATE(177), 1, + sym_object_elem, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(25), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [78] = 22, + sym_template_expr, + [81] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -3094,52 +3050,54 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_for, + ACTIONS(27), 1, + anon_sym_DQUOTE, ACTIONS(29), 1, anon_sym_RBRACE, - STATE(5), 1, + STATE(6), 1, sym_expr_term, - STATE(36), 1, + STATE(19), 1, sym_for_intro, - STATE(170), 1, - sym_expression, - STATE(173), 1, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(167), 1, sym_object_elem, - ACTIONS(19), 2, + STATE(173), 1, + sym_expression, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(25), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [156] = 21, + sym_template_expr, + [162] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -3148,89 +3106,147 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_for, + ACTIONS(27), 1, + anon_sym_DQUOTE, ACTIONS(31), 1, sym_identifier, ACTIONS(33), 1, anon_sym_RBRACK, - STATE(5), 1, + STATE(6), 1, sym_expr_term, - STATE(41), 1, + STATE(16), 1, sym_for_intro, - STATE(153), 1, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(164), 1, sym_expression, - ACTIONS(19), 2, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(25), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [231] = 15, + sym_template_expr, + [240] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(37), 1, - anon_sym_EQ, - ACTIONS(39), 1, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, anon_sym_LBRACK, + ACTIONS(23), 1, + anon_sym_for, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + ACTIONS(35), 1, + anon_sym_RBRACK, + STATE(6), 1, + sym_expr_term, + STATE(20), 1, + sym_for_intro, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(161), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [318] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(39), 1, + anon_sym_EQ, ACTIONS(41), 1, + anon_sym_LBRACK, + ACTIONS(43), 1, anon_sym_DOT, - ACTIONS(47), 1, + ACTIONS(49), 1, anon_sym_SLASH, - ACTIONS(55), 1, - anon_sym_AMP_AMP, ACTIONS(57), 1, + anon_sym_AMP_AMP, + ACTIONS(59), 1, anon_sym_PIPE_PIPE, - ACTIONS(43), 2, + ACTIONS(45), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(45), 2, + ACTIONS(47), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(49), 2, + ACTIONS(51), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(51), 2, + ACTIONS(53), 2, anon_sym_GT_EQ, anon_sym_LT_EQ, - ACTIONS(53), 2, + ACTIONS(55), 2, anon_sym_EQ_EQ, anon_sym_BANG_EQ, - STATE(64), 2, + STATE(44), 2, sym_attr_splat, sym_full_splat, - STATE(63), 3, + STATE(55), 3, sym_index, sym_get_attr, sym_splat, - ACTIONS(35), 10, + ACTIONS(37), 10, ts_builtin_sym_end, anon_sym_RBRACE, sym_identifier, @@ -3241,7 +3257,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_GT, sym_ellipsis, anon_sym_QMARK, - [294] = 21, + [381] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -3250,104 +3266,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(25), 1, - anon_sym_for, - ACTIONS(31), 1, - sym_identifier, - ACTIONS(59), 1, - anon_sym_RBRACK, - STATE(5), 1, - sym_expr_term, - STATE(32), 1, - sym_for_intro, - STATE(155), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [369] = 20, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, ACTIONS(31), 1, sym_identifier, ACTIONS(61), 1, anon_sym_RPAREN, - STATE(5), 1, + STATE(6), 1, sym_expr_term, - STATE(142), 1, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(155), 1, sym_expression, - STATE(191), 1, + STATE(207), 1, sym_function_arguments, - ACTIONS(19), 2, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(25), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [441] = 20, + sym_template_expr, + [456] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -3356,50 +3320,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, ACTIONS(31), 1, sym_identifier, ACTIONS(63), 1, anon_sym_RPAREN, - STATE(5), 1, + STATE(6), 1, sym_expr_term, - STATE(142), 1, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(155), 1, sym_expression, - STATE(192), 1, + STATE(199), 1, sym_function_arguments, - ACTIONS(19), 2, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(25), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [513] = 19, + sym_template_expr, + [531] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -3408,122 +3374,206 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, ACTIONS(31), 1, sym_identifier, ACTIONS(65), 1, anon_sym_RPAREN, - STATE(5), 1, + STATE(6), 1, sym_expr_term, - STATE(139), 1, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(159), 1, sym_expression, - ACTIONS(19), 2, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(25), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [582] = 6, + sym_template_expr, + [603] = 20, ACTIONS(3), 1, sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + ACTIONS(67), 1, + anon_sym_STAR, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(183), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [675] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + ACTIONS(69), 1, + anon_sym_RPAREN, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(159), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [747] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, ACTIONS(71), 1, - anon_sym_LBRACK, - ACTIONS(74), 1, - anon_sym_DOT, - STATE(16), 3, - sym_index, - sym_get_attr, - aux_sym_full_splat_repeat1, - ACTIONS(69), 4, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(67), 20, - ts_builtin_sym_end, - anon_sym_RBRACE, - sym_identifier, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_COLON, anon_sym_STAR, - anon_sym_EQ_GT, - sym_ellipsis, - anon_sym_QMARK, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(190), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [625] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(81), 1, - anon_sym_LBRACK, - ACTIONS(84), 1, - anon_sym_DOT, - STATE(10), 3, - sym_index, - sym_get_attr, - aux_sym_full_splat_repeat1, - ACTIONS(79), 4, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(77), 20, - ts_builtin_sym_end, - anon_sym_RBRACE, - sym_identifier, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_COLON, - anon_sym_STAR, - anon_sym_EQ_GT, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [668] = 19, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [819] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -3534,46 +3584,98 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, - STATE(5), 1, + ACTIONS(27), 1, + anon_sym_DQUOTE, + STATE(6), 1, sym_expr_term, - STATE(170), 1, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(173), 1, sym_expression, - STATE(178), 1, + STATE(192), 1, sym_object_elem, - ACTIONS(19), 2, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(25), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [737] = 19, + sym_template_expr, + [891] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(73), 1, + anon_sym_LBRACE, + ACTIONS(75), 1, + sym_identifier, + ACTIONS(77), 1, + anon_sym_LPAREN, + ACTIONS(79), 1, + sym_numeric_lit, + ACTIONS(83), 1, + sym_null_lit, + ACTIONS(85), 1, + anon_sym_LBRACK, + ACTIONS(89), 1, + anon_sym_DQUOTE, + STATE(67), 1, + sym_expr_term, + STATE(102), 1, + sym_bool_lit, + STATE(110), 1, + sym_quoted_template, + STATE(158), 1, + sym_expression, + ACTIONS(81), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(87), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(98), 2, + sym_tuple, + sym_object, + STATE(105), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(149), 2, + sym_unary_operation, + sym_binary_operation, + STATE(150), 2, + sym_conditional, + sym_operation, + STATE(90), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [960] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -3582,48 +3684,348 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, ACTIONS(31), 1, sym_identifier, - ACTIONS(87), 1, - anon_sym_STAR, - STATE(5), 1, + STATE(6), 1, sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(193), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [1029] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(73), 1, + anon_sym_LBRACE, + ACTIONS(75), 1, + sym_identifier, + ACTIONS(77), 1, + anon_sym_LPAREN, + ACTIONS(79), 1, + sym_numeric_lit, + ACTIONS(83), 1, + sym_null_lit, + ACTIONS(85), 1, + anon_sym_LBRACK, + ACTIONS(89), 1, + anon_sym_DQUOTE, + STATE(67), 1, + sym_expr_term, + STATE(102), 1, + sym_bool_lit, + STATE(110), 1, + sym_quoted_template, + STATE(163), 1, + sym_expression, + ACTIONS(81), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(87), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(98), 2, + sym_tuple, + sym_object, + STATE(105), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(149), 2, + sym_unary_operation, + sym_binary_operation, + STATE(150), 2, + sym_conditional, + sym_operation, + STATE(90), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [1098] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(189), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [1167] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(187), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [1236] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(184), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [1305] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(73), 1, + anon_sym_LBRACE, + ACTIONS(75), 1, + sym_identifier, + ACTIONS(77), 1, + anon_sym_LPAREN, + ACTIONS(79), 1, + sym_numeric_lit, + ACTIONS(83), 1, + sym_null_lit, + ACTIONS(85), 1, + anon_sym_LBRACK, + ACTIONS(89), 1, + anon_sym_DQUOTE, + STATE(67), 1, + sym_expr_term, + STATE(102), 1, + sym_bool_lit, + STATE(110), 1, + sym_quoted_template, + STATE(160), 1, + sym_expression, + ACTIONS(81), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(87), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(98), 2, + sym_tuple, + sym_object, + STATE(105), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(149), 2, + sym_unary_operation, + sym_binary_operation, + STATE(150), 2, + sym_conditional, + sym_operation, + STATE(90), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [1374] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, STATE(180), 1, sym_expression, - ACTIONS(19), 2, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(25), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [806] = 19, + sym_template_expr, + [1443] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -3632,48 +4034,298 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, ACTIONS(31), 1, sym_identifier, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(131), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [1512] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(191), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [1581] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(162), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [1650] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(183), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [1719] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(73), 1, + anon_sym_LBRACE, + ACTIONS(75), 1, + sym_identifier, + ACTIONS(77), 1, + anon_sym_LPAREN, + ACTIONS(79), 1, + sym_numeric_lit, + ACTIONS(83), 1, + sym_null_lit, + ACTIONS(85), 1, + anon_sym_LBRACK, ACTIONS(89), 1, - anon_sym_RPAREN, - STATE(5), 1, + anon_sym_DQUOTE, + STATE(67), 1, sym_expr_term, - STATE(139), 1, + STATE(102), 1, + sym_bool_lit, + STATE(110), 1, + sym_quoted_template, + STATE(154), 1, sym_expression, - ACTIONS(19), 2, + ACTIONS(81), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(87), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, + STATE(98), 2, sym_tuple, sym_object, - STATE(57), 2, + STATE(105), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, + STATE(149), 2, sym_unary_operation, sym_binary_operation, - STATE(132), 2, + STATE(150), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(90), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [875] = 19, + sym_template_expr, + [1788] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(73), 1, + anon_sym_LBRACE, + ACTIONS(75), 1, + sym_identifier, + ACTIONS(77), 1, + anon_sym_LPAREN, + ACTIONS(79), 1, + sym_numeric_lit, + ACTIONS(83), 1, + sym_null_lit, + ACTIONS(85), 1, + anon_sym_LBRACK, + ACTIONS(89), 1, + anon_sym_DQUOTE, + STATE(67), 1, + sym_expr_term, + STATE(102), 1, + sym_bool_lit, + STATE(110), 1, + sym_quoted_template, + STATE(156), 1, + sym_expression, + ACTIONS(81), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(87), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(98), 2, + sym_tuple, + sym_object, + STATE(105), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(149), 2, + sym_unary_operation, + sym_binary_operation, + STATE(150), 2, + sym_conditional, + sym_operation, + STATE(90), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [1857] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -3682,64 +4334,114 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, ACTIONS(31), 1, sym_identifier, - ACTIONS(91), 1, - anon_sym_STAR, - STATE(5), 1, + STATE(6), 1, sym_expr_term, - STATE(174), 1, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(159), 1, sym_expression, - ACTIONS(19), 2, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(25), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [944] = 6, + sym_template_expr, + [1926] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(97), 1, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, anon_sym_LBRACK, - ACTIONS(100), 1, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(190), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [1995] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(95), 1, + anon_sym_LBRACK, + ACTIONS(98), 1, anon_sym_DOT, - STATE(16), 3, + STATE(36), 3, sym_index, sym_get_attr, aux_sym_full_splat_repeat1, - ACTIONS(95), 4, + ACTIONS(93), 4, anon_sym_EQ, anon_sym_SLASH, anon_sym_GT, anon_sym_LT, - ACTIONS(93), 20, + ACTIONS(91), 20, ts_builtin_sym_end, anon_sym_RBRACE, sym_identifier, @@ -3760,121 +4462,77 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [987] = 18, + [2038] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(103), 1, + ACTIONS(7), 1, anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(6), 1, + sym_expr_term, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(194), 1, + sym_expression, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(25), 2, + anon_sym_DASH, + anon_sym_BANG, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, + sym_conditional, + sym_operation, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [2107] = 6, + ACTIONS(3), 1, + sym_comment, ACTIONS(105), 1, - sym_identifier, - ACTIONS(107), 1, - anon_sym_LPAREN, - ACTIONS(109), 1, - sym_numeric_lit, - ACTIONS(111), 1, - anon_sym_DQUOTE, - ACTIONS(115), 1, - sym_null_lit, - ACTIONS(117), 1, anon_sym_LBRACK, - STATE(66), 1, - sym_expr_term, - STATE(143), 1, - sym_expression, - ACTIONS(113), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(119), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(96), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(98), 2, - sym_tuple, - sym_object, - STATE(105), 2, - sym_string_lit, - sym_bool_lit, - STATE(140), 2, - sym_conditional, - sym_operation, - STATE(141), 2, - sym_unary_operation, - sym_binary_operation, - STATE(100), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [1053] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(5), 1, - sym_expr_term, - STATE(187), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [1119] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(125), 1, + ACTIONS(108), 1, anon_sym_DOT, - STATE(25), 2, + STATE(32), 3, + sym_index, sym_get_attr, - aux_sym_attr_splat_repeat1, - ACTIONS(123), 4, + aux_sym_full_splat_repeat1, + ACTIONS(103), 4, anon_sym_EQ, anon_sym_SLASH, anon_sym_GT, anon_sym_LT, - ACTIONS(121), 21, + ACTIONS(101), 20, ts_builtin_sym_end, anon_sym_RBRACE, sym_identifier, anon_sym_RPAREN, - anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_COLON, @@ -3891,7 +4549,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [1159] = 18, + [2150] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -3900,629 +4558,48 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, ACTIONS(31), 1, sym_identifier, - STATE(5), 1, + STATE(6), 1, sym_expr_term, - STATE(177), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, + STATE(56), 1, sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [1225] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(5), 1, - sym_expr_term, - STATE(181), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [1291] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(132), 1, - anon_sym_DOT, - STATE(22), 2, - sym_get_attr, - aux_sym_attr_splat_repeat1, - ACTIONS(130), 4, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(128), 21, - ts_builtin_sym_end, - anon_sym_RBRACE, - sym_identifier, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_COLON, - anon_sym_STAR, - anon_sym_EQ_GT, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [1331] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(5), 1, - sym_expr_term, - STATE(180), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [1397] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(5), 1, - sym_expr_term, - STATE(182), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [1463] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(139), 1, - anon_sym_DOT, - STATE(22), 2, - sym_get_attr, - aux_sym_attr_splat_repeat1, - ACTIONS(137), 4, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(135), 21, - ts_builtin_sym_end, - anon_sym_RBRACE, - sym_identifier, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_COLON, - anon_sym_STAR, - anon_sym_EQ_GT, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [1503] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(5), 1, - sym_expr_term, - STATE(186), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [1569] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(144), 5, - anon_sym_EQ, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(142), 23, - ts_builtin_sym_end, - anon_sym_LBRACE, - anon_sym_RBRACE, - sym_identifier, - anon_sym_RPAREN, - anon_sym_DQUOTE, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_COLON, - anon_sym_STAR, - anon_sym_EQ_GT, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [1605] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(5), 1, - sym_expr_term, - STATE(139), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [1671] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(5), 1, - sym_expr_term, - STATE(167), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [1737] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(5), 1, - sym_expr_term, - STATE(174), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [1803] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(5), 1, - sym_expr_term, - STATE(179), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [1869] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(103), 1, - anon_sym_LBRACE, - ACTIONS(105), 1, - sym_identifier, - ACTIONS(107), 1, - anon_sym_LPAREN, - ACTIONS(109), 1, - sym_numeric_lit, - ACTIONS(111), 1, - anon_sym_DQUOTE, - ACTIONS(115), 1, - sym_null_lit, - ACTIONS(117), 1, - anon_sym_LBRACK, - STATE(66), 1, - sym_expr_term, - STATE(157), 1, - sym_expression, - ACTIONS(113), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(119), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(96), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(98), 2, - sym_tuple, - sym_object, - STATE(105), 2, - sym_string_lit, - sym_bool_lit, - STATE(140), 2, - sym_conditional, - sym_operation, - STATE(141), 2, - sym_unary_operation, - sym_binary_operation, - STATE(100), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [1935] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(5), 1, - sym_expr_term, + STATE(58), 1, + sym_quoted_template, STATE(176), 1, sym_expression, - ACTIONS(19), 2, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(25), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [2001] = 18, + sym_template_expr, + [2219] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -4531,46 +4608,48 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, ACTIONS(31), 1, sym_identifier, - STATE(5), 1, + STATE(6), 1, sym_expr_term, - STATE(130), 1, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(185), 1, sym_expression, - ACTIONS(19), 2, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(25), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [2067] = 18, + sym_template_expr, + [2288] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -4579,253 +4658,99 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, ACTIONS(31), 1, sym_identifier, - STATE(5), 1, + STATE(6), 1, sym_expr_term, - STATE(149), 1, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(186), 1, sym_expression, - ACTIONS(19), 2, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - ACTIONS(27), 2, + ACTIONS(25), 2, anon_sym_DASH, anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(130), 2, sym_conditional, sym_operation, - STATE(56), 5, + STATE(134), 2, + sym_unary_operation, + sym_binary_operation, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [2133] = 18, + sym_template_expr, + [2357] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(5), 1, - sym_expr_term, - STATE(184), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [2199] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(103), 1, - anon_sym_LBRACE, - ACTIONS(105), 1, - sym_identifier, - ACTIONS(107), 1, - anon_sym_LPAREN, - ACTIONS(109), 1, - sym_numeric_lit, - ACTIONS(111), 1, - anon_sym_DQUOTE, ACTIONS(115), 1, - sym_null_lit, - ACTIONS(117), 1, anon_sym_LBRACK, - STATE(66), 1, - sym_expr_term, - STATE(146), 1, - sym_expression, - ACTIONS(113), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(119), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(96), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(98), 2, - sym_tuple, - sym_object, - STATE(105), 2, - sym_string_lit, - sym_bool_lit, - STATE(140), 2, - sym_conditional, - sym_operation, - STATE(141), 2, - sym_unary_operation, - sym_binary_operation, - STATE(100), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [2265] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(118), 1, + anon_sym_DOT, + STATE(32), 3, + sym_index, + sym_get_attr, + aux_sym_full_splat_repeat1, + ACTIONS(113), 4, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(111), 20, + ts_builtin_sym_end, + anon_sym_RBRACE, sym_identifier, - STATE(5), 1, - sym_expr_term, - STATE(163), 1, - sym_expression, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(27), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_COLON, + anon_sym_STAR, + anon_sym_EQ_GT, + sym_ellipsis, + anon_sym_QMARK, anon_sym_DASH, - anon_sym_BANG, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(128), 2, - sym_unary_operation, - sym_binary_operation, - STATE(132), 2, - sym_conditional, - sym_operation, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [2331] = 18, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [2400] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(103), 1, - anon_sym_LBRACE, - ACTIONS(105), 1, - sym_identifier, - ACTIONS(107), 1, - anon_sym_LPAREN, - ACTIONS(109), 1, - sym_numeric_lit, - ACTIONS(111), 1, - anon_sym_DQUOTE, - ACTIONS(115), 1, - sym_null_lit, - ACTIONS(117), 1, - anon_sym_LBRACK, - STATE(66), 1, - sym_expr_term, - STATE(144), 1, - sym_expression, - ACTIONS(113), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(119), 2, - anon_sym_DASH, - anon_sym_BANG, - STATE(96), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(98), 2, - sym_tuple, - sym_object, - STATE(105), 2, - sym_string_lit, - sym_bool_lit, - STATE(140), 2, - sym_conditional, - sym_operation, - STATE(141), 2, - sym_unary_operation, - sym_binary_operation, - STATE(100), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [2397] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(148), 5, + ACTIONS(123), 5, anon_sym_EQ, anon_sym_DOT, anon_sym_SLASH, anon_sym_GT, anon_sym_LT, - ACTIONS(146), 23, + ACTIONS(121), 23, ts_builtin_sym_end, anon_sym_LBRACE, anon_sym_RBRACE, sym_identifier, anon_sym_RPAREN, - anon_sym_DQUOTE, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, @@ -4843,55 +4768,146 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2433] = 18, + anon_sym_DQUOTE, + [2436] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(103), 1, - anon_sym_LBRACE, - ACTIONS(105), 1, + ACTIONS(129), 1, + anon_sym_DOT, + STATE(38), 2, + sym_get_attr, + aux_sym_attr_splat_repeat1, + ACTIONS(127), 4, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(125), 21, + ts_builtin_sym_end, + anon_sym_RBRACE, sym_identifier, - ACTIONS(107), 1, - anon_sym_LPAREN, - ACTIONS(109), 1, - sym_numeric_lit, - ACTIONS(111), 1, - anon_sym_DQUOTE, - ACTIONS(115), 1, - sym_null_lit, - ACTIONS(117), 1, + anon_sym_RPAREN, anon_sym_LBRACK, - STATE(66), 1, - sym_expr_term, - STATE(158), 1, - sym_expression, - ACTIONS(113), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(119), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_COLON, + anon_sym_STAR, + anon_sym_EQ_GT, + sym_ellipsis, + anon_sym_QMARK, anon_sym_DASH, - anon_sym_BANG, - STATE(96), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(98), 2, - sym_tuple, - sym_object, - STATE(105), 2, - sym_string_lit, - sym_bool_lit, - STATE(140), 2, - sym_conditional, - sym_operation, - STATE(141), 2, - sym_unary_operation, - sym_binary_operation, - STATE(100), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [2499] = 4, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [2476] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(134), 5, + anon_sym_EQ, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(132), 23, + ts_builtin_sym_end, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_identifier, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_COLON, + anon_sym_STAR, + anon_sym_EQ_GT, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DQUOTE, + [2512] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(140), 1, + anon_sym_DOT, + STATE(38), 2, + sym_get_attr, + aux_sym_attr_splat_repeat1, + ACTIONS(138), 4, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(136), 21, + ts_builtin_sym_end, + anon_sym_RBRACE, + sym_identifier, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_COLON, + anon_sym_STAR, + anon_sym_EQ_GT, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [2552] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(147), 1, + anon_sym_DOT, + STATE(40), 2, + sym_get_attr, + aux_sym_attr_splat_repeat1, + ACTIONS(145), 4, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(143), 21, + ts_builtin_sym_end, + anon_sym_RBRACE, + sym_identifier, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_COLON, + anon_sym_STAR, + anon_sym_EQ_GT, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [2592] = 4, ACTIONS(3), 1, sym_comment, ACTIONS(154), 1, @@ -4924,7 +4940,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2536] = 3, + [2629] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(158), 5, @@ -4955,7 +4971,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2570] = 3, + [2663] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(162), 5, @@ -4986,7 +5002,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2604] = 3, + [2697] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(166), 5, @@ -5017,7 +5033,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2638] = 3, + [2731] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(170), 5, @@ -5048,7 +5064,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2672] = 3, + [2765] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(174), 5, @@ -5079,7 +5095,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2706] = 3, + [2799] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(178), 5, @@ -5110,7 +5126,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2740] = 3, + [2833] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(182), 5, @@ -5141,7 +5157,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2774] = 3, + [2867] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(186), 5, @@ -5172,7 +5188,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2808] = 3, + [2901] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(190), 5, @@ -5203,7 +5219,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2842] = 3, + [2935] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(194), 5, @@ -5234,7 +5250,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2876] = 3, + [2969] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(198), 5, @@ -5265,7 +5281,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2910] = 3, + [3003] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(202), 5, @@ -5296,7 +5312,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2944] = 3, + [3037] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(206), 5, @@ -5327,7 +5343,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [2978] = 3, + [3071] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(210), 5, @@ -5358,7 +5374,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [3012] = 3, + [3105] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(214), 5, @@ -5389,7 +5405,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [3046] = 3, + [3139] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(218), 5, @@ -5420,7 +5436,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [3080] = 3, + [3173] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(222), 5, @@ -5451,7 +5467,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [3114] = 3, + [3207] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(226), 5, @@ -5482,7 +5498,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [3148] = 3, + [3241] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(230), 5, @@ -5513,7 +5529,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [3182] = 3, + [3275] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(234), 5, @@ -5544,7 +5560,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [3216] = 3, + [3309] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(238), 5, @@ -5575,7 +5591,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [3250] = 3, + [3343] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(242), 5, @@ -5606,7 +5622,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [3284] = 3, + [3377] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(246), 5, @@ -5637,55 +5653,148 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [3318] = 14, + [3411] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(248), 1, - anon_sym_LBRACK, - ACTIONS(250), 1, + ACTIONS(250), 5, + anon_sym_EQ, anon_sym_DOT, - ACTIONS(256), 1, anon_sym_SLASH, - ACTIONS(264), 1, - anon_sym_AMP_AMP, - ACTIONS(266), 1, - anon_sym_PIPE_PIPE, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(258), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(260), 2, + ACTIONS(248), 21, + ts_builtin_sym_end, + anon_sym_RBRACE, + sym_identifier, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_COLON, + anon_sym_STAR, + anon_sym_EQ_GT, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, anon_sym_GT_EQ, anon_sym_LT_EQ, - ACTIONS(262), 2, anon_sym_EQ_EQ, anon_sym_BANG_EQ, - STATE(90), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [3445] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(252), 1, + anon_sym_LBRACK, + ACTIONS(254), 1, + anon_sym_DOT, + ACTIONS(260), 1, + anon_sym_SLASH, + ACTIONS(268), 1, + anon_sym_AMP_AMP, + ACTIONS(270), 1, + anon_sym_PIPE_PIPE, + ACTIONS(256), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(258), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(262), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(264), 2, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + ACTIONS(266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + STATE(108), 2, sym_attr_splat, sym_full_splat, - STATE(91), 3, + STATE(106), 3, sym_index, sym_get_attr, sym_splat, - ACTIONS(35), 5, + ACTIONS(37), 5, anon_sym_RBRACE, anon_sym_RBRACK, anon_sym_if, sym_ellipsis, anon_sym_QMARK, - [3373] = 6, + [3500] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(268), 1, + ACTIONS(272), 1, anon_sym_LBRACK, - ACTIONS(271), 1, + ACTIONS(275), 1, anon_sym_DOT, - ACTIONS(79), 3, + ACTIONS(103), 3, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + STATE(68), 3, + sym_index, + sym_get_attr, + aux_sym_full_splat_repeat1, + ACTIONS(101), 15, + anon_sym_RBRACE, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [3537] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LBRACK, + ACTIONS(281), 1, + anon_sym_DOT, + ACTIONS(113), 3, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + STATE(68), 3, + sym_index, + sym_get_attr, + aux_sym_full_splat_repeat1, + ACTIONS(111), 15, + anon_sym_RBRACE, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [3574] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(284), 1, + anon_sym_LBRACK, + ACTIONS(287), 1, + anon_sym_DOT, + ACTIONS(93), 3, anon_sym_SLASH, anon_sym_GT, anon_sym_LT, @@ -5693,7 +5802,7 @@ static const uint16_t ts_small_parse_table[] = { sym_index, sym_get_attr, aux_sym_full_splat_repeat1, - ACTIONS(77), 15, + ACTIONS(91), 15, anon_sym_RBRACE, anon_sym_RBRACK, anon_sym_STAR, @@ -5709,193 +5818,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [3410] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(274), 1, - anon_sym_LBRACK, - ACTIONS(277), 1, - anon_sym_DOT, - ACTIONS(95), 3, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - STATE(68), 3, - sym_index, - sym_get_attr, - aux_sym_full_splat_repeat1, - ACTIONS(93), 15, - anon_sym_RBRACE, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [3447] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(280), 1, - anon_sym_LBRACK, - ACTIONS(283), 1, - anon_sym_DOT, - ACTIONS(69), 3, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - STATE(68), 3, - sym_index, - sym_get_attr, - aux_sym_full_splat_repeat1, - ACTIONS(67), 15, - anon_sym_RBRACE, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [3484] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(286), 1, - anon_sym_DOT, - STATE(71), 2, - sym_get_attr, - aux_sym_attr_splat_repeat1, - ACTIONS(137), 3, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(135), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [3518] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(289), 1, - anon_sym_DOT, - STATE(71), 2, - sym_get_attr, - aux_sym_attr_splat_repeat1, - ACTIONS(130), 3, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(128), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [3552] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(292), 1, - anon_sym_DOT, - STATE(70), 2, - sym_get_attr, - aux_sym_attr_splat_repeat1, - ACTIONS(123), 3, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(121), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [3586] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(103), 1, - anon_sym_LBRACE, - ACTIONS(105), 1, - sym_identifier, - ACTIONS(107), 1, - anon_sym_LPAREN, - ACTIONS(109), 1, - sym_numeric_lit, - ACTIONS(111), 1, - anon_sym_DQUOTE, - ACTIONS(115), 1, - sym_null_lit, - ACTIONS(117), 1, - anon_sym_LBRACK, - STATE(125), 1, - sym_expr_term, - ACTIONS(113), 2, - anon_sym_true, - anon_sym_false, - STATE(96), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(98), 2, - sym_tuple, - sym_object, - STATE(105), 2, - sym_string_lit, - sym_bool_lit, - STATE(100), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [3637] = 14, + [3611] = 15, ACTIONS(3), 1, sym_comment, ACTIONS(7), 1, @@ -5904,297 +5827,634 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(15), 1, sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, + ACTIONS(19), 1, sym_null_lit, - ACTIONS(23), 1, + ACTIONS(21), 1, anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, ACTIONS(31), 1, sym_identifier, - STATE(115), 1, - sym_expr_term, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - STATE(45), 2, - sym_string_lit, + STATE(56), 1, sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [3688] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(120), 1, - sym_expr_term, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [3739] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(119), 1, - sym_expr_term, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [3790] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(114), 1, - sym_expr_term, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [3841] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, + STATE(58), 1, + sym_quoted_template, STATE(117), 1, sym_expr_term, - ACTIONS(19), 2, + ACTIONS(17), 2, anon_sym_true, anon_sym_false, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, + STATE(61), 2, sym_for_tuple_expr, sym_for_object_expr, - STATE(56), 5, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(64), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [3892] = 14, + sym_template_expr, + [3665] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(7), 1, + ACTIONS(73), 1, anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(75), 1, sym_identifier, - STATE(116), 1, - sym_expr_term, - ACTIONS(19), 2, - anon_sym_true, - anon_sym_false, - STATE(45), 2, - sym_string_lit, + ACTIONS(77), 1, + anon_sym_LPAREN, + ACTIONS(79), 1, + sym_numeric_lit, + ACTIONS(83), 1, + sym_null_lit, + ACTIONS(85), 1, + anon_sym_LBRACK, + ACTIONS(89), 1, + anon_sym_DQUOTE, + STATE(102), 1, sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [3943] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(7), 1, - anon_sym_LBRACE, - ACTIONS(13), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, - sym_numeric_lit, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(21), 1, - sym_null_lit, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - sym_identifier, - STATE(118), 1, + STATE(110), 1, + sym_quoted_template, + STATE(126), 1, sym_expr_term, - ACTIONS(19), 2, + ACTIONS(81), 2, anon_sym_true, anon_sym_false, - STATE(45), 2, - sym_string_lit, - sym_bool_lit, - STATE(52), 2, - sym_tuple, - sym_object, - STATE(57), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(56), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [3994] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(103), 1, - anon_sym_LBRACE, - ACTIONS(105), 1, - sym_identifier, - ACTIONS(107), 1, - anon_sym_LPAREN, - ACTIONS(109), 1, - sym_numeric_lit, - ACTIONS(111), 1, - anon_sym_DQUOTE, - ACTIONS(115), 1, - sym_null_lit, - ACTIONS(117), 1, - anon_sym_LBRACK, - STATE(123), 1, - sym_expr_term, - ACTIONS(113), 2, - anon_sym_true, - anon_sym_false, - STATE(96), 2, - sym_for_tuple_expr, - sym_for_object_expr, STATE(98), 2, sym_tuple, sym_object, STATE(105), 2, - sym_string_lit, - sym_bool_lit, - STATE(100), 5, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(90), 6, sym_literal_value, sym_collection_value, sym_for_expr, sym_variable_expr, sym_function_call, - [4045] = 4, + sym_template_expr, + [3719] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(120), 1, + sym_expr_term, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [3773] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(122), 1, + sym_expr_term, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [3827] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(121), 1, + sym_expr_term, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [3881] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(290), 1, + anon_sym_DOT, + STATE(80), 2, + sym_get_attr, + aux_sym_attr_splat_repeat1, + ACTIONS(145), 3, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(143), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [3915] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(116), 1, + sym_expr_term, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [3969] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(119), 1, + sym_expr_term, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [4023] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(73), 1, + anon_sym_LBRACE, + ACTIONS(75), 1, + sym_identifier, + ACTIONS(77), 1, + anon_sym_LPAREN, + ACTIONS(79), 1, + sym_numeric_lit, + ACTIONS(83), 1, + sym_null_lit, + ACTIONS(85), 1, + anon_sym_LBRACK, + ACTIONS(89), 1, + anon_sym_DQUOTE, + STATE(102), 1, + sym_bool_lit, + STATE(110), 1, + sym_quoted_template, + STATE(129), 1, + sym_expr_term, + ACTIONS(81), 2, + anon_sym_true, + anon_sym_false, + STATE(98), 2, + sym_tuple, + sym_object, + STATE(105), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(90), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [4077] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(293), 1, + anon_sym_DOT, + STATE(87), 2, + sym_get_attr, + aux_sym_attr_splat_repeat1, + ACTIONS(138), 3, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(136), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [4111] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(73), 1, + anon_sym_LBRACE, + ACTIONS(75), 1, + sym_identifier, + ACTIONS(77), 1, + anon_sym_LPAREN, + ACTIONS(79), 1, + sym_numeric_lit, + ACTIONS(83), 1, + sym_null_lit, + ACTIONS(85), 1, + anon_sym_LBRACK, + ACTIONS(89), 1, + anon_sym_DQUOTE, + STATE(102), 1, + sym_bool_lit, + STATE(110), 1, + sym_quoted_template, + STATE(128), 1, + sym_expr_term, + ACTIONS(81), 2, + anon_sym_true, + anon_sym_false, + STATE(98), 2, + sym_tuple, + sym_object, + STATE(105), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(90), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [4165] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(73), 1, + anon_sym_LBRACE, + ACTIONS(75), 1, + sym_identifier, + ACTIONS(77), 1, + anon_sym_LPAREN, + ACTIONS(79), 1, + sym_numeric_lit, + ACTIONS(83), 1, + sym_null_lit, + ACTIONS(85), 1, + anon_sym_LBRACK, + ACTIONS(89), 1, + anon_sym_DQUOTE, + STATE(102), 1, + sym_bool_lit, + STATE(110), 1, + sym_quoted_template, + STATE(125), 1, + sym_expr_term, + ACTIONS(81), 2, + anon_sym_true, + anon_sym_false, + STATE(98), 2, + sym_tuple, + sym_object, + STATE(105), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(90), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [4219] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + sym_numeric_lit, + ACTIONS(19), 1, + sym_null_lit, + ACTIONS(21), 1, + anon_sym_LBRACK, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(31), 1, + sym_identifier, + STATE(56), 1, + sym_bool_lit, + STATE(58), 1, + sym_quoted_template, + STATE(118), 1, + sym_expr_term, + ACTIONS(17), 2, + anon_sym_true, + anon_sym_false, + STATE(61), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(63), 2, + sym_tuple, + sym_object, + STATE(64), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [4273] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(73), 1, + anon_sym_LBRACE, + ACTIONS(75), 1, + sym_identifier, + ACTIONS(77), 1, + anon_sym_LPAREN, + ACTIONS(79), 1, + sym_numeric_lit, + ACTIONS(83), 1, + sym_null_lit, + ACTIONS(85), 1, + anon_sym_LBRACK, + ACTIONS(89), 1, + anon_sym_DQUOTE, + STATE(102), 1, + sym_bool_lit, + STATE(110), 1, + sym_quoted_template, + STATE(124), 1, + sym_expr_term, + ACTIONS(81), 2, + anon_sym_true, + anon_sym_false, + STATE(98), 2, + sym_tuple, + sym_object, + STATE(105), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(90), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [4327] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(73), 1, + anon_sym_LBRACE, + ACTIONS(75), 1, + sym_identifier, + ACTIONS(77), 1, + anon_sym_LPAREN, + ACTIONS(79), 1, + sym_numeric_lit, + ACTIONS(83), 1, + sym_null_lit, + ACTIONS(85), 1, + anon_sym_LBRACK, + ACTIONS(89), 1, + anon_sym_DQUOTE, + STATE(102), 1, + sym_bool_lit, + STATE(110), 1, + sym_quoted_template, + STATE(127), 1, + sym_expr_term, + ACTIONS(81), 2, + anon_sym_true, + anon_sym_false, + STATE(98), 2, + sym_tuple, + sym_object, + STATE(105), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(90), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [4381] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(73), 1, + anon_sym_LBRACE, + ACTIONS(75), 1, + sym_identifier, + ACTIONS(77), 1, + anon_sym_LPAREN, + ACTIONS(79), 1, + sym_numeric_lit, + ACTIONS(83), 1, + sym_null_lit, + ACTIONS(85), 1, + anon_sym_LBRACK, + ACTIONS(89), 1, + anon_sym_DQUOTE, + STATE(102), 1, + sym_bool_lit, + STATE(110), 1, + sym_quoted_template, + STATE(123), 1, + sym_expr_term, + ACTIONS(81), 2, + anon_sym_true, + anon_sym_false, + STATE(98), 2, + sym_tuple, + sym_object, + STATE(105), 2, + sym_for_tuple_expr, + sym_for_object_expr, + STATE(90), 6, + sym_literal_value, + sym_collection_value, + sym_for_expr, + sym_variable_expr, + sym_function_call, + sym_template_expr, + [4435] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(296), 1, + anon_sym_DOT, + STATE(87), 2, + sym_get_attr, + aux_sym_attr_splat_repeat1, + ACTIONS(127), 3, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(125), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [4469] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(299), 1, anon_sym_LPAREN, ACTIONS(152), 4, anon_sym_DOT, @@ -6218,517 +6478,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [4076] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(103), 1, - anon_sym_LBRACE, - ACTIONS(105), 1, - sym_identifier, - ACTIONS(107), 1, - anon_sym_LPAREN, - ACTIONS(109), 1, - sym_numeric_lit, - ACTIONS(111), 1, - anon_sym_DQUOTE, - ACTIONS(115), 1, - sym_null_lit, - ACTIONS(117), 1, - anon_sym_LBRACK, - STATE(127), 1, - sym_expr_term, - ACTIONS(113), 2, - anon_sym_true, - anon_sym_false, - STATE(96), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(98), 2, - sym_tuple, - sym_object, - STATE(105), 2, - sym_string_lit, - sym_bool_lit, - STATE(100), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [4127] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(103), 1, - anon_sym_LBRACE, - ACTIONS(105), 1, - sym_identifier, - ACTIONS(107), 1, - anon_sym_LPAREN, - ACTIONS(109), 1, - sym_numeric_lit, - ACTIONS(111), 1, - anon_sym_DQUOTE, - ACTIONS(115), 1, - sym_null_lit, - ACTIONS(117), 1, - anon_sym_LBRACK, - STATE(121), 1, - sym_expr_term, - ACTIONS(113), 2, - anon_sym_true, - anon_sym_false, - STATE(96), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(98), 2, - sym_tuple, - sym_object, - STATE(105), 2, - sym_string_lit, - sym_bool_lit, - STATE(100), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [4178] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(103), 1, - anon_sym_LBRACE, - ACTIONS(105), 1, - sym_identifier, - ACTIONS(107), 1, - anon_sym_LPAREN, - ACTIONS(109), 1, - sym_numeric_lit, - ACTIONS(111), 1, - anon_sym_DQUOTE, - ACTIONS(115), 1, - sym_null_lit, - ACTIONS(117), 1, - anon_sym_LBRACK, - STATE(124), 1, - sym_expr_term, - ACTIONS(113), 2, - anon_sym_true, - anon_sym_false, - STATE(96), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(98), 2, - sym_tuple, - sym_object, - STATE(105), 2, - sym_string_lit, - sym_bool_lit, - STATE(100), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [4229] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(103), 1, - anon_sym_LBRACE, - ACTIONS(105), 1, - sym_identifier, - ACTIONS(107), 1, - anon_sym_LPAREN, - ACTIONS(109), 1, - sym_numeric_lit, - ACTIONS(111), 1, - anon_sym_DQUOTE, - ACTIONS(115), 1, - sym_null_lit, - ACTIONS(117), 1, - anon_sym_LBRACK, - STATE(126), 1, - sym_expr_term, - ACTIONS(113), 2, - anon_sym_true, - anon_sym_false, - STATE(96), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(98), 2, - sym_tuple, - sym_object, - STATE(105), 2, - sym_string_lit, - sym_bool_lit, - STATE(100), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [4280] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(103), 1, - anon_sym_LBRACE, - ACTIONS(105), 1, - sym_identifier, - ACTIONS(107), 1, - anon_sym_LPAREN, - ACTIONS(109), 1, - sym_numeric_lit, - ACTIONS(111), 1, - anon_sym_DQUOTE, - ACTIONS(115), 1, - sym_null_lit, - ACTIONS(117), 1, - anon_sym_LBRACK, - STATE(122), 1, - sym_expr_term, - ACTIONS(113), 2, - anon_sym_true, - anon_sym_false, - STATE(96), 2, - sym_for_tuple_expr, - sym_for_object_expr, - STATE(98), 2, - sym_tuple, - sym_object, - STATE(105), 2, - sym_string_lit, - sym_bool_lit, - STATE(100), 5, - sym_literal_value, - sym_collection_value, - sym_for_expr, - sym_variable_expr, - sym_function_call, - [4331] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(222), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(220), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4359] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(148), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(146), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4387] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(242), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(240), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4415] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(238), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(236), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4443] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(178), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(176), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4471] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(246), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(244), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4499] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(174), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(172), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4527] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(144), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(142), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4555] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(214), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(212), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4583] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(234), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(232), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4611] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(194), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(192), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4639] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(230), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(228), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4667] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(210), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(208), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4695] = 3, + [4500] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(226), 4, @@ -6753,15 +6503,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [4723] = 3, + [4528] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(182), 4, + ACTIONS(242), 4, anon_sym_DOT, anon_sym_SLASH, anon_sym_GT, anon_sym_LT, - ACTIONS(180), 16, + ACTIONS(240), 16, anon_sym_RBRACE, anon_sym_LBRACK, anon_sym_RBRACK, @@ -6778,15 +6528,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [4751] = 3, + [4556] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(186), 4, + ACTIONS(174), 4, anon_sym_DOT, anon_sym_SLASH, anon_sym_GT, anon_sym_LT, - ACTIONS(184), 16, + ACTIONS(172), 16, anon_sym_RBRACE, anon_sym_LBRACK, anon_sym_RBRACK, @@ -6803,82 +6553,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [4779] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(170), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(168), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4807] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(166), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(164), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4835] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(190), 4, - anon_sym_DOT, - anon_sym_SLASH, - anon_sym_GT, - anon_sym_LT, - ACTIONS(188), 16, - anon_sym_RBRACE, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_STAR, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [4863] = 3, + [4584] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(198), 4, @@ -6903,15 +6578,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [4891] = 3, + [4612] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(218), 4, + ACTIONS(182), 4, anon_sym_DOT, anon_sym_SLASH, anon_sym_GT, anon_sym_LT, - ACTIONS(216), 16, + ACTIONS(180), 16, anon_sym_RBRACE, anon_sym_LBRACK, anon_sym_RBRACK, @@ -6928,7 +6603,57 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [4919] = 3, + [4640] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(246), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(244), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [4668] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(190), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(188), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [4696] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(158), 4, @@ -6953,7 +6678,107 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [4947] = 3, + [4724] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(170), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(168), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [4752] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(238), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(236), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [4780] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(178), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(176), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [4808] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(250), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [4836] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(202), 4, @@ -6978,7 +6803,107 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [4975] = 3, + [4864] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(210), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(208), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [4892] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(222), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(220), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [4920] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(214), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(212), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [4948] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(230), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(228), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [4976] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(206), 4, @@ -7003,7 +6928,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [5003] = 3, + [5004] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(166), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(164), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [5032] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(162), 4, @@ -7028,14 +6978,164 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [5031] = 6, + [5060] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(134), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(132), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [5088] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(218), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(216), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [5116] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(123), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(121), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [5144] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(234), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(232), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [5172] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(194), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(192), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [5200] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(186), 4, + anon_sym_DOT, + anon_sym_SLASH, + anon_sym_GT, + anon_sym_LT, + ACTIONS(184), 16, + anon_sym_RBRACE, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_STAR, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [5228] = 6, ACTIONS(3), 1, sym_comment, ACTIONS(154), 1, anon_sym_LPAREN, - ACTIONS(297), 1, + ACTIONS(301), 1, anon_sym_EQ, - ACTIONS(300), 1, + ACTIONS(304), 1, anon_sym_COLON, ACTIONS(152), 3, anon_sym_SLASH, @@ -7055,127 +7155,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [5064] = 7, + [5261] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(39), 1, - anon_sym_LBRACK, ACTIONS(41), 1, - anon_sym_DOT, - ACTIONS(305), 1, - anon_sym_EQ, - STATE(64), 2, - sym_attr_splat, - sym_full_splat, - STATE(63), 3, - sym_index, - sym_get_attr, - sym_splat, - ACTIONS(303), 10, - ts_builtin_sym_end, - anon_sym_RBRACE, - sym_identifier, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_COLON, - anon_sym_EQ_GT, - sym_ellipsis, - anon_sym_QMARK, - [5098] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(39), 1, anon_sym_LBRACK, - ACTIONS(41), 1, - anon_sym_DOT, - ACTIONS(305), 1, - anon_sym_EQ, - STATE(64), 2, - sym_attr_splat, - sym_full_splat, - STATE(63), 3, - sym_index, - sym_get_attr, - sym_splat, - ACTIONS(303), 10, - ts_builtin_sym_end, - anon_sym_RBRACE, - sym_identifier, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_COLON, - anon_sym_EQ_GT, - sym_ellipsis, - anon_sym_QMARK, - [5132] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(39), 1, - anon_sym_LBRACK, - ACTIONS(41), 1, - anon_sym_DOT, - ACTIONS(305), 1, - anon_sym_EQ, - STATE(64), 2, - sym_attr_splat, - sym_full_splat, - STATE(63), 3, - sym_index, - sym_get_attr, - sym_splat, - ACTIONS(303), 10, - ts_builtin_sym_end, - anon_sym_RBRACE, - sym_identifier, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_COLON, - anon_sym_EQ_GT, - sym_ellipsis, - anon_sym_QMARK, - [5166] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(39), 1, - anon_sym_LBRACK, - ACTIONS(41), 1, - anon_sym_DOT, - ACTIONS(305), 1, - anon_sym_EQ, - STATE(64), 2, - sym_attr_splat, - sym_full_splat, - STATE(63), 3, - sym_index, - sym_get_attr, - sym_splat, - ACTIONS(303), 10, - ts_builtin_sym_end, - anon_sym_RBRACE, - sym_identifier, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_COLON, - anon_sym_EQ_GT, - sym_ellipsis, - anon_sym_QMARK, - [5200] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(39), 1, - anon_sym_LBRACK, - ACTIONS(41), 1, + ACTIONS(43), 1, anon_sym_DOT, ACTIONS(309), 1, anon_sym_EQ, - STATE(64), 2, + STATE(44), 2, sym_attr_splat, sym_full_splat, - STATE(63), 3, + STATE(55), 3, sym_index, sym_get_attr, sym_splat, @@ -7190,23 +7182,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_GT, sym_ellipsis, anon_sym_QMARK, - [5234] = 7, + [5295] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(39), 1, - anon_sym_LBRACK, ACTIONS(41), 1, + anon_sym_LBRACK, + ACTIONS(43), 1, anon_sym_DOT, - ACTIONS(305), 1, + ACTIONS(309), 1, anon_sym_EQ, - STATE(64), 2, + STATE(44), 2, sym_attr_splat, sym_full_splat, - STATE(63), 3, + STATE(55), 3, sym_index, sym_get_attr, sym_splat, - ACTIONS(303), 10, + ACTIONS(307), 10, ts_builtin_sym_end, anon_sym_RBRACE, sym_identifier, @@ -7217,178 +7209,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_GT, sym_ellipsis, anon_sym_QMARK, - [5268] = 7, + [5329] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(39), 1, - anon_sym_LBRACK, ACTIONS(41), 1, - anon_sym_DOT, - ACTIONS(305), 1, - anon_sym_EQ, - STATE(64), 2, - sym_attr_splat, - sym_full_splat, - STATE(63), 3, - sym_index, - sym_get_attr, - sym_splat, - ACTIONS(303), 10, - ts_builtin_sym_end, - anon_sym_RBRACE, - sym_identifier, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_COLON, - anon_sym_EQ_GT, - sym_ellipsis, - anon_sym_QMARK, - [5302] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(248), 1, anon_sym_LBRACK, - ACTIONS(250), 1, + ACTIONS(43), 1, anon_sym_DOT, - STATE(90), 2, - sym_attr_splat, - sym_full_splat, - STATE(91), 3, - sym_index, - sym_get_attr, - sym_splat, - ACTIONS(303), 5, - anon_sym_RBRACE, - anon_sym_RBRACK, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - [5328] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(248), 1, - anon_sym_LBRACK, - ACTIONS(250), 1, - anon_sym_DOT, - STATE(90), 2, - sym_attr_splat, - sym_full_splat, - STATE(91), 3, - sym_index, - sym_get_attr, - sym_splat, - ACTIONS(303), 5, - anon_sym_RBRACE, - anon_sym_RBRACK, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - [5354] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(248), 1, - anon_sym_LBRACK, - ACTIONS(250), 1, - anon_sym_DOT, - STATE(90), 2, - sym_attr_splat, - sym_full_splat, - STATE(91), 3, - sym_index, - sym_get_attr, - sym_splat, - ACTIONS(303), 5, - anon_sym_RBRACE, - anon_sym_RBRACK, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - [5380] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(248), 1, - anon_sym_LBRACK, - ACTIONS(250), 1, - anon_sym_DOT, - STATE(90), 2, - sym_attr_splat, - sym_full_splat, - STATE(91), 3, - sym_index, - sym_get_attr, - sym_splat, - ACTIONS(303), 5, - anon_sym_RBRACE, - anon_sym_RBRACK, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - [5406] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(248), 1, - anon_sym_LBRACK, - ACTIONS(250), 1, - anon_sym_DOT, - STATE(90), 2, - sym_attr_splat, - sym_full_splat, - STATE(91), 3, - sym_index, - sym_get_attr, - sym_splat, - ACTIONS(307), 5, - anon_sym_RBRACE, - anon_sym_RBRACK, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - [5432] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(248), 1, - anon_sym_LBRACK, - ACTIONS(250), 1, - anon_sym_DOT, - STATE(90), 2, - sym_attr_splat, - sym_full_splat, - STATE(91), 3, - sym_index, - sym_get_attr, - sym_splat, - ACTIONS(303), 5, - anon_sym_RBRACE, - anon_sym_RBRACK, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - [5458] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(248), 1, - anon_sym_LBRACK, - ACTIONS(250), 1, - anon_sym_DOT, - STATE(90), 2, - sym_attr_splat, - sym_full_splat, - STATE(91), 3, - sym_index, - sym_get_attr, - sym_splat, - ACTIONS(303), 5, - anon_sym_RBRACE, - anon_sym_RBRACK, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - [5484] = 3, - ACTIONS(3), 1, - sym_comment, ACTIONS(313), 1, anon_sym_EQ, + STATE(44), 2, + sym_attr_splat, + sym_full_splat, + STATE(55), 3, + sym_index, + sym_get_attr, + sym_splat, ACTIONS(311), 10, ts_builtin_sym_end, anon_sym_RBRACE, @@ -7400,30 +7236,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_GT, sym_ellipsis, anon_sym_QMARK, - [5503] = 3, + [5363] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(317), 4, - sym_identifier, - anon_sym_true, - anon_sym_false, - sym_null_lit, - ACTIONS(315), 7, - anon_sym_LBRACE, - anon_sym_LPAREN, - sym_numeric_lit, - anon_sym_DQUOTE, + ACTIONS(41), 1, anon_sym_LBRACK, - anon_sym_DASH, - anon_sym_BANG, - [5522] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(321), 1, + ACTIONS(43), 1, + anon_sym_DOT, + ACTIONS(309), 1, anon_sym_EQ, - ACTIONS(323), 1, - anon_sym_QMARK, - ACTIONS(319), 9, + STATE(44), 2, + sym_attr_splat, + sym_full_splat, + STATE(55), 3, + sym_index, + sym_get_attr, + sym_splat, + ACTIONS(307), 10, ts_builtin_sym_end, anon_sym_RBRACE, sym_identifier, @@ -7433,7 +7262,278 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON, anon_sym_EQ_GT, sym_ellipsis, - [5543] = 3, + anon_sym_QMARK, + [5397] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(41), 1, + anon_sym_LBRACK, + ACTIONS(43), 1, + anon_sym_DOT, + ACTIONS(309), 1, + anon_sym_EQ, + STATE(44), 2, + sym_attr_splat, + sym_full_splat, + STATE(55), 3, + sym_index, + sym_get_attr, + sym_splat, + ACTIONS(307), 10, + ts_builtin_sym_end, + anon_sym_RBRACE, + sym_identifier, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_COLON, + anon_sym_EQ_GT, + sym_ellipsis, + anon_sym_QMARK, + [5431] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(41), 1, + anon_sym_LBRACK, + ACTIONS(43), 1, + anon_sym_DOT, + ACTIONS(309), 1, + anon_sym_EQ, + STATE(44), 2, + sym_attr_splat, + sym_full_splat, + STATE(55), 3, + sym_index, + sym_get_attr, + sym_splat, + ACTIONS(307), 10, + ts_builtin_sym_end, + anon_sym_RBRACE, + sym_identifier, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_COLON, + anon_sym_EQ_GT, + sym_ellipsis, + anon_sym_QMARK, + [5465] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(41), 1, + anon_sym_LBRACK, + ACTIONS(43), 1, + anon_sym_DOT, + ACTIONS(309), 1, + anon_sym_EQ, + STATE(44), 2, + sym_attr_splat, + sym_full_splat, + STATE(55), 3, + sym_index, + sym_get_attr, + sym_splat, + ACTIONS(307), 10, + ts_builtin_sym_end, + anon_sym_RBRACE, + sym_identifier, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_COLON, + anon_sym_EQ_GT, + sym_ellipsis, + anon_sym_QMARK, + [5499] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(252), 1, + anon_sym_LBRACK, + ACTIONS(254), 1, + anon_sym_DOT, + STATE(108), 2, + sym_attr_splat, + sym_full_splat, + STATE(106), 3, + sym_index, + sym_get_attr, + sym_splat, + ACTIONS(307), 5, + anon_sym_RBRACE, + anon_sym_RBRACK, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + [5525] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(252), 1, + anon_sym_LBRACK, + ACTIONS(254), 1, + anon_sym_DOT, + STATE(108), 2, + sym_attr_splat, + sym_full_splat, + STATE(106), 3, + sym_index, + sym_get_attr, + sym_splat, + ACTIONS(311), 5, + anon_sym_RBRACE, + anon_sym_RBRACK, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + [5551] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(252), 1, + anon_sym_LBRACK, + ACTIONS(254), 1, + anon_sym_DOT, + STATE(108), 2, + sym_attr_splat, + sym_full_splat, + STATE(106), 3, + sym_index, + sym_get_attr, + sym_splat, + ACTIONS(307), 5, + anon_sym_RBRACE, + anon_sym_RBRACK, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + [5577] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(252), 1, + anon_sym_LBRACK, + ACTIONS(254), 1, + anon_sym_DOT, + STATE(108), 2, + sym_attr_splat, + sym_full_splat, + STATE(106), 3, + sym_index, + sym_get_attr, + sym_splat, + ACTIONS(307), 5, + anon_sym_RBRACE, + anon_sym_RBRACK, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + [5603] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(252), 1, + anon_sym_LBRACK, + ACTIONS(254), 1, + anon_sym_DOT, + STATE(108), 2, + sym_attr_splat, + sym_full_splat, + STATE(106), 3, + sym_index, + sym_get_attr, + sym_splat, + ACTIONS(307), 5, + anon_sym_RBRACE, + anon_sym_RBRACK, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + [5629] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(252), 1, + anon_sym_LBRACK, + ACTIONS(254), 1, + anon_sym_DOT, + STATE(108), 2, + sym_attr_splat, + sym_full_splat, + STATE(106), 3, + sym_index, + sym_get_attr, + sym_splat, + ACTIONS(307), 5, + anon_sym_RBRACE, + anon_sym_RBRACK, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + [5655] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(252), 1, + anon_sym_LBRACK, + ACTIONS(254), 1, + anon_sym_DOT, + STATE(108), 2, + sym_attr_splat, + sym_full_splat, + STATE(106), 3, + sym_index, + sym_get_attr, + sym_splat, + ACTIONS(307), 5, + anon_sym_RBRACE, + anon_sym_RBRACK, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + [5681] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(39), 1, + anon_sym_EQ, + ACTIONS(37), 10, + ts_builtin_sym_end, + anon_sym_RBRACE, + sym_identifier, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_COLON, + anon_sym_EQ_GT, + sym_ellipsis, + anon_sym_QMARK, + [5700] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(317), 1, + anon_sym_EQ, + ACTIONS(319), 1, + anon_sym_QMARK, + ACTIONS(315), 9, + ts_builtin_sym_end, + anon_sym_RBRACE, + sym_identifier, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_COLON, + anon_sym_EQ_GT, + sym_ellipsis, + [5721] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(324), 4, + sym_identifier, + anon_sym_true, + anon_sym_false, + sym_null_lit, + ACTIONS(322), 7, + anon_sym_LBRACE, + anon_sym_LPAREN, + sym_numeric_lit, + anon_sym_LBRACK, + anon_sym_DASH, + anon_sym_BANG, + anon_sym_DQUOTE, + [5740] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(328), 4, @@ -7445,16 +7545,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_LPAREN, sym_numeric_lit, - anon_sym_DQUOTE, anon_sym_LBRACK, anon_sym_DASH, anon_sym_BANG, - [5562] = 3, + anon_sym_DQUOTE, + [5759] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(37), 1, + ACTIONS(332), 1, anon_sym_EQ, - ACTIONS(35), 10, + ACTIONS(330), 10, ts_builtin_sym_end, anon_sym_RBRACE, sym_identifier, @@ -7465,146 +7565,111 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_GT, sym_ellipsis, anon_sym_QMARK, - [5581] = 6, + [5778] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(330), 1, - anon_sym_EQ, - ACTIONS(332), 1, - anon_sym_LBRACE, ACTIONS(334), 1, + anon_sym_DQUOTE, + ACTIONS(336), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(338), 1, + anon_sym_DOLLAR_LBRACE_TILDE, + ACTIONS(340), 2, + sym__template_char, + sym_escape_sequence, + STATE(139), 2, + sym_template_interpolation, + aux_sym_quoted_template_repeat1, + [5799] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(342), 1, + anon_sym_EQ, + ACTIONS(344), 1, + anon_sym_LBRACE, + ACTIONS(346), 1, sym_identifier, - STATE(147), 2, + STATE(168), 1, + sym_quoted_template, + STATE(144), 2, sym_string_lit, aux_sym_block_repeat1, - [5601] = 4, + [5822] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(336), 2, - ts_builtin_sym_end, - anon_sym_RBRACE, - STATE(136), 3, - sym_attribute, - sym_block, - aux_sym_body_repeat1, - [5617] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(5), 1, - sym_identifier, + ACTIONS(336), 1, + anon_sym_DOLLAR_LBRACE, ACTIONS(338), 1, - anon_sym_RBRACE, - STATE(198), 1, - sym_body, - STATE(134), 3, - sym_attribute, - sym_block, - aux_sym_body_repeat1, - [5635] = 4, + anon_sym_DOLLAR_LBRACE_TILDE, + ACTIONS(348), 1, + anon_sym_DQUOTE, + ACTIONS(350), 2, + sym__template_char, + sym_escape_sequence, + STATE(138), 2, + sym_template_interpolation, + aux_sym_quoted_template_repeat1, + [5843] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(342), 1, - sym_identifier, + ACTIONS(336), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(338), 1, + anon_sym_DOLLAR_LBRACE_TILDE, + ACTIONS(352), 1, + anon_sym_DQUOTE, ACTIONS(340), 2, - ts_builtin_sym_end, - anon_sym_RBRACE, - STATE(136), 3, - sym_attribute, - sym_block, - aux_sym_body_repeat1, - [5651] = 5, + sym__template_char, + sym_escape_sequence, + STATE(139), 2, + sym_template_interpolation, + aux_sym_quoted_template_repeat1, + [5864] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(354), 1, + anon_sym_DQUOTE, + ACTIONS(356), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(359), 1, + anon_sym_DOLLAR_LBRACE_TILDE, + ACTIONS(362), 2, + sym__template_char, + sym_escape_sequence, + STATE(139), 2, + sym_template_interpolation, + aux_sym_quoted_template_repeat1, + [5885] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(336), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(338), 1, + anon_sym_DOLLAR_LBRACE_TILDE, + ACTIONS(365), 1, + anon_sym_DQUOTE, + ACTIONS(367), 2, + sym__template_char, + sym_escape_sequence, + STATE(135), 2, + sym_template_interpolation, + aux_sym_quoted_template_repeat1, + [5906] = 5, ACTIONS(3), 1, sym_comment, ACTIONS(5), 1, sym_identifier, - ACTIONS(345), 1, + ACTIONS(369), 1, anon_sym_RBRACE, - STATE(203), 1, + STATE(211), 1, sym_body, - STATE(134), 3, + STATE(145), 3, sym_attribute, sym_block, aux_sym_body_repeat1, - [5669] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(349), 1, - anon_sym_COMMA, - STATE(138), 1, - aux_sym_tuple_repeat1, - ACTIONS(347), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - sym_ellipsis, - [5684] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(347), 4, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - sym_ellipsis, - [5697] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(35), 5, - anon_sym_RBRACE, - anon_sym_RBRACK, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - [5708] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(311), 5, - anon_sym_RBRACE, - anon_sym_RBRACK, - anon_sym_if, - sym_ellipsis, - anon_sym_QMARK, - [5719] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(354), 1, - anon_sym_RPAREN, - ACTIONS(356), 1, - anon_sym_COMMA, - ACTIONS(358), 1, - sym_ellipsis, - STATE(148), 1, - aux_sym_tuple_repeat1, - [5738] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(360), 1, - anon_sym_QMARK, - ACTIONS(319), 4, - anon_sym_RBRACE, - anon_sym_RBRACK, - anon_sym_if, - sym_ellipsis, - [5751] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(363), 1, - anon_sym_RBRACE, - ACTIONS(365), 1, - anon_sym_if, - ACTIONS(367), 1, - sym_ellipsis, - ACTIONS(369), 1, - anon_sym_QMARK, - STATE(204), 1, - sym_for_cond, - [5770] = 5, + [5924] = 6, ACTIONS(3), 1, sym_comment, ACTIONS(371), 1, @@ -7613,940 +7678,1096 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(376), 1, anon_sym_DQUOTE, - STATE(145), 2, + STATE(168), 1, + sym_quoted_template, + STATE(142), 2, sym_string_lit, aux_sym_block_repeat1, - [5787] = 6, + [5944] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(365), 1, - anon_sym_if, - ACTIONS(369), 1, - anon_sym_QMARK, - ACTIONS(379), 1, - anon_sym_RBRACE, ACTIONS(381), 1, - sym_ellipsis, - STATE(200), 1, - sym_for_cond, - [5806] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(383), 1, - anon_sym_LBRACE, - ACTIONS(385), 1, sym_identifier, - STATE(145), 2, - sym_string_lit, - aux_sym_block_repeat1, - [5823] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(65), 1, - anon_sym_RPAREN, - ACTIONS(387), 1, - anon_sym_COMMA, - ACTIONS(389), 1, - sym_ellipsis, - STATE(138), 1, - aux_sym_tuple_repeat1, - [5839] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(391), 3, + ACTIONS(379), 2, ts_builtin_sym_end, anon_sym_RBRACE, + STATE(143), 3, + sym_attribute, + sym_block, + aux_sym_body_repeat1, + [5960] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(27), 1, + anon_sym_DQUOTE, + ACTIONS(384), 1, + anon_sym_LBRACE, + ACTIONS(386), 1, sym_identifier, - [5851] = 4, - ACTIONS(393), 1, - anon_sym_DQUOTE, - ACTIONS(398), 1, + STATE(168), 1, + sym_quoted_template, + STATE(142), 2, + sym_string_lit, + aux_sym_block_repeat1, + [5980] = 4, + ACTIONS(3), 1, sym_comment, - STATE(150), 1, - aux_sym_string_lit_repeat1, - ACTIONS(395), 2, - aux_sym_string_lit_token1, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(388), 2, + ts_builtin_sym_end, + anon_sym_RBRACE, + STATE(143), 3, + sym_attribute, + sym_block, + aux_sym_body_repeat1, + [5996] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(390), 1, + anon_sym_RBRACE, + STATE(213), 1, + sym_body, + STATE(145), 3, + sym_attribute, + sym_block, + aux_sym_body_repeat1, + [6014] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(394), 1, + anon_sym_COMMA, + STATE(147), 1, + aux_sym_tuple_repeat1, + ACTIONS(392), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + sym_ellipsis, + [6029] = 4, + ACTIONS(3), 1, + sym_comment, + STATE(148), 1, + aux_sym_template_interpolation_repeat1, + ACTIONS(397), 2, + anon_sym_RBRACE, + anon_sym_TILDE_RBRACE, + ACTIONS(399), 2, + sym__template_char_in_interpolation, sym_escape_sequence, - [5865] = 4, - ACTIONS(398), 1, + [6044] = 2, + ACTIONS(3), 1, sym_comment, - ACTIONS(400), 1, - anon_sym_DQUOTE, - STATE(154), 1, - aux_sym_string_lit_repeat1, + ACTIONS(330), 5, + anon_sym_RBRACE, + anon_sym_RBRACK, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + [6055] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(37), 5, + anon_sym_RBRACE, + anon_sym_RBRACK, + anon_sym_if, + sym_ellipsis, + anon_sym_QMARK, + [6066] = 4, + ACTIONS(3), 1, + sym_comment, + STATE(153), 1, + aux_sym_template_interpolation_repeat1, ACTIONS(402), 2, - aux_sym_string_lit_token1, + anon_sym_RBRACE, + anon_sym_TILDE_RBRACE, + ACTIONS(404), 2, + sym__template_char_in_interpolation, sym_escape_sequence, - [5879] = 4, - ACTIONS(398), 1, - sym_comment, - ACTIONS(404), 1, - anon_sym_DQUOTE, - STATE(156), 1, - aux_sym_string_lit_repeat1, - ACTIONS(406), 2, - aux_sym_string_lit_token1, - sym_escape_sequence, - [5893] = 5, + [6081] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, ACTIONS(408), 1, - anon_sym_COMMA, - ACTIONS(410), 1, - anon_sym_RBRACK, - STATE(160), 1, - aux_sym_tuple_repeat1, - [5909] = 4, - ACTIONS(398), 1, - sym_comment, - ACTIONS(412), 1, - anon_sym_DQUOTE, - STATE(150), 1, - aux_sym_string_lit_repeat1, - ACTIONS(414), 2, - aux_sym_string_lit_token1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(406), 4, + sym__template_char, sym_escape_sequence, - [5923] = 5, + anon_sym_DQUOTE, + anon_sym_DOLLAR_LBRACE_TILDE, + [6094] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(408), 1, - anon_sym_COMMA, + STATE(148), 1, + aux_sym_template_interpolation_repeat1, + ACTIONS(410), 2, + anon_sym_RBRACE, + anon_sym_TILDE_RBRACE, + ACTIONS(412), 2, + sym__template_char_in_interpolation, + sym_escape_sequence, + [6109] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(414), 1, + anon_sym_RBRACE, ACTIONS(416), 1, - anon_sym_RBRACK, - STATE(159), 1, - aux_sym_tuple_repeat1, - [5939] = 4, - ACTIONS(398), 1, - sym_comment, + anon_sym_if, ACTIONS(418), 1, - anon_sym_DQUOTE, - STATE(150), 1, - aux_sym_string_lit_repeat1, - ACTIONS(414), 2, - aux_sym_string_lit_token1, - sym_escape_sequence, - [5953] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(365), 1, - anon_sym_if, - ACTIONS(369), 1, - anon_sym_QMARK, + sym_ellipsis, ACTIONS(420), 1, - anon_sym_RBRACK, - STATE(196), 1, - sym_for_cond, - [5969] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(365), 1, - anon_sym_if, - ACTIONS(369), 1, anon_sym_QMARK, - ACTIONS(422), 1, - anon_sym_RBRACK, - STATE(188), 1, + STATE(208), 1, sym_for_cond, - [5985] = 4, + [6128] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(408), 1, - anon_sym_COMMA, + ACTIONS(422), 1, + anon_sym_RPAREN, ACTIONS(424), 1, - anon_sym_RBRACK, - STATE(138), 1, - aux_sym_tuple_repeat1, - [5998] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(408), 1, anon_sym_COMMA, ACTIONS(426), 1, - anon_sym_RBRACK, - STATE(138), 1, - aux_sym_tuple_repeat1, - [6011] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(365), 1, - anon_sym_if, + sym_ellipsis, ACTIONS(428), 1, - anon_sym_RBRACE, - STATE(201), 1, - sym_for_cond, - [6024] = 4, + anon_sym_QMARK, + STATE(165), 1, + aux_sym_tuple_repeat1, + [6147] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(430), 1, - anon_sym_RBRACE, - ACTIONS(432), 1, - anon_sym_COMMA, - STATE(171), 1, - aux_sym_object_repeat1, - [6037] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, anon_sym_QMARK, - ACTIONS(434), 2, + ACTIONS(315), 4, anon_sym_RBRACE, anon_sym_RBRACK, - [6048] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(432), 1, - anon_sym_COMMA, - ACTIONS(436), 1, - anon_sym_RBRACE, - STATE(162), 1, - aux_sym_object_repeat1, - [6061] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(438), 3, - ts_builtin_sym_end, - anon_sym_RBRACE, - sym_identifier, - [6070] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(432), 1, - anon_sym_COMMA, - ACTIONS(440), 1, - anon_sym_RBRACE, - STATE(171), 1, - aux_sym_object_repeat1, - [6083] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(442), 2, - anon_sym_RBRACE, - anon_sym_COMMA, - [6094] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(444), 3, - ts_builtin_sym_end, - anon_sym_RBRACE, - sym_identifier, - [6103] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(365), 1, anon_sym_if, - ACTIONS(446), 1, + sym_ellipsis, + [6160] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(435), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(433), 4, + sym__template_char, + sym_escape_sequence, + anon_sym_DQUOTE, + anon_sym_DOLLAR_LBRACE_TILDE, + [6173] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(416), 1, + anon_sym_if, + ACTIONS(420), 1, + anon_sym_QMARK, + ACTIONS(437), 1, anon_sym_RBRACE, - STATE(189), 1, + ACTIONS(439), 1, + sym_ellipsis, + STATE(212), 1, sym_for_cond, - [6116] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(448), 2, - anon_sym_EQ, - anon_sym_COLON, - [6127] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(450), 1, - anon_sym_RBRACE, - ACTIONS(452), 1, - anon_sym_COMMA, - STATE(171), 1, - aux_sym_object_repeat1, - [6140] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(455), 3, - ts_builtin_sym_end, - anon_sym_RBRACE, - sym_identifier, - [6149] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(432), 1, - anon_sym_COMMA, - ACTIONS(457), 1, - anon_sym_RBRACE, - STATE(166), 1, - aux_sym_object_repeat1, - [6162] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(459), 1, - anon_sym_RBRACK, - [6172] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(461), 1, - sym_identifier, - ACTIONS(463), 1, - anon_sym_STAR, - [6182] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(465), 1, - anon_sym_COLON, [6192] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(352), 1, + ACTIONS(428), 1, anon_sym_QMARK, - ACTIONS(467), 1, + ACTIONS(392), 4, anon_sym_RPAREN, - [6202] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(450), 2, - anon_sym_RBRACE, anon_sym_COMMA, - [6210] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(469), 1, - anon_sym_EQ_GT, - [6220] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(471), 1, anon_sym_RBRACK, - [6230] = 3, + sym_ellipsis, + [6205] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(352), 1, + ACTIONS(416), 1, + anon_sym_if, + ACTIONS(420), 1, anon_sym_QMARK, - ACTIONS(473), 1, + ACTIONS(441), 1, + anon_sym_RBRACK, + STATE(204), 1, + sym_for_cond, + [6221] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(443), 1, + anon_sym_COMMA, + ACTIONS(445), 1, + anon_sym_RBRACK, + STATE(166), 1, + aux_sym_tuple_repeat1, + [6237] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(447), 3, + ts_builtin_sym_end, + anon_sym_RBRACE, + sym_identifier, + [6249] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(416), 1, + anon_sym_if, + ACTIONS(420), 1, + anon_sym_QMARK, + ACTIONS(449), 1, + anon_sym_RBRACK, + STATE(197), 1, + sym_for_cond, + [6265] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(443), 1, + anon_sym_COMMA, + ACTIONS(451), 1, + anon_sym_RBRACK, + STATE(178), 1, + aux_sym_tuple_repeat1, + [6281] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(69), 1, + anon_sym_RPAREN, + ACTIONS(453), 1, + anon_sym_COMMA, + ACTIONS(455), 1, + sym_ellipsis, + STATE(147), 1, + aux_sym_tuple_repeat1, + [6297] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(443), 1, + anon_sym_COMMA, + ACTIONS(457), 1, + anon_sym_RBRACK, + STATE(147), 1, + aux_sym_tuple_repeat1, + [6310] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(459), 1, + anon_sym_RBRACE, + ACTIONS(461), 1, + anon_sym_COMMA, + STATE(172), 1, + aux_sym_object_repeat1, + [6323] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(463), 3, + anon_sym_LBRACE, + sym_identifier, + anon_sym_DQUOTE, + [6332] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(416), 1, + anon_sym_if, + ACTIONS(465), 1, + anon_sym_RBRACE, + STATE(209), 1, + sym_for_cond, + [6345] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(416), 1, + anon_sym_if, + ACTIONS(467), 1, + anon_sym_RBRACE, + STATE(215), 1, + sym_for_cond, + [6358] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(469), 3, + ts_builtin_sym_end, + anon_sym_RBRACE, + sym_identifier, + [6367] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(461), 1, + anon_sym_COMMA, + ACTIONS(471), 1, + anon_sym_RBRACE, + STATE(175), 1, + aux_sym_object_repeat1, + [6380] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(473), 2, + anon_sym_EQ, anon_sym_COLON, - [6240] = 3, + [6391] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, + ACTIONS(461), 1, + anon_sym_COMMA, ACTIONS(475), 1, - anon_sym_COLON, - [6250] = 3, + anon_sym_RBRACE, + STATE(175), 1, + aux_sym_object_repeat1, + [6404] = 4, ACTIONS(3), 1, sym_comment, ACTIONS(477), 1, - anon_sym_COMMA, - ACTIONS(479), 1, - anon_sym_in, - [6260] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(481), 1, - anon_sym_EQ_GT, - [6270] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(483), 1, - sym_identifier, - ACTIONS(485), 1, - anon_sym_STAR, - [6280] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(487), 1, - anon_sym_RPAREN, - [6290] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(352), 1, - anon_sym_QMARK, - ACTIONS(489), 1, - anon_sym_COLON, - [6300] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(491), 1, - anon_sym_RBRACK, - [6307] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(493), 1, anon_sym_RBRACE, - [6314] = 2, + ACTIONS(479), 1, + anon_sym_COMMA, + STATE(175), 1, + aux_sym_object_repeat1, + [6417] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(483), 1, - sym_identifier, - [6321] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(495), 1, - anon_sym_RPAREN, - [6328] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(497), 1, - anon_sym_RPAREN, - [6335] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(499), 1, - anon_sym_in, - [6342] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(501), 1, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(482), 2, + anon_sym_RBRACE, anon_sym_RBRACK, - [6349] = 2, + [6428] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(461), 1, + anon_sym_COMMA, + ACTIONS(484), 1, + anon_sym_RBRACE, + STATE(174), 1, + aux_sym_object_repeat1, + [6441] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(443), 1, + anon_sym_COMMA, + ACTIONS(486), 1, + anon_sym_RBRACK, + STATE(147), 1, + aux_sym_tuple_repeat1, + [6454] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(488), 3, + ts_builtin_sym_end, + anon_sym_RBRACE, + sym_identifier, + [6463] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(490), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [6474] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(492), 3, + ts_builtin_sym_end, + anon_sym_RBRACE, + sym_identifier, + [6483] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(494), 1, + sym_identifier, + ACTIONS(496), 1, + anon_sym_STAR, + [6493] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(498), 1, + anon_sym_RBRACK, + [6503] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(500), 1, + anon_sym_EQ_GT, + [6513] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(502), 1, + anon_sym_COLON, + [6523] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(504), 1, + anon_sym_COLON, + [6533] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(506), 1, + anon_sym_COLON, + [6543] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(508), 1, + anon_sym_COMMA, + ACTIONS(510), 1, + anon_sym_in, + [6553] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(512), 1, + anon_sym_RPAREN, + [6563] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(514), 1, + anon_sym_RBRACK, + [6573] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(516), 1, + anon_sym_EQ_GT, + [6583] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [6591] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(518), 1, + anon_sym_COLON, + [6601] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(428), 1, + anon_sym_QMARK, + ACTIONS(520), 1, + anon_sym_RPAREN, + [6611] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(522), 1, + sym_identifier, + ACTIONS(524), 1, + anon_sym_STAR, + [6621] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(526), 1, + sym_identifier, + [6628] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(528), 1, + anon_sym_RBRACK, + [6635] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(522), 1, + sym_identifier, + [6642] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(530), 1, + anon_sym_RPAREN, + [6649] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(532), 1, + sym_identifier, + [6656] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(534), 1, + anon_sym_RBRACK, + [6663] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + anon_sym_RBRACK, + [6670] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(69), 1, + anon_sym_RPAREN, + [6677] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + anon_sym_RBRACK, + [6684] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(540), 1, + anon_sym_in, + [6691] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(494), 1, + sym_identifier, + [6698] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(542), 1, + anon_sym_RPAREN, + [6705] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(465), 1, + anon_sym_RBRACE, + [6712] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(544), 1, + anon_sym_RBRACE, + [6719] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(65), 1, anon_sym_RPAREN, - [6356] = 2, + [6726] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(503), 1, - anon_sym_RBRACK, - [6363] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(89), 1, - anon_sym_RPAREN, - [6370] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(505), 1, + ACTIONS(546), 1, anon_sym_RBRACE, - [6377] = 2, + [6733] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(507), 1, - anon_sym_RBRACK, - [6384] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(428), 1, + ACTIONS(467), 1, anon_sym_RBRACE, - [6391] = 2, + [6740] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(509), 1, + ACTIONS(369), 1, anon_sym_RBRACE, - [6398] = 2, + [6747] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(511), 1, - sym_identifier, - [6405] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(338), 1, - anon_sym_RBRACE, - [6412] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(446), 1, - anon_sym_RBRACE, - [6419] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(513), 1, - sym_identifier, - [6426] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(515), 1, + ACTIONS(548), 1, ts_builtin_sym_end, - [6433] = 2, + [6754] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(461), 1, - sym_identifier, - [6440] = 2, + ACTIONS(550), 1, + anon_sym_RBRACE, + [6761] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(517), 1, + ACTIONS(552), 1, ts_builtin_sym_end, }; static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(2)] = 0, - [SMALL_STATE(3)] = 78, - [SMALL_STATE(4)] = 156, - [SMALL_STATE(5)] = 231, - [SMALL_STATE(6)] = 294, - [SMALL_STATE(7)] = 369, - [SMALL_STATE(8)] = 441, - [SMALL_STATE(9)] = 513, - [SMALL_STATE(10)] = 582, - [SMALL_STATE(11)] = 625, - [SMALL_STATE(12)] = 668, - [SMALL_STATE(13)] = 737, - [SMALL_STATE(14)] = 806, - [SMALL_STATE(15)] = 875, - [SMALL_STATE(16)] = 944, - [SMALL_STATE(17)] = 987, - [SMALL_STATE(18)] = 1053, - [SMALL_STATE(19)] = 1119, - [SMALL_STATE(20)] = 1159, - [SMALL_STATE(21)] = 1225, - [SMALL_STATE(22)] = 1291, - [SMALL_STATE(23)] = 1331, - [SMALL_STATE(24)] = 1397, - [SMALL_STATE(25)] = 1463, - [SMALL_STATE(26)] = 1503, - [SMALL_STATE(27)] = 1569, - [SMALL_STATE(28)] = 1605, - [SMALL_STATE(29)] = 1671, - [SMALL_STATE(30)] = 1737, - [SMALL_STATE(31)] = 1803, - [SMALL_STATE(32)] = 1869, - [SMALL_STATE(33)] = 1935, - [SMALL_STATE(34)] = 2001, - [SMALL_STATE(35)] = 2067, - [SMALL_STATE(36)] = 2133, - [SMALL_STATE(37)] = 2199, - [SMALL_STATE(38)] = 2265, - [SMALL_STATE(39)] = 2331, - [SMALL_STATE(40)] = 2397, - [SMALL_STATE(41)] = 2433, - [SMALL_STATE(42)] = 2499, - [SMALL_STATE(43)] = 2536, - [SMALL_STATE(44)] = 2570, - [SMALL_STATE(45)] = 2604, - [SMALL_STATE(46)] = 2638, - [SMALL_STATE(47)] = 2672, - [SMALL_STATE(48)] = 2706, - [SMALL_STATE(49)] = 2740, - [SMALL_STATE(50)] = 2774, - [SMALL_STATE(51)] = 2808, - [SMALL_STATE(52)] = 2842, - [SMALL_STATE(53)] = 2876, - [SMALL_STATE(54)] = 2910, - [SMALL_STATE(55)] = 2944, - [SMALL_STATE(56)] = 2978, - [SMALL_STATE(57)] = 3012, - [SMALL_STATE(58)] = 3046, - [SMALL_STATE(59)] = 3080, - [SMALL_STATE(60)] = 3114, - [SMALL_STATE(61)] = 3148, - [SMALL_STATE(62)] = 3182, - [SMALL_STATE(63)] = 3216, - [SMALL_STATE(64)] = 3250, - [SMALL_STATE(65)] = 3284, - [SMALL_STATE(66)] = 3318, - [SMALL_STATE(67)] = 3373, - [SMALL_STATE(68)] = 3410, - [SMALL_STATE(69)] = 3447, - [SMALL_STATE(70)] = 3484, - [SMALL_STATE(71)] = 3518, - [SMALL_STATE(72)] = 3552, - [SMALL_STATE(73)] = 3586, - [SMALL_STATE(74)] = 3637, - [SMALL_STATE(75)] = 3688, - [SMALL_STATE(76)] = 3739, - [SMALL_STATE(77)] = 3790, - [SMALL_STATE(78)] = 3841, - [SMALL_STATE(79)] = 3892, - [SMALL_STATE(80)] = 3943, - [SMALL_STATE(81)] = 3994, - [SMALL_STATE(82)] = 4045, - [SMALL_STATE(83)] = 4076, - [SMALL_STATE(84)] = 4127, - [SMALL_STATE(85)] = 4178, - [SMALL_STATE(86)] = 4229, - [SMALL_STATE(87)] = 4280, - [SMALL_STATE(88)] = 4331, - [SMALL_STATE(89)] = 4359, - [SMALL_STATE(90)] = 4387, - [SMALL_STATE(91)] = 4415, - [SMALL_STATE(92)] = 4443, - [SMALL_STATE(93)] = 4471, - [SMALL_STATE(94)] = 4499, - [SMALL_STATE(95)] = 4527, - [SMALL_STATE(96)] = 4555, - [SMALL_STATE(97)] = 4583, - [SMALL_STATE(98)] = 4611, - [SMALL_STATE(99)] = 4639, - [SMALL_STATE(100)] = 4667, - [SMALL_STATE(101)] = 4695, - [SMALL_STATE(102)] = 4723, - [SMALL_STATE(103)] = 4751, - [SMALL_STATE(104)] = 4779, - [SMALL_STATE(105)] = 4807, - [SMALL_STATE(106)] = 4835, - [SMALL_STATE(107)] = 4863, - [SMALL_STATE(108)] = 4891, - [SMALL_STATE(109)] = 4919, - [SMALL_STATE(110)] = 4947, - [SMALL_STATE(111)] = 4975, - [SMALL_STATE(112)] = 5003, - [SMALL_STATE(113)] = 5031, - [SMALL_STATE(114)] = 5064, - [SMALL_STATE(115)] = 5098, - [SMALL_STATE(116)] = 5132, - [SMALL_STATE(117)] = 5166, - [SMALL_STATE(118)] = 5200, - [SMALL_STATE(119)] = 5234, - [SMALL_STATE(120)] = 5268, - [SMALL_STATE(121)] = 5302, - [SMALL_STATE(122)] = 5328, - [SMALL_STATE(123)] = 5354, - [SMALL_STATE(124)] = 5380, - [SMALL_STATE(125)] = 5406, - [SMALL_STATE(126)] = 5432, - [SMALL_STATE(127)] = 5458, - [SMALL_STATE(128)] = 5484, - [SMALL_STATE(129)] = 5503, - [SMALL_STATE(130)] = 5522, - [SMALL_STATE(131)] = 5543, - [SMALL_STATE(132)] = 5562, - [SMALL_STATE(133)] = 5581, - [SMALL_STATE(134)] = 5601, - [SMALL_STATE(135)] = 5617, - [SMALL_STATE(136)] = 5635, - [SMALL_STATE(137)] = 5651, - [SMALL_STATE(138)] = 5669, - [SMALL_STATE(139)] = 5684, - [SMALL_STATE(140)] = 5697, - [SMALL_STATE(141)] = 5708, - [SMALL_STATE(142)] = 5719, - [SMALL_STATE(143)] = 5738, - [SMALL_STATE(144)] = 5751, - [SMALL_STATE(145)] = 5770, - [SMALL_STATE(146)] = 5787, - [SMALL_STATE(147)] = 5806, - [SMALL_STATE(148)] = 5823, - [SMALL_STATE(149)] = 5839, - [SMALL_STATE(150)] = 5851, - [SMALL_STATE(151)] = 5865, - [SMALL_STATE(152)] = 5879, - [SMALL_STATE(153)] = 5893, - [SMALL_STATE(154)] = 5909, - [SMALL_STATE(155)] = 5923, - [SMALL_STATE(156)] = 5939, - [SMALL_STATE(157)] = 5953, - [SMALL_STATE(158)] = 5969, - [SMALL_STATE(159)] = 5985, - [SMALL_STATE(160)] = 5998, - [SMALL_STATE(161)] = 6011, - [SMALL_STATE(162)] = 6024, - [SMALL_STATE(163)] = 6037, - [SMALL_STATE(164)] = 6048, - [SMALL_STATE(165)] = 6061, - [SMALL_STATE(166)] = 6070, - [SMALL_STATE(167)] = 6083, - [SMALL_STATE(168)] = 6094, - [SMALL_STATE(169)] = 6103, - [SMALL_STATE(170)] = 6116, - [SMALL_STATE(171)] = 6127, - [SMALL_STATE(172)] = 6140, - [SMALL_STATE(173)] = 6149, - [SMALL_STATE(174)] = 6162, - [SMALL_STATE(175)] = 6172, - [SMALL_STATE(176)] = 6182, - [SMALL_STATE(177)] = 6192, - [SMALL_STATE(178)] = 6202, - [SMALL_STATE(179)] = 6210, - [SMALL_STATE(180)] = 6220, - [SMALL_STATE(181)] = 6230, - [SMALL_STATE(182)] = 6240, - [SMALL_STATE(183)] = 6250, - [SMALL_STATE(184)] = 6260, - [SMALL_STATE(185)] = 6270, - [SMALL_STATE(186)] = 6280, - [SMALL_STATE(187)] = 6290, - [SMALL_STATE(188)] = 6300, - [SMALL_STATE(189)] = 6307, - [SMALL_STATE(190)] = 6314, - [SMALL_STATE(191)] = 6321, - [SMALL_STATE(192)] = 6328, - [SMALL_STATE(193)] = 6335, - [SMALL_STATE(194)] = 6342, - [SMALL_STATE(195)] = 6349, - [SMALL_STATE(196)] = 6356, - [SMALL_STATE(197)] = 6363, - [SMALL_STATE(198)] = 6370, - [SMALL_STATE(199)] = 6377, - [SMALL_STATE(200)] = 6384, - [SMALL_STATE(201)] = 6391, - [SMALL_STATE(202)] = 6398, - [SMALL_STATE(203)] = 6405, - [SMALL_STATE(204)] = 6412, - [SMALL_STATE(205)] = 6419, - [SMALL_STATE(206)] = 6426, - [SMALL_STATE(207)] = 6433, - [SMALL_STATE(208)] = 6440, + [SMALL_STATE(3)] = 81, + [SMALL_STATE(4)] = 162, + [SMALL_STATE(5)] = 240, + [SMALL_STATE(6)] = 318, + [SMALL_STATE(7)] = 381, + [SMALL_STATE(8)] = 456, + [SMALL_STATE(9)] = 531, + [SMALL_STATE(10)] = 603, + [SMALL_STATE(11)] = 675, + [SMALL_STATE(12)] = 747, + [SMALL_STATE(13)] = 819, + [SMALL_STATE(14)] = 891, + [SMALL_STATE(15)] = 960, + [SMALL_STATE(16)] = 1029, + [SMALL_STATE(17)] = 1098, + [SMALL_STATE(18)] = 1167, + [SMALL_STATE(19)] = 1236, + [SMALL_STATE(20)] = 1305, + [SMALL_STATE(21)] = 1374, + [SMALL_STATE(22)] = 1443, + [SMALL_STATE(23)] = 1512, + [SMALL_STATE(24)] = 1581, + [SMALL_STATE(25)] = 1650, + [SMALL_STATE(26)] = 1719, + [SMALL_STATE(27)] = 1788, + [SMALL_STATE(28)] = 1857, + [SMALL_STATE(29)] = 1926, + [SMALL_STATE(30)] = 1995, + [SMALL_STATE(31)] = 2038, + [SMALL_STATE(32)] = 2107, + [SMALL_STATE(33)] = 2150, + [SMALL_STATE(34)] = 2219, + [SMALL_STATE(35)] = 2288, + [SMALL_STATE(36)] = 2357, + [SMALL_STATE(37)] = 2400, + [SMALL_STATE(38)] = 2436, + [SMALL_STATE(39)] = 2476, + [SMALL_STATE(40)] = 2512, + [SMALL_STATE(41)] = 2552, + [SMALL_STATE(42)] = 2592, + [SMALL_STATE(43)] = 2629, + [SMALL_STATE(44)] = 2663, + [SMALL_STATE(45)] = 2697, + [SMALL_STATE(46)] = 2731, + [SMALL_STATE(47)] = 2765, + [SMALL_STATE(48)] = 2799, + [SMALL_STATE(49)] = 2833, + [SMALL_STATE(50)] = 2867, + [SMALL_STATE(51)] = 2901, + [SMALL_STATE(52)] = 2935, + [SMALL_STATE(53)] = 2969, + [SMALL_STATE(54)] = 3003, + [SMALL_STATE(55)] = 3037, + [SMALL_STATE(56)] = 3071, + [SMALL_STATE(57)] = 3105, + [SMALL_STATE(58)] = 3139, + [SMALL_STATE(59)] = 3173, + [SMALL_STATE(60)] = 3207, + [SMALL_STATE(61)] = 3241, + [SMALL_STATE(62)] = 3275, + [SMALL_STATE(63)] = 3309, + [SMALL_STATE(64)] = 3343, + [SMALL_STATE(65)] = 3377, + [SMALL_STATE(66)] = 3411, + [SMALL_STATE(67)] = 3445, + [SMALL_STATE(68)] = 3500, + [SMALL_STATE(69)] = 3537, + [SMALL_STATE(70)] = 3574, + [SMALL_STATE(71)] = 3611, + [SMALL_STATE(72)] = 3665, + [SMALL_STATE(73)] = 3719, + [SMALL_STATE(74)] = 3773, + [SMALL_STATE(75)] = 3827, + [SMALL_STATE(76)] = 3881, + [SMALL_STATE(77)] = 3915, + [SMALL_STATE(78)] = 3969, + [SMALL_STATE(79)] = 4023, + [SMALL_STATE(80)] = 4077, + [SMALL_STATE(81)] = 4111, + [SMALL_STATE(82)] = 4165, + [SMALL_STATE(83)] = 4219, + [SMALL_STATE(84)] = 4273, + [SMALL_STATE(85)] = 4327, + [SMALL_STATE(86)] = 4381, + [SMALL_STATE(87)] = 4435, + [SMALL_STATE(88)] = 4469, + [SMALL_STATE(89)] = 4500, + [SMALL_STATE(90)] = 4528, + [SMALL_STATE(91)] = 4556, + [SMALL_STATE(92)] = 4584, + [SMALL_STATE(93)] = 4612, + [SMALL_STATE(94)] = 4640, + [SMALL_STATE(95)] = 4668, + [SMALL_STATE(96)] = 4696, + [SMALL_STATE(97)] = 4724, + [SMALL_STATE(98)] = 4752, + [SMALL_STATE(99)] = 4780, + [SMALL_STATE(100)] = 4808, + [SMALL_STATE(101)] = 4836, + [SMALL_STATE(102)] = 4864, + [SMALL_STATE(103)] = 4892, + [SMALL_STATE(104)] = 4920, + [SMALL_STATE(105)] = 4948, + [SMALL_STATE(106)] = 4976, + [SMALL_STATE(107)] = 5004, + [SMALL_STATE(108)] = 5032, + [SMALL_STATE(109)] = 5060, + [SMALL_STATE(110)] = 5088, + [SMALL_STATE(111)] = 5116, + [SMALL_STATE(112)] = 5144, + [SMALL_STATE(113)] = 5172, + [SMALL_STATE(114)] = 5200, + [SMALL_STATE(115)] = 5228, + [SMALL_STATE(116)] = 5261, + [SMALL_STATE(117)] = 5295, + [SMALL_STATE(118)] = 5329, + [SMALL_STATE(119)] = 5363, + [SMALL_STATE(120)] = 5397, + [SMALL_STATE(121)] = 5431, + [SMALL_STATE(122)] = 5465, + [SMALL_STATE(123)] = 5499, + [SMALL_STATE(124)] = 5525, + [SMALL_STATE(125)] = 5551, + [SMALL_STATE(126)] = 5577, + [SMALL_STATE(127)] = 5603, + [SMALL_STATE(128)] = 5629, + [SMALL_STATE(129)] = 5655, + [SMALL_STATE(130)] = 5681, + [SMALL_STATE(131)] = 5700, + [SMALL_STATE(132)] = 5721, + [SMALL_STATE(133)] = 5740, + [SMALL_STATE(134)] = 5759, + [SMALL_STATE(135)] = 5778, + [SMALL_STATE(136)] = 5799, + [SMALL_STATE(137)] = 5822, + [SMALL_STATE(138)] = 5843, + [SMALL_STATE(139)] = 5864, + [SMALL_STATE(140)] = 5885, + [SMALL_STATE(141)] = 5906, + [SMALL_STATE(142)] = 5924, + [SMALL_STATE(143)] = 5944, + [SMALL_STATE(144)] = 5960, + [SMALL_STATE(145)] = 5980, + [SMALL_STATE(146)] = 5996, + [SMALL_STATE(147)] = 6014, + [SMALL_STATE(148)] = 6029, + [SMALL_STATE(149)] = 6044, + [SMALL_STATE(150)] = 6055, + [SMALL_STATE(151)] = 6066, + [SMALL_STATE(152)] = 6081, + [SMALL_STATE(153)] = 6094, + [SMALL_STATE(154)] = 6109, + [SMALL_STATE(155)] = 6128, + [SMALL_STATE(156)] = 6147, + [SMALL_STATE(157)] = 6160, + [SMALL_STATE(158)] = 6173, + [SMALL_STATE(159)] = 6192, + [SMALL_STATE(160)] = 6205, + [SMALL_STATE(161)] = 6221, + [SMALL_STATE(162)] = 6237, + [SMALL_STATE(163)] = 6249, + [SMALL_STATE(164)] = 6265, + [SMALL_STATE(165)] = 6281, + [SMALL_STATE(166)] = 6297, + [SMALL_STATE(167)] = 6310, + [SMALL_STATE(168)] = 6323, + [SMALL_STATE(169)] = 6332, + [SMALL_STATE(170)] = 6345, + [SMALL_STATE(171)] = 6358, + [SMALL_STATE(172)] = 6367, + [SMALL_STATE(173)] = 6380, + [SMALL_STATE(174)] = 6391, + [SMALL_STATE(175)] = 6404, + [SMALL_STATE(176)] = 6417, + [SMALL_STATE(177)] = 6428, + [SMALL_STATE(178)] = 6441, + [SMALL_STATE(179)] = 6454, + [SMALL_STATE(180)] = 6463, + [SMALL_STATE(181)] = 6474, + [SMALL_STATE(182)] = 6483, + [SMALL_STATE(183)] = 6493, + [SMALL_STATE(184)] = 6503, + [SMALL_STATE(185)] = 6513, + [SMALL_STATE(186)] = 6523, + [SMALL_STATE(187)] = 6533, + [SMALL_STATE(188)] = 6543, + [SMALL_STATE(189)] = 6553, + [SMALL_STATE(190)] = 6563, + [SMALL_STATE(191)] = 6573, + [SMALL_STATE(192)] = 6583, + [SMALL_STATE(193)] = 6591, + [SMALL_STATE(194)] = 6601, + [SMALL_STATE(195)] = 6611, + [SMALL_STATE(196)] = 6621, + [SMALL_STATE(197)] = 6628, + [SMALL_STATE(198)] = 6635, + [SMALL_STATE(199)] = 6642, + [SMALL_STATE(200)] = 6649, + [SMALL_STATE(201)] = 6656, + [SMALL_STATE(202)] = 6663, + [SMALL_STATE(203)] = 6670, + [SMALL_STATE(204)] = 6677, + [SMALL_STATE(205)] = 6684, + [SMALL_STATE(206)] = 6691, + [SMALL_STATE(207)] = 6698, + [SMALL_STATE(208)] = 6705, + [SMALL_STATE(209)] = 6712, + [SMALL_STATE(210)] = 6719, + [SMALL_STATE(211)] = 6726, + [SMALL_STATE(212)] = 6733, + [SMALL_STATE(213)] = 6740, + [SMALL_STATE(214)] = 6747, + [SMALL_STATE(215)] = 6754, + [SMALL_STATE(216)] = 6761, }; static const TSParseActionEntry ts_parse_actions[] = { [0] = {.entry = {.count = 0, .reusable = false}}, [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), - [5] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(113), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(45), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(202), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [5] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(200), + [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), - [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [35] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1), - [37] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1), - [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(185), - [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1), + [39] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(195), [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), - [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), - [51] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), + [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), + [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), [55] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [57] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), - [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), - [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [63] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), - [65] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_arguments, 2), - [67] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_full_splat, 4), - [69] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_full_splat, 4), - [71] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_full_splat, 4), SHIFT(23), - [74] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_full_splat, 4), SHIFT(190), - [77] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_full_splat, 3), - [79] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_full_splat, 3), - [81] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_full_splat, 3), SHIFT(23), - [84] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_full_splat, 3), SHIFT(190), - [87] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), - [89] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_arguments, 3), - [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), - [93] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_full_splat_repeat1, 2), - [95] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_full_splat_repeat1, 2), - [97] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_full_splat_repeat1, 2), SHIFT_REPEAT(23), - [100] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_full_splat_repeat1, 2), SHIFT_REPEAT(190), - [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), - [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), - [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(104), - [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(105), - [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [121] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attr_splat, 2), - [123] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_attr_splat, 2), - [125] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_attr_splat, 2), SHIFT(190), - [128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_attr_splat_repeat1, 2), - [130] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_attr_splat_repeat1, 2), - [132] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_attr_splat_repeat1, 2), SHIFT_REPEAT(190), - [135] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attr_splat, 3), - [137] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_attr_splat, 3), - [139] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_attr_splat, 3), SHIFT(190), - [142] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string_lit, 2), - [144] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string_lit, 2), - [146] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string_lit, 3), - [148] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string_lit, 3), + [57] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [63] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), + [65] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_arguments, 3), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), + [69] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_arguments, 2), + [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [75] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), + [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [79] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), + [81] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), + [83] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), + [85] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [87] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [89] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), + [91] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_full_splat, 3), + [93] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_full_splat, 3), + [95] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_full_splat, 3), SHIFT(25), + [98] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_full_splat, 3), SHIFT(198), + [101] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_full_splat_repeat1, 2), + [103] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_full_splat_repeat1, 2), + [105] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_full_splat_repeat1, 2), SHIFT_REPEAT(25), + [108] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_full_splat_repeat1, 2), SHIFT_REPEAT(198), + [111] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_full_splat, 4), + [113] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_full_splat, 4), + [115] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_full_splat, 4), SHIFT(25), + [118] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_full_splat, 4), SHIFT(198), + [121] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_quoted_template, 2), + [123] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_quoted_template, 2), + [125] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_attr_splat_repeat1, 2), + [127] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_attr_splat_repeat1, 2), + [129] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_attr_splat_repeat1, 2), SHIFT_REPEAT(198), + [132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_quoted_template, 3), + [134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_quoted_template, 3), + [136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attr_splat, 3), + [138] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_attr_splat, 3), + [140] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_attr_splat, 3), SHIFT(198), + [143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attr_splat, 2), + [145] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_attr_splat, 2), + [147] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_attr_splat, 2), SHIFT(198), [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_expr, 1), [152] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable_expr, 1), [154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index, 3), - [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_index, 3), - [160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_object_expr, 7), - [162] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_object_expr, 7), - [164] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_literal_value, 1), - [166] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_literal_value, 1), - [168] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_bool_lit, 1), - [170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_bool_lit, 1), + [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_object_expr, 6), + [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_object_expr, 6), + [160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_splat, 1), + [162] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_splat, 1), + [164] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 2), + [166] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 2), + [168] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_tuple_expr, 5), + [170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_tuple_expr, 5), [172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 2), [174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 2), - [176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 2), - [178] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 2), - [180] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_get_attr, 2), - [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_get_attr, 2), - [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 4), - [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 4), - [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 4, .production_id = 1), - [190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 4, .production_id = 1), - [192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_collection_value, 1), - [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_collection_value, 1), - [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 4), - [198] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 4), - [200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_tuple_expr, 5), - [202] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_tuple_expr, 5), - [204] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_object_expr, 6), - [206] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_object_expr, 6), - [208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_term, 1), - [210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_term, 1), - [212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_expr, 1), - [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_expr, 1), - [216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_tuple_expr, 4), - [218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_tuple_expr, 4), - [220] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 3), - [222] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 3), - [224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_term, 3), - [226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_term, 3), - [228] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 3, .production_id = 1), - [230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 3, .production_id = 1), - [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 3), - [234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 3), - [236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_term, 2), - [238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_term, 2), - [240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_splat, 1), - [242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_splat, 1), - [244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_object_expr, 8), - [246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_object_expr, 8), - [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [250] = {.entry = {.count = 1, .reusable = false}}, SHIFT(175), - [252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), - [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [256] = {.entry = {.count = 1, .reusable = false}}, SHIFT(81), - [258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(86), - [260] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [268] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_full_splat, 3), SHIFT(30), - [271] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_full_splat, 3), SHIFT(207), - [274] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_full_splat_repeat1, 2), SHIFT_REPEAT(30), - [277] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_full_splat_repeat1, 2), SHIFT_REPEAT(207), - [280] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_full_splat, 4), SHIFT(30), - [283] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_full_splat, 4), SHIFT(207), - [286] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_attr_splat, 3), SHIFT(207), - [289] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_attr_splat_repeat1, 2), SHIFT_REPEAT(207), - [292] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_attr_splat, 2), SHIFT(207), - [295] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [297] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_variable_expr, 1), SHIFT(29), - [300] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_variable_expr, 1), SHIFT(29), - [303] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_operation, 3), - [305] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_operation, 3), - [307] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_operation, 2), - [309] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_operation, 2), - [311] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation, 1), - [313] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation, 1), - [315] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_intro, 5), - [317] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_intro, 5), - [319] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_conditional, 5), - [321] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_conditional, 5), - [323] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_conditional, 5), SHIFT(18), - [326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_intro, 7), - [328] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_intro, 7), - [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_body, 1), - [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_body_repeat1, 2), - [342] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_body_repeat1, 2), SHIFT_REPEAT(133), - [345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), - [347] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_tuple_repeat1, 2), - [349] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_tuple_repeat1, 2), SHIFT_REPEAT(28), - [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_arguments, 1), - [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(195), - [360] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_conditional, 5), SHIFT(24), - [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), - [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), - [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index, 3), + [178] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_index, 3), + [180] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_object_expr, 7), + [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_object_expr, 7), + [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_term, 3), + [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_term, 3), + [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_object_expr, 8), + [190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_object_expr, 8), + [192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 3), + [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 3), + [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_bool_lit, 1), + [198] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_bool_lit, 1), + [200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 4), + [202] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 4), + [204] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_term, 2), + [206] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_term, 2), + [208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_literal_value, 1), + [210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_literal_value, 1), + [212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 4), + [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 4), + [216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_expr, 1), + [218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_expr, 1), + [220] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 3, .production_id = 1), + [222] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 3, .production_id = 1), + [224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 4, .production_id = 1), + [226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 4, .production_id = 1), + [228] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_expr, 1), + [230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_expr, 1), + [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_get_attr, 2), + [234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_get_attr, 2), + [236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_collection_value, 1), + [238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_collection_value, 1), + [240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_term, 1), + [242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_term, 1), + [244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 3), + [246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 3), + [248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_tuple_expr, 4), + [250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_tuple_expr, 4), + [252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [254] = {.entry = {.count = 1, .reusable = false}}, SHIFT(182), + [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), + [262] = {.entry = {.count = 1, .reusable = false}}, SHIFT(72), + [264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [272] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_full_splat_repeat1, 2), SHIFT_REPEAT(29), + [275] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_full_splat_repeat1, 2), SHIFT_REPEAT(206), + [278] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_full_splat, 4), SHIFT(29), + [281] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_full_splat, 4), SHIFT(206), + [284] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_full_splat, 3), SHIFT(29), + [287] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_full_splat, 3), SHIFT(206), + [290] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_attr_splat, 2), SHIFT(206), + [293] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_attr_splat, 3), SHIFT(206), + [296] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_attr_splat_repeat1, 2), SHIFT_REPEAT(206), + [299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [301] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_variable_expr, 1), SHIFT(21), + [304] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_variable_expr, 1), SHIFT(21), + [307] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_operation, 3), + [309] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_operation, 3), + [311] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_operation, 2), + [313] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_operation, 2), + [315] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_conditional, 5), + [317] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_conditional, 5), + [319] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_conditional, 5), SHIFT(34), + [322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_intro, 7), + [324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_intro, 7), + [326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_intro, 5), + [328] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_intro, 5), + [330] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation, 1), + [332] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation, 1), + [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), + [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), + [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_quoted_template_repeat1, 2), + [356] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_quoted_template_repeat1, 2), SHIFT_REPEAT(151), + [359] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_quoted_template_repeat1, 2), SHIFT_REPEAT(151), + [362] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_quoted_template_repeat1, 2), SHIFT_REPEAT(139), + [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), [371] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_block_repeat1, 2), - [373] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_block_repeat1, 2), SHIFT_REPEAT(145), - [376] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_block_repeat1, 2), SHIFT_REPEAT(152), - [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), - [381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), - [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), - [385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), - [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), - [391] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 3, .production_id = 1), - [393] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_lit_repeat1, 2), - [395] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_lit_repeat1, 2), SHIFT_REPEAT(150), - [398] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), - [400] = {.entry = {.count = 1, .reusable = false}}, SHIFT(95), - [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), - [404] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), - [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), - [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [412] = {.entry = {.count = 1, .reusable = false}}, SHIFT(89), - [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [418] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), - [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), - [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), - [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), - [430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), - [432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_cond, 2), - [436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [438] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 5, .production_id = 1), - [440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [442] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_elem, 3), - [444] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 3, .production_id = 1), - [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [450] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_repeat1, 2), - [452] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_repeat1, 2), SHIFT_REPEAT(12), - [455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 4, .production_id = 1), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), - [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), - [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), - [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), - [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), - [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), - [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), - [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), - [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), - [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), - [515] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_config_file, 1), - [517] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [373] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_block_repeat1, 2), SHIFT_REPEAT(142), + [376] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_block_repeat1, 2), SHIFT_REPEAT(140), + [379] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_body_repeat1, 2), + [381] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_body_repeat1, 2), SHIFT_REPEAT(136), + [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_body, 1), + [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_tuple_repeat1, 2), + [394] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_tuple_repeat1, 2), SHIFT_REPEAT(28), + [397] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_template_interpolation_repeat1, 2), + [399] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_template_interpolation_repeat1, 2), SHIFT_REPEAT(148), + [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [406] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_interpolation, 2), + [408] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_interpolation, 2), + [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [422] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_arguments, 1), + [424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), + [428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [430] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_conditional, 5), SHIFT(15), + [433] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_interpolation, 3), + [435] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_interpolation, 3), + [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [447] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 3, .production_id = 1), + [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), + [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string_lit, 1), + [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [469] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 4, .production_id = 1), + [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [477] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_repeat1, 2), + [479] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_repeat1, 2), SHIFT_REPEAT(13), + [482] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_cond, 2), + [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [488] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 3, .production_id = 1), + [490] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_elem, 3), + [492] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 5, .production_id = 1), + [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), + [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), + [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), + [534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), + [548] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_config_file, 1), + [550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [552] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), }; #ifdef __cplusplus extern "C" { #endif +void *tree_sitter_hcl_external_scanner_create(void); +void tree_sitter_hcl_external_scanner_destroy(void *); +bool tree_sitter_hcl_external_scanner_scan(void *, TSLexer *, const bool *); +unsigned tree_sitter_hcl_external_scanner_serialize(void *, char *); +void tree_sitter_hcl_external_scanner_deserialize(void *, const char *, unsigned); + #ifdef _WIN32 #define extern __declspec(dllexport) #endif @@ -8577,6 +8798,15 @@ extern const TSLanguage *tree_sitter_hcl(void) { .alias_sequences = &ts_alias_sequences[0][0], .lex_modes = ts_lex_modes, .lex_fn = ts_lex, + .external_scanner = { + &ts_external_scanner_states[0][0], + ts_external_scanner_symbol_map, + tree_sitter_hcl_external_scanner_create, + tree_sitter_hcl_external_scanner_destroy, + tree_sitter_hcl_external_scanner_scan, + tree_sitter_hcl_external_scanner_serialize, + tree_sitter_hcl_external_scanner_deserialize, + }, }; return &language; } diff --git a/src/scanner.c b/src/scanner.c new file mode 100644 index 0000000..3730ba7 --- /dev/null +++ b/src/scanner.c @@ -0,0 +1,148 @@ +#include +#include + +// forward declarations + +enum TokenType { + TEMPLATE_CHAR, + TEMPLATE_CHAR_IN_INTERPOLATION, + ESCAPE_SEQUENCE +}; + +// helpers + +static void advance(TSLexer *lexer) { lexer->advance(lexer, false); } + +static bool accept_template_char_inplace(TSLexer *lexer) { + lexer->result_symbol = TEMPLATE_CHAR; + return true; +} + +static bool advance_and_accept_template_char(TSLexer *lexer) { + advance(lexer); + return accept_template_char_inplace(lexer); +} + +static bool advance_and_accept_escape_sequence(TSLexer *lexer) { + lexer->result_symbol = ESCAPE_SEQUENCE; + advance(lexer); + return true; +} + +static bool advance_and_accept_template_char_in_interpolation(TSLexer *lexer) { + advance(lexer); + lexer->result_symbol = TEMPLATE_CHAR_IN_INTERPOLATION; + return true; +} + +static bool consume_wxdigit(TSLexer *lexer) { + advance(lexer); + return iswxdigit(lexer->lookahead); +} + +// scan escape sequences \n \t \r \\ \" \uHHHH or \UHHHHHHHHA where H is a hex digit +// assumes that the leading character is '\' +static bool scan_backslash_escape_sequence(TSLexer *lexer) { + advance(lexer); + switch (lexer->lookahead) { + case '"': + case 'n': + case 'r': + case 't': + case '\\': + return advance_and_accept_escape_sequence(lexer); + case 'u': + for (int i = 0; i < 4; i++) { + if (!consume_wxdigit(lexer)) return false; + } + return advance_and_accept_escape_sequence(lexer); + case 'U': + for (int i = 0; i < 8; i++) { + if (!consume_wxdigit(lexer)) return false; + } + return advance_and_accept_escape_sequence(lexer); + default: + return false; + } +} + +// may accept multiple characters like %% as a 'template literal chunk' +// assumes that the leading character is '%' or '$' +static bool scan_template_literal_chunk_or_template_escape_sequence(TSLexer *lexer) { + const leading_char = lexer->lookahead; + + advance(lexer); + // reject %{ because its the start of template directives + if (lexer->lookahead == '{') return false; + if (lexer->lookahead == leading_char) { + advance(lexer); + // accept %%{ as escape sequence + if (lexer->lookahead == '{') return advance_and_accept_escape_sequence(lexer); + } + // accept % and %% as template chars + return accept_template_char_inplace(lexer); +} + +static bool scan_template_char_or_escape_sequence(TSLexer *lexer) { + switch (lexer->lookahead) { + case '"': + case '\n': + case '\r': + case '\t': + return false; + case '\\': + return scan_backslash_escape_sequence(lexer); + case '$': + case '%': + return scan_template_literal_chunk_or_template_escape_sequence(lexer); + default: + return advance_and_accept_template_char(lexer); + } +} + +static bool scan_template_char_in_interpolation_or_escape_sequence(TSLexer *lexer) { + switch (lexer->lookahead) { + case '"': + case '\n': + case '\r': + case '\t': + // no template interpolation chars are allowed in template interpolations ( even escaped ) + case '$': + case '%': + case '~': + return false; + // '}' ends the template interpolation + case '}': + return false; + case '\\': + return scan_backslash_escape_sequence(lexer); + default: + return advance_and_accept_template_char_in_interpolation(lexer); + } +} + +// scanner + +void *tree_sitter_hcl_external_scanner_create() { return NULL; } +void tree_sitter_hcl_external_scanner_destroy(void *p) {} +void tree_sitter_hcl_external_scanner_reset(void *p) {} +unsigned tree_sitter_hcl_external_scanner_serialize(void *p, char *b) { return 0; } +void tree_sitter_hcl_external_scanner_deserialize(void *p, const char *b, unsigned n) {} + + +bool tree_sitter_hcl_external_scanner_scan( + void *p, + TSLexer *lexer, + const bool *valid_symbols +) { + // when scanning string literals or quoted template literals that are not in an template directive + if (valid_symbols[TEMPLATE_CHAR] && valid_symbols[ESCAPE_SEQUENCE]) { + return scan_template_char_or_escape_sequence(lexer); + } + // quoted template literals currently inside a template directive + if (valid_symbols[TEMPLATE_CHAR_IN_INTERPOLATION] && valid_symbols[ESCAPE_SEQUENCE]) { + return scan_template_char_in_interpolation_or_escape_sequence(lexer); + } + return false; +} + diff --git a/test/corpus/attributes.txt b/test/corpus/attributes.txt index 6af037f..6f12059 100644 --- a/test/corpus/attributes.txt +++ b/test/corpus/attributes.txt @@ -10,10 +10,7 @@ foo = "bar" (body (attribute (identifier) - (expression - (expr_term - (literal_value - (string_lit))))))) + (expression (expr_term (template_expr (quoted_template))))))) ================== attribute with variable @@ -27,8 +24,5 @@ foo = bar (body (attribute (identifier) - (expression - (expr_term - (variable_expr - (identifier))))))) + (expression (expr_term (variable_expr (identifier))))))) diff --git a/test/corpus/blocks.txt b/test/corpus/blocks.txt index 20a6c10..9afa2a4 100644 --- a/test/corpus/blocks.txt +++ b/test/corpus/blocks.txt @@ -39,15 +39,12 @@ block_1 "strlit1" "strlit2" { (body (block (identifier) - (string_lit) - (string_lit) + (string_lit (quoted_template)) + (string_lit (quoted_template)) (body (attribute (identifier) - (expression - (expr_term - (literal_value - (string_lit))))))))) + (expression (expr_term (template_expr (quoted_template))))))))) ================== nested block diff --git a/test/corpus/collections.txt b/test/corpus/collections.txt index f6c27f4..de38c60 100644 --- a/test/corpus/collections.txt +++ b/test/corpus/collections.txt @@ -16,7 +16,7 @@ foo = [1, 2, "foo"] (tuple (expression (expr_term (literal_value (numeric_lit)))) (expression (expr_term (literal_value (numeric_lit)))) - (expression (expr_term (literal_value (string_lit))))))))))) + (expression (expr_term (template_expr (quoted_template))))))))))) ================== collection value object @@ -38,6 +38,6 @@ foo = {1: 2, "foo"="bar"} (expression (expr_term (literal_value (numeric_lit)))) (expression (expr_term (literal_value (numeric_lit))))) (object_elem - (expression (expr_term (literal_value (string_lit)))) - (expression (expr_term (literal_value (string_lit)))))))))))) + (expression (expr_term (template_expr (quoted_template)))) + (expression (expr_term (template_expr (quoted_template)))))))))))) diff --git a/test/corpus/for_expressions.txt b/test/corpus/for_expressions.txt index 039fd6e..608be04 100644 --- a/test/corpus/for_expressions.txt +++ b/test/corpus/for_expressions.txt @@ -20,8 +20,8 @@ foo = [for v in ["a", "b"]: v] (expr_term (collection_value (tuple - (expression (expr_term (literal_value (string_lit)))) - (expression (expr_term (literal_value (string_lit))))))))) + (expression (expr_term (template_expr (quoted_template)))) + (expression (expr_term (template_expr (quoted_template))))))))) (expression (expr_term (variable_expr (identifier))))))))))) ================== @@ -47,8 +47,8 @@ foo = [for i, v in ["a", "b"]: i] (expr_term (collection_value (tuple - (expression (expr_term (literal_value (string_lit)))) - (expression (expr_term (literal_value (string_lit))))))))) + (expression (expr_term (template_expr (quoted_template)))) + (expression (expr_term (template_expr (quoted_template))))))))) (expression (expr_term (variable_expr (identifier))))))))))) ================== @@ -74,9 +74,9 @@ foo = [for i, v in ["a", "b", "c"]: v if pred(i)] (expr_term (collection_value (tuple - (expression (expr_term (literal_value (string_lit)))) - (expression (expr_term (literal_value (string_lit)))) - (expression (expr_term (literal_value (string_lit))))))))) + (expression (expr_term (template_expr (quoted_template)))) + (expression (expr_term (template_expr (quoted_template)))) + (expression (expr_term (template_expr (quoted_template))))))))) (expression (expr_term (variable_expr (identifier)))) (for_cond (expression @@ -109,8 +109,8 @@ foo = {for i, v in ["a", "b"]: v => i} (expr_term (collection_value (tuple - (expression (expr_term (literal_value (string_lit)))) - (expression (expr_term (literal_value (string_lit))))))))) + (expression (expr_term (template_expr (quoted_template)))) + (expression (expr_term (template_expr (quoted_template))))))))) (expression (expr_term (variable_expr (identifier)))) (expression (expr_term (variable_expr (identifier))))))))))) @@ -137,7 +137,7 @@ foo = {for i, v in ["a", "b"]: v => i...} (expr_term (collection_value (tuple - (expression (expr_term (literal_value (string_lit)))) - (expression (expr_term (literal_value (string_lit))))))))) + (expression (expr_term (template_expr (quoted_template)))) + (expression (expr_term (template_expr (quoted_template))))))))) (expression (expr_term (variable_expr (identifier)))) (expression (expr_term (variable_expr (identifier)))) (ellipsis)))))))) diff --git a/test/corpus/function_calls.txt b/test/corpus/function_calls.txt index f6303f5..cdf7833 100644 --- a/test/corpus/function_calls.txt +++ b/test/corpus/function_calls.txt @@ -10,10 +10,7 @@ foo = bar() (body (attribute (identifier) - (expression - (expr_term - (function_call - (identifier))))))) + (expression (expr_term (function_call (identifier))))))) ================== unary function call @@ -32,10 +29,7 @@ foo = bar("foo") (function_call (identifier) (function_arguments - (expression - (expr_term - (literal_value - (string_lit))))))))))) + (expression (expr_term (template_expr (quoted_template))))))))))) ================== variadic function call @@ -77,7 +71,7 @@ foo = bar( (function_call (identifier) (function_arguments - (expression (expr_term (literal_value (string_lit)))) - (expression (expr_term (literal_value (string_lit)))) - (expression (expr_term (literal_value (string_lit))))))))))) + (expression (expr_term (template_expr (quoted_template)))) + (expression (expr_term (template_expr (quoted_template)))) + (expression (expr_term (template_expr (quoted_template))))))))))) diff --git a/test/corpus/literals.txt b/test/corpus/literals.txt index d819571..27fc76f 100644 --- a/test/corpus/literals.txt +++ b/test/corpus/literals.txt @@ -125,158 +125,4 @@ foo = null (identifier) (expression (expr_term (literal_value (null_lit))))))) -================== -string literal one line -================== - -foo = "bar" - ---- - -(config_file - (body - (attribute - (identifier) - (expression (expr_term (literal_value (string_lit))))))) - -================== -string literal escaped newline -================== - -foo = "bar\nbaz" - ---- - -(config_file - (body - (attribute - (identifier) - (expression (expr_term (literal_value (string_lit (escape_sequence)))))))) - -================== -string literal escaped tab -================== - -foo = "bar\tbaz" - ---- - -(config_file - (body - (attribute - (identifier) - (expression (expr_term (literal_value (string_lit (escape_sequence)))))))) - -================== -string literal escaped " -================== - -foo = "bar\"baz" - ---- - -(config_file - (body - (attribute - (identifier) - (expression (expr_term (literal_value (string_lit (escape_sequence)))))))) - -================== -string literal escaped \ -================== - -foo = "bar\\baz" - ---- - -(config_file - (body - (attribute - (identifier) - (expression (expr_term (literal_value (string_lit (escape_sequence)))))))) - -================== -string literal escaped \uFFFF -================== - -foo = "bar\uFFFFbaz" - ---- - -(config_file - (body - (attribute - (identifier) - (expression (expr_term (literal_value (string_lit (escape_sequence)))))))) - -================== -string bad escape sequence -================== - -foo = "bar\pbaz" - ---- - -(config_file - (body - (attribute - (identifier) - (expression (expr_term (literal_value (string_lit (ERROR (UNEXPECTED 'p'))))))))) - -================== -string bad escape sequence 2 -================== - -foo = "bar\uZZ" - ---- - -(config_file - (body - (attribute - (identifier) - (expression (expr_term (literal_value (string_lit (ERROR (UNEXPECTED 'Z'))))))))) - -================== -string literal multi line error -================== - -foo = " -bar" - ---- - -(config_file - (body - (attribute - (identifier) - (expression (expr_term (literal_value (string_lit (ERROR (UNEXPECTED 'b'))))))))) - -================== -string literal unescaped tab -================== - -foo = "foo bar" - ---- - -(config_file - (body - (attribute - (identifier) - (expression (expr_term (literal_value (string_lit (ERROR (UNEXPECTED 'b'))))))))) - -================== -string literal unescaped backslash -================== - -foo = "foo\bar" - ---- - -(config_file - (body - (attribute - (identifier) - (expression (expr_term (literal_value (string_lit (ERROR (UNEXPECTED 'b'))))))))) diff --git a/test/corpus/strings.txt b/test/corpus/strings.txt new file mode 100644 index 0000000..2bd0710 --- /dev/null +++ b/test/corpus/strings.txt @@ -0,0 +1,288 @@ +================== +string literal one line +================== + +foo = "bar" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template))))))) + +================== +string literal escaped newline +================== + +foo = "bar\nbaz" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (escape_sequence)))))))) + +================== +string literal escaped tab +================== + +foo = "bar\tbaz" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (escape_sequence)))))))) + +================== +string literal escaped " +================== + +foo = "bar\"baz" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (escape_sequence)))))))) + +================== +string literal escaped \ +================== + +foo = "bar\\baz" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (escape_sequence)))))))) + +================== +string literal escaped \uFFFF +================== + +foo = "bar\uFFFFbaz" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (escape_sequence)))))))) + +================== +string bad escape sequence +================== + +foo = "bar\pbaz" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (ERROR (UNEXPECTED '\'))))))))) + +================== +string bad escape sequence 2 +================== + +foo = "bar\uZZ" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (ERROR (UNEXPECTED '\'))))))))) + +================== +string literal multi line error +================== + +foo = " +bar" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (ERROR (UNEXPECTED 'b'))))))))) + +================== +string literal unescaped tab +================== + +foo = "foo bar" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (ERROR (UNEXPECTED 'b'))))))))) + +================== +string literal unescaped backslash +================== + +foo = "foo\bar" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (ERROR (UNEXPECTED '\'))))))))) + +================== +string literal escaped backslash at end +================== + +foo = "foo\\" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (escape_sequence)))))))) + + +================== +string literal escaped template interpolation +================== + +foo = "$${foo.bar}" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (escape_sequence)))))))) + +================== +string literal template chars but no template 1 +================== + +foo = "$$$" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template))))))) + +================== +string literal template chars but no template 2 +================== + +foo = "100%" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template))))))) + +================== +string literal template chars but no template 3 +================== + +foo = "%\n\t" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template + (escape_sequence) + (escape_sequence)))))))) + +================== +string literal template chars but no template 4 +================== + +foo = "%%\n\t" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template + (escape_sequence) + (escape_sequence)))))))) + +================== +string literal template chars but no template 5 +================== + +foo = "$$" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template))))))) + +================== +string literal template chars but no template 6 +================== + +foo = "%%{\n\t" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template + (escape_sequence) + (escape_sequence) + (escape_sequence)))))))) + +================== +string literal escaped template +================== + +foo = "$${ var.bar }" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (escape_sequence)))))))) diff --git a/test/corpus/templates.txt b/test/corpus/templates.txt new file mode 100644 index 0000000..787e37e --- /dev/null +++ b/test/corpus/templates.txt @@ -0,0 +1,13 @@ +================== +quoted template expression +================== + +foo = "${ var.bar }" + +--- + +(config_file + (body + (attribute + (identifier) + (expression (expr_term (template_expr (quoted_template (template_interpolation)))))))) From 8205a65c1bc560b65deb464af2610829a79e9d9b Mon Sep 17 00:00:00 2001 From: mhoffm Date: Mon, 14 Jun 2021 23:17:39 +0200 Subject: [PATCH 2/3] dont track example.png --- README.md | 2 +- example/example.png | Bin 36919 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 example/example.png diff --git a/README.md b/README.md index bb0da45..efd78b8 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ To run tests simply run `nix-shell --run 'tree-sitter test'`. Highlighting `example/example.hcl`: -![Highlighting Example](/example/example.png "highlighting example") +![Highlighting Example](https://imgur.com/JdfxHvE) ## Quoted Template Expressions diff --git a/example/example.png b/example/example.png deleted file mode 100644 index e050efc44b3e8afe3ac9d885125d0b283d504d83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36919 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

YV?G}E<% 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 From e4750975e4daaff6f186962fca4b9de6b65757d8 Mon Sep 17 00:00:00 2001 From: mhoffm Date: Mon, 14 Jun 2021 23:20:09 +0200 Subject: [PATCH 3/3] fix image link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index efd78b8..ade34fc 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ To run tests simply run `nix-shell --run 'tree-sitter test'`. Highlighting `example/example.hcl`: -![Highlighting Example](https://imgur.com/JdfxHvE) +![Highlighting Example](https://i.imgur.com/JdfxHvE.jpeg) ## Quoted Template Expressions