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
package/lib/rules/func-style.js
CHANGED
@@ -1,49 +1,49 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to enforce a particular function style
|
3
|
-
* @author Nicholas C. Zakas
|
4
|
-
* @copyright 2013 Nicholas C. Zakas. All rights reserved.
|
5
|
-
*/
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Rule Definition
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
module.exports = function(context) {
|
13
|
-
|
14
|
-
var style = context.options[0],
|
15
|
-
enforceDeclarations = (style === "declaration");
|
16
|
-
|
17
|
-
return {
|
18
|
-
|
19
|
-
"FunctionDeclaration": function(node) {
|
20
|
-
if (!enforceDeclarations) {
|
21
|
-
context.report(node, "Expected a function expression.");
|
22
|
-
}
|
23
|
-
},
|
24
|
-
|
25
|
-
"FunctionExpression": function() {
|
26
|
-
var parent = context.getAncestors().pop();
|
27
|
-
|
28
|
-
if (enforceDeclarations && parent.type === "VariableDeclarator") {
|
29
|
-
context.report(parent, "Expected a function declaration.");
|
30
|
-
}
|
31
|
-
},
|
32
|
-
|
33
|
-
"ArrowFunctionExpression": function() {
|
34
|
-
var parent = context.getAncestors().pop();
|
35
|
-
|
36
|
-
if (enforceDeclarations && parent.type === "VariableDeclarator") {
|
37
|
-
context.report(parent, "Expected a function declaration.");
|
38
|
-
}
|
39
|
-
}
|
40
|
-
|
41
|
-
};
|
42
|
-
|
43
|
-
};
|
44
|
-
|
45
|
-
module.exports.schema = [
|
46
|
-
{
|
47
|
-
"enum": ["declaration", "expression"]
|
48
|
-
}
|
49
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to enforce a particular function style
|
3
|
+
* @author Nicholas C. Zakas
|
4
|
+
* @copyright 2013 Nicholas C. Zakas. All rights reserved.
|
5
|
+
*/
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
|
12
|
+
module.exports = function(context) {
|
13
|
+
|
14
|
+
var style = context.options[0],
|
15
|
+
enforceDeclarations = (style === "declaration");
|
16
|
+
|
17
|
+
return {
|
18
|
+
|
19
|
+
"FunctionDeclaration": function(node) {
|
20
|
+
if (!enforceDeclarations) {
|
21
|
+
context.report(node, "Expected a function expression.");
|
22
|
+
}
|
23
|
+
},
|
24
|
+
|
25
|
+
"FunctionExpression": function() {
|
26
|
+
var parent = context.getAncestors().pop();
|
27
|
+
|
28
|
+
if (enforceDeclarations && parent.type === "VariableDeclarator") {
|
29
|
+
context.report(parent, "Expected a function declaration.");
|
30
|
+
}
|
31
|
+
},
|
32
|
+
|
33
|
+
"ArrowFunctionExpression": function() {
|
34
|
+
var parent = context.getAncestors().pop();
|
35
|
+
|
36
|
+
if (enforceDeclarations && parent.type === "VariableDeclarator") {
|
37
|
+
context.report(parent, "Expected a function declaration.");
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
};
|
42
|
+
|
43
|
+
};
|
44
|
+
|
45
|
+
module.exports.schema = [
|
46
|
+
{
|
47
|
+
"enum": ["declaration", "expression"]
|
48
|
+
}
|
49
|
+
];
|
@@ -1,87 +1,104 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to check the spacing around the * in generator functions.
|
3
|
-
* @author Jamund Ferguson
|
4
|
-
* @copyright 2015 Brandon Mills. All rights reserved.
|
5
|
-
* @copyright 2014 Jamund Ferguson. All rights reserved.
|
6
|
-
*/
|
7
|
-
|
8
|
-
"use strict";
|
9
|
-
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
// Rule Definition
|
12
|
-
//------------------------------------------------------------------------------
|
13
|
-
|
14
|
-
module.exports = function(context) {
|
15
|
-
|
16
|
-
var mode = {
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
*
|
30
|
-
* @
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
}
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to check the spacing around the * in generator functions.
|
3
|
+
* @author Jamund Ferguson
|
4
|
+
* @copyright 2015 Brandon Mills. All rights reserved.
|
5
|
+
* @copyright 2014 Jamund Ferguson. All rights reserved.
|
6
|
+
*/
|
7
|
+
|
8
|
+
"use strict";
|
9
|
+
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
// Rule Definition
|
12
|
+
//------------------------------------------------------------------------------
|
13
|
+
|
14
|
+
module.exports = function(context) {
|
15
|
+
|
16
|
+
var mode = (function(option) {
|
17
|
+
if (option == null || typeof option === "string") {
|
18
|
+
return {
|
19
|
+
before: { before: true, after: false },
|
20
|
+
after: { before: false, after: true },
|
21
|
+
both: { before: true, after: true },
|
22
|
+
neither: { before: false, after: false }
|
23
|
+
}[option || "before"];
|
24
|
+
}
|
25
|
+
return option;
|
26
|
+
}(context.options[0]));
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Checks the spacing between two tokens before or after the star token.
|
30
|
+
* @param {string} side Either "before" or "after".
|
31
|
+
* @param {Token} leftToken `function` keyword token if side is "before", or
|
32
|
+
* star token if side is "after".
|
33
|
+
* @param {Token} rightToken Star token if side is "before", or identifier
|
34
|
+
* token if side is "after".
|
35
|
+
* @returns {void}
|
36
|
+
*/
|
37
|
+
function checkSpacing(side, leftToken, rightToken) {
|
38
|
+
if (!!(rightToken.range[0] - leftToken.range[1]) !== mode[side]) {
|
39
|
+
context.report(
|
40
|
+
leftToken.value === "*" ? leftToken : rightToken,
|
41
|
+
"{{type}} space {{side}} *.",
|
42
|
+
{
|
43
|
+
type: mode[side] ? "Missing" : "Unexpected",
|
44
|
+
side: side
|
45
|
+
}
|
46
|
+
);
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
/**
|
51
|
+
* Enforces the spacing around the star if node is a generator function.
|
52
|
+
* @param {ASTNode} node A function expression or declaration node.
|
53
|
+
* @returns {void}
|
54
|
+
*/
|
55
|
+
function checkFunction(node) {
|
56
|
+
var prevToken, starToken, nextToken;
|
57
|
+
|
58
|
+
if (!node.generator) {
|
59
|
+
return;
|
60
|
+
}
|
61
|
+
|
62
|
+
if (node.parent.method || node.parent.type === "MethodDefinition") {
|
63
|
+
starToken = context.getTokenBefore(node, 1);
|
64
|
+
} else {
|
65
|
+
starToken = context.getFirstToken(node, 1);
|
66
|
+
}
|
67
|
+
|
68
|
+
// Only check before when preceded by `function` keyword
|
69
|
+
prevToken = context.getTokenBefore(starToken);
|
70
|
+
if (prevToken.value === "function" || prevToken.value === "static") {
|
71
|
+
checkSpacing("before", prevToken, starToken);
|
72
|
+
}
|
73
|
+
|
74
|
+
// Only check after when followed by an identifier
|
75
|
+
nextToken = context.getTokenAfter(starToken);
|
76
|
+
if (nextToken.type === "Identifier") {
|
77
|
+
checkSpacing("after", starToken, nextToken);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
return {
|
82
|
+
"FunctionDeclaration": checkFunction,
|
83
|
+
"FunctionExpression": checkFunction
|
84
|
+
};
|
85
|
+
|
86
|
+
};
|
87
|
+
|
88
|
+
module.exports.schema = [
|
89
|
+
{
|
90
|
+
"oneOf": [
|
91
|
+
{
|
92
|
+
"enum": ["before", "after", "both", "neither"]
|
93
|
+
},
|
94
|
+
{
|
95
|
+
"type": "object",
|
96
|
+
"properties": {
|
97
|
+
"before": {"type": "boolean"},
|
98
|
+
"after": {"type": "boolean"}
|
99
|
+
},
|
100
|
+
"additionalProperties": false
|
101
|
+
}
|
102
|
+
]
|
103
|
+
}
|
104
|
+
];
|
@@ -1,76 +1,76 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to check for the position of the * in your generator functions
|
3
|
-
* @author Jamund Ferguson
|
4
|
-
* @copyright 2014 Jamund Ferguson. All rights reserved.
|
5
|
-
*/
|
6
|
-
|
7
|
-
"use strict";
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Rule Definition
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
module.exports = function(context) {
|
14
|
-
|
15
|
-
var position = context.options[0] || "end";
|
16
|
-
|
17
|
-
/**
|
18
|
-
* Check the position of the star compared to the expected position.
|
19
|
-
* @param {ASTNode} node - the entire function node
|
20
|
-
* @returns {void}
|
21
|
-
*/
|
22
|
-
function checkStarPosition(node) {
|
23
|
-
var starToken;
|
24
|
-
|
25
|
-
if (!node.generator) {
|
26
|
-
return;
|
27
|
-
}
|
28
|
-
|
29
|
-
// Blocked, pending decision to fix or work around in eslint/espree#36
|
30
|
-
if (context.getAncestors().pop().method) {
|
31
|
-
return;
|
32
|
-
}
|
33
|
-
|
34
|
-
starToken = context.getFirstToken(node, 1);
|
35
|
-
|
36
|
-
// check for function *name() {}
|
37
|
-
if (position === "end") {
|
38
|
-
|
39
|
-
// * starts where the next identifier begins
|
40
|
-
if (starToken.range[1] !== context.getTokenAfter(starToken).range[0]) {
|
41
|
-
context.report(node, "Expected a space before *.");
|
42
|
-
}
|
43
|
-
}
|
44
|
-
|
45
|
-
// check for function* name() {}
|
46
|
-
if (position === "start") {
|
47
|
-
|
48
|
-
// * begins where the previous identifier ends
|
49
|
-
if (starToken.range[0] !== context.getTokenBefore(starToken).range[1]) {
|
50
|
-
context.report(node, "Expected no space before *.");
|
51
|
-
}
|
52
|
-
}
|
53
|
-
|
54
|
-
// check for function * name() {}
|
55
|
-
if (position === "middle") {
|
56
|
-
|
57
|
-
// must be a space before and afer the *
|
58
|
-
if (starToken.range[0] <= context.getTokenBefore(starToken).range[1] ||
|
59
|
-
starToken.range[1] >= context.getTokenAfter(starToken).range[0]) {
|
60
|
-
context.report(node, "Expected spaces around *.");
|
61
|
-
}
|
62
|
-
}
|
63
|
-
}
|
64
|
-
|
65
|
-
return {
|
66
|
-
"FunctionDeclaration": checkStarPosition,
|
67
|
-
"FunctionExpression": checkStarPosition
|
68
|
-
};
|
69
|
-
|
70
|
-
};
|
71
|
-
|
72
|
-
module.exports.schema = [
|
73
|
-
{
|
74
|
-
"enum": ["start", "middle", "end"]
|
75
|
-
}
|
76
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to check for the position of the * in your generator functions
|
3
|
+
* @author Jamund Ferguson
|
4
|
+
* @copyright 2014 Jamund Ferguson. All rights reserved.
|
5
|
+
*/
|
6
|
+
|
7
|
+
"use strict";
|
8
|
+
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
// Rule Definition
|
11
|
+
//------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
module.exports = function(context) {
|
14
|
+
|
15
|
+
var position = context.options[0] || "end";
|
16
|
+
|
17
|
+
/**
|
18
|
+
* Check the position of the star compared to the expected position.
|
19
|
+
* @param {ASTNode} node - the entire function node
|
20
|
+
* @returns {void}
|
21
|
+
*/
|
22
|
+
function checkStarPosition(node) {
|
23
|
+
var starToken;
|
24
|
+
|
25
|
+
if (!node.generator) {
|
26
|
+
return;
|
27
|
+
}
|
28
|
+
|
29
|
+
// Blocked, pending decision to fix or work around in eslint/espree#36
|
30
|
+
if (context.getAncestors().pop().method) {
|
31
|
+
return;
|
32
|
+
}
|
33
|
+
|
34
|
+
starToken = context.getFirstToken(node, 1);
|
35
|
+
|
36
|
+
// check for function *name() {}
|
37
|
+
if (position === "end") {
|
38
|
+
|
39
|
+
// * starts where the next identifier begins
|
40
|
+
if (starToken.range[1] !== context.getTokenAfter(starToken).range[0]) {
|
41
|
+
context.report(node, "Expected a space before *.");
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
// check for function* name() {}
|
46
|
+
if (position === "start") {
|
47
|
+
|
48
|
+
// * begins where the previous identifier ends
|
49
|
+
if (starToken.range[0] !== context.getTokenBefore(starToken).range[1]) {
|
50
|
+
context.report(node, "Expected no space before *.");
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
// check for function * name() {}
|
55
|
+
if (position === "middle") {
|
56
|
+
|
57
|
+
// must be a space before and afer the *
|
58
|
+
if (starToken.range[0] <= context.getTokenBefore(starToken).range[1] ||
|
59
|
+
starToken.range[1] >= context.getTokenAfter(starToken).range[0]) {
|
60
|
+
context.report(node, "Expected spaces around *.");
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
return {
|
66
|
+
"FunctionDeclaration": checkStarPosition,
|
67
|
+
"FunctionExpression": checkStarPosition
|
68
|
+
};
|
69
|
+
|
70
|
+
};
|
71
|
+
|
72
|
+
module.exports.schema = [
|
73
|
+
{
|
74
|
+
"enum": ["start", "middle", "end"]
|
75
|
+
}
|
76
|
+
];
|
@@ -1,49 +1,49 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag or require global strict mode.
|
3
|
-
* @author Nicholas C. Zakas
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
//------------------------------------------------------------------------------
|
8
|
-
// Rule Definition
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
|
11
|
-
module.exports = function(context) {
|
12
|
-
|
13
|
-
var mode = context.options[0];
|
14
|
-
|
15
|
-
if (mode === "always") {
|
16
|
-
|
17
|
-
return {
|
18
|
-
"Program": function(node) {
|
19
|
-
if (node.body.length > 0) {
|
20
|
-
var statement = node.body[0];
|
21
|
-
|
22
|
-
if (!(statement.type === "ExpressionStatement" && statement.expression.value === "use strict")) {
|
23
|
-
context.report(node, "Use the global form of \"use strict\".");
|
24
|
-
}
|
25
|
-
}
|
26
|
-
}
|
27
|
-
};
|
28
|
-
|
29
|
-
} else { // mode = "never"
|
30
|
-
|
31
|
-
return {
|
32
|
-
"ExpressionStatement": function(node) {
|
33
|
-
var parent = context.getAncestors().pop();
|
34
|
-
|
35
|
-
if (node.expression.value === "use strict" && parent.type === "Program") {
|
36
|
-
context.report(node, "Use the function form of \"use strict\".");
|
37
|
-
}
|
38
|
-
}
|
39
|
-
};
|
40
|
-
|
41
|
-
}
|
42
|
-
|
43
|
-
};
|
44
|
-
|
45
|
-
module.exports.schema = [
|
46
|
-
{
|
47
|
-
"enum": ["always", "never"]
|
48
|
-
}
|
49
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag or require global strict mode.
|
3
|
+
* @author Nicholas C. Zakas
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
//------------------------------------------------------------------------------
|
8
|
+
// Rule Definition
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
|
11
|
+
module.exports = function(context) {
|
12
|
+
|
13
|
+
var mode = context.options[0];
|
14
|
+
|
15
|
+
if (mode === "always") {
|
16
|
+
|
17
|
+
return {
|
18
|
+
"Program": function(node) {
|
19
|
+
if (node.body.length > 0) {
|
20
|
+
var statement = node.body[0];
|
21
|
+
|
22
|
+
if (!(statement.type === "ExpressionStatement" && statement.expression.value === "use strict")) {
|
23
|
+
context.report(node, "Use the global form of \"use strict\".");
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
27
|
+
};
|
28
|
+
|
29
|
+
} else { // mode = "never"
|
30
|
+
|
31
|
+
return {
|
32
|
+
"ExpressionStatement": function(node) {
|
33
|
+
var parent = context.getAncestors().pop();
|
34
|
+
|
35
|
+
if (node.expression.value === "use strict" && parent.type === "Program") {
|
36
|
+
context.report(node, "Use the function form of \"use strict\".");
|
37
|
+
}
|
38
|
+
}
|
39
|
+
};
|
40
|
+
|
41
|
+
}
|
42
|
+
|
43
|
+
};
|
44
|
+
|
45
|
+
module.exports.schema = [
|
46
|
+
{
|
47
|
+
"enum": ["always", "never"]
|
48
|
+
}
|
49
|
+
];
|
@@ -1,32 +1,32 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag for-in loops without if statements inside
|
3
|
-
* @author Nicholas C. Zakas
|
4
|
-
*/
|
5
|
-
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Rule Definition
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
module.exports = function(context) {
|
13
|
-
|
14
|
-
return {
|
15
|
-
|
16
|
-
"ForInStatement": function(node) {
|
17
|
-
|
18
|
-
/*
|
19
|
-
* If the for-in statement has {}, then the real body is the body
|
20
|
-
* of the BlockStatement. Otherwise, just use body as provided.
|
21
|
-
*/
|
22
|
-
var body = node.body.type === "BlockStatement" ? node.body.body[0] : node.body;
|
23
|
-
|
24
|
-
if (body && body.type !== "IfStatement") {
|
25
|
-
context.report(node, "The body of a for-in should be wrapped in an if statement to filter unwanted properties from the prototype.");
|
26
|
-
}
|
27
|
-
}
|
28
|
-
};
|
29
|
-
|
30
|
-
};
|
31
|
-
|
32
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag for-in loops without if statements inside
|
3
|
+
* @author Nicholas C. Zakas
|
4
|
+
*/
|
5
|
+
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
|
12
|
+
module.exports = function(context) {
|
13
|
+
|
14
|
+
return {
|
15
|
+
|
16
|
+
"ForInStatement": function(node) {
|
17
|
+
|
18
|
+
/*
|
19
|
+
* If the for-in statement has {}, then the real body is the body
|
20
|
+
* of the BlockStatement. Otherwise, just use body as provided.
|
21
|
+
*/
|
22
|
+
var body = node.body.type === "BlockStatement" ? node.body.body[0] : node.body;
|
23
|
+
|
24
|
+
if (body && body.type !== "IfStatement") {
|
25
|
+
context.report(node, "The body of a for-in should be wrapped in an if statement to filter unwanted properties from the prototype.");
|
26
|
+
}
|
27
|
+
}
|
28
|
+
};
|
29
|
+
|
30
|
+
};
|
31
|
+
|
32
|
+
module.exports.schema = [];
|