From 20d61e722b4b0997a3b646714f399001c3769c98 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 11 Nov 2021 23:26:10 +0800 Subject: [PATCH] `require-number-to-fixed-digits-argument`: Ignore `.toFixed` from new expression (#1601) --- ...require-number-to-fixed-digits-argument.js | 13 ++++--- ...equire-number-to-fixed-digits-argument.mjs | 8 +++++ ...ire-number-to-fixed-digits-argument.mjs.md | 32 ++++++++++++++++++ ...e-number-to-fixed-digits-argument.mjs.snap | Bin 244 -> 362 bytes 4 files changed, 48 insertions(+), 5 deletions(-) diff --git a/rules/require-number-to-fixed-digits-argument.js b/rules/require-number-to-fixed-digits-argument.js index 06d6e1755a..ea965118af 100644 --- a/rules/require-number-to-fixed-digits-argument.js +++ b/rules/require-number-to-fixed-digits-argument.js @@ -1,5 +1,5 @@ 'use strict'; -const {methodCallSelector} = require('./selectors/index.js'); +const {methodCallSelector, not} = require('./selectors/index.js'); const {appendArgument} = require('./fix/index.js'); const MESSAGE_ID = 'require-number-to-fixed-digits-argument'; @@ -7,10 +7,13 @@ const messages = { [MESSAGE_ID]: 'Missing the digits argument.', }; -const mathToFixed = methodCallSelector({ - method: 'toFixed', - argumentsLength: 0, -}); +const mathToFixed = [ + methodCallSelector({ + method: 'toFixed', + argumentsLength: 0, + }), + not('[callee.object.type="NewExpression"]'), +].join(''); /** @param {import('eslint').Rule.RuleContext} context */ const create = context => { diff --git a/test/require-number-to-fixed-digits-argument.mjs b/test/require-number-to-fixed-digits-argument.mjs index 6a1f490c6d..e9d31b898d 100644 --- a/test/require-number-to-fixed-digits-argument.mjs +++ b/test/require-number-to-fixed-digits-argument.mjs @@ -13,9 +13,17 @@ test.snapshot({ 'number?.toFixed()', 'number.toFixed?.()', 'number.notToFixed();', + + // `callee` is a `NewExpression` + 'new BigNumber(1).toFixed()', + 'new Number(1).toFixed()', ], invalid: [ 'const string = number.toFixed();', 'const string = number.toFixed( /* comment */ );', + 'Number(1).toFixed()', + + // False positive cases + 'const bigNumber = new BigNumber(1); const string = bigNumber.toFixed();', ], }); diff --git a/test/snapshots/require-number-to-fixed-digits-argument.mjs.md b/test/snapshots/require-number-to-fixed-digits-argument.mjs.md index 2841bc329e..bceac36b84 100644 --- a/test/snapshots/require-number-to-fixed-digits-argument.mjs.md +++ b/test/snapshots/require-number-to-fixed-digits-argument.mjs.md @@ -35,3 +35,35 @@ Generated by [AVA](https://avajs.dev). > 1 | const string = number.toFixed( /* comment */ );␊ | ^^^^^^^^^^^^^^^^^ Missing the digits argument.␊ ` + +## Invalid #3 + 1 | Number(1).toFixed() + +> Output + + `␊ + 1 | Number(1).toFixed(0)␊ + ` + +> Error 1/1 + + `␊ + > 1 | Number(1).toFixed()␊ + | ^^ Missing the digits argument.␊ + ` + +## Invalid #4 + 1 | const bigNumber = new BigNumber(1); const string = bigNumber.toFixed(); + +> Output + + `␊ + 1 | const bigNumber = new BigNumber(1); const string = bigNumber.toFixed(0);␊ + ` + +> Error 1/1 + + `␊ + > 1 | const bigNumber = new BigNumber(1); const string = bigNumber.toFixed();␊ + | ^^ Missing the digits argument.␊ + ` diff --git a/test/snapshots/require-number-to-fixed-digits-argument.mjs.snap b/test/snapshots/require-number-to-fixed-digits-argument.mjs.snap index e106fc3623867ceb80c89a5657dcd101a388bf63..e8d55c9800f87288790f659f00bf91a8df18ade5 100644 GIT binary patch literal 362 zcmV-w0hRtiRzViI_a;nWQJ_LF-U7sL7X9tb-Fte@GIf*nBHND6Vgifa zgJL^o1_ovZcCgKitPFyT0bB|Sh6*(b$@zK3B??KI>3*fTNvTB&whDQvh>KJ3%`7ek z*;SH}s*sYIo>@|?kXV#nnwy$eqKD!SMopAZf;%w}zxNrlQGAa}8*$zu$-NdtxmQ77 z3#cL&q+dZxUjZZbIvI#^KbkSbdIt@V;5!+p@8D?%DF#qg20=Z5sZtY{BMG?#0I&XJ I>dXTG0DqyG?*IS* literal 244 zcmVoQCXAYcx~8-Tcf-X*Ko%iPag^qsfm-<0VV5^WZo6C*}Z9rWLKv1KA7sSOW_+}OtgG?yNNL5J5OwTMSR!A&LFU?KOE73!> u*n%kcD(GtgRpf&7D`@E}pgW(blYuDrqZvc2chCTS-vIzY6DyF|0RRBw*K)`J