eslint 0.22.0 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +111 -95
- package/bin/eslint.js +41 -41
- package/conf/environments.js +87 -81
- package/conf/eslint.json +186 -179
- package/lib/api.js +13 -12
- package/lib/cli-engine.js +441 -451
- package/lib/cli.js +196 -196
- package/lib/config-initializer.js +145 -145
- package/lib/config-validator.js +110 -110
- package/lib/config.js +428 -416
- package/lib/eslint.js +1072 -1073
- package/lib/file-finder.js +167 -167
- package/lib/formatters/checkstyle.js +68 -68
- package/lib/formatters/compact.js +53 -53
- package/lib/formatters/jslint-xml.js +40 -40
- package/lib/formatters/junit.js +63 -63
- package/lib/formatters/stylish.js +90 -90
- package/lib/formatters/tap.js +86 -86
- package/lib/ignored-paths.js +137 -137
- package/lib/load-rules.js +39 -39
- package/lib/options.js +132 -126
- package/lib/rule-context.js +107 -107
- package/lib/rules/accessor-pairs.js +65 -65
- package/lib/rules/array-bracket-spacing.js +180 -0
- package/lib/rules/block-scoped-var.js +339 -320
- package/lib/rules/brace-style.js +228 -228
- package/lib/rules/camelcase.js +111 -111
- package/lib/rules/comma-dangle.js +67 -64
- package/lib/rules/comma-spacing.js +191 -191
- package/lib/rules/comma-style.js +195 -195
- package/lib/rules/complexity.js +94 -94
- package/lib/rules/computed-property-spacing.js +144 -0
- package/lib/rules/consistent-return.js +75 -75
- package/lib/rules/consistent-this.js +119 -119
- package/lib/rules/constructor-super.js +108 -0
- package/lib/rules/curly.js +109 -109
- package/lib/rules/default-case.js +66 -66
- package/lib/rules/dot-location.js +63 -63
- package/lib/rules/dot-notation.js +119 -119
- package/lib/rules/eol-last.js +38 -38
- package/lib/rules/eqeqeq.js +96 -96
- package/lib/rules/func-names.js +45 -45
- package/lib/rules/func-style.js +49 -49
- package/lib/rules/generator-star-spacing.js +104 -87
- package/lib/rules/generator-star.js +76 -76
- package/lib/rules/global-strict.js +49 -49
- package/lib/rules/guard-for-in.js +32 -32
- package/lib/rules/handle-callback-err.js +81 -124
- package/lib/rules/indent.js +486 -486
- package/lib/rules/key-spacing.js +325 -325
- package/lib/rules/linebreak-style.js +44 -44
- package/lib/rules/lines-around-comment.js +228 -160
- package/lib/rules/max-depth.js +89 -89
- package/lib/rules/max-len.js +76 -76
- package/lib/rules/max-nested-callbacks.js +73 -73
- package/lib/rules/max-params.js +45 -45
- package/lib/rules/max-statements.js +61 -61
- package/lib/rules/new-cap.js +224 -224
- package/lib/rules/new-parens.js +29 -29
- package/lib/rules/newline-after-var.js +127 -127
- package/lib/rules/no-alert.js +153 -153
- package/lib/rules/no-array-constructor.js +31 -31
- package/lib/rules/no-bitwise.js +57 -57
- package/lib/rules/no-caller.js +29 -29
- package/lib/rules/no-catch-shadow.js +52 -52
- package/lib/rules/no-comma-dangle.js +45 -45
- package/lib/rules/no-cond-assign.js +123 -123
- package/lib/rules/no-console.js +27 -27
- package/lib/rules/no-constant-condition.js +73 -73
- package/lib/rules/no-continue.js +23 -23
- package/lib/rules/no-control-regex.js +58 -58
- package/lib/rules/no-debugger.js +22 -22
- package/lib/rules/no-delete-var.js +25 -25
- package/lib/rules/no-div-regex.js +27 -27
- package/lib/rules/no-dupe-args.js +89 -85
- package/lib/rules/no-dupe-keys.js +43 -43
- package/lib/rules/no-duplicate-case.js +67 -67
- package/lib/rules/no-else-return.js +125 -125
- package/lib/rules/no-empty-character-class.js +43 -43
- package/lib/rules/no-empty-class.js +45 -45
- package/lib/rules/no-empty-label.js +27 -27
- package/lib/rules/no-empty.js +49 -49
- package/lib/rules/no-eq-null.js +29 -29
- package/lib/rules/no-eval.js +26 -26
- package/lib/rules/no-ex-assign.js +42 -42
- package/lib/rules/no-extend-native.js +103 -103
- package/lib/rules/no-extra-bind.js +81 -81
- package/lib/rules/no-extra-boolean-cast.js +71 -71
- package/lib/rules/no-extra-parens.js +368 -355
- package/lib/rules/no-extra-semi.js +70 -23
- package/lib/rules/no-extra-strict.js +86 -86
- package/lib/rules/no-fallthrough.js +97 -97
- package/lib/rules/no-floating-decimal.js +30 -30
- package/lib/rules/no-func-assign.js +83 -83
- package/lib/rules/no-implied-eval.js +76 -76
- package/lib/rules/no-inline-comments.js +49 -49
- package/lib/rules/no-inner-declarations.js +78 -78
- package/lib/rules/no-invalid-regexp.js +53 -53
- package/lib/rules/no-irregular-whitespace.js +135 -135
- package/lib/rules/no-iterator.js +28 -28
- package/lib/rules/no-label-var.js +64 -64
- package/lib/rules/no-labels.js +44 -44
- package/lib/rules/no-lone-blocks.js +106 -27
- package/lib/rules/no-lonely-if.js +30 -30
- package/lib/rules/no-loop-func.js +58 -58
- package/lib/rules/no-mixed-requires.js +165 -165
- package/lib/rules/no-mixed-spaces-and-tabs.js +74 -74
- package/lib/rules/no-multi-spaces.js +119 -119
- package/lib/rules/no-multi-str.js +43 -43
- package/lib/rules/no-multiple-empty-lines.js +98 -98
- package/lib/rules/no-native-reassign.js +62 -62
- package/lib/rules/no-negated-in-lhs.js +25 -25
- package/lib/rules/no-nested-ternary.js +24 -24
- package/lib/rules/no-new-func.js +25 -25
- package/lib/rules/no-new-object.js +25 -25
- package/lib/rules/no-new-require.js +25 -25
- package/lib/rules/no-new-wrappers.js +26 -26
- package/lib/rules/no-new.js +27 -27
- package/lib/rules/no-obj-calls.js +28 -28
- package/lib/rules/no-octal-escape.js +39 -39
- package/lib/rules/no-octal.js +25 -25
- package/lib/rules/no-param-reassign.js +87 -87
- package/lib/rules/no-path-concat.js +39 -39
- package/lib/rules/no-plusplus.js +24 -24
- package/lib/rules/no-process-env.js +30 -30
- package/lib/rules/no-process-exit.js +33 -33
- package/lib/rules/no-proto.js +28 -28
- package/lib/rules/no-redeclare.js +68 -68
- package/lib/rules/no-regex-spaces.js +35 -35
- package/lib/rules/no-reserved-keys.js +56 -56
- package/lib/rules/no-restricted-modules.js +85 -85
- package/lib/rules/no-return-assign.js +53 -24
- package/lib/rules/no-script-url.js +34 -34
- package/lib/rules/no-self-compare.js +29 -29
- package/lib/rules/no-sequences.js +94 -94
- package/lib/rules/no-shadow-restricted-names.js +51 -51
- package/lib/rules/no-shadow.js +181 -136
- package/lib/rules/no-space-before-semi.js +98 -98
- package/lib/rules/no-spaced-func.js +37 -37
- package/lib/rules/no-sparse-arrays.js +33 -33
- package/lib/rules/no-sync.js +30 -30
- package/lib/rules/no-ternary.js +24 -24
- package/lib/rules/no-this-before-super.js +144 -0
- package/lib/rules/no-throw-literal.js +33 -33
- package/lib/rules/no-trailing-spaces.js +74 -63
- package/lib/rules/no-undef-init.js +28 -28
- package/lib/rules/no-undef.js +92 -92
- package/lib/rules/no-undefined.js +27 -27
- package/lib/rules/no-underscore-dangle.js +73 -73
- package/lib/rules/no-unexpected-multiline.js +58 -0
- package/lib/rules/no-unneeded-ternary.js +48 -48
- package/lib/rules/no-unreachable.js +98 -98
- package/lib/rules/no-unused-expressions.js +76 -76
- package/lib/rules/no-unused-vars.js +252 -250
- package/lib/rules/no-use-before-define.js +105 -105
- package/lib/rules/no-var.js +26 -26
- package/lib/rules/no-void.js +28 -28
- package/lib/rules/no-warning-comments.js +102 -102
- package/lib/rules/no-with.js +22 -22
- package/lib/rules/no-wrap-func.js +65 -65
- package/lib/rules/object-curly-spacing.js +231 -206
- package/lib/rules/object-shorthand.js +74 -73
- package/lib/rules/one-var.js +311 -304
- package/lib/rules/operator-assignment.js +118 -118
- package/lib/rules/operator-linebreak.js +114 -114
- package/lib/rules/padded-blocks.js +98 -98
- package/lib/rules/prefer-const.js +91 -0
- package/lib/rules/quote-props.js +72 -72
- package/lib/rules/quotes.js +92 -92
- package/lib/rules/radix.js +41 -41
- package/lib/rules/semi-spacing.js +167 -167
- package/lib/rules/semi.js +136 -136
- package/lib/rules/sort-vars.js +49 -49
- package/lib/rules/space-after-function-name.js +49 -49
- package/lib/rules/space-after-keywords.js +82 -82
- package/lib/rules/space-before-blocks.js +91 -91
- package/lib/rules/space-before-function-paren.js +139 -139
- package/lib/rules/space-before-function-parentheses.js +139 -139
- package/lib/rules/space-in-brackets.js +305 -305
- package/lib/rules/space-in-parens.js +281 -281
- package/lib/rules/space-infix-ops.js +106 -106
- package/lib/rules/space-return-throw-case.js +38 -38
- package/lib/rules/space-unary-ops.js +124 -133
- package/lib/rules/spaced-comment.js +143 -0
- package/lib/rules/spaced-line-comment.js +89 -89
- package/lib/rules/strict.js +242 -242
- package/lib/rules/use-isnan.js +26 -26
- package/lib/rules/valid-jsdoc.js +215 -215
- package/lib/rules/valid-typeof.js +42 -42
- package/lib/rules/vars-on-top.js +115 -115
- package/lib/rules/wrap-iife.js +48 -48
- package/lib/rules/wrap-regex.js +38 -38
- package/lib/rules/yoda.js +242 -225
- package/lib/rules.js +88 -88
- package/lib/timing.js +109 -109
- package/lib/token-store.js +201 -201
- package/lib/util/traverse.js +105 -105
- package/lib/util.js +125 -85
- package/package.json +6 -6
- package/CHANGELOG.md +0 -1638
@@ -1,29 +1,29 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag comparison where left part is the same as the right
|
3
|
-
* part.
|
4
|
-
* @author Ilya Volodin
|
5
|
-
*/
|
6
|
-
|
7
|
-
"use strict";
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Rule Definition
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
module.exports = function(context) {
|
14
|
-
|
15
|
-
return {
|
16
|
-
|
17
|
-
"BinaryExpression": function(node) {
|
18
|
-
var operators = ["===", "==", "!==", "!=", ">", "<", ">=", "<="];
|
19
|
-
if (operators.indexOf(node.operator) > -1 &&
|
20
|
-
(node.left.type === "Identifier" && node.right.type === "Identifier" && node.left.name === node.right.name ||
|
21
|
-
node.left.type === "Literal" && node.right.type === "Literal" && node.left.value === node.right.value)) {
|
22
|
-
context.report(node, "Comparing to itself is potentially pointless.");
|
23
|
-
}
|
24
|
-
}
|
25
|
-
};
|
26
|
-
|
27
|
-
};
|
28
|
-
|
29
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag comparison where left part is the same as the right
|
3
|
+
* part.
|
4
|
+
* @author Ilya Volodin
|
5
|
+
*/
|
6
|
+
|
7
|
+
"use strict";
|
8
|
+
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
// Rule Definition
|
11
|
+
//------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
module.exports = function(context) {
|
14
|
+
|
15
|
+
return {
|
16
|
+
|
17
|
+
"BinaryExpression": function(node) {
|
18
|
+
var operators = ["===", "==", "!==", "!=", ">", "<", ">=", "<="];
|
19
|
+
if (operators.indexOf(node.operator) > -1 &&
|
20
|
+
(node.left.type === "Identifier" && node.right.type === "Identifier" && node.left.name === node.right.name ||
|
21
|
+
node.left.type === "Literal" && node.right.type === "Literal" && node.left.value === node.right.value)) {
|
22
|
+
context.report(node, "Comparing to itself is potentially pointless.");
|
23
|
+
}
|
24
|
+
}
|
25
|
+
};
|
26
|
+
|
27
|
+
};
|
28
|
+
|
29
|
+
module.exports.schema = [];
|
@@ -1,94 +1,94 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag use of comma operator
|
3
|
-
* @author Brandon Mills
|
4
|
-
*/
|
5
|
-
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Rule Definition
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
module.exports = function(context) {
|
13
|
-
|
14
|
-
/**
|
15
|
-
* Parts of the grammar that are required to have parens.
|
16
|
-
*/
|
17
|
-
var parenthesized = {
|
18
|
-
"DoWhileStatement": "test",
|
19
|
-
"IfStatement": "test",
|
20
|
-
"SwitchStatement": "discriminant",
|
21
|
-
"WhileStatement": "test",
|
22
|
-
"WithStatement": "object"
|
23
|
-
|
24
|
-
// Omitting CallExpression - commas are parsed as argument separators
|
25
|
-
// Omitting NewExpression - commas are parsed as argument separators
|
26
|
-
// Omitting ForInStatement - parts aren't individually parenthesised
|
27
|
-
// Omitting ForStatement - parts aren't individually parenthesised
|
28
|
-
};
|
29
|
-
|
30
|
-
/**
|
31
|
-
* Determines whether a node is required by the grammar to be wrapped in
|
32
|
-
* parens, e.g. the test of an if statement.
|
33
|
-
* @param {ASTNode} node - The AST node
|
34
|
-
* @returns {boolean} True if parens around node belong to parent node.
|
35
|
-
*/
|
36
|
-
function requiresExtraParens(node) {
|
37
|
-
return node.parent && parenthesized[node.parent.type] != null &&
|
38
|
-
node === node.parent[parenthesized[node.parent.type]];
|
39
|
-
}
|
40
|
-
|
41
|
-
/**
|
42
|
-
* Check if a node is wrapped in parens.
|
43
|
-
* @param {ASTNode} node - The AST node
|
44
|
-
* @returns {boolean} True if the node has a paren on each side.
|
45
|
-
*/
|
46
|
-
function isParenthesised(node) {
|
47
|
-
var previousToken = context.getTokenBefore(node),
|
48
|
-
nextToken = context.getTokenAfter(node);
|
49
|
-
|
50
|
-
return previousToken && nextToken &&
|
51
|
-
previousToken.value === "(" && previousToken.range[1] <= node.range[0] &&
|
52
|
-
nextToken.value === ")" && nextToken.range[0] >= node.range[1];
|
53
|
-
}
|
54
|
-
|
55
|
-
/**
|
56
|
-
* Check if a node is wrapped in two levels of parens.
|
57
|
-
* @param {ASTNode} node - The AST node
|
58
|
-
* @returns {boolean} True if two parens surround the node on each side.
|
59
|
-
*/
|
60
|
-
function isParenthesisedTwice(node) {
|
61
|
-
var previousToken = context.getTokenBefore(node, 1),
|
62
|
-
nextToken = context.getTokenAfter(node, 1);
|
63
|
-
|
64
|
-
return isParenthesised(node) && previousToken && nextToken &&
|
65
|
-
previousToken.value === "(" && previousToken.range[1] <= node.range[0] &&
|
66
|
-
nextToken.value === ")" && nextToken.range[0] >= node.range[1];
|
67
|
-
}
|
68
|
-
|
69
|
-
return {
|
70
|
-
"SequenceExpression": function(node) {
|
71
|
-
// Always allow sequences in for statement update
|
72
|
-
if (node.parent.type === "ForStatement" &&
|
73
|
-
(node === node.parent.init || node === node.parent.update)) {
|
74
|
-
return;
|
75
|
-
}
|
76
|
-
|
77
|
-
// Wrapping a sequence in extra parens indicates intent
|
78
|
-
if (requiresExtraParens(node)) {
|
79
|
-
if (isParenthesisedTwice(node)) {
|
80
|
-
return;
|
81
|
-
}
|
82
|
-
} else {
|
83
|
-
if (isParenthesised(node)) {
|
84
|
-
return;
|
85
|
-
}
|
86
|
-
}
|
87
|
-
|
88
|
-
context.report(node, "Unexpected use of comma operator.");
|
89
|
-
}
|
90
|
-
};
|
91
|
-
|
92
|
-
};
|
93
|
-
|
94
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag use of comma operator
|
3
|
+
* @author Brandon Mills
|
4
|
+
*/
|
5
|
+
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
|
12
|
+
module.exports = function(context) {
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Parts of the grammar that are required to have parens.
|
16
|
+
*/
|
17
|
+
var parenthesized = {
|
18
|
+
"DoWhileStatement": "test",
|
19
|
+
"IfStatement": "test",
|
20
|
+
"SwitchStatement": "discriminant",
|
21
|
+
"WhileStatement": "test",
|
22
|
+
"WithStatement": "object"
|
23
|
+
|
24
|
+
// Omitting CallExpression - commas are parsed as argument separators
|
25
|
+
// Omitting NewExpression - commas are parsed as argument separators
|
26
|
+
// Omitting ForInStatement - parts aren't individually parenthesised
|
27
|
+
// Omitting ForStatement - parts aren't individually parenthesised
|
28
|
+
};
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Determines whether a node is required by the grammar to be wrapped in
|
32
|
+
* parens, e.g. the test of an if statement.
|
33
|
+
* @param {ASTNode} node - The AST node
|
34
|
+
* @returns {boolean} True if parens around node belong to parent node.
|
35
|
+
*/
|
36
|
+
function requiresExtraParens(node) {
|
37
|
+
return node.parent && parenthesized[node.parent.type] != null &&
|
38
|
+
node === node.parent[parenthesized[node.parent.type]];
|
39
|
+
}
|
40
|
+
|
41
|
+
/**
|
42
|
+
* Check if a node is wrapped in parens.
|
43
|
+
* @param {ASTNode} node - The AST node
|
44
|
+
* @returns {boolean} True if the node has a paren on each side.
|
45
|
+
*/
|
46
|
+
function isParenthesised(node) {
|
47
|
+
var previousToken = context.getTokenBefore(node),
|
48
|
+
nextToken = context.getTokenAfter(node);
|
49
|
+
|
50
|
+
return previousToken && nextToken &&
|
51
|
+
previousToken.value === "(" && previousToken.range[1] <= node.range[0] &&
|
52
|
+
nextToken.value === ")" && nextToken.range[0] >= node.range[1];
|
53
|
+
}
|
54
|
+
|
55
|
+
/**
|
56
|
+
* Check if a node is wrapped in two levels of parens.
|
57
|
+
* @param {ASTNode} node - The AST node
|
58
|
+
* @returns {boolean} True if two parens surround the node on each side.
|
59
|
+
*/
|
60
|
+
function isParenthesisedTwice(node) {
|
61
|
+
var previousToken = context.getTokenBefore(node, 1),
|
62
|
+
nextToken = context.getTokenAfter(node, 1);
|
63
|
+
|
64
|
+
return isParenthesised(node) && previousToken && nextToken &&
|
65
|
+
previousToken.value === "(" && previousToken.range[1] <= node.range[0] &&
|
66
|
+
nextToken.value === ")" && nextToken.range[0] >= node.range[1];
|
67
|
+
}
|
68
|
+
|
69
|
+
return {
|
70
|
+
"SequenceExpression": function(node) {
|
71
|
+
// Always allow sequences in for statement update
|
72
|
+
if (node.parent.type === "ForStatement" &&
|
73
|
+
(node === node.parent.init || node === node.parent.update)) {
|
74
|
+
return;
|
75
|
+
}
|
76
|
+
|
77
|
+
// Wrapping a sequence in extra parens indicates intent
|
78
|
+
if (requiresExtraParens(node)) {
|
79
|
+
if (isParenthesisedTwice(node)) {
|
80
|
+
return;
|
81
|
+
}
|
82
|
+
} else {
|
83
|
+
if (isParenthesised(node)) {
|
84
|
+
return;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
context.report(node, "Unexpected use of comma operator.");
|
89
|
+
}
|
90
|
+
};
|
91
|
+
|
92
|
+
};
|
93
|
+
|
94
|
+
module.exports.schema = [];
|
@@ -1,51 +1,51 @@
|
|
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
|
-
};
|
50
|
-
|
51
|
-
module.exports.schema = [];
|
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
|
+
};
|
50
|
+
|
51
|
+
module.exports.schema = [];
|