From c1637054a439b4605a7d55adfd49077837117316 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 17 Feb 2023 16:41:21 +0100 Subject: [PATCH] Fix semicolon parsing --- src/syntax/parser.rs | 4 +++- tests/ref/text/space.png | Bin 5941 -> 6794 bytes tests/typ/text/space.typ | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/syntax/parser.rs b/src/syntax/parser.rs index d966df98c..3b89e71c5 100644 --- a/src/syntax/parser.rs +++ b/src/syntax/parser.rs @@ -529,7 +529,9 @@ fn embedded_code_expr(p: &mut Parser) { p.unexpected(); } - let semi = p.eat_if(SyntaxKind::Semicolon); + let semi = + (stmt || p.directly_at(SyntaxKind::Semicolon)) && p.eat_if(SyntaxKind::Semicolon); + if stmt && !semi && !p.eof() && !p.at(SyntaxKind::RightBracket) { p.expected("semicolon or line break"); } diff --git a/tests/ref/text/space.png b/tests/ref/text/space.png index 09efda70e1dd784c0467cb62c9b8f4a1d54b8b8e..cfbf886d939ea5393b87d29174377bcd59560167 100644 GIT binary patch literal 6794 zcmZ{pbyQW`_Q#QsO`ih@N*}sGM3IzpIJD9wAPCZeASI39mXMb2R^*VX`a9xq?w?kpcX){2*76fh3bp@wfN=Cm3p@@T8*DR3z8 z+>fPJ)KIm24b9I+>gloPCtI+8i?QN>t5aEph_mC#jGkN?n8(N8d$DRiUFRj-x4h@S zCvL7};9}l;nB5pVA=5*8Wz0wWC3*xJB9s;edigTKjizE?x#!&pXy)KzA%rriin9l zAsz(vwnrnx4|i$6sIJ*3yncpBrl<#2-~600cUT|3BS00hMW>DwMY8VM2C|RZY089$ z606r#hmaDcKiVdvrJerR7ef-!DPe>^2_r|88>&>2r@B#rP1Z>&fZ;E`#Z@`4Rv){7 zC*=6B&M`)1k{u3WFwhz$2gJ{O8|Gwwj94M1rluZ>5hAl{i?f)@)4JPAR@%b;xzmDx zH+vxE?|YVabzC{dYD;P{E;b4Bvnvl2U2c72U;3y^N@SB1Z~pn+D-O{Ihx0bpNAyp7 zj*o?#IH_6*z<$NyuB*==_7e6#Z^N!$HswTt& zsA0!PC`ViqmH!<3`Xi4R zL<%lGi(|ltMv0PkGyqK!RO!G%pn7;$?{nzMRSea@i*y8$%Ea z8fv*y+3?FN9-^!3S+gn>CWG8EUhFyIUaGHTtULr;cWotX;Fb>vPdi+*@ImH_Wn|T| zK+w@{^c_PeXkiZ9SBYCi-Dsrd$Key>Wd1)3(kx5!t~r^o;&3egC#5;5|67&t8Sz& zNUkI#CDl45O`_anEE*|AAa1U7v1Ypl2h}FB{9Qv{8%d$iPmYAOrc%cfX%a&oGcUr4 ze7JynC&c1RNsjJAemk~jnOh?YH4KjzXIJm|_}wOkvh12<_;erU$WX>Cf;%|{+u|3D zI~%Hj@+V$upUw*#m+8_39<8#5Iq5$CQCxWixRv)kUu8N)z_ z-fUPP#q?~Ri4hqdfALkkf|V4LXF&ilGby%zFwjG!85$`GXfwrjsIR|_@Lx1m59@46 zcv5L=IB)jTqm(U873cRe!uR9(@GU%9!LTaxtyueEOZ`gv*uJNc=`X++nh%$!epaH2 zWS=J2zw(|sQ6sbTIg1nf#<+3FTeg5M>lq=$bH;u(Q}2D%tLl+f-Jm;me3HKr)oUGR z0JVyZs$U9Q!!ezJQnU}ry(!B-AW!7ftM%6U46NIP1mcdL9rnQCx4V_N2%L)+PiO8D zmrpxr}A8p+lLUL9FKB%f=CFu5V49A(N&9d0IG5It#Dk_TH9Q2ofc6RF=MgnKpXG2}O*lT8$jC~q83JZ*R zruMT^vg0N`P`cyV$M#naY&bG$>_V$NISM24CLrH9W5$clXRbbwHBp!t`(Vn-H^kJ! z{uo3z$F`-{cz5oL>I_Bh86%!w|KvAG@pm6<@N}9g3>LS8{PEofMdg4zmtGR%q#_stm>H3M4+2`0bG(;gz%pRr&f?y7>y5vn23HbVA>R$69?|wPVs-inkDvL1r4bCQ>g~pBF0e3DTi{+76x%K)-7R4B5 z>sn@fMERqaJL71%Mf0iITi8Ze>%8@QbHOU-hntfXp|#y_0(|-}-a9sxwn3uOi`DQa zAZ*^ZV5oKztK2(-W(GU>xM`Z552G%?YKHaCAa z^S|->QVC4@vAl-^|D&dOFOX2A9de>Tvh)R-5*(exgN??cF!sn{+z$u}O4L!jLt*1z zxcco$S3+@xwB+sO#Aa72huDrGf$W*NqC$mI1>dvkbbu5|QR# zB}&%l=SAy6x>M>cq2FDW$qp9YA3HTX3gQ>z4ThXaD}o?#Oasb)#dzhmTqKM5bs$>Rqm zyx{X{9&45m;*!@$aYEq?29K8dsLxC%cW}|L2N4!fb%|oazJ5_eRG~oJ@r^HgZD-ppg&uM?k<8wohj^HjH48q$!&5zbZ@ z-}2jw8h7$NMAZxr=W7wZmq&PgN{#V}|A{|otYaUy1=*yBy1i_!p5B0HKL6_=Hn3JL%Dm4*R5qvT{2aC3W^77_67i0#?MOsH12B+BRZ{6PLZFF!;E4;4Xslk?Hvq{V}sSI8|Nu6v;;TEW7VsZcOJeANm=e z9_3bg^d=zHW40IG=@BX@6gU=leu9kbQ=+vcHjJ}QKB<4H);37TN!qZmxB0<;*29M&mJ9_uhTTUZpg0Z15gm zrozrnKOnsFx9K>ut`Zd1EKPg`&CAABJ9!WWW3QOc5+nSe^5Lg@we)zC^MK1yVgV2~ zRg*(dXHLI%xx&w0`BteY>^>07L(!Ej^kIAk?^)OADlM#H9AL~H)p<8pNyKK(syHf& zreM8j{rro77!=0C!*iH)^T_2ruDFD{?Urv|^HIZs{+rx zR0Y70&9(&X;6>=&2#!9J5YsQbK%|Xrmw9Y%Ci#%|3io0bJG zi>RU@)Mp9kmdl|w>cg!K;KGma&Y%#;SCqe>BmVNPje&9n)tytM4rR4s{wM$3ig{L0 z;Y+{QJF~JoW#Ui!<7zT0*nUzJsGAAq{tv0*y3V4%@efS{ojZ9$V{$ecx#0j?B2z<19A&55{902}R`37MaIp-I;( z9MYpx9WVSvMT&DHcJMck`z^y>vj2bfO}oO@7ya+{A%6h63my2|73&>n^&KC}lpQ54 zJ!0=OzhwqGa4+F0PQH)-3^lzBx6xDi%$_#;yTnxBwp)peS&q`a0HZ)Afm(mbn{H>fMH+8*y4e&=cNJTm z(D=e=tOA-d#d2=}%ypW3Z=JfCa1mLl8bTz_G_)e*Tt9&}8m_L zm78a0XP?S@OL%mQRce2G%W1|viqsvh0Jo#Rz-7GEDW1A(10>$*?Ayq9LDX2B100d5 z1N(Od+-$WRA7r~mwev*94u*ME9kpGBCXK$xlAqyES>2WQshtazek&8rW2G&qSNpZa z=BbEL9II2aW8J_cqflW!;k^-Co#IYw)VNLX8|BohFu&2OvAyJ;^49?q86Ql9p{Jpt{smNtpxWHyT)Dm>(h>g*)*AD5x9N_6?C( zA9O((ovu*mrpe3qGAoQuT&j>MX%n!GPb%ZA;KLYi9l||Q0 zqcpk_7@Ho}4mhiRMo9siah@o8-$D@7Uz>4C=k%&$sWM8&{kQOZivgOmj4`%wK0uJ1 z@Erz@b3H&$9UmXxj$BqoFtsP5Z#)11*E}4EfR6V(wBYEMFzfk%Pju4&%u82lmS>!e ze3-cV7M)M`#%+kqS9LU#Se|hwcLk2Mdp5cO97@G4Wob+2GypHzcHWz{lGLR<}r5xe*z!OLSXq zE6=G>ZQ}hc@p_TK4C(fT46Q+&-Q_JK#by~7Q3(kzE245a3s8KJnX5mImP0!TY9EGVn!Kt2=&pAD=_5QmkPQLz- z)_ecS+=N4+lXcN=9myP5sbaZGZp;Fhg_M+(LW`O+QWn^Y^us|{nBe$6oKi9YzU$9i^ zDw3-h6ljsfcXo_$W(=DCv=Uae;HWwc&ap4j=V8Go`G{&k-p5+Bf?Z>3Rl@eUp6h_n zk9wJhwi*IKyeLhYX%!TQqinu0hho0*N`&r3W|GK-&g*8VTxj1&)|c66V435KZM@) zR}=E4vGZ%xRXAywfL#i>OP}6ZC^z7c|6AMnORW6S1!radnJUBCeqLcX-0z;=rU55tgZbn2p zr3HNT+;i`HJon!9S)aYvUh9v&_FhkXe-BbiLy7Pf^(`zcEJEc+@;X>p*mzi2xSYVx z39Rlx5(+FV@=IlTSzWK$ods_{LW3Xp``^SwQ1g$NTp@-Xu%Ow5S(WX&aUEGWX90)a zW(s?Xm!R(K;c#t%%7u~Swjuk$PYXJ=SCal07nXx- z-@?uZ=X<%E7t$WM?Pj`B%7O4?fA%J z%psYGF*AgE&lbRikdRmjV=7d_?hlBB1e7xETUcsqwQGtYDorO#S~9>z(rx#s&<%d# zX_5gRitC$3JXC1JKbXXNQpG_LB3>OTo}#4qv5a}Mw7PhFZ%5X5!F-00w7xdBJkfTt zz?@nlw~I#gggd5q^wbc@7?O`vJ>N$o+*&*z+H-pQmceHT2H_m1o_GuM;JWyU#uw|m z0RFUEF(}WU*Q_zNTO4Fn4Hsav@Fkus8TPpaU3&li{j_6qi!OVY#R_>@gizs_{@X_j zz2x&MZ>9hC&FHIy7t1!~<^yI`PYx~RMCZCP-Bwg@3`+OQ`R*kUV47}SABYPRt{TC! zrK`J;$jGiK0ku>hS7Djc@*wm?`7St;9KREEQXmL4ok>*HmUFqt<}@W6J_-i)YbIYm zB@67THnEVUwBYcv)&QxHrN&$NyQ&}<@;!ZMXojlY4R-(JIK zkm#@I3#v?PVM}2h%5+uexwFnS)Tx8|hr1)+!d2?m`E%Q&JoSH-kM`b2!QiP~Bm&tinhhcMDz#Qn>E0+|A zQSv8w@}_KlC@iu&XAy%uWO5g@HM&Djp&F^RF8ru)5_1h$pE)#w{E{>j9+L%X$&PNpHB9{BG+3j8K=*$%d?SQ(wGYS4Bm|E?zh*yPSN&HDZ-VZ;mu) z+hNPqB8-T^Qv_|TxDKBce0#?H>(kU$*RQ`4}e5&X-6dV-g8iE36^g`iua@mZpG zoi(t~?O+WDz3XiqHtE3geo*L#OqM>LC72k3%BlhORnIPS7b51X0dIZ01f-%VN;=m+bu5l_OP_S|X2AN2Y)UBrnq6^OhhbzKUO zrA0-oF&T=KzY9R{&1Y9H5`R1*3g0)!RTnFD`t)#*BYS#(g0)A1sMS-X$ukg(sYJcCP$Tp0H$wVvUUas zDdsEB?QP72=m$GRt|sei+EA#iFw6UZ)wj)-;4*hEAj8EtzlE-z7%k^B1nko12~FVP z;R%^iMi)JgMCq4q2}$M*^U$ljNBV6eK6NeCs2}Vnv;yPwo-|&Mhk(+?i9l!J>9yn9 zNJF}n10uxB;^N}D!bZtrYedYY5kC6)(Az$hkwjyP9l)yU?%?1CC1b0>vN{bq_U4ZG zz?!7u9O!+-{p`Kr2WWzZH3#5Fb-+Z6Y_bmEcGlpdm{S#sE8i=TY(rY(ulJU(-$k~^ zemA|q1dmR$fm`v39>T^`eNHOeavHQLucUNZf?i@WVjdQ_&WgC-L4f(N(?Ll>MKxn3 zKa;L;tjY9*ncIp0kvgpn_r;HePE7_L#mL~_slqWOtWnRSCXuaX9A0;=-~>*gbdTGr zt3z3P!<@M*^MYiYYABMhg*?+8mJAaK0#jTAwT^IzeXU&aF$KA91F9VYeMVdMlD%JnNQ0qGQq$nF2QKu!6E8)J0P|^Ek9MMZ zoh9}z{`#SeQYpA9W5=`<;wD>;pM@hXLFp#63_VhvOW!LxTnIPCss#cjK zb^yW;FZLE&oA>Cx8>6V*tnNC)Du7JCZGdqQ;C&JsIru&EJHu@I+A9sPqKn~Mtz-VR zcE&clvQdK@_$}faq!^F#mzK!g{oH$Nh)#zYr$r$$j|k_9rfk@!FTT$}w@UPCga{^g zX0ajVQ;`J+m)U*nj(fg!tW%R1qm#mV(|a@(f{f{Bcr8q%cfJaRMLBdBF5C;zqNL71 zIreP)!#*Z$K3O{9tpQ%%m%x|J-(0&bWqeNIX6MSML-6kQh{4?CS=OW~?hxsj?0qIa z6t3oV2vBoAn$I%>9-RDqN%~<52*dsVl#X_C6PuvRyILxu;VWFs9V>oOYvf5cDjqa* zz8Zet!<=bObt_GH^&_^h>K>3fHaaS0E%);}`V72#UaMnJSZywl0oh(M_EgNd4(&H9 zu<}o!Fr|f<6Vsa2uqyT(+bWq|HbO|4wQAE3Np*KZSstL-9XLn8$B(^{ASNS_YyUBW zPr;p2(W@npn4Mrg<;Ra`@YDP8d&6VNUbEJY} z<67#$gKEYM;o2tVn?)IU<)^608qVHO8NP!!sdi?s_a{P`bs24Jx6x(mu@0-D@6yM2 z4m_g$ghe8Ae;f!O|zVQv#WhV z`|;F^TeFLcHwouA8q&@VoyXYwSbmE**}g#qDm*WA_6Y4zmw0*?PbdkWInq89dEldT zu*V_;&{&nt_EQC3eA|-eo(VH!U6VsygIibUdbiI}51oVf%T0W@IVBPV?aA7BIOp%G_9%7 z`-$+!H{AlhlvE462`F|$IP86dk-;=&*J&syDCVLY4C);Y2x1JI^2q|8?uE%!yF}`D zQjgi9wDWf@ju%{-Gl|!P5-r-2?>%(Gy&_oG#s2LiYDr-cMw3aR9yKNlzWO)_ABUW= z*>7gndjQ-AliwFrbzyiM6W3*z(zF$IpO2s4#fmIg0LH8S6`rzVtUm-V8w3|#?3kf4 z!H)5-p`x%f_cz44Y`6Pu$ur(LA%-!evnwKiZYu$pa9>BsT~oYt?*&?9`}Uhnml{E6 ztFIH&t?-1m9$t&OYPOdPI)F&G_by}K*CCZaEz*3oEaQqY+`vd(6>T4?#;3OsLyZEx zz1*R9@PkIhK1CiH%ekwOAWScd*VotU{aSHlCHd<`thCALS#g6p8(i~AmI@0D!whB| znSR6wFqE#)D7SE26qBO49q6@xxEhSJS$GDFScGjnOZ|g$K^#q-Ai(;34Wt`h7Z2|pKDWmRh3(}?uCT4NmMu?#7eWr-dyl! z7+w)-ENBjS@psK#7nvi1x50Z3)(8b<<^Hva@#j2xdw^lu zp|n)0i8BL_ii(O)O?o%}Y-qp+y(wsKvc>nb`w4UdVxH>SRzfpb;~}QhBcvaz^LeRA z5G^rRqlxbxV5VlZ`J%e8dZhqlHJ6n#R57o{`?YM86P<{?85Sj7NmcNsr|Y`j$&Izd zDJ0W4_z3Ad=Z4UqD6v(dl=9r3HqG@z!rwL1m9ES;+-wx;8)rvfR2spA_|(2rIx4#YAjEPjf$DF7{THi8o5a3i0D^vXV&Z%0f&W!}{Yto(nxO3( zf=KzuOkD9F3}iv(!lq<_>?|xSYWt^BtdL*Ngt9!XpI0oQ&Y#$}qvD2|9wC+m(<>i9 z+2|R;L1PYR4d5wr3sG7PScuMw%r#$E8Q=|+trgQ_PacvCY7A;eEn^&aVw2~*Exem}^@ zBOw2YV|&Vnw>RjOq3wT>l7Heu04eq_-TAZMe~Gh8`!}fglgj(3p_7DHjF+QrrfXr% zek~ul?`>5~EZ^=EKtCk+%`RKmN?Rkb49Iqx8!nY_J3TtOLz9(TO1mQYYzZG_1Uftl z1o3<&)Ub?UB-Q7D45n@q6!R*=L=85VyyvMfuvbzb96V^m100hI9`b{Uf>R@*%W`h0 zYnq~HmBnV?mi&=_wI=GzKqD&K;&#H&d#3H>n($jhZEa5-<`0K#?aOuD#d8_vy?qbU zKR;2nTTjgJ%PD1Id5_<)fBPcHhGi`yEE6JK+d*cE8xXmEHM^}~8G4d3AhkHn?%WAq zb@tjgaN%FQiUlP{mF_-t{Zb+jQJFSWr{gKorp8r!MqK$N(GpwSjMGygob%nKll5%` zXJ6t;=Y)8K8#F&;Jse|enZ0Ov=4?Y+aOsU4s?3Iv7!49IlR(x^1q$M5a}~mMPLFul z#0ER$x&}6rT@cU8>#vf1=IH~Ek+i)&WbwF+eVWDM2vJyA7FnMtT6@m%nEq8|R#EcQ z4R(Y@Yx25v_68B&akfb)c<_PSn;s4DJtER=iXfp!8F zy~7mYGWxDxjJ=D@;7jR~z#%O2N(_JL81R)5=$;o72Q50lE+R&5m@Xj&5W_I4dyJ06 zSD#HDY;1|x-88CWE;S#6@HGm@4;?6{2_vGLb^0ga7reDeP|7bRy1G#Or;YQ~LC%Xs zR@ftrC%d19cS@`44xLwrd}F^;pW29MkwuZsa-@ge_->p9u{aW0jq`Xku)nX=_ia(I zFpob+I8*SPN}ZkrzHhZkG0GXcj27_b&OCiQN&kcPhEX9$WZr>9(>OP)Svx!uFO$o# zF4v~sXSIK>Cdu(N>Q0Ay>*{TR7ZqjY))5Zcs9h*(-aqPvMs{Ol%;b-$-&5Hi){JSB zm-&+}qOxE4;{PvSkaYr>-0V`Y=QHiv<95(1NS%n1V{7V1yrx9NO{)u7+21Q3a z)$;&QG>=m}wJEJQv^KFUkvg|Rpj2M@kx3eO*J}d#vk@GBVCF~Tmuh(ZY`iCd9YCgB zQkV^Ag`c%IxV+Ie7DVjU#KsHF+o?C@R!t($mE+xcxQSMwb>@z~{!KjnbUrK#rN7-W)XDy&o@-D4VmjOhs&AL(-0z$EDF?qvbtyd=S1K>YXIa`@L2*-tHdP@g3}4+H9=JVsPkxkrbCN%eN&g z;_osRP_Ies3l)PGJ?twTetcy=vp|A(&+0&9xSf<5{gI%dHu8Q$6Xi<{o4we{Ks#aF zpozD*pwcWEhLQwY@m?v^ZVdm{U?coh}4W>5Mrz6<@!g|n20vCM4#uJ0uO<_4E z97kq-{PcDqb@Y^d{+{fA+0Vaf1UdM4e?%-0p0}6t%$>jguz%wtCLm}yjxe6?4=(JD z`J*<*BMzOuZ$Dw2!0gxGkT~gdA^Ox=ZOe~6LQ2|^jkaH?;aGw7};K<2=mo2!u1>auJM$#6X5N%k? zHTgQm(DsP^UmN~2ot#M`%=kB)s^)(xsjc1Pl>X>_sF~U43`K|HaiA$#LE||s!|=+k zJ`(&sVwfSyLh1c?wg62#Jn#xhu_1nWEz!5P3s#tpM|_8JqWq2+q|9_rDvl|KG}8k# zR?W;Ml!c!00C^zCzfrMKHKod;C=>9P6!*6wVoB*=UUA1f=6`zy#z|4M+pLZ&IIV7z z+E*LpSXBi}9#FJP4(YVf1JhXi2pOsGt7#|`@NCe-&V(m(_UY@{!cpk$;Gjuc2Nb#; zu4n!|@iP9NrmJ;iK%&ysQ*Qz0{cr>VamIcwQw$z&8-9Kb0WGd(_xfoJgD62Zm6*~` zz%0_Gc3eHbX=J^`Mh3R}KzqJ&S| zziw0cs0il4YFDmLi-eWv8Rpg7P3T-ju5q+Qg$q+!FY8lZ5&YY9e^o)zO9(9oY@C5* zkyrcjLd}pOGZThq&)ov|sZ_Di?k!mqKkh&c{&{;&|7+#dKIiwlz}T4wgL`oV4acoJ zkZd?@3Kb?n>{a82_!0Z^&0D{r=Wp6-kNHmk>hV9M$Ixy)?{AO`_*D;AR?v_yhdvMb EKLcBQ@c;k- diff --git a/tests/typ/text/space.typ b/tests/typ/text/space.typ index 21ee35723..b95da8720 100644 --- a/tests/typ/text/space.typ +++ b/tests/typ/text/space.typ @@ -10,6 +10,10 @@ K #if true [L] else []M \ #let c = true; N#while c [#(c = false)O] P \ #let c = true; Q #while c { c = false; "R" } S \ T#for _ in (none,) {"U"}V +#let foo = "A" ; \ +#foo;B \ +#foo; B \ +#foo ;B --- // Test spacing with comments.