From fef08e6f1ef60c231a208c33a45f1d34d1616abf Mon Sep 17 00:00:00 2001 From: Jordi Kloosterboer Date: Wed, 13 Dec 2023 09:19:32 -0700 Subject: [PATCH 1/2] npm update and cut the release like @fs/eslint-config-frontier-react my only concern is the new JSDoc description does not satisfy the regex. --- demo/test/snapshots/linting-config.test.js.md | 38 +++++++++++++++--- .../snapshots/linting-config.test.js.snap | Bin 13423 -> 13494 bytes package.json | 10 ++--- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/demo/test/snapshots/linting-config.test.js.md b/demo/test/snapshots/linting-config.test.js.md index d441bed..8134fd5 100644 --- a/demo/test/snapshots/linting-config.test.js.md +++ b/demo/test/snapshots/linting-config.test.js.md @@ -136,7 +136,8 @@ Generated by [AVA](https://ava.li). "error",␊ {␊ "allowImplicit": true,␊ - "checkForEach": false␊ + "checkForEach": false,␊ + "allowVoid": false␊ }␊ ],␊ "array-element-newline": [␊ @@ -614,7 +615,7 @@ Generated by [AVA](https://ava.li). }␊ ],␊ "import/prefer-default-export": [␊ - "error"␊ + "off"␊ ],␊ "import/unambiguous": [␊ "off"␊ @@ -2982,7 +2983,7 @@ Generated by [AVA](https://ava.li). }␊ ],␊ "unicode-bom": [␊ - "off",␊ + "error",␊ "never"␊ ],␊ "unicorn/empty-brace-spaces": [␊ @@ -2994,6 +2995,9 @@ Generated by [AVA](https://ava.li). "unicorn/number-literal-case": [␊ "off"␊ ],␊ + "unicorn/template-indent": [␊ + 0␊ + ],␊ "use-isnan": [␊ "error"␊ ],␊ @@ -3155,6 +3159,9 @@ Generated by [AVA](https://ava.li). "you-dont-need-lodash-underscore/bind": [␊ 2␊ ],␊ + "you-dont-need-lodash-underscore/capitalize": [␊ + 2␊ + ],␊ "you-dont-need-lodash-underscore/cast-array": [␊ 2␊ ],␊ @@ -3173,6 +3180,9 @@ Generated by [AVA](https://ava.li). "you-dont-need-lodash-underscore/debounce": [␊ "off"␊ ],␊ + "you-dont-need-lodash-underscore/defaults": [␊ + 2␊ + ],␊ "you-dont-need-lodash-underscore/detect": [␊ 2␊ ],␊ @@ -3239,6 +3249,9 @@ Generated by [AVA](https://ava.li). "you-dont-need-lodash-underscore/groupBy": [␊ "off"␊ ],␊ + "you-dont-need-lodash-underscore/head": [␊ + 2␊ + ],␊ "you-dont-need-lodash-underscore/includes": [␊ 1␊ ],␊ @@ -3254,6 +3267,12 @@ Generated by [AVA](https://ava.li). "you-dont-need-lodash-underscore/is-array": [␊ 2␊ ],␊ + "you-dont-need-lodash-underscore/is-array-buffer": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/is-date": [␊ + 2␊ + ],␊ "you-dont-need-lodash-underscore/is-finite": [␊ 2␊ ],␊ @@ -3368,6 +3387,9 @@ Generated by [AVA](https://ava.li). "you-dont-need-lodash-underscore/trim": [␊ 2␊ ],␊ + "you-dont-need-lodash-underscore/union-by": [␊ + 1␊ + ],␊ "you-dont-need-lodash-underscore/uniq": [␊ 2␊ ],␊ @@ -3381,6 +3403,8 @@ Generated by [AVA](https://ava.li). },␊ "import/extensions": [␊ ".ts",␊ + ".cts",␊ + ".mts",␊ ".tsx",␊ ".js",␊ ".jsx"␊ @@ -3392,6 +3416,8 @@ Generated by [AVA](https://ava.li). "import/parsers": {␊ "@typescript-eslint/parser": [␊ ".ts",␊ + ".cts",␊ + ".mts",␊ ".tsx"␊ ]␊ },␊ @@ -3399,6 +3425,8 @@ Generated by [AVA](https://ava.li). "node": {␊ "extensions": [␊ ".ts",␊ + ".cts",␊ + ".mts",␊ ".tsx",␊ ".js",␊ ".jsx"␊ @@ -3437,6 +3465,7 @@ Generated by [AVA](https://ava.li). 24:1 warning Remove the @description tag to leave a plain block description or add additional description text above the @description line jsdoc/require-description␊ 24:1 warning JSDoc @returns declaration present but return expression not available in function jsdoc/require-returns-check␊ 24:1 warning JSDoc type missing brace valid-jsdoc␊ + 25:1 warning JSDoc description does not satisfy the regex pattern jsdoc/match-description␊ 26:1 warning Expected @param names to be "params". Got "a, params, b" jsdoc/check-param-names␊ 26:1 warning Missing JSDoc @param "a" description jsdoc/require-param-description␊ 27:1 warning Missing JSDoc @param "params" description jsdoc/require-param-description␊ @@ -3459,7 +3488,6 @@ Generated by [AVA](https://ava.li). 46:18 warning This conditional operation returns the same value whether the condition is "true" or "false" sonarjs/no-all-duplicated-branches␊ 46:18 error Unnecessary use of boolean literals in conditional expression no-unneeded-ternary␊ 46:18 warning Unexpected constant condition no-constant-condition␊ - 48:1 error Prefer default export on a file with single export import/prefer-default-export␊ 49:7 warning Correct one of the identical sub-expressions on both sides of operator "&&" sonarjs/no-identical-expressions␊ 49:55 error 'params' is not defined no-undef␊ 50:5 warning This function expects 1 argument, but 2 were provided sonarjs/no-extra-arguments␊ @@ -3503,6 +3531,6 @@ Generated by [AVA](https://ava.li). 10:5 warning Test has no assertions jest/expect-expect␊ 10:13 error Test title is used multiple times in the same describe block jest/no-identical-title␊ ␊ - ✖ 69 problems (37 errors, 32 warnings)␊ + ✖ 69 problems (36 errors, 33 warnings)␊ 4 errors and 0 warnings potentially fixable with the `--fix` option.␊ ` diff --git a/demo/test/snapshots/linting-config.test.js.snap b/demo/test/snapshots/linting-config.test.js.snap index a1657e91f2a687a31b08815f46476ff3f9374e17..c00053acae36664d9f03794c07b2f9fdf1e40973 100644 GIT binary patch literal 13494 zcmV;nG)c=rRzVxeAK$@O`{JVyzW5)!lmCM+&djRnuCA`?s-6WPGQ0{&nCi@` ztgNrhtjw&tSFT+7vn&7QU;OtQ|N0+Y|J#4Q`M0b8^SA$d`;#m9_dl*(x$<@S-~P={ z|K7j+cSp@%{KNnJUGP7DLZ$!d{hwU<^DBQrP(S(mSN_4D{nu;nv5RQE$=KdW^G- zMsc0StlH0uuulmPd~oCL0RWyyWuE5CAb6Rxiw%owmIPOi9)0!X;Z;fD-QemXy?Daz z2KVB+iLz`PtfNyF)T^`#&WrN&>Kh;!NED=mqFLnX!GWE~7tbC%Q)#S=qyQ3=BuI+5 z!NRCci~LOx=OFT?oyafl9sXJ+@{1@wy&F6&YGhwj!~d{~5fiTmC0j;ilCi4V+uPfn zYzvW}-aWXX%+ITfCXbOnzvXlCSH};E__rLdy3gXMso0AZJ7ydxstyaB>@~}_4=>`Z zNmz0fgyGF=;tu~Fz}$es3cuzBP;nNe8Ep>G z4>=~2#=B3dpdyS{EIzdoTW>ckSf@Y+l+9tEU^`5-UH;CZEKNcp8Hu}XB2FERq+k{C zsRD*pi!F^8EEIMTY@)hmk)LzdCr6CTf@{kBH5c))nv6!Qr+F3N~G5PKN_2(uhRpac( zJ_HMvzJ03SG{Lmc-sYc)U~CjA{ltgT`44C=_!9iqxoRa?vi8$aO1q=rT`<;m1Zd3l zBl+F1)<&{m@2!KoA0Mc~3SUl_5jZaMHxO2CX}j#BoX$0QxPpj+`*ARXgNwZ#`M&q3 z9tY5Pdl=mM#ByrIc*I@%0Hq`$mAs3;O<91*!S<>3uqef-3qn6u$2;1t<%Vxv2 zSs?SH8+UK3WZpX~V0oXH(Po3c1t*D*6$Nv>Wb^ZW13At+ObXMg5|9Kueoe zIZF3(rN8ArTG-GQQg(+XVn-P)^%V6mqA7y2aft-U#qzedpuv^{^c{Sn%)l3DY-y(` z=(EL!2_>^Vx?$g`@Z8}fpRX8{lvLa;DX3*umkk_C(C^tIg5mNxp(<#zJRwU`lx1Pk zY_b&gaiABp#~h9xg=XVyguda1I4=rN-BHViSqY8f;!%60Xvc4cr#WK@P>Gr%kYQl# z4|NC9Hp;`IEP=|P$cc|QsA&Qx0E|KwRLwl>I9CA>FuGm^6@XL-&L<0w_)mYjlR%=3 zf7`6uB&YcHZHv(M4%fK+Q`Y)zZ8xX2)E>%w_^aRmPU|Jv4X@L3zZsmflHuNa23>xG zbSu1M7j+qhvR&lj?Ss3w)E)gvku(`YW5;U0F7`9FjN+{*BoPUQfEMCj@Di5Tnt!=~ zbp--KbZM&F`uEfIrYLIzg~|dF;yj2P@9uAz6?2%2qG>^2e-|S28i{KBbVg?4Z^5jq zCg#4elaljopQfWAAVDf`^-snlIUTzZZHo-!+|J&MU;)AbbSXZKmMqxrIPl##%bE=| zULDf*E?2j@qHp&pd&1UpIO>$sj>2|yAd8Tm~tl#Y9AB1G944a8o3 z|4+3i(x1x4kNcFVHx~(;H_Ig}uLf{9)eQHicR-nJ)ks{4LrRM|E|Pa;u~vv{ItqZk zkGbsK2@;zms>Q8XyF9Cc-}9t!z@&JA(%wtSDbStbbwS5Eo$%rw;?6B^`iv*EqytZu zk3Y5CuxNs11>#{05+!Mf42p?(;yB&2RBfk#+ASy+{2n9AIstSdy>^KbXda&2T&D~e zin)M5c6Xq;UTyb4Ov+K{LA%Bxib3K*G||P&PZ@>gCCF1vS{F^Fi9tHaKT!GdlRNrs zNSc^mhvf}zrXV)vMIN&CrrrkCd0N9}8AlcHn@*gA1LQl*f^|{V0j`A0{7KHPql=KY z6;fM3>8CgP`#@`aiE#Ujnyep0^7<{uWaQ^;(&L4A7g1}HVJeVyJ1 z5{grhMRS(D8K!ytsdVzeR~$gN%69ioNAL3zbuL&rrwsP0bpvZ;&Vr<9;PCjSDRBG) z#M}RnFb_UzF@Hnad%I~E|60u3YMUL0iunmDi_rE6=E2Pt^RUQTO~~2i9ktEQrd+Jo zkrPufqrNDkG{ZIHgZT+rH)WgLxVlI)JD&t*J4SF$)O)LXouRMJO|`b(7JU|#*U46q zu^P`m+B+x8h%i&28bdoRuMPsftI`tU20Ed?D8d$=s*57aigPr9Z-WR5RtjXRS+H}g zC!~79R!xJ(Z{D1w27zRgdaFGawI;arj#%59zP)x9MNBq29C6>?=zk}Gi+vMyg;*DP zdEL?E5o}`>p(KYkLs;-+f4Nk%ydxq1Ki(#&v+umC2in2*fP0QzuCZaW!XeGx?z>PHS#sAr`OU%uhGCfYLR$`M0Mezh|AxbJE_|PA;dq-+S-x{=>fy?tF?S zCSbw33a;I{!-=S_2e)oX9#kLT5g|UnHjo52+E2lzz&E(-d>B3&NANdh2b4Zq%1dBh^r zgSv*WODyN6)T)mFpZKBsm|M2nvsefMDH|f3R2Ln`1kaF}$P2xX*m-m&tFh>J@5!k( z6P)AULex*|nfUsO*V>N8CTo^y-r>(Uv}hHG38RC9ZO0(^7_N%qw30=9&zHY=%N=@B z#PY|sXu_m`kwoizm=#G>t;pz5R&i0bV*o_gz?f40#w{SMSjJ-FZ##-4D0WD67bbt= zkuLw;nqg!?&kGjW@`@Ny;+*Sdk6>YU1*0f*3bSXp=4Nv6zUzh{!ZZ4K1*|zt%NUfx z-rDFuUhq2zeHyf%qvet%FF-QLP^&e7u^eRZm>m`6ua3Wx-^J(e>HlB##%7<-$S`io zY#UaaD26RV?NPB<%uIL{Tc_i2=%~THON3|fK5c$}jTn&81u?AZEv>^zs3bjxNt7>l z#odu+w5@<5kY&48fO}hBPsIY6e%A&8^}HyPUC~j>tiq^7&vxlrtkiMCg)eNQ32DP9 ztL`-3?X3x%1+2e7C!y~$$EUBSVI8FWRa5x33#CXL3+D_r4ER4X+g+*(X-MQ;->s?? zj@pZ`*i5DbOTs7z{f8{4UYw6&ym>B4AUG|@Ta3yw+M?wlK4o}hkvgSgw1;-*d^1*y zg~YZN@+B};fE&sj>JUB@Y6Tok7^x-JgREnAz#c{neUt$C|xxfxXNB)& z-eJpJW@t$Cm>?Tfi4dEIGEdTF z4)f;$lUFyKJNiQBP>)E6H;I@0`!8Fa&Au?=Xp`1amVV1xLBPI1`qV0&61zfI($esp zhjw6J_dZlQ+I1pF-<9_9o~ z+u1t`1{$0XSbIHc1RUx74qN-+*mdpgqNUL-3kIyV54dJPpfC4uG#<7J?vOAE(@l6I zKyfZzKpd4F!j|X&ku^Q&BIico9M$n1&Q%!~0~}RxpfOhbM!1c-ntRI5hi$o5JcV3d zr1jP|0dC$HAT)T5Ce911G%zNI4!p}9hq3~%Z%D&44{iQM(FL^2SaHyO(A;!HKuv;e|Ub=((D z#~${E7Ns*%cvzNNEHVzKv6l?qA_?i8lw5xi-iY2(?T0#007hV)dO!zB%09o1ynA&`kqj>?e7gkn0@ZE1LU^h$Bl4Celw$o}jwlxznMt6l2r0k&t z8J13(Q}{j#pGE$wWA5(y@WQ4Q#KNOWIy5{G#+hPNcxfpeTF{4Z<1$WXjUS@Y5D_<} z5B1LWo4$q1SxqY@cHZ0l`r3;k=w39wAp4;2M7Ufs+|Vy;WHMLXbI5iqhh+j6WOOLf1UAupo2A2}Ooz)@zN}X+C|aoFK!T?sw;JJ` znwKm(wNAY`!v#601l=)&py6tdK)0|wVRz*}!+6!?r?_A}rX5E)Qk18jLV3>S=#G9U zYXr>_xPYhi?{0*jM&Y;j!oLZ>-rsxmGxNDE2;@4PV|;tCl~DvS!@~wJxZu;I52^T* zXT5PNJu#bO_`UA1yf%Z^D)<;j7O*rt8A9tS?9^Z4%)CGpr>ZSHViMZ;&doR z7}y0U0CjL%<>6FY@ggeTk)} zFr550>k4kmq_CTg0r9a@)~!I20!sSW-)?qemfA_Ece&=|HN4Kjv{WReQgyPhM5OxOVYD z-x>=*AMSk@Z?9Jy7GJM01b|i7(Y54z8_FI+Z9z*s-T&~zL2U_J7sm1;u1w{N^n$#G z2H&{cJS>m5B;aCsTdba^LSRQfrct|WHwNNN=N?a{Q@~*g4M;^e}Olz)7C zq+ph)kaZ?|zjmt{lzuW|!g1@1RHvCfp@SM9&m z!AU?w!3v$<*Dxko+TF=vE10ujUxY7Sj5`WXc z>0^pzI^?GP1Erh#Eesi_RDc5H_wv!Bqlfp4WUGBMUqAJ3&B$=i&@9-;#gP>iwq@TN zs_tF=ypfs**J{05JDZdZe|Qh5vczyXrhYcvu&Lh{Z~_Q#*M~h{TC>YR@)S;}fwcFl z0e} zi4uF$9qM5LTM($CLmHle;EUU=rO$_1QH^{)Dx;VSg}u$;pqy zRhlIhnO68hvrlzmI=)k>3D%+vXxCg{4Tfz? zicWu|;aN2f-zI*WfFd*sCwLpVUWI6HM-zb`;vko*50WA4?i94ucC%u+yaF2JnVeD; zAx}oQRBNGbgZ0Czd60`YmdF{k0}9V9ybI!vY*BMV`rz>t!(MZnN4)Iw%ZHS-&2@1y ze$Uxqfl!2rr2X`2v3~SJE?qDCnw)LR7a&vXBT3W`KXCE;epA=-;*(l&@C3x*5Pfk$ zIfd26@&xlf;4swDoMP!5%1^&0^e}NL{zHtx(sN>!g{R4uiw#dfR)6+nR1)ad-{e)Z zL6H?rEyI;KPGD0PvB-TtoM|?F8rRL?l-Z2NYskqdDl{DUP zL>Dk^vB#7t!Hc~F*-Ej4`O7OZ&Un$Z*5!e~_t3HpMop3ynpHG{l~MJ}Pz+BDJ7K>F zH|61$S!)tECUvtcUry_nMK)x?vP?As@Tz!TT=WZ}lg+SX9%(d`5pY?t`QH) zZCdI5EQ)MUWnD5hEFrRueNDs-$nEjzxdL$>UzE7qj;@mBy{BP>C$*bJeW!@ArI0RA zt>!x)##(#ht(PEhBn{s&lDQJUSk4vsj9m zBFuNmhV~Z4z$wCgI4g5VNNS00g}@8#tv2p>3^FuX_2nL1b;=A?tzD|sf^H8;t>jT? z9tXgbS+iydoE9|4qk)`i=R0j)8c+E4q7~NY$>wnw;1w&o`8P^veXqUSRJq zY#`%RG9TO&QZ%y1ZvUmL3kogk#s z;5tMwi&Yx`|G6*eF>*RSMb!EN%NYtYH{2BMZL|y596caeHQ^N*Y-MWmFNBlf@~HEy{BozZ)HLnk{mv`FRiW|M6n z@VjRLGJ5CVx=lNx37R~;m<=$!)0*^vMa+k3wT#UuJvKubmR^{Ysf$%OXZ1N_;uc2u zD2;hB+XF$kuh%_nx)CdeJ ze4CBaigR#d1c|uln<#}l$D8}w1{=veczlz?Fd`H@cs>J5Rdt(=%v^~f{w!zbXc_U^ z?f~{tbr>0ZlH`|%eP2@r0@`>~J!R*H1u8%Fk=29m(OS5U?mdY#$*=o#%xc@G$EfnO zpH#AXSvaf{6Pe_Zo2nm@aOMaRlhEQ;+atY*#K0+tnO$?SP<(DL_%4Y^_&Tt3lK;ru zUCiIkN{2fHLh<}YT?Dv8#^fl)d6%|)yuScmZSy!32?9fQfoV3pnmLbBR8qpMC=8QZ z2cM_)d1{I-9{@HB6oDso8HdQ}bWCs+vpTTYP|z8pT15%>z#d~ImoB*1phwNVIrum% zt`69{m*KapEPQIu6DujYoMS*OCzDB@(7n^2%f+k9_<6Q{ma}8>hIuYrL+rwm z$h=<|av<4S*0-`Au%Xjbgtk=OB9pF}OJ9`_156lX{TTu0l2_9`c;%AdICYvg9?MH! zchYmvZgBauh!3Q=?Dc_7&xQn;=6%v^C|1~Gp%SP=zBl5~<9q4C6B;wqdx0uR@29}~ zIR5uv4D`Eh!Ikn5kRB~u>yNUmyGbT6JS5RZg&Verf%8H$3CZKM>#ICc1N1bT)WTdW zvOsyPaZco>RkB@u`X&^qHO9y6EHd0l4xlc)Hx~-XO+x-QlNWdyg=n_&h7~zLVt4YD z7RTZ^VFq@l3Cv6rLV0-So@CWPTt+45e(Lt7=8LGU$E@4()WJP^0yPO3g^M0`WQ}{= z`lnOH6!Xw1nzWjwD~uL_vm&A^LJ)G&b>y6qlu5#Ox``YGE}>##U>uLU$%B!)C7B8Mw^Y7sUa`&BCbJv7Ls|$syK4G8=wQq{DkbA9&Jzqo?zbX^H3?2qPc-;)XPo)k&CNO`W#>ZlmF{Y7!ySKgtZfi*}%VBff>dBE42I~O@#>(Q7nAqE8v z)4jGzRt*X^n2EYy`aX9Y>6LL`o?8%e#y9s<1wL0t1%oZHt33#XRz1lhCdT$ zlsp`kEMkWB(jj3OwUQE|w;*JSl-?|>SIp@G+b7GQ!P+k)c~Ipnt&TAAx95hkhRG6< zSKJJr2Y*V+!JdR{A1GYa^`^SJzrRfDRWsiMrFB0_%XvQEKZ(vF9@+Sh(LkPHa>6W~ zmvEefVOlMCi?TTxrGR>8||Lvt-N`X!+}Yk-K{L6GK1rIC);GK!JjfS)aNB zGB13=(&ehw3V)j>^{Oiqi66V)GEwuOMD?^CxZck2`R)7L{_huE6cnEp?JuaUHv*ti z_bY^CnnX}r%PljM_fF*~FHw04>w&2~TzgN#<+n`Al@a zdv>d&(wtA0DlJWv>XqR>3R+=XNs^+{E0e0<<*&Ig+gZ_K?{P4EDOAbJH?rM#6!0U= z*1Y4edY&Cy{bGY7}ky}X-kJ@pk2PoigbXE`zSw_PL3907e%?Zm*xT5^Q(Yg zdawZ9GSGUjL%o>q^ZV=cPV%5x=sX&~@?}8YXrsfWb@|!C)n$3JQ|)(;1h=oXqpBve zyq8Um9y&^I;ZP1%EIQkslQb0o_X50v3YJZp(4*~S5XC;M_kv@FmW-NZ+v|eA)v9Q+ zB$%@xIx7Gp!3U}r@b5Ax7QC;58EB;N?)GE6R$_^(;{;YgGtfMezQ#s>`Rv8Be;SbM z6_FjRqf=G|aRL2low8_@R-l;BJM=IEFgF$z^4EeICjM8RKxCK`YVz$mwox;n{hk|b!wC;P@FRJl33kKi=N5?TZbzdB$(Xt?_PmTEa zKky851H-Tdw5(XzzMbYGW$Ug|yVJNa_%7lV#3M8*zL!&`&fs~%G#%+r{4QeRYE;uG=GR zaQjAqK`*!;ggF~LMGlF9w7gaRDCe&ZJ{3#K(^Xl|Hb=sop@6;%s3j0yFN1upUq}^r3^`=|<4YK|~<% zVDu>CkrT#E(8N~On zmCd6tF*miE;;9V@tm@+wlZq^zgITpw0pGg4Xj9)J9RxkK88@}f=}hE3_8^J!ZDW)i z#bpbJ3fI^OG*jG=9aekr$WgU?veKQUribNsy{N$Zhu}yg-)m(F4@}i^cRIGZDGxSV zKR>)sKf5M?ukh^Ub$C{o(k|*y7#TvoYX&z@TQm%;!}Z|a@aWN3PagJf4PQKa@T_0* z#l6E{EBA;ByOj4dXHmXAUoqRmkw|pw(b*=F?QAro>i`u@52lpS(9O|MT`rzHmuhW@ zNx_{F`0|M`lMzZyRA3JF?>#5)cn43Z*^o25mkD8==Fe4A{YSlVQ$?h~%h}4CeIu`T z>yP!m+ty7v(cdivd?$G46u9S*>!nMR*+W#&K4k1a54i}IWnEXF<>*QH*wi%+{X}@g zbtunS>CA>8NUTr-!-O?%!;bYNP&6N-x`I3HKa=@ZtOq^1WE(f`mJUNqw?I<;>YZWh z<`EOJuCOQRDbhVmU2P3MZy-`K4c7*zPT|jRKj=8&ul0*j2`^e!f;P7d`PH-E3 ztH{q@{V1ui%KB}Vj{CAn>s-K2;HfL3#(B;Vdpd(YE>GPfqOV1A1>coNomstreQh)DvOzmSCqIU9Tw zTD)`PoV|Iorq`phF8zu}V{%WY_bdERqz_@q2$cXQgyPUs8eg*Eh#NTx|C?#P!ZrqQ z=RkY+M+_KW%EWKKMWg*S9xmgGQ4v=F^|C>b6HT@;!X`v4aP(tOw{1~ zaJ-*?kqA5lak!R-7?gu=m>RGzt5qSl51VF%NQ`GXr_rp8j?~<8s0SstA$0c5e~=)s zU0Pyc8K)_Vx(}u0#X3tdWvMIY1Dc@ga8(qi)jqpeMNLICe(?k6xHG(Pe9RGTOC5v%OmIo1t#k9c?yXH5nDdI79@P7|R8Q>`D^58RFZ za4oG~ucGRM-`xxU=G8U)-zfa{M)>KgUwrU0%cZ$_`x2d{2P$}?^{vTTW)hhBqZY#* zwVAI|L$oA1u8&)|I4$z2I$96><#j#?mKP~(yX2Q5ai>T>I6li|(~5Ywy9OjGODj0- zwu7gDMq|ZZlu=%7(u|c)Ihu=Pkm%+qWjy4<+4wf1TB-?gX1%BBRi6~=w^OkxbNHL6 z7qtT5sAb}ep01C`yyASPx7Xan`Pp?v-3wix4F zIu}kKW78Fzig7&JEXx)%n+=!0`xnmfO#)Vjih0~DNAPTQ89gKFsuUlivsGwAB~u|% zg8~ia#W&qhSq@H%^`(0#LbI@p(%^4uR86L;iFBYs7+}0eaam4B=8!aNDi&QwlW^+6 zk>S~D|HXW>cn{vFqJBl@aqT6t_ z8{Uzjrc9sWI*6E52WJOWVOm%Wh$VE-YEAta9C#Y+-er>L(5} z1368x_c=Z0+vNw(p7ahxk8LC`+AOswC*<1OzIMH-MHY7<;`t+}gP*07YU$F@SrX@4 z87`ie_Uoz1yk?VRihjaqcjaTAyt09AyX+Z%Wk@N#TG*3^baseh^(n(ZeSPUYwZuqf z9hFNEAm->s>BVPZO@6RNFG&WyMJ?L?BwQkj7LG0(23pC#=T`4LKJV*r*4VDAKgd)a0c&C#z?7;J|L5P60J*^Ce8 zR39IqzSvEvR+9}@g-VbA10$lX<1DIHM(u^ubj-5FVM~_n=?L-2`$#=X9bT$XgKs?0 zPw$a9Od$ z8SH=}jl=*lGH!YMqPl`Syj1Rl%>JE-2g=BgHuQ22DDw4hQ3B z=RYDgn*_(+h&kRUK4uf*D+n|S6Pm?r9AxN4S>LxknQ4=rca7wm!`|2x=a4^Bx#WRX zNWV^zuI`c2vqk7$OXJa)ip7(UiGM{H$s_L>EoMYB>csiN1H90wz;Dl%L0q`8EL_RW zI+X3E@UFkfx!ZLTqQ8hatAh>mG%wC`KSx~!3j;p9Vd;sG_T3qiS=vD(1uXC&hi-nz zbl%fynRs=;<=)@mqHA-3s`hUTg*#pW>z})VJas}Q?K9_TmhHAlNoS(!jxGDChoIJa zBt@}7_I0(5NqfVByIGWblEm$^t()|!t- zXySM3uyK&k?eRRJM5C+N$qE#|CleRAC_w_GDJ}g~Qe7H`Rsc`=f*8uo6eEZgeO~wJRiZ5BrfIK5nrY6VW zxvbirE-$&HI@Y=w#MG`C64-m3M;mCk=04btHi0E>h(n4x93?v^g`sEVwyeg%!rK1> z|2SCvE!w#8+;jpsOm=VB0w>=hwi@7onpXI8ACj$oVKlJPLmU&wMjPe>`&Y~yj#Cmi zP)t0=s<#=x{qak%%(2k@kaSsT`3MyQgR=&HsDlKshE8!I*Ciwh6g{_#74oD?it(sH z3EAW+X09>3ePKn}V!{MxFDvOFzl*PcDN)MkL_vgI9&R?i6g@Vzc|)TQYi3cU&9$n? zqw=KMkBenaFK3gKm0|MXp-Zu>=jLr=9rSo8MFr6fjotA~dvsLdqbUuPtM=+ML3f&5 z#2Ag3xfJ}k$THZQG0lMl$nIprXw<4 zv5!`OcdBi&vqAciQPj?c*FDNK74xK7`!`sjuatNNseN+GAA61KeIkFQ4Ql%A$HW%J zLaZK}dD2ybIZ4DA7CK*Yr#WNfm>pHvUefiNB`HoNpAZ`jSp9Z z^HpkiJygR0G15OrZ%>A_xcqciY{z4XC!SD_77GYZ;Brh}aR~CvWKp1C+@1{HPs|bs zH>{0r84%$kZIRj1LaZ_6y6?n|DmF0*58q?-NED9|4sN4iGv|}RE=yqB`d#Qi?BbWt zJnc+-{blm{w_+*rJ1zuq$88R4w!^n{(M6<>B@Bjj3%ZuYr-z)ZjThDQeDghd(W;7q z1Mb=htU-cs$lN{b2@C{vM>tD+LOY&>GzrH7b&+0#F8eZv727aRl&AakSa2H524$+> zFq)D%di+8iws;lo*aLH|*)_TOr-H?7zoAnA7p1$XW3%%cpgq?!TVW+IXARqS(*0vV%#{?1-u z4lRD0UaGY)Os}Jt%VYvNW)mHms;1>Hl)oY?tc{p@7$;79~QE_5rs9F7et^ zaS(^qx9y_Mg}>D`elT-qy20hZ&|o0mx8818VF-#a%mHyXz=KyFcg8rY?u%+~2m(y) zbjCbum?q)*L{km1e8i9rOWKVmv<14AZyO?E<0NR5jC`pP^V)PxF@QyVDKcaO9|86y zTtIt~kreju;sG$K^OVlTn-uaO)x(*6*=a|cY>Ka|EjWzk?eH};g<%wr< z&mo>OLF52sBty~wR>WI+F3~Qs|8g_ZVJ@`7``8FOc&p8C0KbEZPjNhHI`pG%#kHcT zZ5fHB{r0(h3+hSh4Q)4EP>bZ)FiIHtGobTr=}tmRMwC8wkwgv&W?M8Nh`u$Y*n&eY ziK>INGE&NSWWVOH=_Wj7(s;V->3=AKxCF zHSinKoyTC1q<&%t3VIEz+PVFNVUE>!d^zVlVODxx`H9W*XYqE&M>po(>Bsyo zzN?lc+x;A&IDq@(ii)d_RX^44wDC*xIBWV@T&DGaM+EomO;ag2xy(sSnp-vWcACt_ zw7R5JA}a{z4W4Ve_oxcBkkZL?Ecm0!m#JYG$~L(U9GZR{_T(!1#?k5M>F&n@qBoZ~ zR?=$dFgv*h(+h#qDmf|A-C3x4SWQFDqD!1hh#X#eZ&~;9I8R%K>*(T=8}mBNFIhv; zzuTGC`Avj@*1OLf#7Fh|G8FXB)`{3@e0oX#q33Q-yO=fwIQl?6m|Dq(T|!j^^sJw$ zU@HC@o{u}@^UKDadtdcU1rw38^b$RP* z*0tjz$XQ7d;%nTyO9D{A<@OS&pxJCLLqVCYcSdelbvczXx*G1A~EJRgOdsY-v)_l!BD>bU6`=9dwO;ZE(N_VNoXwNt_ze!-Q zIpq>cX;tgD-gCY0viIWWD-(B1Ru$P9Q(qaHiF7=EnRaU}a$TcnNRvJ$gK^QurXyV% z^R+I})75e)?zZ_Rp_h?(^<>A4d#BN_glWCPi^(xG@l96X0I=J(?qZ4u=2t<8 literal 13423 zcmV-#G?2?dRzV)0|8?WqwXci+@$Y{8 z5B~LkIIjQVAOF|yg8%&^D&?~uUHkKEe?hf=^bfE7qd)uaH{N5H(R!1yz0>l&AP7Fa zcMJZP6$LNg|AS**=SjfIEX}JhNy})SvEU-DR=lo)SrCRn%-3s{SF_-4{LNWeZHg$a z(wLR|IS;#-0Kx~i?j1nIi>S!cd>I5Ub9T95amAA0`thT$o; zT-8yQZG&}m#)4{Y$ zN_qY!kaHk;+m7TH_YZ%iBl$%XpWO?d@(RfpRq#KoWJJW9LBW<$kz}ka_xAR7N85tr zXZH?nY3uX)qRwNa&u_$<{N>3JkAEZJ$_Fft>XN-!u@fdLMdcyK#a^*&`|vW(>VzfN z1DOAWEz%rDI)`PQvvXDi0GRk7S?5?YJdX;*@AgMsB7Vu%{2YnIf}ba>jEi)Ghy+!% z3@RREEP}65u*sq{59S$<&jP&~3^Ib10RK(#ca(L$R_wA0qPejH*d{CpPD@xs`vv=^ zP74-l-wmh|>4KjZtg4F~DH3NVc-!#Ise&6Pw31RFMG5ypB)A^s!TJS~qty9⋓eeqnNfF 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 ROepaE{{yyfp>3%m0RV9QO<@24 diff --git a/package.json b/package.json index a88dd67..695f8b7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@fs/eslint-config-tree", - "version": "6.0.0-alpha.4", + "version": "6.0.0", "description": "Shared Tree configuration that contains overrides and enhancements on top of the base frontier configuration.", "main": "index.js", "repository": { @@ -28,15 +28,15 @@ "!.*" ], "dependencies": { - "@babel/eslint-parser": "^7.22.9", - "@fs/eslint-config-frontier-react": "^11.0.0-alpha.6", - "eslint": "^8.46.0", + "@babel/eslint-parser": "^7.23.3", + "@fs/eslint-config-frontier-react": "^11.0.0", + "eslint": "^8.55.0", "eslint-plugin-bestpractices": "github:skye2k2/eslint-plugin-bestpractices", "eslint-plugin-deprecate": "^0.7.0", "eslint-plugin-html": "^7.1.0", "eslint-plugin-promise": "^6.1.1", "eslint-plugin-sonarjs": "^0.18.0", - "eslint-plugin-test-selectors": "^2.0.4" + "eslint-plugin-test-selectors": "^2.1.1" }, "devDependencies": { "@fs/npm-publisher": "^1.5.2", From fb4b78195069d5619ca47d390f55e376669297a1 Mon Sep 17 00:00:00 2001 From: Clif Bergmann Date: Wed, 13 Dec 2023 11:07:53 -0700 Subject: [PATCH 2/2] Tweaks Update eslint-plugin-sonarjs. Update rule definitions to better match what we have in zion. Update demo file to extend case statements enough to trigger in the new world. Update snapshots. --- demo/example.js | 11 ++ demo/test/snapshots/linting-config.test.js.md | 138 ++++++++++-------- .../snapshots/linting-config.test.js.snap | Bin 13494 -> 13623 bytes es6.js | 66 +++++---- package.json | 2 +- 5 files changed, 125 insertions(+), 92 deletions(-) diff --git a/demo/example.js b/demo/example.js index d06ea6b..b273698 100644 --- a/demo/example.js +++ b/demo/example.js @@ -87,6 +87,7 @@ switch (1) { case 1: break case 2: + case 3: switch (2) { case 1: duplicateFunction() @@ -116,6 +117,16 @@ switch (1) { break case 11: break + case 12: + break + case 13: + break + case 14: + break + case 15: + break + case 16: + break default: break } diff --git a/demo/test/snapshots/linting-config.test.js.md b/demo/test/snapshots/linting-config.test.js.md index 8134fd5..7e8e442 100644 --- a/demo/test/snapshots/linting-config.test.js.md +++ b/demo/test/snapshots/linting-config.test.js.md @@ -2694,11 +2694,14 @@ Generated by [AVA](https://ava.li). ],␊ "sonarjs/cognitive-complexity": [␊ "warn",␊ - 25␊ + 30␊ + ],␊ + "sonarjs/elseif-without-else": [␊ + "off"␊ ],␊ "sonarjs/max-switch-cases": [␊ "warn",␊ - 10␊ + 15␊ ],␊ "sonarjs/no-all-duplicated-branches": [␊ "warn"␊ @@ -2706,9 +2709,16 @@ Generated by [AVA](https://ava.li). "sonarjs/no-collapsible-if": [␊ "warn"␊ ],␊ - "sonarjs/no-duplicate-string": [␊ + "sonarjs/no-collection-size-mischeck": [␊ "warn"␊ ],␊ + "sonarjs/no-duplicate-string": [␊ + "warn",␊ + {␊ + "threshold": 4,␊ + "ignoreStrings": "application/json"␊ + }␊ + ],␊ "sonarjs/no-duplicated-branches": [␊ "warn"␊ ],␊ @@ -2731,13 +2741,20 @@ Generated by [AVA](https://ava.li). "warn"␊ ],␊ "sonarjs/no-identical-functions": [␊ + "warn",␊ + 4␊ + ],␊ + "sonarjs/no-ignored-return": [␊ + "warn"␊ + ],␊ + "sonarjs/no-inverted-boolean-check": [␊ "warn"␊ ],␊ "sonarjs/no-nested-switch": [␊ "warn"␊ ],␊ "sonarjs/no-nested-template-literals": [␊ - "warn"␊ + "off"␊ ],␊ "sonarjs/no-one-iteration-loop": [␊ "warn"␊ @@ -2767,13 +2784,13 @@ Generated by [AVA](https://ava.li). "warn"␊ ],␊ "sonarjs/prefer-immediate-return": [␊ - "warn"␊ + "off"␊ ],␊ "sonarjs/prefer-object-literal": [␊ "warn"␊ ],␊ "sonarjs/prefer-single-boolean-return": [␊ - "warn"␊ + "off"␊ ],␊ "sonarjs/prefer-while": [␊ "warn"␊ @@ -3457,58 +3474,61 @@ Generated by [AVA](https://ava.li). `␊ example.js␊ - 8:0 error Found eslint-disable without " -- comment" bestpractices/no-eslint-disable␊ - 10:1 warning Unexpected 'FIXME' comment: 'fixMe: Actually make this work' no-warning-comments␊ - 11:1 warning Unexpected 'TODO' comment: 'todo: Add documentation' no-warning-comments␊ - 12:1 warning Unexpected 'HACK' comment: 'Hack: Note that these work, regardless...' no-warning-comments␊ - 19:10 error 'functionWithoutJSDocWarningsBecauseTheSectionWasCompletelyExcluded' is defined but never used no-unused-vars␊ - 24:1 warning Remove the @description tag to leave a plain block description or add additional description text above the @description line jsdoc/require-description␊ - 24:1 warning JSDoc @returns declaration present but return expression not available in function jsdoc/require-returns-check␊ - 24:1 warning JSDoc type missing brace valid-jsdoc␊ - 25:1 warning JSDoc description does not satisfy the regex pattern jsdoc/match-description␊ - 26:1 warning Expected @param names to be "params". Got "a, params, b" jsdoc/check-param-names␊ - 26:1 warning Missing JSDoc @param "a" description jsdoc/require-param-description␊ - 27:1 warning Missing JSDoc @param "params" description jsdoc/require-param-description␊ - 27:1 warning Missing JSDoc @param "params" type jsdoc/require-param-type␊ - 28:1 warning Missing JSDoc @param "b" description jsdoc/require-param-description␊ - 28:1 warning Missing JSDoc @param "b" type jsdoc/require-param-type␊ - 29:1 warning Missing JSDoc @returns description jsdoc/require-returns-description␊ - 29:1 warning Missing JSDoc @returns type jsdoc/require-returns-type␊ - 31:71 error 'params' is defined but never used no-unused-vars␊ - 36:1 warning Invalid JSDoc tag name "note" jsdoc/check-tag-names␊ - 38:1 warning Expected catch() or return promise/catch-or-return␊ - 38:17 error 'a' is defined but never used no-unused-vars␊ - 38:20 error Expected to return a value at the end of arrow function consistent-return␊ - 39:3 warning Each then() should return a value or throw promise/always-return␊ - 39:7 warning Unexpected constant condition no-constant-condition␊ - 40:5 warning Avoid wrapping return values in Promise.resolve promise/no-return-wrap␊ - 41:10 error Unnecessary 'else' after 'return' no-else-return␊ - 42:5 error 'forgotToDefine' is not defined no-undef␊ - 46:7 error 'variable' is assigned a value but never used no-unused-vars␊ - 46:18 warning This conditional operation returns the same value whether the condition is "true" or "false" sonarjs/no-all-duplicated-branches␊ - 46:18 error Unnecessary use of boolean literals in conditional expression no-unneeded-ternary␊ - 46:18 warning Unexpected constant condition no-constant-condition␊ - 49:7 warning Correct one of the identical sub-expressions on both sides of operator "&&" sonarjs/no-identical-expressions␊ - 49:55 error 'params' is not defined no-undef␊ - 50:5 warning This function expects 1 argument, but 2 were provided sonarjs/no-extra-arguments␊ - 51:30 error Module path/to/legacyModule is deprecated. Use module x instead deprecate/import␊ - 51:30 error Unexpected require() global-require␊ - 51:38 error Unable to resolve path to module 'path/to/legacyModule' import/no-unresolved␊ - 53:5 error Function deprecatedFunction is deprecated. Use function x from package y instead deprecate/function␊ - 53:5 error 'deprecatedFunction' is not defined no-undef␊ - 55:5 error Member expression $.each is deprecated. Use native forEach instead deprecate/member-expression␊ - 55:5 error '$' is not defined no-undef␊ - 57:5 error Unexpected 'debugger' statement no-debugger␊ - 57:5 error Unreachable code no-unreachable␊ - 71:10 warning Update this function so that its implementation is not identical to the one on line 63 sonarjs/no-identical-functions␊ - 79:1 warning Remove this conditional structure or edit its code blocks so that they're not all the same sonarjs/no-all-duplicated-branches␊ - 79:5 warning This always evaluates to truthy. Consider refactoring this code sonarjs/no-gratuitous-expressions␊ - 79:5 warning Unexpected constant condition no-constant-condition␊ - 86:1 warning Reduce the number of non-empty switch cases from 11 to at most 10 sonarjs/max-switch-cases␊ - 90:5 error Expected a default case default-case␊ - 90:5 warning Refactor the code to eliminate this nested "switch" sonarjs/no-nested-switch␊ - 95:7 error This case's code block is the same as the block for the case on line 91 sonarjs/no-duplicated-branches␊ - 95:7 error Duplicate case label no-duplicate-case␊ + 8:0 error Found eslint-disable without " -- comment" bestpractices/no-eslint-disable␊ + 10:1 warning Unexpected 'FIXME' comment: 'fixMe: Actually make this work' no-warning-comments␊ + 11:1 warning Unexpected 'TODO' comment: 'todo: Add documentation' no-warning-comments␊ + 12:1 warning Unexpected 'HACK' comment: 'Hack: Note that these work, regardless...' no-warning-comments␊ + 19:10 error 'functionWithoutJSDocWarningsBecauseTheSectionWasCompletelyExcluded' is defined but never used no-unused-vars␊ + 24:1 warning Remove the @description tag to leave a plain block description or add additional description text above the @description line jsdoc/require-description␊ + 24:1 warning JSDoc @returns declaration present but return expression not available in function jsdoc/require-returns-check␊ + 24:1 warning JSDoc type missing brace valid-jsdoc␊ + 25:1 warning JSDoc description does not satisfy the regex pattern jsdoc/match-description␊ + 26:1 warning Expected @param names to be "params". Got "a, params, b" jsdoc/check-param-names␊ + 26:1 warning Missing JSDoc @param "a" description jsdoc/require-param-description␊ + 27:1 warning Missing JSDoc @param "params" description jsdoc/require-param-description␊ + 27:1 warning Missing JSDoc @param "params" type jsdoc/require-param-type␊ + 28:1 warning Missing JSDoc @param "b" description jsdoc/require-param-description␊ + 28:1 warning Missing JSDoc @param "b" type jsdoc/require-param-type␊ + 29:1 warning Missing JSDoc @returns description jsdoc/require-returns-description␊ + 29:1 warning Missing JSDoc @returns type jsdoc/require-returns-type␊ + 31:71 error 'params' is defined but never used no-unused-vars␊ + 36:1 warning Invalid JSDoc tag name "note" jsdoc/check-tag-names␊ + 38:1 warning Expected catch() or return promise/catch-or-return␊ + 38:17 error 'a' is defined but never used no-unused-vars␊ + 38:20 error Expected to return a value at the end of arrow function consistent-return␊ + 39:3 warning Each then() should return a value or throw promise/always-return␊ + 39:7 warning Unexpected constant condition no-constant-condition␊ + 40:5 warning Avoid wrapping return values in Promise.resolve promise/no-return-wrap␊ + 41:10 error Unnecessary 'else' after 'return' no-else-return␊ + 42:5 error 'forgotToDefine' is not defined no-undef␊ + 46:7 error 'variable' is assigned a value but never used no-unused-vars␊ + 46:18 warning This conditional operation returns the same value whether the condition is "true" or "false" sonarjs/no-all-duplicated-branches␊ + 46:18 error Unnecessary use of boolean literals in conditional expression no-unneeded-ternary␊ + 46:18 warning Unexpected constant condition no-constant-condition␊ + 49:7 warning Correct one of the identical sub-expressions on both sides of operator "&&" sonarjs/no-identical-expressions␊ + 49:55 error 'params' is not defined no-undef␊ + 50:5 warning This function expects 1 argument, but 2 were provided sonarjs/no-extra-arguments␊ + 51:30 error Module path/to/legacyModule is deprecated. Use module x instead deprecate/import␊ + 51:30 error Unexpected require() global-require␊ + 51:38 error Unable to resolve path to module 'path/to/legacyModule' import/no-unresolved␊ + 53:5 error Function deprecatedFunction is deprecated. Use function x from package y instead deprecate/function␊ + 53:5 error 'deprecatedFunction' is not defined no-undef␊ + 55:5 error Member expression $.each is deprecated. Use native forEach instead deprecate/member-expression␊ + 55:5 error '$' is not defined no-undef␊ + 57:5 error Unexpected 'debugger' statement no-debugger␊ + 57:5 error Unreachable code no-unreachable␊ + 71:10 warning Update this function so that its implementation is not identical to the one on line 63 sonarjs/no-identical-functions␊ + 79:1 warning Remove this conditional structure or edit its code blocks so that they're not all the same sonarjs/no-all-duplicated-branches␊ + 79:5 warning This always evaluates to truthy. Consider refactoring this code sonarjs/no-gratuitous-expressions␊ + 79:5 warning Unexpected constant condition no-constant-condition␊ + 86:1 warning Reduce the number of non-empty switch cases from 16 to at most 15 sonarjs/max-switch-cases␊ + 91:5 error Expected a default case default-case␊ + 91:5 warning Refactor the code to eliminate this nested "switch" sonarjs/no-nested-switch␊ + 96:7 error This case's code block is the same as the block for the case on line 92 sonarjs/no-duplicated-branches␊ + 96:7 error Duplicate case label no-duplicate-case␊ + 96:12 warning This case duplicates the one on line 92 sonarjs/no-identical-conditions␊ + 102:3 error Duplicate case label no-duplicate-case␊ + 102:8 warning This case duplicates the one on line 90 sonarjs/no-identical-conditions␊ ␊ example.json␊ 4:6 error Property keys must be doublequoted json/*␊ @@ -3531,6 +3551,6 @@ Generated by [AVA](https://ava.li). 10:5 warning Test has no assertions jest/expect-expect␊ 10:13 error Test title is used multiple times in the same describe block jest/no-identical-title␊ ␊ - ✖ 69 problems (36 errors, 33 warnings)␊ + ✖ 72 problems (37 errors, 35 warnings)␊ 4 errors and 0 warnings potentially fixable with the `--fix` option.␊ ` diff --git a/demo/test/snapshots/linting-config.test.js.snap b/demo/test/snapshots/linting-config.test.js.snap index c00053acae36664d9f03794c07b2f9fdf1e40973..ea5665d1f082f0a64517872768e0977002ad67d5 100644 GIT binary patch delta 13441 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 FFq~;NeHz!z;gpk>6e54y!Hc~F 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 j--X;;l#G2VLLIu*C^D?@M~;SgnzIU?>3qd{9g) delta 13313 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 z sn=WQZg=;ngO+t}%6-r`GtJwFsY^FqQH3Bv{97%=(vg^E?duc0m|+!rIoIQRxl zI;;){<7ekTA~u@@$KHrJ-Y7n16XGifGzt@%#cUj8=tWuIw>_C@lb&~t4}i`-5HZv+Cd`) zEbt(QZhpvg-qUKCcy++#-rwM&Yjc6B_HPV@J6-|npSyxQbwVcXGv{fR?Y2otXQJwk zE&Hj5pw@aMMX^Elb+wIuNqfVByIGWblE zm$^t()|!t-XySM3uyK&k?eRRJM5C+N$qE#|CleRA3oc>fRF;=T8?_xJTLMLsNDQhc~hm#J|757z+rHGKQv+Asd{+9SM;j55j{ z@cwK0=pfFt_g|}5p6`F~!LZe~bH=XI6XKbdaF@I-f*1(1* z{05$?dBen~O?xqat$m2q+g$zI;JQ}>Sf>|hJ}8xLTv~CW@YO&?8=s|pf`NK4f(f71 z;WN=PC6u7;aa0y-3(;ar{w*A7Pf!}wAznT`zIXKSYd2sE@gPmc0kDcM zS8dz?obXt?HoKG=>nfhBH;Ly9^aB|9gD zp=af`tj58@+W!OpI9UBH+PLxDbOJa`c5m1MC*LBr8sLDMR`_!tlC6DVG_cY`923Vz z8|DN1SIiuaQxZ5(OgzS_w;8|v@k_AGvC#dHbXjTn2o(c^vj%>sg9NaKPH`dEB_s+I zJ-3S$@}x?Cit(sH3EAW+X09>3ePKn}V!{MxFDvOFzl*PcDN)MkL_vgI9&R?i6g@Vz zc|)TQYi3cU&9$n?qw=KMkBenaFK3gKm0|MXp-Zu>=jLr=9rSo8MFr6fjotA~dvsLd zqbUuPtM=+ML3f&5#2Ag3xfJ}k$THZQG0l<@kx|snhSxpHG!^rtS^GCwp|6y91*v^<%O87< z>wO}Bf29p-`s~NV7R5rW9-Dd6Rf9Q6#26MjUvj58W8|0}RoGtA^_nFqP9>iZ8x2_m zgc(v$IZ?&Myz~d%q4D!oYIr?V!vHbTKSys*hP1f+bXRQ0V~Ho8P>vQ02v6X0OkQya z^2}sWpkUmd4Bk)75(qb}jcyqb;UjI4+0sIPtTE-f@5GHNHZchg-(&Ph6ps-OZlhr{ z=aa!MOJLjjUFbmU;+M}n?M!?9W%ByBVkz-EE(CGMZ4PU;!?$$NMWl}<42E?Jx|YSK zhn%d97uEE9^F4Xds)~XG?%D~gL4t6|+&%0G3Fq)D%di+8iws;lo*aLH|*)_TOr-H?7zoAnA7p1$XW3%%cpgq?!TV zW+IXARqS(*0vV%#{?1-u4lRD0UaGZ!Fifwbm&;@VI%X3cnX0DcFO;OW%Nh`d9 zu)92CatOTQGXNkd_Y_x!SrXMzh^48;^-?3gjePtu5})Rp3}TPdGgZvCQ|meS$|4dU%>k zw0!I>NIMoKLXh?Ww*)Tn+EZ~5ht;?3qRoZB)ir)Fb7#82<-pKjAl|p$ZdhRmiZILp zaW}w&R~~o9IIHf9YHtVvOzm`k#yo47CgJ%+Qw_0v#E=e4+Knf)1-g}Q8zN!jBxsb3 ze5n!h+H_4ZfJJ>NGGqfE0rn+aKzosq6!!4q0Whlbl+MMQ6!IX|!Zb8<~1ffrvpV%&7Nj>+4#|y01mDe7OX~fHadd8(8-Ce*g z=ek(L|cY>Ka|EjWzk?eH};g<%wr<&mo>OLF52sBty~wR>WI+F3~Qs|8g_ZVJ@`7``8FO zc&p8C0KbEZPjNhHI`pG|ZpF2tscjjFrTzA~d<*JH>kVx;Tu_VT*f2^M`7@yNZRt)z zOGcDFc9BF531(X~A&9;;rPzW)E{Up@@)E~>KXLlOG~9fuc7QbkRV}JdS3a7>pRcE?9I z=H2PX{4V3~7x`5Y_H9Vh`mjiQd+}uCx_5y+jRTARemWhQ2UT98in7{$@-8yWsecL1 z7g@6VF^Jfg;5v?#BY6H*(T=8}mBNFIhv;zuTGC`Avj@*1OLf#7Fh|G8FXB)`{3@e0oX# zq33Q-yO=fwIQl?6m|Dq(T|!j^^sJw$U@HC@o{u}@^UKDadtdcU1rw38^b$Rfx4`XIrgKz~oTB2pZ+NM6Wox3d#QN4K=(&TtFi!r;wMsZ97V z&bW8_zA?+|Y_IMd4`zFD@7KEbtFA7TUnf=Xhn9MORcW%sXI$4s(qt?|RZ@Fa6jRoG z%|9zOs-^p%^8ig#1N2IFsm5r}I5fXWV6Zvm5=v=R>$l!>z3;O3;^!+9cS}|k*%?z` z8JdZ7JbsyWYb|nJqi9HzJ|=^4(Z;4DT^jSXF3{7}awzV$`6lG&E>Xq!*!}+Zd)H#v zei(afUBy-P8vlzyC$CrY>UDLte0@?C`3LXoL5)1qSFJ#2dkWJob!Il5{`$YleG^lCf_^s6)3JMP3m8)S*Z=@%{e; LvxtuW+9Ux0cNHQK diff --git a/es6.js b/es6.js index c83b2b1..ea82539 100644 --- a/es6.js +++ b/es6.js @@ -40,38 +40,40 @@ module.exports = { 'promise/no-return-in-finally': 'warn', 'promise/valid-params': 'warn', - 'sonarjs/cognitive-complexity': ['warn', 25], - // sonarjs/elseif-without-else - 'sonarjs/max-switch-cases': ['warn', 10], - 'sonarjs/no-all-duplicated-branches': 'warn', - 'sonarjs/no-collapsible-if': 'warn', - // sonarjs/no-collection-size-mischeck - 'sonarjs/no-duplicate-string': 'warn', - 'sonarjs/no-duplicated-branches': 'warn', - 'sonarjs/no-element-overwrite': 'warn', - 'sonarjs/no-empty-collection': 'warn', - 'sonarjs/no-extra-arguments': 'warn', - 'sonarjs/no-gratuitous-expressions': 'warn', - 'sonarjs/no-identical-conditions': 'warn', - 'sonarjs/no-identical-expressions': 'warn', - 'sonarjs/no-identical-functions': 'warn', - // sonarjs/no-ignored-return - // sonarjs/no-inverted-boolean-check - 'sonarjs/no-nested-switch': 'warn', - 'sonarjs/no-nested-template-literals': 'warn', - 'sonarjs/no-one-iteration-loop': 'warn', - 'sonarjs/no-redundant-boolean': 'warn', - 'sonarjs/no-redundant-jump': 'warn', - 'sonarjs/no-same-line-conditional': 'warn', - 'sonarjs/no-small-switch': 'warn', - 'sonarjs/no-unused-collection': 'warn', - 'sonarjs/no-use-of-empty-return-value': 'warn', - 'sonarjs/no-useless-catch': 'warn', - 'sonarjs/non-existent-operator': 'warn', - 'sonarjs/prefer-immediate-return': 'warn', - 'sonarjs/prefer-object-literal': 'warn', - 'sonarjs/prefer-single-boolean-return': 'warn', - 'sonarjs/prefer-while': 'warn', + 'sonarjs/cognitive-complexity': ['warn', 30], // If your component or service gets beyond this point, you should consider scoping functionality differently. + 'sonarjs/max-switch-cases': ['warn', 15], // Yes, reducers are complicated, but if you have this many states, you may need to rethink your architecture. And anything else should generally be much simpler than this. + 'sonarjs/no-all-duplicated-branches': 'warn', // This is both inefficient and confusing. (ERROR in zion) + 'sonarjs/no-collapsible-if': 'warn', // This is still readable, so not high priority. + 'sonarjs/no-collection-size-mischeck': 'warn', // fixable // Unnecessary evaluation. (ERROR in zion) + 'sonarjs/no-duplicate-string': ['warn', { threshold: 4 }], // Maintainability. The more individual instances you have of a string literal, the more likely you miss/misspell one when refactoring. + 'sonarjs/no-duplicated-branches': 'warn', // This is both inefficient and confusing. NOTE: sonarjs's current implementation incorrectly flags single line duplications, sometimes. + 'sonarjs/no-element-overwrite': 'warn', // Unconditional overwrites are usually in error. (ERROR in zion) + 'sonarjs/no-empty-collection': 'warn', // You're not doing what you think you're doing. (ERROR in zion) + 'sonarjs/no-extra-arguments': 'warn', // This mismatch implies lost data somewhere. (ERROR in zion) + 'sonarjs/no-gratuitous-expressions': 'warn', // Unnecessary evaluations, often from later logic revisions. + 'sonarjs/no-identical-conditions': 'warn', // Unreachable code. (ERROR in zion) + 'sonarjs/no-identical-expressions': 'warn', // Unnecessary evaluations, often from copy+paste. (ERROR in zion) + 'sonarjs/no-identical-functions': ['warn', 4], // Inefficient and confusing. (ERROR in zion) + 'sonarjs/no-ignored-return': 'warn', // Inefficient. If you don't use a function's result, don't call it. + 'sonarjs/no-inverted-boolean-check': 'warn', // Complexity. Extra unnecessary cognitive overhead. Usually a result of logic reduction refactors. + 'sonarjs/no-nested-switch': 'warn', // There are a few limited cases where this pattern is preferable to the alternative, but it's mostly a bad idea. + 'sonarjs/no-one-iteration-loop': 'warn', // Complexity. Single loops are unnecessary complications of synchronous code execution. (ERROR in zion) + 'sonarjs/no-redundant-boolean': 'warn', // Readability. + 'sonarjs/no-redundant-jump': 'warn', // fixable // Redundant. We don't need to tell the flow what it would do anyway. (ERROR in zion) + 'sonarjs/no-same-line-conditional': 'warn', // fixable // Readability. Usually a result of an else-y path being removed/modified. (ERROR in zion) + 'sonarjs/no-small-switch': 'warn', // If your logic is not more than an if-else-if-else, it is usually more readable as such. + 'sonarjs/no-unused-collection': 'warn', // Inefficient. If you set up a collection, you should also use it. + 'sonarjs/no-use-of-empty-return-value': 'warn', // Fragility. You are not getting anything to use, so don't use it, otherwise you make your code fragile. (ERROR in zion) + 'sonarjs/no-useless-catch': 'warn', // Redundant, if all you do is re-throw a caught exception. + 'sonarjs/non-existent-operator': 'warn', // fixable // Almost always the result of a typo. (ERROR in zion) + 'sonarjs/prefer-object-literal': 'warn', // Inefficient. If this were auto-fixable, we would care more. + 'sonarjs/prefer-while': 'warn', // fixable // Readability. (ERROR in zion) + + // Disabled Rules: + 'sonarjs/elseif-without-else': 'off', // Disabled. Conflicts with our other autoformatting configuration. + 'sonarjs/no-nested-template-literals': 'off', // We do this a lot, most often with translations. + 'sonarjs/prefer-immediate-return': 'off', // fixable // Disabled. Violations can often be helpful by adhering to a consistent format, or adding a bit of additional context that would otherwise be lost. + 'sonarjs/prefer-single-boolean-return': 'off', // fixable // This is already addressed by our base configuration. 'test-selectors/anchor': testSelectorsConfiguration, 'test-selectors/button': testSelectorsConfiguration, diff --git a/package.json b/package.json index 695f8b7..040c495 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "eslint-plugin-deprecate": "^0.7.0", "eslint-plugin-html": "^7.1.0", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-sonarjs": "^0.18.0", + "eslint-plugin-sonarjs": "^0.22.0", "eslint-plugin-test-selectors": "^2.1.1" }, "devDependencies": {