| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | /** * @fileoverview Disallow shadowing of NaN, undefined, and Infinity (ES5 section 15.1.1) * @author Michael Ficarra */"use strict";//------------------------------------------------------------------------------// Rule Definition//------------------------------------------------------------------------------module.exports = {    meta: {        docs: {            description: "disallow identifiers from shadowing restricted names",            category: "Variables",            recommended: false,            url: "https://eslint.org/docs/rules/no-shadow-restricted-names"        },        schema: []    },    create(context) {        const RESTRICTED = ["undefined", "NaN", "Infinity", "arguments", "eval"];        /**         * Check if the node name is present inside the restricted list         * @param {ASTNode} id id to evaluate         * @returns {void}         * @private         */        function checkForViolation(id) {            if (RESTRICTED.indexOf(id.name) > -1) {                context.report({                    node: id,                    message: "Shadowing of global property '{{idName}}'.",                    data: {                        idName: id.name                    }                });            }        }        return {            VariableDeclarator(node) {                checkForViolation(node.id);            },            ArrowFunctionExpression(node) {                [].map.call(node.params, checkForViolation);            },            FunctionExpression(node) {                if (node.id) {                    checkForViolation(node.id);                }                [].map.call(node.params, checkForViolation);            },            FunctionDeclaration(node) {                if (node.id) {                    checkForViolation(node.id);                    [].map.call(node.params, checkForViolation);                }            },            CatchClause(node) {                checkForViolation(node.param);            }        };    }};
 |