From c58ca469a6b5a90c8fb55de9018f5403a2a32838 Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 21 Dec 2020 15:31:07 +0800 Subject: [PATCH] `new-for-builtins`: Ignore `Object(x) === x` and `Object(x) !== x` --- rules/new-for-builtins.js | 10 ++++++++++ test/new-for-builtins.js | 5 ++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/rules/new-for-builtins.js b/rules/new-for-builtins.js index 7aa768a102..a5886b0d85 100644 --- a/rules/new-for-builtins.js +++ b/rules/new-for-builtins.js @@ -17,6 +17,16 @@ const create = context => { const {callee} = node; const {name} = callee; + if ( + name === 'Object' && + node.parent && + node.parent.type === 'BinaryExpression' && + (node.parent.operator === '===' || node.parent.operator === '!==') && + (node.parent.left === node || node.parent.right === node) + ) { + return; + } + if (enforceNew.has(name) && !isShadowed(context.getScope(), callee)) { context.report({ node, diff --git a/test/new-for-builtins.js b/test/new-for-builtins.js index 1e992511eb..9a03d11775 100644 --- a/test/new-for-builtins.js +++ b/test/new-for-builtins.js @@ -108,7 +108,10 @@ test({ `, // Not builtin 'new Foo();Bar();', - 'Foo();new Bar();' + 'Foo();new Bar();', + // Ignored + 'const isObject = v => Object(v) === v;', + '(x) !== Object(x)' ], invalid: [ {