e720a0a153438b717a8550fca2544d96a35bc426
[platform/framework/web/crosswalk-tizen.git] /
1 /**
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.
5  */
6 "use strict";
7
8 //------------------------------------------------------------------------------
9 // Rule Definition
10 //------------------------------------------------------------------------------
11
12 module.exports = function(context) {
13
14     var RESTRICTED = ["undefined", "NaN", "Infinity", "arguments", "eval"];
15
16     function checkForViolation(id) {
17         if (RESTRICTED.indexOf(id.name) > -1) {
18             context.report(id, "Shadowing of global property \"" + id.name + "\".");
19         }
20     }
21
22     return {
23         "VariableDeclarator": function(node) {
24             checkForViolation(node.id);
25         },
26         "ArrowFunctionExpression": function(node) {
27             if (node.id) {
28                 checkForViolation(node.id);
29             }
30             [].map.call(node.params, checkForViolation);
31         },
32         "FunctionExpression": function(node) {
33             if (node.id) {
34                 checkForViolation(node.id);
35             }
36             [].map.call(node.params, checkForViolation);
37         },
38         "FunctionDeclaration": function(node) {
39             if (node.id) {
40                 checkForViolation(node.id);
41                 [].map.call(node.params, checkForViolation);
42             }
43         },
44         "CatchClause": function(node) {
45             checkForViolation(node.param);
46         }
47     };
48
49 };