From da685f7409669728bacf73e7edb1d283eb02c14f Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Wed, 27 Jan 2021 02:35:50 +0800 Subject: [PATCH] `prefer-spread`: Ignore `Buffer.concat()` (#1069) --- rules/prefer-spread.js | 10 ++++++--- test/prefer-spread.js | 12 ++++++++-- test/snapshots/prefer-spread.js.md | 32 +++++++++++++++++++++++++++ test/snapshots/prefer-spread.js.snap | Bin 4222 -> 4314 bytes 4 files changed, 49 insertions(+), 5 deletions(-) diff --git a/rules/prefer-spread.js b/rules/prefer-spread.js index 554a1bc915..9a7d440c1c 100644 --- a/rules/prefer-spread.js +++ b/rules/prefer-spread.js @@ -38,9 +38,13 @@ const arrayConcatCallSelector = [ }), `:not(${ [ - 'Literal', - 'TemplateLiteral' - ].map(type => `[callee.object.type="${type}"]`).join(', ') + ...[ + 'Literal', + 'TemplateLiteral' + ].map(type => `[callee.object.type="${type}"]`), + // Most likely it's a static method of a class + '[callee.object.name=/^[A-Z]/]' + ].join(', ') })` ].join(''); diff --git a/test/prefer-spread.js b/test/prefer-spread.js index cffbd95b06..dee5b66028 100644 --- a/test/prefer-spread.js +++ b/test/prefer-spread.js @@ -146,7 +146,13 @@ test.snapshot({ outdent` const string = 'foo'; foo = string.concat("bar"); - ` + `, + // #1068 + 'const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);', + 'Foo.concat(1)', + 'FooBar.concat(1)', + 'FOO.concat(1)', + 'A.concat(1)' ], invalid: [ '[1].concat(2)', @@ -229,6 +235,8 @@ test.snapshot({ '[].concat((a.b.c), 2)', '[].concat(a.b(), 2)', 'foo.concat(bar, 2, [3, 4], baz, 5, [6, 7])', - 'foo.concat(bar, 2, 3, ...baz)' + 'foo.concat(bar, 2, 3, ...baz)', + 'notClass.concat(1)', + '_A.concat(1)' ] }); diff --git a/test/snapshots/prefer-spread.js.md b/test/snapshots/prefer-spread.js.md index eec2c36fb9..0ed343ac7d 100644 --- a/test/snapshots/prefer-spread.js.md +++ b/test/snapshots/prefer-spread.js.md @@ -1374,3 +1374,35 @@ Generated by [AVA](https://avajs.dev). Suggestion 3/3: Test first argument with `Array.isArray(…)`.␊ 1 | [...foo, ...(Array.isArray(bar) ? bar : [bar]), 2, 3].concat(...baz)␊ ` + +## Invalid #52 + 1 | notClass.concat(1) + +> Output + + `␊ + 1 | [...notClass, 1]␊ + ` + +> Error 1/1 + + `␊ + > 1 | notClass.concat(1)␊ + | ^^^^^^ Prefer the spread operator over `Array#concat(…)`.␊ + ` + +## Invalid #53 + 1 | _A.concat(1) + +> Output + + `␊ + 1 | [..._A, 1]␊ + ` + +> Error 1/1 + + `␊ + > 1 | _A.concat(1)␊ + | ^^^^^^ Prefer the spread operator over `Array#concat(…)`.␊ + ` diff --git a/test/snapshots/prefer-spread.js.snap b/test/snapshots/prefer-spread.js.snap index 42167ccdb759d43952612c75cca3481fa924c07f..0dd985c85e6ee341382efb36c012b02aa9d575d8 100644 GIT binary patch literal 4314 zcmV<05GC(HRzVE>6nZ}N5f7axlV00000000B+ zTnk)O#TuVIRw8oo4Ty+GFx|yH5f5nUBoOn~8NR6*an=ny4URq+}Xo#ho)}7WVAUE+D(M^}DP8AMF3kne%<$%zX2G zGjnjZ1z-XYtW19H)v+Z(9mH#n7X9*p7X{c)Z;X71_LH0{&c7Nn)AhuuiVGh-3=<%> ztR1{^q~6aiwRqI^h|fxx!lTs`Vm+SWa1p}BK6}B@(+LfM*K5GZNxMra#P)cW!^aRd zlNR(D8^7b~wMm5=zWVu%Fbc6(Fh)NIK56b0>H2uyXxaIo5K3@9q$Yr;SMOoF2N9X1z>o;Ve4j|jk@Fd%}=s8SzQu^ z*jS7zi16gntc{n}e6l^gedLN!Z=R+QE9%DK0>sEerQ7%I8}1k6B%R?fH)IfnSoiK6 zK8F~2bME-HNB_gjD7ZiCgNHBWQHZU?c%cUXk-Z`V?JuM+E|Q1`7A=4L429Ty3?~QJ zhsQbg{Orp5ccN{*@1?#~aDYPWJPbca0HQmcjl6v4@g>!qi1wvLUJVptr(%>qO!M*I zx_RevKbu_+&&ujA&=g`HV{CMSCEmPLUV8JNt3%w2eqFch;z0_rhcJXa0f^bv_eOfn zmrJ8pb}GG>Tnu{>%TC3(!j`z=FR>Zo@A7@Gmz-wy``nR2>_dzMX8__RhPymEJn-P# zU(G!d_pj0R6k?ZRJc5wr#?yClJ+BQ-xO?>B3$bG<#Jcz5upS}-1nmB3`ozlP1;T4} zRpW*V5KH#~ASqiY-}g$xCsUVuN5T}B~xHikP5fV}W}*zMGc=`W^luA2VcbFkG} zHVk7wMA|1Mx8}HI)w)i9{_wqu+;jnAOWXiZ^hnuNdFJ7dA5T0L)Y>%z57XRbMDxa1bCiyFVO3F3uzN zmJFyaO2~S_fA%~m8OxSnWDNjdLB`JN?~Z)9G4+hgnhnR|Y$(L8!}twi5#y520 zLRUL4=aoH1QHbp?t(h2*C1)=T{}l2KywwzoS6n z@aYK(vB?;J6T=c?if)#C=~R8@#ID!gFTc@^LaYemWwylD`$6lj9gnN_`=W38Z>K*I zAlA+kj(k<04yXO>QX+DXZf<9LrMm#JPEr8Y6u;$rDm(7SvKhhOe4p)mLx9*E9{|>F zy*K^PrV5ws%MQH~C=p$y5c?X2z!&z0(vv||4ih)U*#~~q(XrB>LTpcrsV%Nxpt4ksmj$2#Vy`PvuY&?b_0QT@{b^UXKON%dbv?&%jc7g4H z*kJ&C(9q*x#xmj#D0wt5e&fbW4BU1z0AbiI(RYUZ@1$wQ;1b#+=n=kUwtx` zIUMon9{a=5kP0_D-wl ze6>D$_bA7c6ouGx7}=q)#ODjUc6za3th|2tl1umfKc^6T3L_&7fb+lPoV{Hz>%fYd zRUr#~C#n%Fv z^KMEah1j(it|I}s8usOBM&`D2d`+!$=%-z$Qix5)aE<`r+E07GyZDuDSaicH(I1X{ zaR`OjD2zK0<=@;0PP+D@VD>xxx-RS6Ih{gmw^1Bkhq&|W?2r4NwyAUR?=Br&mJ2-= z%hqD-9u2_VIR#VBfpIRKrYZKPe!K5$3bE%fhK&K>d)Jej`$UCZnHxU6Tzz*Oj4)Vs zDTZq#05uI`ZQ|1#9&G5aulq>vm;Xy4b{NJUi2JT*@&`<={jp5yw8EpzW|l&-5bZ#F6a@;N1ziN4Y-w6bFQ8+^H2lZd@-8OW z2IGs2BvGkIlxc+US26ot1n;BaCH6BDedtLld9qwZYf|O3dX`EqOQMyt9anT?@xMgz65jKufOhzS$x5a6feA8|nD!RaK4LmSmSe8R+72@F$2KZE zB}J~*q$w4&)YCVBj!09fHMC5XlAR@2Xy`OGEmP3(GFBG&d~9@yL;_V6)9`1bo=lVG zP+f}(>P;3@q12cX_K%R%hm~{+{6Z)5#hsg`NySYpNmHYr+BP<{v5;R5Dk7qXv-;2h zbS(VAh@QG)zN}(VT)&lNX42V;425#8qESJ$>CS?`<>(FE2z(DzgEg5_Ne8iNvL)da zZ+In;tqwKtxU>v818Y`|lqIGLlax`)EV(8%O_3tv56;(tiAsY}rJQ+_Rmv=3W7Q&Z z)!ZiLR9IyqaBh`P5-2yLU1YqC|G z@rAOvvNR3bZQxLoGJ1A@OKW!%wdmBK)k!MKGirX~$7~bUDuLF-jRuxU5`?T9(J`|X zPgLG5pQyBoF_xZ_h%y8(5MJZrH+>2yX-)SSq0q z{^vx4k};yjj*O-v5iR0-Ucn+PtM)$KJA|y*aK?f@NZfS0;b<_M5hpB?zt9n3<3v|mGn#`GbXCoBEfYHfBqghe$tefxTqIW0`Z*)4SrAeK!E$t3(9}Mg4&}3zn z@?$AvZT8y`_8ZUYEbGs*ob}nSL)ouh?5|QU_E)mm8B{=u3N+s^uqbP3Js&rM5M0JX ze-{75@oEt%UgfH^s%SNYAg1(*wSJYPwbZ&amhweRnOnaIbcD&#m+=Fd*Vbkd7Fh5P6nMAjwGjS1<-f-Fnj6NV(_W`Z$T^-Cm#0;eubmet6 zHijV>X^+vwx^ok zB5In}ggU!Lq89EFS+NUk;ciWHdvLl&Ve+hKJI9pZ`cf0;bKOYR=(>cO5calYMZ# z{U!Hop37tl@>i<~;fR@SM=_K^(#oE-kR<+j4qLRsM>VNtRsQLziPbjWr00;Z)T~p& zzp{=A|H=@KkC6NmyK!n>|AcC^D*t3EFo`7uCKicHGAQEP^ z&-_~RxNr42Uw+T~P0*U$vMC+;e_pA7w)0PuRW^#Oe-t%}?1lc){>NH9&tJsnFh=%8 z;LUNN>}hEJ^%&d%<3gLxIa^?R##SqavBTp{t9lmOBJ$@&M~#Q%(3u{_;7pJ<_|i{O z@=Vuaa5M;&u*}(@mK^^iY%5uA-IN&8YE;>B^MGJ2&ou(qh9G+!9GIxLNQG zH$gYUjYo2rZEQjE=}9t!wC!mTQ5r{!l(#O|g7f;?vX+s{k95KhB0|yf<9#n1JKooP zJtl^Q8P`?bG?i{?cgOzHVUOO~EUm`Y84LXp!an7sOkcNV!V<0#EfJPD>1Y94COlK7 zRvX4?ax9Uy1Swi;dj{C5BQ=TSBQ^T3mRROIjlo%HJ(nm@5&S zma(qpAaz1diKlrxAzPtUX-#VB+&uHPbZ(yY>m18VY1`h=v5m>Cl_)*PXx!XvxV+e8 zxZK((xy_mc=xCCpOhi$SWOlY(H9tz8DNls;gl1+6-8|exCZ{~=ZGu{+>ucF`XyVgm z-3RJMKk~VBlw8BTw9GW4>`H>NdKI)@yEd!i(sY2E|MIoL;q9CjzHV*lH?2pL*RRoQ z5{<86;Du~%9h>h@Y>6*k>;@*Q4JK4ebSqf%4g}rJ&~(JNE?TmxHj}h!VZMDs;<6<& z-4oAa`G8lARe5sV)ic`QZzvE~&(PwTgwNGuA&(^%@ce3*o3b92P;jLkb zZ~Qv|=lB1REiW2-^{1ZeM2M|$0Kl#HmYR8q+Bikut~d4D|2#+`wiY7`TEIguA296F z_k#>T;tMVkcmHi!r_p0Q9zfrI(hj z%o?!mtthw2XYWvmEx@RT@V**dwB_;~=bT?&el_%WSvG~(DrXKaxd0%Gdqq^^-s$|6 z%4vf;6}>i+LhLDwd2Ipkzwu{`L$~%LeD{Y3RR_9^pb+~lhQ1vDAyM<+yfSe8!kM%8 z-M(F&eSt#kc8rkr06bgcT)j`}P;%$HHdlHN@c|TK=VFLE05G7(v&$wOi@oCY!|%#O zWo;^j*aVEr5QEdovsa&7`uY0I)=>+Gy>*B}tmJ79$03G(T)uwm)&W6b9`cE9c?0`U zi1q2n;RwXg^Lfv`vinPBV)3t2KDqUBA%)l~jOSeei0Tp*>T*1DPN_`VyL7?5e^7`m z!tihdU}TJYr^Bb0zZd5ea6RLl;_Vb-r(*=U0}$8tSk$R2_fG1jMYb+4^{=B4I}W1^ zV!R^w?KK-01UYPSdqR2VI87n;9>!`9SmLddmF4IEwPc`A>7UEypV&bm_G1ijCjjC% zbw8I`^Yy&AMQzKkr>%uOiDk!OoMua$4wgCe3--L$>FMap4oZ*VnL<|v1Q%>Xk61bRUN(c+h?N=hPCtBf1X0@ zO$@yc08`|yJ0-I!UiWzr^yA0_>q{uaF2lGBkslu-`||o>W#{Q1UH(e*yqgHIxjo?s z^6Wh1{jy%wrODaP2Tz?2C1cq#jO<5&Dy*R*mv-BE;C4>`)*KUS7Eefc-agIW49>!&e4LMO=G>V+#w_hxguF1ayX91RV?8iX|v2pLhT6wwG zlGQsuX;b;H`EOH*U5RlYVpGuKp`pW{tGZdKaANvA`G7)f_h1gIAhx!h;}tb)Nm+%Vj*H&Vbza?s zAALoLT?MiC<3U?}<=^%6(=Jb|d-IPsD8%l-=otpUzP%UHzc|IjU)XVC;8T~9PEm-B z#rPIte^K>;1ZHRC7h7CX7Ixh=n?fud&Y=wA@K=-GTheCJdxxH-%I4m6V<^P_f}tD$ zK>3Cx+ut95vE5I1;x-R+KR{84-G&i25SBPHt3%rtilbF`7R){QYw!^YvFk9R2LbTi z-TY&hil=N}ShINGtiX}WDa5{xF(3kf@3(!>Zp*!WAFMnZADU6I?ihvGVvNASa8@ne zUUHEs{%~(s$w9>j=_wRqwHOZ|ev0_|5To?o_*~76&V#<_FpffOkqh*b>ba0H_AhjZbnXI>CZeXmD{`Q6)PQi#2YQ4k5hl|QF`*8Pw} zt!HpYdEbfx=xtcG9AoJ)0Ip6e9{Vkb@oYO@vn}Jtt>06K-G<>g9Dr+H2iA0pjX0e* zctT~))fgBZuxv8M1BjZsXosZCx|=Hu6E0F*kmzkb5lj zt?=AQA$AXje-!lEC;o_kaUi`~?0)q1=ceKGO`q{CPk?i!(XNBcL}_YhL_mSB=n(2>r`nf9j(t$(K%CeDrG9I zoubky^;#XRodz!?4bth9GkkDG=jQxdk|g6jj|yppADE`q8XlOe)Jf?8DXoyw$;y0d zJ=Up@l|N3gx#{Vu9KBkrq2+#oA#|i#m!qeZy7b&^l}1mib7-Z8PExY6z~^J5%VaXB zs+5L5>-A(BG>7WiRL}sjpc<{-lCY0MQUxpNSonobPgAd8j^)mRzvT-CZX~`3s==B} ztEIzOHQAEzN&vhP%2tOOI7U5L#lV_%LzO8R;#6&{He037P;1g9{K5H8V4>1*R4HfP zG@UkETwk?>Ts1e0Cy_o)9MRl!2yR5Az=FaD(_&8A$*LK&T0`@dme2**8igjRhMTE@ zs3KR9!7uSYR#TBAX@mQgv;9HP3nm%dx4glB2S|-wsMTDzs2>(YnKMI^LZ{_wQc(9+ zilJ?EDt)ewGrm}vr&R0NZUcv!oDtal9fRF1)M8YFK_|JS(5(51AFEARi$w+#*Be+V zOBSOV9cZgZB;fw`+khI};)6rlxB{~VG zBW@ZB6xcV@G?K%D8ombF#Ktq4_got}29X=dN&*up&50_tNpM}mpTCDbH+pP*V(i#4 zBSsE`6S=oHo?uL`CXN`HIB3k6LGgxS3d_Y3M@90>2iBKIqZiT%xtdf}np&eumC~Br ztSl+7CMlh!%*s(oX@4pC32=~Felo*1HMLU2TGX=gP1U}c>W35cuXj4ArAeK!CG8Gx z?+fd6Y_Kv*1+f&eHv6p~`;BLHmJMcE&id@v{_IzO_E)(-`zzV(3@RW;1sZP{Sd_K2 zz{d?C1eZzBpCvtXyjn_%SGg+fDq0;#5L5opTCXB$Ew?X?<$Mv<(^OE#0J=A=2*rBW zyG`~Y6DoA^=5OcpH1eqIWl5+lW}5y+E-rMzY)@wYFhVlfkDNSUy05@ADX0)usw@QR_mB*JwiGl71g zaiEXxYi^uxH8sW<#tY8Dec5&wH;fL)8ERElD&3UM#6?Vk;j|T)eL%SJ1Df5t9IZaY zOr;lf;B_`Oi8HfsZq(m!``M(^^&*8jJqq}(Q<%hWf~A1qpy6FalNTnDy_szWb7S^R zC1&qj@@|{lowhWrO$PGxrVV5pkKs1;dpiR2C7P^SaoakKl@_g<)s|`Gu|jA}>&ev3 zBt17;^4AF(Gs!eh4?sTHCTaQ{3wvM*XrTpdgh}bX@OzMy?q{|BZpV9KtlCC$b_~?YP;~P zHr)`@sPw`m_gtRKWDD|Fs|n$Vm2F2clu6Rcp0$vr{B;gnG{Z+VsAgCG>5+-mGT$U{ zNLXstDdAsP$Ao`n2**cA{)yc?6*Ggt|2nmT-;uIF5{@kdKTAU!Abcc@dMdz5>r9(h?nyM0gL; z%d~jfB_00smU};Rv_U-l$yR7r!A57}_R;I$^Q5#l?3~_$j-$d&!<8{~9aK`V-(|I~ zGl;Y`$vkv>tR}Tb0%KpzLF$BlGC%8fLbgJ?(wfxL1%=ja>4HN0*ExZgIkvo^6Y6tF zJ5joi+3>W{sC16SsIZbqysOO*oa8I+YJ_V)FbSe){x zbp*96*VnY^(88z1y7xBHU8BmQV^wFWfu{Y6;#lC?OLpkXTt$y{>#NChm-T0 z_&Twz-y|MRUY|v;0o1={fEQ}Hby~hZAs)@AHUo>*h7+nKx)rRsBSCj7G#&A+f~G89 zO(HE0SZ`m9xH^bT_t5iL5#Uv0SDxH>k%~6?8v(>cDzrvr1yS@=a0Dq-xHOU#Iiz}D_+)0^{f;m2xb@({WhvA>j-3%4c+ UE96``Yjvsr0RdL1s##V501QGfUH||9