2 * @fileoverview Disallow shadowing of NaN, undefined, and Infinity (ES5 section 15.1.1)
3 * @author Michael Ficarra
4 * @copyright 2013 Michael Ficarra. All rights reserved.
8 //------------------------------------------------------------------------------
10 //------------------------------------------------------------------------------
12 module.exports = function(context) {
14 var RESTRICTED = ["undefined", "NaN", "Infinity", "arguments", "eval"];
16 function checkForViolation(id) {
17 if (RESTRICTED.indexOf(id.name) > -1) {
18 context.report(id, "Shadowing of global property \"" + id.name + "\".");
23 "VariableDeclarator": function(node) {
24 checkForViolation(node.id);
26 "ArrowFunctionExpression": function(node) {
28 checkForViolation(node.id);
30 [].map.call(node.params, checkForViolation);
32 "FunctionExpression": function(node) {
34 checkForViolation(node.id);
36 [].map.call(node.params, checkForViolation);
38 "FunctionDeclaration": function(node) {
40 checkForViolation(node.id);
41 [].map.call(node.params, checkForViolation);
44 "CatchClause": function(node) {
45 checkForViolation(node.param);