From cfacccfc2ec96475eec4718a431c17b60ef39cec Mon Sep 17 00:00:00 2001 From: Bryan Mishkin Date: Fri, 2 Apr 2021 13:44:41 -0400 Subject: [PATCH] Update: Add automated suggestion to `radix` rule for parsing decimals --- lib/rules/radix.js | 19 ++++++++++++++++--- tests/lib/rules/radix.js | 38 ++++++++++++++++++++++++++++++++------ 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/lib/rules/radix.js b/lib/rules/radix.js index e32256623880..84ca40b2817f 100644 --- a/lib/rules/radix.js +++ b/lib/rules/radix.js @@ -82,7 +82,8 @@ module.exports = { description: "enforce the consistent use of the radix argument when using `parseInt()`", category: "Best Practices", recommended: false, - url: "https://eslint.org/docs/rules/radix" + url: "https://eslint.org/docs/rules/radix", + suggestion: true }, schema: [ @@ -95,7 +96,8 @@ module.exports = { missingParameters: "Missing parameters.", redundantRadix: "Redundant radix parameter.", missingRadix: "Missing radix parameter.", - invalidRadix: "Invalid radix parameter, must be an integer between 2 and 36." + invalidRadix: "Invalid radix parameter, must be an integer between 2 and 36.", + addRadixParameter10: "Add radix parameter `10` for parsing decimal numbers." } }, @@ -123,7 +125,18 @@ module.exports = { if (mode === MODE_ALWAYS) { context.report({ node, - messageId: "missingRadix" + messageId: "missingRadix", + suggest: [ + { + messageId: "addRadixParameter10", + fix(fixer) { + const sourceCode = context.getSourceCode(); + const argText = sourceCode.getText(node.arguments[0]); + + return fixer.replaceText(node.arguments[0], `${argText}, 10`); + } + } + ] }); } break; diff --git a/tests/lib/rules/radix.js b/tests/lib/rules/radix.js index 52801c3d1831..6aedda0e806a 100644 --- a/tests/lib/rules/radix.js +++ b/tests/lib/rules/radix.js @@ -76,7 +76,8 @@ ruleTester.run("radix", rule, { code: "parseInt(\"10\");", errors: [{ messageId: "missingRadix", - type: "CallExpression" + type: "CallExpression", + suggestions: [{ messageId: "addRadixParameter10", output: "parseInt(\"10\", 10);" }] }] }, { @@ -154,7 +155,8 @@ ruleTester.run("radix", rule, { code: "Number.parseInt(\"10\");", errors: [{ messageId: "missingRadix", - type: "CallExpression" + type: "CallExpression", + suggestions: [{ messageId: "addRadixParameter10", output: "Number.parseInt(\"10\", 10);" }] }] }, { @@ -191,22 +193,46 @@ ruleTester.run("radix", rule, { { code: "parseInt?.(\"10\");", parserOptions: { ecmaVersion: 2020 }, - errors: [{ messageId: "missingRadix" }] + errors: [ + { + messageId: "missingRadix", + type: "CallExpression", + suggestions: [{ messageId: "addRadixParameter10", output: "parseInt?.(\"10\", 10);" }] + } + ] }, { code: "Number.parseInt?.(\"10\");", parserOptions: { ecmaVersion: 2020 }, - errors: [{ messageId: "missingRadix" }] + errors: [ + { + messageId: "missingRadix", + type: "CallExpression", + suggestions: [{ messageId: "addRadixParameter10", output: "Number.parseInt?.(\"10\", 10);" }] + } + ] }, { code: "Number?.parseInt(\"10\");", parserOptions: { ecmaVersion: 2020 }, - errors: [{ messageId: "missingRadix" }] + errors: [ + { + messageId: "missingRadix", + type: "CallExpression", + suggestions: [{ messageId: "addRadixParameter10", output: "Number?.parseInt(\"10\", 10);" }] + } + ] }, { code: "(Number?.parseInt)(\"10\");", parserOptions: { ecmaVersion: 2020 }, - errors: [{ messageId: "missingRadix" }] + errors: [ + { + messageId: "missingRadix", + type: "CallExpression", + suggestions: [{ messageId: "addRadixParameter10", output: "(Number?.parseInt)(\"10\", 10);" }] + } + ] } ] });