From 11ffe6b18393fd7448f71463d6a9acd1dea0ed80 Mon Sep 17 00:00:00 2001 From: Keri Warr Date: Sat, 8 Jul 2017 10:37:48 -0400 Subject: [PATCH] Fix: no-regex-spaces rule incorrectly fixes quantified spaces (#8773) --- lib/rules/no-regex-spaces.js | 4 ++-- tests/lib/rules/no-regex-spaces.js | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/rules/no-regex-spaces.js b/lib/rules/no-regex-spaces.js index 05ac86e87a9..09b689e8e6f 100644 --- a/lib/rules/no-regex-spaces.js +++ b/lib/rules/no-regex-spaces.js @@ -37,11 +37,11 @@ module.exports = { * @private */ function checkRegex(node, value, valueStart) { - const multipleSpacesRegex = /( {2,})+?/, + const multipleSpacesRegex = /( {2,})( [+*{?]|[^+*{?]|$)/, regexResults = multipleSpacesRegex.exec(value); if (regexResults !== null) { - const count = regexResults[0].length; + const count = regexResults[1].length; context.report({ node, diff --git a/tests/lib/rules/no-regex-spaces.js b/tests/lib/rules/no-regex-spaces.js index 1ed316f8a1f..72e1fd4e2fa 100644 --- a/tests/lib/rules/no-regex-spaces.js +++ b/tests/lib/rules/no-regex-spaces.js @@ -23,7 +23,8 @@ ruleTester.run("no-regex-spaces", rule, { "var foo = RegExp('bar\t\t\tbaz');", "var foo = new RegExp('bar\t\t\tbaz');", "var RegExp = function() {}; var foo = new RegExp('bar baz');", - "var RegExp = function() {}; var foo = RegExp('bar baz');" + "var RegExp = function() {}; var foo = RegExp('bar baz');", + "var foo = / +/;" ], invalid: [ @@ -69,6 +70,26 @@ ruleTester.run("no-regex-spaces", rule, { type: "CallExpression" } ] + }, + { + code: "var foo = /bar ?baz/;", + output: "var foo = /bar {3} ?baz/;", + errors: [ + { + message: "Spaces are hard to count. Use {3}.", + type: "Literal" + } + ] + }, + { + code: "var foo = new RegExp('bar ');", + output: "var foo = new RegExp('bar {4}');", + errors: [ + { + message: "Spaces are hard to count. Use {4}.", + type: "NewExpression" + } + ] } ] });