From 913c177567ebd6f3ca84334ff45082c842e580b0 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Sun, 19 Oct 2025 17:53:14 +0800 Subject: [PATCH] feat: add `no-new-wrappers` --- packages/autofix/lib/rules/no-new-wrappers.js | 25 ++++++++ .../tests/lib/rules/no-new-wrappers.js | 60 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 packages/autofix/lib/rules/no-new-wrappers.js create mode 100644 packages/autofix/tests/lib/rules/no-new-wrappers.js diff --git a/packages/autofix/lib/rules/no-new-wrappers.js b/packages/autofix/lib/rules/no-new-wrappers.js new file mode 100644 index 0000000..bc775bd --- /dev/null +++ b/packages/autofix/lib/rules/no-new-wrappers.js @@ -0,0 +1,25 @@ +/** + * @fileoverview Add fixer to rule no-new-wrappers. + * @author SukkaW + */ +"use strict"; + +const ruleComposer = require("eslint-rule-composer"); +const utils = require("../utils"); + +const rule = utils.getFixableRule("no-new-wrappers", true); + +module.exports = ruleComposer.mapReports( + rule, + problem => { + if ( + problem.node.type !== "NewExpression" || // ignore non new expression + problem.node.arguments.length === 0 // ignore 'const a = new String' + ) { + return problem; + } + + problem.fix = fixer => fixer.removeRange([problem.node.range[0], problem.node.range[0] + 4]); + return problem; + } +); diff --git a/packages/autofix/tests/lib/rules/no-new-wrappers.js b/packages/autofix/tests/lib/rules/no-new-wrappers.js new file mode 100644 index 0000000..de55c2a --- /dev/null +++ b/packages/autofix/tests/lib/rules/no-new-wrappers.js @@ -0,0 +1,60 @@ +/** + * @fileoverview Tests for rule no-new-native-nonconstructor + * @author SukkaW + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const rule = require("../../../lib/rules/no-new-wrappers.js"); +const RuleTester = require("../../rule-tester.js").RuleTester; + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +const ruleTester = new RuleTester(); + +ruleTester.run("no-new-wrappers", rule, { + valid: [ + "const text = String(someValue);", + "const num = Number(someValue);", + "const object = new MyString();" + ], + invalid: [ + { + code: 'const stringObject = new String("Hello world");', + output: 'const stringObject = String("Hello world");', + errors: 1 + }, + { + code: "const numberObject = new Number(0x721);", + output: "const numberObject = Number(0x721);", + errors: 1 + }, + { + code: "const booleanObject = new Boolean(false);", + output: "const booleanObject = Boolean(false);", + errors: 1 + }, + + // no auto fix + { + code: "const stringObject = new String", + output: null, + errors: 1 + }, + { + code: "const numberObject = new Number", + output: null, + errors: 1 + }, + { + code: "const booleanObject = new Boolean", + output: null, + errors: 1 + } + ] +});