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 e106fc3623..e8d55c9800 100644 Binary files a/test/snapshots/require-number-to-fixed-digits-argument.mjs.snap and b/test/snapshots/require-number-to-fixed-digits-argument.mjs.snap differ