From 18d80af02388cefcb64110c8f8ea69ab3550510e Mon Sep 17 00:00:00 2001 From: Merlin Beutlberger Date: Thu, 12 Sep 2024 13:41:49 +0200 Subject: [PATCH] fix(linter/html): Fix glob pattern to match HTML files Incorrect use of the group syntax {} without another group lead to the pattern never matching anything. Same behavior can be reproduced in local zsh, so likely no UI5 FS bug either. Enhanced project fixture to actually test this linter end-to-end. --- src/linter/html/linter.ts | 2 +- .../webapp/test/testsuite.qunit.html | 6 ++++++ test/lib/linter/snapshots/linter.ts.md | 18 ++++++++++++++++++ test/lib/linter/snapshots/linter.ts.snap | Bin 8588 -> 8794 bytes 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/linter/html/linter.ts b/src/linter/html/linter.ts index 109faee0..acbe1e4a 100644 --- a/src/linter/html/linter.ts +++ b/src/linter/html/linter.ts @@ -18,7 +18,7 @@ export default async function lintHtml({workspace, context}: LinterParameters) { htmlResources.push(resource); })); } else { - htmlResources = await workspace.byGlob("**/{*.html}"); + htmlResources = await workspace.byGlob("**/*.html"); } await Promise.all(htmlResources.map(async (resource: Resource) => { diff --git a/test/fixtures/linter/projects/com.ui5.troublesome.app/webapp/test/testsuite.qunit.html b/test/fixtures/linter/projects/com.ui5.troublesome.app/webapp/test/testsuite.qunit.html index 97f8b395..b122577a 100644 --- a/test/fixtures/linter/projects/com.ui5.troublesome.app/webapp/test/testsuite.qunit.html +++ b/test/fixtures/linter/projects/com.ui5.troublesome.app/webapp/test/testsuite.qunit.html @@ -8,6 +8,12 @@ QUnit test suite for the UI5 Application: com.ui5.troublesome.app + + diff --git a/test/lib/linter/snapshots/linter.ts.md b/test/lib/linter/snapshots/linter.ts.md index f595d0d8..6de116c1 100644 --- a/test/lib/linter/snapshots/linter.ts.md +++ b/test/lib/linter/snapshots/linter.ts.md @@ -727,6 +727,24 @@ Generated by [AVA](https://avajs.dev). messages: [], warningCount: 0, }, + { + coverageInfo: [], + errorCount: 0, + fatalErrorCount: 0, + filePath: 'webapp/test/testsuite.qunit.html', + messages: [ + { + column: 3, + fatal: undefined, + line: 12, + message: 'Use of unsafe inline script', + messageDetails: 'Content Security Policy (https://ui5.sap.com/#/topic/fe1a6dba940e479fb7c3bc753f92b28c)', + ruleId: 'ui5-linter-csp-unsafe-inline-script', + severity: 1, + }, + ], + warningCount: 1, + }, { coverageInfo: [ { diff --git a/test/lib/linter/snapshots/linter.ts.snap b/test/lib/linter/snapshots/linter.ts.snap index 4136ec1b7f012ca3639d78b620acc0a1b95c709d..6dc0441013a0ce0a40c8088d5eb722ccd1f7bac5 100644 GIT binary patch literal 8794 zcmV-gBBk9yRzVh5%vEGxnAAR!D82n61P03k040g|vo*yjNWfsmOnFOwMpk2MK_1Q-TLGV=&z z7*}<7sdY>4*3un0iS>s*)phH4>z;GZJ@?eT=bm$WcUL$XIHkSg4pk57VfE_mYDA4I z;Z}KbSkW}!Ra!`kC^4-!s%vk&Js4DU<*@WWoD^dGNkx*Q30Mx)NCnlByDc791|=zV zRaseyRDvWSl}gejDNx}6a2EI=@O9uxpj3i|QnI3geO*_n0bO!fmsM3&NaaWcNEMQ_ zLxQQ26UkjIl?9@w)wt55wnw_7NR`w`j#OER8jnZgo1^^^-Mr;Oc%ZUd(UtJlEKe16 zhr;T9Ment4q}XG&CYaWmqCQpAlpa+Rswf*!;*n6KXZTx+hVjigjBmrsTxn&=&eDfE zE6ITo`>Xnvy!2Ov1m4m1*RDzKuhKLQnGL#e{9Ps$e_Vo3N$_O}9+2Ss68uPlUrO-r z61*re>V7Q~d0%Am-t91XUn)s!9HctrlyT`WFF$NtI?c;RjZ2q#>2iYPHZNBjmj&kK zRmNqZ(Q@~#PPo$v4>;ioC%ohoI?y$|1B)d0w_WhC3x4B*A~!5>3lO&ra=ZWn1#n#f z++F~GUm!pVY>*d9;4dXGrxezf!sVp`q|gT0UJiT8p|2d?UJf5C7a&D8$l(e&SpjdT zfLklzD-{By*aitzLbMWYs)SEg!uKi#NQn*d)+)HE3O-#0k5s|4RRW~cHcDKg00$IZ z?TN+*6Jlrd|FH6cKs4On7fF`Z3#G1bD556IoI+V)QrMHf9UtZLh|(2SWj!h@5hXl$ zjVkNCAx-X6_1{{^q!AZzSD_2nlJgF*PD8% zQC@$kd~J!G_801wtzzHlkQOppw|@P4xmyWqYNPP9@u%zv1%qnjVCpTgeyw+?ic{)f zY*BS?e{q7K=xN{Q*^0GzXn#DQ z%6&>qRwH_RQ0|V#&6g;_pc<6B;!5C@s%x@W3mF4Dq|3pms+q#0o(XBX!RbUDjlSV5 z3~6#Ks;Qd6s$L}=RwF&CS^EJs7LDs_+^1_sJB?TCQS+UFXgsb4bU7RiD0(OwF)BCi zCmU(l0@gbM(TJwYT2knTRL^>0y!idHs)a)ly*U`tj4o-8sAu$MlXC&3PYnkYO&x{^ z=<)E$#14dVa$Ukpm zP$UrU52~8i)?Z0*p7qk)40>rw z7QOUn4kipk9bFX5msu?HDp9jDNYvCU67}vJS!z}DN#a`7`rnl9!am$jFx=wQ_!b zBo}hd%(PZ=w)IB>h7Ge>35Q2seS1q@R&%CE&@|fBoPCqLno}uo$!yfA$ytOOS~1<( zu_YQ9vCmw&T`~Q8;3=R?f<>e4v-a`!nX%xMlO@v>f6V5n`ROgm`Ob3{zgL0}3u|yL zk;92~w7aF$I-9Y0XRy6UDxBwlg$~&4fRhfm&jHUlz$dPj*_OTv_d21|32`U9(+R(J z!a^5Z>B_tWmguJpde5Cf?^R~jds55gnyJQuYAmiA+SdFajj3^cP;M~4Q`KOD@j$>> z)s`DJ_3L^x(je4Yk*sx#sw<(embyJ-%TTSls_Cf@TalW0e^_k~rheA;hgKQpqprrA zBhluemNhG}kSI!;@ev!+2ZsbQE4zv^u&X)?yVe?N#h4?~_|=`%IC6uc>q?-vQ;EHj zIF?janx(Avhm}xdXUB-@%Kcw?QCBa|hJkItbDZj`WQap%gL?9$uv~_+`hWxJzW zlvZNJ|EreLdO@-_2bLx`2a2RZW1rw^2i)XG<6pOZHIC&`a7_GA7{h|PM;>jVaw$1_d4rp`0aR+?<+$`}&2Q+1$6?Qw}fD>X)xX}qupPMD>U2r0w zR&DWXY}ifEsx5u(>GhJ>B_I zS2s!UKP9+rbn5CJOI?L+>yYz_9y5+Tos8@8HG#tjFVbvFo_IN#=N-U-ZJ!!5>nLLnEySs~x zk=H7>g~O&Vnr4puXrHe?w92Q)qy1fBRg3niJ|z~jkESb08%RBy4$PIHQG%5cY>={y${JHrR+*Qp++b|>luA;}xSV3@mV4dsSvUNX8~*5q83nMh z0FH=G>JHlkeKyUf{r&=YrT}USp`|eE;`rf0I9Uj13*ojxc(4$Pi=e(Jn+JN~wj$VF z1XmTojYaUeBKVIYs45nql{V;#Vpv-Yhl=4$F?_ffo+^fyMCf!IR4#!k624XmPgKH^D%dI>7r4|0?X7}H72H?_ zpR9t%s$f<%tf&^CTWrvS)o`pDuBnC(R>QZd!7&ADrwGtpHt5DFux$zir@))1z`ax8 zH&eh>BS81rpba(9Tm!pmAY21C*T9c!-~|!dX@kz33UjBzB~#(VRJeXBJTw)aoGL&M z*`V%eP&y47r@_u?5Ic8$_cVB5ngBg+7sP4syJ=7|9h#=Yf$4DLbol6W0ea_B*_@}RkJtLJC@PsTxi(eJfZC&iR*Pm# zn6^#hr7c&Vx%Eln0?~*bkA}l)+}{?9`G$U4`_L07_FWesv6~c4-E1TFD-$R7$w`*l z1$J8ZD51y*J^No1CwBJC3uB0?eKCE|aDYtF)-rR#v>lja+U6%|>s7-sHLm%$cC;i8 z0Vi&xD2+^<(zlJ5Qrm~rI7ywFB(+b8gt}GDP_)sA*|d*NoVp)RazD;W5f=@rVZU+k zNzwJ8{$tjJDXg6}xfD(xMxpuNI;y^A;^cKsGIE%<@)5o&x+Sd@Nfk|~{=iPB_;J~;6X zePWWy^rn+(&?cJo!w7z9;sno{Gs!Bd-bS(UZv^GEYR-g-?HVt!IqKb+Nm@^b)B&?M zjSJtI2x#0mVsxO+24-)FPZDKwSsFcQBwZW1%^zdC+C2cDjjY43G-1%(;Pip0wQ zeGa@JR9+(P0RL?cxND)ZcKCy3;)AnmL9T_x!h==fgR5#`T`g=C9<0gG_8A$$pWzj`)lD~EnHa(r)uGJExb`6e7@K*H`c<)`4-c%1;)n&HhmGnDNX`{pfm@D8E!J)(%e zuMTdlgO3Rh?$7Y1jtpg&XDB$J!?>t+)0GFRi!s39qhC>=RlCWj<1$YSYi_ ztv1bGkZ4m$stuPdNIiA^0_&+SEwEbtn+1uMTcp=59NsU-7N#n=X`#j8L<{b>ie6f1 z)xBns)q+F?(M74J?pb7c5Y8(?7rv^Bt68{naatO2;5X@K81K!q2Yys*QY zIRaIYR9Mppvl?M_BXl&v=Nn<&VmQ56fR@{!|7$UPXfb?sG5laL_?JN668QKM0a{^e z=tE23`%B>WOQ5U?yiEe6+6MV)6Fk)f&Sse34C|W($P`-xf7c9uYKAHwH2L67KKP~& z{^Ap$Q*F>Wewgov4SqQ4hcEcyPkv}#DnO^%pnH}=$5Oa@DZFDT+`SZ@TMEmU2~dv> zdSDq`u?$WxgPWJZrR1Iut6)`$C;LGda z2kYQZ>jcPh8{{jOz&9>|pI-tmT>`V#3y>8y$dl{gne|X~DJ;4aHeD(}R@xvn8(`K3 zSi1oZZ2)b909j>&Y}yDrHbU=4xM3sQu~C4u*dXm~u&)iGZSamZxVue&thPaZyBYqt z8LGE{e+%r|B0$#IAeV22qg&zHt#Hd$xNoZfS!;v5ZX3L58{DxCzPSy4vQ2=r+903Y z4xir+k8OuPZin(60%V;H@{=9#Q3O*-yB1`i#BUmXL-aX4@s-g;bs9kadh?&I+3 zE0N&okamsep)2^<%IEd5P1ZIl&*c0CQxd(J zMJLO9augiL*u_^P`W7{!h4evli!|YJX;fwe#@ROzQR9{qhquu;GAL^tq0G{M@y>-~B(77F;6E?vE1b+9F{ ztZPln%3xrH(zSZI+P$i!W!bWoYnKI9Hjc?FJV9D>f;4eGZ#;hVVmPMsE)YY0z6Sj0 zb1=Te$R+6^o&SGcvhm6UsFB;Ka7E3EL z6GTEs%Y=1Vn6NC<2uyHcl|P=;7n=X7Y`n;~FiaaKA9iHnL;q;_kZ@h{M~#Cp&8JuT zHB~pPCC#r5MgqO@Xe4xv=@w!rT5}L4#mL0@OqlQVO5Z*s0KKVTg0|`T5MCSU9qV=8;_%*~VPu_=h{-V%kOO^1( zT-a24^zv9tjc-=8q&0O~3HPhMwA*=(Gb_4MjD-WbBR8?Xlm2~PPe&q)Ks2T%BHNpu zj&d-hgrhy4rXiceyFGMTjWo%JdX4{`y=o+NoYC)>jSa_0BGZIs-ZLNeg*tR4uJ0MV zynV=mzcwvie)8VtXrw#T(<+>fj3|9-tL!5mOn66#cycrZE;*)!M{iy2SmIpBS!L%P}4kDkrN zupdDf6T^QJWOdRwoh6)WZc_G~XM`oVJ(dwUX>7`tf#Ku15y+91NP`kumCU1!D78e-1#Es+O>=FmrSlG2R>An)}mV3g{E+s6RiT}Ei9x_=OC6GFEIH`#$ zwdSiv=aVuqZIWrPAlnMqb-Bn9JfMX1ZK+grrh`TDj@O>h*Z2zsTV+pg+U(yn;$y}E zzP%Z(r^FdQL!qCi3MFBix5^Q9KsKjGZ{x^Mn&%StB=g(Ko-Lt-%IgkAf+pP!9m-(x zW93jt@0AntM1$OAQXoeYi`;FonAvQP?HzeG>@vwfmfS&(yCy>hlBbJ}NV%=Dx$)HJ z%P0++s>B1m`(kP&!FsJ#*5m!^D?xPj?Xu(~ndUcXnOsOxQkO+ap14q?B+0w;NJ+n` z)?4NCN5@S6^ZVriRn}D9Y_TB{a#z1L*d%LFqadOt5=>v+uf_+>M`B7`jpznhX6EQv z?7UU)iz%yoiusN1i=OhDvT7Px$;A#iq?wyz9wCFdB?{vcwq)f=#$8YnmhH>wP!1NG zaw1`dN!(<}MzFuHZ?H*jm#^yAba_CD=w^y-&ig4nUb7J3)>bBdp(AS?w;hBYV;Yo%k^G){rdIt(lN>97zf_SqhoJ$ zw1Z>paxJ>zXZ|7^tuIEl%v5udz8L)xP3czUP{d3>t(mdmM`wB;O!}G29crN8upH(6 z(Qqg*nAy#`TV1BK1iO^AE0?M(SFi2vS{+!?6j z-<)WE^N7tCEn8`l9UAVdn*Tz(iM!!9mAjEP+r)bc}SsmP>QvU#KX z+xueCxNi4GOgo8`G-eG2@roWjnGQKj&o+8qWrrM6X#{p8(g<`!`_!y?1Z3|(NbimI z>xPy$+AsU%R3xcJdy;{o(zGN4&ZR&LurXWOjzsW^U8I6n+<+Cl;#32W6&h)Ez97LrOYpn|vmJ240cXS%6(i=6t&pS-Ixf8U#v=!F{*q(D!NPuV z0TMfMFz3IHo7gOAn-)4@i4#^ihs$fG&|zYDFy}@mY;(eXp_1Z}h5o2BCGxJ%fd3R>B{tZMLZ~Z*b%k)K5I$1~zZG*^l-fpJ=9&FMI*6O|1F)G%zaS34 zzRZT)RyeIWL&=B^4kaUcw`2tw`$x$NGFCX0jA&Cb8Ih6L z#{t(l;C2T*;DBcxFxLrd#H4+8YsHud6eqmF3IF@t9P%9}I9*UDChaS-=TmXPHWvh4 z@Mag>>w+g;@K+IPkJdHM4GZ0{*$t{2-tLBn-SA6sO0nkzDlCBV0$5T2dkR1+fO`ty z+v5CS&(8Df0{FKAC@qBMLg*-jcNM}t;v8X*X!Xds#~&+%KN^n~!P+8-6~WuY{71F` zQH7r@g3lMhqebvs5zH!vO~r6bOk&h@9((W&#giNzcd8Z-`1_Pl#DA6M_gRNj4O6vv z!Uo_&9O=d~@zB_UHo}cV~GzX&@g!_Dhv8r^! zRIVzWWGbhpQz?wb6BDQJy2++*c^hNG@iI7525%~ZcL)__3Xxqew&eX~@L{2X1>$1F$IIYTW$^uPK9N$|GC1l*qbV?u)rrP6Jdd^_ugEYdT*k#M=DeAEvmBKySYke z?KM@yBl+G}l|nsJWi9I@zcQ+a2WLK5oyu1H?rL~nHQZMXk5w5R-j z-xRoY3Vdw}JU#`Un*x{Cz*#XbqCKPNtu=6G4ScHxep&;6u7OLZ!dWpdVxb6i-#QiU zoC*(2g(uEIUJ@a;7{BgYronB~;2YE6r_;A-S_}pyx=h^Uw*-$n|fY=hKy8rJS_`w|b4R?5k z0GVlne7_Ft2pK*MVo%Td;9U5Jx$x{DaAZE5o)7;xA4)v1)gwS<+p?tUfm0rMs|Sp5;4gTf zsa}B1x4m(9JshZqSUucW4^P)a{Q@|#AX_+N_v;sc5exhy3*i29ke`VVuMJYN2&xvr z(nYX$5nQz>TNvZQ!UiaBfF%vEy#elMfL}Dg95GtAJ?-o|FSL2#q!+IB!u!r$|J)06 z8wIF;j6pUSiug}7R*X6)Ts5=x_O=s#f2TkkVB%Zp;=KcJ4x$uxOJQ~fTqzU5VeLm}s z*Aon#_B5s3QS-|P(H(3IC&Hz(xr(?OPC4l&N%p1g=2;3v^cb{&ZK)Z#dM`tLNEoFcUw-*vxr3i#SStyLa zx?yW1I7~BajRYrAC5oHiV&~tPlbC7hnIUax{O}slcMV<8Y5efC?LB<5bL$nIo<_r8 zv{m-VOXM_#VLsG2d9ix4@#sxCiq+d`vFUv5$tw$*$Ik-k+FWzM*8P(33GOM27_Vy#{^DGdW#nW7jLlw_G&1$8v)I)f(wMf5(8b__8@lb8*Bs7FGgkTXL>8 z&Q2%o_vHCY!^UfsJt?C;ahNb*eD}4co;1G#eb)C+;*nTfI9;foRwH`)5kn=c#`VN) zL$VVwqP>mD6NG0=&NljzZS$Hogc0N^zqW(uFPYvK;$l>uzOxftNOXpcH50NRj$|M% zn~&_etj9w7Ly7p*$?()eQK&EQ!JD6SP}wy8g^~^`<%a1$zZ<4(xM7-s*}KiqXj)7O zsCG|G_s{Zqx}!jXCJBNPygvKsj@u>pm;?_>@M{Um9k9&-SBj@Q+#~H=7~UDV!EiIP8M=W_RNKf(yRtf*-ozc^7PT!*y=> zKcXjY@fdgFG8rG)%(=x`=Y(#5+i68t;;-l_AQOwkPXb#amQkFh+@k1eXQ)qYkHq@* Q3zt*>4Rw+i{l&=u0F}`wApigX literal 8588 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