summaryrefslogtreecommitdiff
path: root/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js')
-rw-r--r--tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js18
1 files changed, 16 insertions, 2 deletions
diff --git a/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js b/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js
index 9bdd508680..f09f3767da 100644
--- a/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js
+++ b/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js
@@ -4,6 +4,19 @@
*/
"use strict";
+/**
+ * Determines if a variable safely shadows undefined.
+ * This is the case when a variable named `undefined` is never assigned to a value (i.e. it always shares the same value
+ * as the global).
+ * @param {eslintScope.Variable} variable The variable to check
+ * @returns {boolean} true if this variable safely shadows `undefined`
+ */
+function safelyShadowsUndefined(variable) {
+ return variable.name === "undefined" &&
+ variable.references.every(ref => !ref.isWrite()) &&
+ variable.defs.every(def => def.node.type === "VariableDeclarator" && def.node.init === null);
+}
+
//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
@@ -24,12 +37,13 @@ module.exports = {
create(context) {
- const RESTRICTED = ["undefined", "NaN", "Infinity", "arguments", "eval"];
+
+ const RESTRICTED = new Set(["undefined", "NaN", "Infinity", "arguments", "eval"]);
return {
"VariableDeclaration, :function, CatchClause"(node) {
for (const variable of context.getDeclaredVariables(node)) {
- if (variable.defs.length > 0 && RESTRICTED.includes(variable.name)) {
+ if (variable.defs.length > 0 && RESTRICTED.has(variable.name) && !safelyShadowsUndefined(variable)) {
context.report({
node: variable.defs[0].name,
message: "Shadowing of global property '{{idName}}'.",