From c18a6e48e12e532e60cfcbdaf70f418548193566 Mon Sep 17 00:00:00 2001 From: Lauri Rooden Date: Sun, 7 Feb 2021 00:24:39 +0200 Subject: [PATCH] [[FIX]] Don't warn when RegExp() is used without 'new'. (#3529) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://262.ecma-international.org/#sec-regexp-constructor ... function call RegExp(…) is equivalent to the object creation expression new RegExp(…) with the same arguments ... --- src/jshint.js | 19 +++++++++++-------- tests/unit/fixtures/newcap.js | 7 ++++++- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/jshint.js b/src/jshint.js index 08f8d8f039..d6a5f5a64b 100644 --- a/src/jshint.js +++ b/src/jshint.js @@ -3046,14 +3046,17 @@ var JSHINT = (function() { if (left) { if (left.type === "(identifier)") { - if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) { - if ("Array Number String Boolean Date Object Error Symbol".indexOf(left.value) === -1) { - if (left.value === "Math") { - /* istanbul ignore next */ - warning("W063", left); - } else if (state.option.newcap) { - warning("W064", left); - } + var newcapRe = /^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/; + var newcapIgnore = [ + "Array", "Boolean", "Date", "Error", "Number", + "Object", "RegExp", "String", "Symbol" + ]; + if (newcapRe.test(left.value) && newcapIgnore.indexOf(left.value) === -1) { + if (left.value === "Math") { + /* istanbul ignore next */ + warning("W063", left); + } else if (state.option.newcap) { + warning("W064", left); } } } diff --git a/tests/unit/fixtures/newcap.js b/tests/unit/fixtures/newcap.js index 15b1ae9c39..852ac068a8 100644 --- a/tests/unit/fixtures/newcap.js +++ b/tests/unit/fixtures/newcap.js @@ -19,8 +19,13 @@ bat = myAnimal(); // Make sure we don't warn on Error, Number, etc. Array(); +Boolean(); +Date(); Error(); Number(); +/*jshint -W010 */ +Object(); +/*jshint +W010 */ +RegExp(); String(); -Boolean(); Symbol();