From 00fdb5d905efe138657a28a4a1ff0ac8e3036aae Mon Sep 17 00:00:00 2001 From: "weiran.zsd" Date: Thu, 22 Mar 2018 00:27:09 +0800 Subject: [PATCH] Fix: no-invalid-regexp not understand variable for flags (fixes #10112) --- lib/rules/no-invalid-regexp.js | 15 ++++++--------- tests/lib/rules/no-invalid-regexp.js | 2 ++ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/rules/no-invalid-regexp.js b/lib/rules/no-invalid-regexp.js index e57029c9f82f..7169e0ca7705 100644 --- a/lib/rules/no-invalid-regexp.js +++ b/lib/rules/no-invalid-regexp.js @@ -98,20 +98,17 @@ module.exports = { return; } const pattern = node.arguments[0].value; - let flags = ""; + let flags = isString(node.arguments[1]) ? node.arguments[1].value : ""; - if (node.arguments[1]) { - flags = isString(node.arguments[1]) ? node.arguments[1].value : null; - if (allowedFlags) { - flags = flags.replace(allowedFlags, ""); - } + if (allowedFlags) { + flags = flags.replace(allowedFlags, ""); } // If flags are unknown, check both are errored or not. const message = validateRegExpFlags(flags) || ( - (flags === null) - ? validateRegExpPattern(pattern, true) && validateRegExpPattern(pattern, false) - : validateRegExpPattern(pattern, flags.indexOf("u") !== -1) + flags + ? validateRegExpPattern(pattern, flags.indexOf("u") !== -1) + : validateRegExpPattern(pattern, true) && validateRegExpPattern(pattern, false) ); if (message) { diff --git a/tests/lib/rules/no-invalid-regexp.js b/tests/lib/rules/no-invalid-regexp.js index 3b9dac536bd4..ac835df9f0a6 100644 --- a/tests/lib/rules/no-invalid-regexp.js +++ b/tests/lib/rules/no-invalid-regexp.js @@ -23,6 +23,7 @@ ruleTester.run("no-invalid-regexp", rule, { "new RegExp", "new RegExp('.', 'im')", "global.RegExp('\\\\')", + "new RegExp('.', y)", { code: "new RegExp('.', 'y')", options: [{ allowConstructorFlags: ["y"] }] }, { code: "new RegExp('.', 'u')", options: [{ allowConstructorFlags: ["U"] }] }, { code: "new RegExp('.', 'yu')", options: [{ allowConstructorFlags: ["y", "u"] }] }, @@ -41,6 +42,7 @@ ruleTester.run("no-invalid-regexp", rule, { { code: "new RegExp('(?b)\\k')", parserOptions: { ecmaVersion: 2018 } }, { code: "new RegExp('(?b)\\k', 'u')", parserOptions: { ecmaVersion: 2018 } }, { code: "new RegExp('\\\\p{Letter}', 'u')", parserOptions: { ecmaVersion: 2018 } } + ], invalid: [ { code: "RegExp('[');", errors: [{ message: "Invalid regular expression: /[/: Unterminated character class.", type: "CallExpression" }] },