From fdadd88cd034e8b93868158f59965a72dcbf0351 Mon Sep 17 00:00:00 2001 From: Tristan Hessell Date: Wed, 25 Aug 2021 09:19:41 +1000 Subject: [PATCH] `error-message`: Handle shadowed `Error` constructor (#1496) --- rules/error-message.js | 5 +++++ test/error-message.mjs | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/rules/error-message.js b/rules/error-message.js index 6a47e360fb..f4c373ba6e 100644 --- a/rules/error-message.js +++ b/rules/error-message.js @@ -1,5 +1,6 @@ 'use strict'; const {getStaticValue} = require('eslint-utils'); +const isShadowed = require('./utils/is-shadowed.js'); const {callOrNewExpressionSelector} = require('./selectors/index.js'); const MESSAGE_ID_MISSING_MESSAGE = 'missing-message'; @@ -26,6 +27,10 @@ const selector = callOrNewExpressionSelector([ const create = context => ({ [selector](expression) { + if (isShadowed(context.getScope(), expression.callee)) { + return; + } + const constructorName = expression.callee.name; const messageArgumentIndex = constructorName === 'AggregateError' ? 1 : 0; const callArguments = expression.arguments; diff --git a/test/error-message.mjs b/test/error-message.mjs index 5182f9b87a..86a2d7f0d5 100644 --- a/test/error-message.mjs +++ b/test/error-message.mjs @@ -28,6 +28,13 @@ test.snapshot({ const a = x; throw x; `, + // #1431: Do not fail if Error is shadowed + outdent` + const Error = function () {}; + const err = new Error({ + name: 'Unauthorized', + }); + `, ], invalid: [ 'throw new Error()',