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/sort-vars.js
CHANGED
@@ -1,49 +1,49 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to require sorting of variables within a single Variable Declaration block
|
3
|
-
* @author Ilya Volodin
|
4
|
-
*/
|
5
|
-
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Rule Definition
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
module.exports = function(context) {
|
13
|
-
|
14
|
-
var configuration = context.options[0] || {},
|
15
|
-
ignoreCase = configuration.ignoreCase || false;
|
16
|
-
|
17
|
-
return {
|
18
|
-
"VariableDeclaration": function(node) {
|
19
|
-
node.declarations.reduce(function(memo, decl) {
|
20
|
-
var lastVariableName = memo.id.name,
|
21
|
-
currenVariableName = decl.id.name;
|
22
|
-
|
23
|
-
if (ignoreCase) {
|
24
|
-
lastVariableName = lastVariableName.toLowerCase();
|
25
|
-
currenVariableName = currenVariableName.toLowerCase();
|
26
|
-
}
|
27
|
-
|
28
|
-
if (currenVariableName < lastVariableName) {
|
29
|
-
context.report(decl, "Variables within the same declaration block should be sorted alphabetically");
|
30
|
-
return memo;
|
31
|
-
} else {
|
32
|
-
return decl;
|
33
|
-
}
|
34
|
-
}, node.declarations[0]);
|
35
|
-
}
|
36
|
-
};
|
37
|
-
};
|
38
|
-
|
39
|
-
module.exports.schema = [
|
40
|
-
{
|
41
|
-
"type": "object",
|
42
|
-
"properties": {
|
43
|
-
"ignoreCase": {
|
44
|
-
"type": "boolean"
|
45
|
-
}
|
46
|
-
},
|
47
|
-
"additionalProperties": false
|
48
|
-
}
|
49
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to require sorting of variables within a single Variable Declaration block
|
3
|
+
* @author Ilya Volodin
|
4
|
+
*/
|
5
|
+
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
|
12
|
+
module.exports = function(context) {
|
13
|
+
|
14
|
+
var configuration = context.options[0] || {},
|
15
|
+
ignoreCase = configuration.ignoreCase || false;
|
16
|
+
|
17
|
+
return {
|
18
|
+
"VariableDeclaration": function(node) {
|
19
|
+
node.declarations.reduce(function(memo, decl) {
|
20
|
+
var lastVariableName = memo.id.name,
|
21
|
+
currenVariableName = decl.id.name;
|
22
|
+
|
23
|
+
if (ignoreCase) {
|
24
|
+
lastVariableName = lastVariableName.toLowerCase();
|
25
|
+
currenVariableName = currenVariableName.toLowerCase();
|
26
|
+
}
|
27
|
+
|
28
|
+
if (currenVariableName < lastVariableName) {
|
29
|
+
context.report(decl, "Variables within the same declaration block should be sorted alphabetically");
|
30
|
+
return memo;
|
31
|
+
} else {
|
32
|
+
return decl;
|
33
|
+
}
|
34
|
+
}, node.declarations[0]);
|
35
|
+
}
|
36
|
+
};
|
37
|
+
};
|
38
|
+
|
39
|
+
module.exports.schema = [
|
40
|
+
{
|
41
|
+
"type": "object",
|
42
|
+
"properties": {
|
43
|
+
"ignoreCase": {
|
44
|
+
"type": "boolean"
|
45
|
+
}
|
46
|
+
},
|
47
|
+
"additionalProperties": false
|
48
|
+
}
|
49
|
+
];
|
@@ -1,49 +1,49 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to enforce consistent spacing after function names
|
3
|
-
* @author Roberto Vidal
|
4
|
-
* @copyright 2014 Roberto Vidal. All rights reserved.
|
5
|
-
*/
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Rule Definition
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
module.exports = function(context) {
|
13
|
-
|
14
|
-
var requiresSpace = context.options[0] === "always";
|
15
|
-
|
16
|
-
/**
|
17
|
-
* Reports if the give named function node has the correct spacing after its name
|
18
|
-
*
|
19
|
-
* @param {ASTNode} node The node to which the potential problem belongs.
|
20
|
-
* @returns {void}
|
21
|
-
*/
|
22
|
-
function check(node) {
|
23
|
-
var tokens = context.getFirstTokens(node, 3),
|
24
|
-
hasSpace = tokens[1].range[1] < tokens[2].range[0];
|
25
|
-
|
26
|
-
if (hasSpace !== requiresSpace) {
|
27
|
-
context.report(node, "Function name \"{{name}}\" must {{not}}be followed by whitespace.", {
|
28
|
-
name: node.id.name,
|
29
|
-
not: requiresSpace ? "" : "not "
|
30
|
-
});
|
31
|
-
}
|
32
|
-
}
|
33
|
-
|
34
|
-
return {
|
35
|
-
"FunctionDeclaration": check,
|
36
|
-
"FunctionExpression": function (node) {
|
37
|
-
if (node.id) {
|
38
|
-
check(node);
|
39
|
-
}
|
40
|
-
}
|
41
|
-
};
|
42
|
-
|
43
|
-
};
|
44
|
-
|
45
|
-
module.exports.schema = [
|
46
|
-
{
|
47
|
-
"enum": ["always", "never"]
|
48
|
-
}
|
49
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to enforce consistent spacing after function names
|
3
|
+
* @author Roberto Vidal
|
4
|
+
* @copyright 2014 Roberto Vidal. All rights reserved.
|
5
|
+
*/
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
|
12
|
+
module.exports = function(context) {
|
13
|
+
|
14
|
+
var requiresSpace = context.options[0] === "always";
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Reports if the give named function node has the correct spacing after its name
|
18
|
+
*
|
19
|
+
* @param {ASTNode} node The node to which the potential problem belongs.
|
20
|
+
* @returns {void}
|
21
|
+
*/
|
22
|
+
function check(node) {
|
23
|
+
var tokens = context.getFirstTokens(node, 3),
|
24
|
+
hasSpace = tokens[1].range[1] < tokens[2].range[0];
|
25
|
+
|
26
|
+
if (hasSpace !== requiresSpace) {
|
27
|
+
context.report(node, "Function name \"{{name}}\" must {{not}}be followed by whitespace.", {
|
28
|
+
name: node.id.name,
|
29
|
+
not: requiresSpace ? "" : "not "
|
30
|
+
});
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
return {
|
35
|
+
"FunctionDeclaration": check,
|
36
|
+
"FunctionExpression": function (node) {
|
37
|
+
if (node.id) {
|
38
|
+
check(node);
|
39
|
+
}
|
40
|
+
}
|
41
|
+
};
|
42
|
+
|
43
|
+
};
|
44
|
+
|
45
|
+
module.exports.schema = [
|
46
|
+
{
|
47
|
+
"enum": ["always", "never"]
|
48
|
+
}
|
49
|
+
];
|
@@ -1,82 +1,82 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to enforce the number of spaces after certain keywords
|
3
|
-
* @author Nick Fisher
|
4
|
-
* @copyright 2014 Nick Fisher. All rights reserved.
|
5
|
-
*/
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Rule Definition
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
module.exports = function(context) {
|
13
|
-
|
14
|
-
// unless the first option is `"never"`, then a space is required
|
15
|
-
var requiresSpace = context.options[0] !== "never";
|
16
|
-
|
17
|
-
/**
|
18
|
-
* Check if the separation of two adjacent tokens meets the spacing rules, and report a problem if not.
|
19
|
-
*
|
20
|
-
* @param {ASTNode} node The node to which the potential problem belongs.
|
21
|
-
* @param {Token} left The first token.
|
22
|
-
* @param {Token} right The second token
|
23
|
-
* @returns {void}
|
24
|
-
*/
|
25
|
-
function checkTokens(node, left, right) {
|
26
|
-
var hasSpace = left.range[1] < right.range[0],
|
27
|
-
value = left.value;
|
28
|
-
|
29
|
-
if (hasSpace !== requiresSpace) {
|
30
|
-
context.report(node, "Keyword \"{{value}}\" must {{not}}be followed by whitespace.", {
|
31
|
-
value: value,
|
32
|
-
not: requiresSpace ? "" : "not "
|
33
|
-
});
|
34
|
-
}
|
35
|
-
}
|
36
|
-
|
37
|
-
/**
|
38
|
-
* Check if the given node (`if`, `for`, `while`, etc), has the correct spacing after it.
|
39
|
-
* @param {ASTNode} node The node to check.
|
40
|
-
* @returns {void}
|
41
|
-
*/
|
42
|
-
function check(node) {
|
43
|
-
var tokens = context.getFirstTokens(node, 2);
|
44
|
-
checkTokens(node, tokens[0], tokens[1]);
|
45
|
-
}
|
46
|
-
|
47
|
-
return {
|
48
|
-
"IfStatement": function (node) {
|
49
|
-
check(node);
|
50
|
-
// check the `else`
|
51
|
-
if (node.alternate && node.alternate.type !== "IfStatement") {
|
52
|
-
checkTokens(node.alternate, context.getTokenBefore(node.alternate), context.getFirstToken(node.alternate));
|
53
|
-
}
|
54
|
-
},
|
55
|
-
"ForStatement": check,
|
56
|
-
"ForOfStatement": check,
|
57
|
-
"ForInStatement": check,
|
58
|
-
"WhileStatement": check,
|
59
|
-
"DoWhileStatement": function (node) {
|
60
|
-
check(node);
|
61
|
-
// check the `while`
|
62
|
-
var whileTokens = context.
|
63
|
-
checkTokens(node, whileTokens[0], whileTokens[1]);
|
64
|
-
},
|
65
|
-
"SwitchStatement": check,
|
66
|
-
"TryStatement": function (node) {
|
67
|
-
check(node);
|
68
|
-
// check the `finally`
|
69
|
-
if (node.finalizer) {
|
70
|
-
checkTokens(node.finalizer, context.getTokenBefore(node.finalizer), context.getFirstToken(node.finalizer));
|
71
|
-
}
|
72
|
-
},
|
73
|
-
"CatchStatement": check,
|
74
|
-
"WithStatement": check
|
75
|
-
};
|
76
|
-
};
|
77
|
-
|
78
|
-
module.exports.schema = [
|
79
|
-
{
|
80
|
-
"enum": ["always", "never"]
|
81
|
-
}
|
82
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to enforce the number of spaces after certain keywords
|
3
|
+
* @author Nick Fisher
|
4
|
+
* @copyright 2014 Nick Fisher. All rights reserved.
|
5
|
+
*/
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
|
12
|
+
module.exports = function(context) {
|
13
|
+
|
14
|
+
// unless the first option is `"never"`, then a space is required
|
15
|
+
var requiresSpace = context.options[0] !== "never";
|
16
|
+
|
17
|
+
/**
|
18
|
+
* Check if the separation of two adjacent tokens meets the spacing rules, and report a problem if not.
|
19
|
+
*
|
20
|
+
* @param {ASTNode} node The node to which the potential problem belongs.
|
21
|
+
* @param {Token} left The first token.
|
22
|
+
* @param {Token} right The second token
|
23
|
+
* @returns {void}
|
24
|
+
*/
|
25
|
+
function checkTokens(node, left, right) {
|
26
|
+
var hasSpace = left.range[1] < right.range[0],
|
27
|
+
value = left.value;
|
28
|
+
|
29
|
+
if (hasSpace !== requiresSpace) {
|
30
|
+
context.report(node, "Keyword \"{{value}}\" must {{not}}be followed by whitespace.", {
|
31
|
+
value: value,
|
32
|
+
not: requiresSpace ? "" : "not "
|
33
|
+
});
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Check if the given node (`if`, `for`, `while`, etc), has the correct spacing after it.
|
39
|
+
* @param {ASTNode} node The node to check.
|
40
|
+
* @returns {void}
|
41
|
+
*/
|
42
|
+
function check(node) {
|
43
|
+
var tokens = context.getFirstTokens(node, 2);
|
44
|
+
checkTokens(node, tokens[0], tokens[1]);
|
45
|
+
}
|
46
|
+
|
47
|
+
return {
|
48
|
+
"IfStatement": function (node) {
|
49
|
+
check(node);
|
50
|
+
// check the `else`
|
51
|
+
if (node.alternate && node.alternate.type !== "IfStatement") {
|
52
|
+
checkTokens(node.alternate, context.getTokenBefore(node.alternate), context.getFirstToken(node.alternate));
|
53
|
+
}
|
54
|
+
},
|
55
|
+
"ForStatement": check,
|
56
|
+
"ForOfStatement": check,
|
57
|
+
"ForInStatement": check,
|
58
|
+
"WhileStatement": check,
|
59
|
+
"DoWhileStatement": function (node) {
|
60
|
+
check(node);
|
61
|
+
// check the `while`
|
62
|
+
var whileTokens = context.getTokensAfter(node.body, 2);
|
63
|
+
checkTokens(node, whileTokens[0], whileTokens[1]);
|
64
|
+
},
|
65
|
+
"SwitchStatement": check,
|
66
|
+
"TryStatement": function (node) {
|
67
|
+
check(node);
|
68
|
+
// check the `finally`
|
69
|
+
if (node.finalizer) {
|
70
|
+
checkTokens(node.finalizer, context.getTokenBefore(node.finalizer), context.getFirstToken(node.finalizer));
|
71
|
+
}
|
72
|
+
},
|
73
|
+
"CatchStatement": check,
|
74
|
+
"WithStatement": check
|
75
|
+
};
|
76
|
+
};
|
77
|
+
|
78
|
+
module.exports.schema = [
|
79
|
+
{
|
80
|
+
"enum": ["always", "never"]
|
81
|
+
}
|
82
|
+
];
|
@@ -1,91 +1,91 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview A rule to ensure whitespace before blocks.
|
3
|
-
* @author Mathias Schreck <https://github.com/lo1tuma>
|
4
|
-
* @copyright 2014 Mathias Schreck. All rights reserved.
|
5
|
-
*/
|
6
|
-
|
7
|
-
"use strict";
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Rule Definition
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
module.exports = function (context) {
|
14
|
-
var requireSpace = context.options[0] !== "never";
|
15
|
-
|
16
|
-
/**
|
17
|
-
* Determines whether two adjacent tokens are have whitespace between them.
|
18
|
-
* @param {Object} left - The left token object.
|
19
|
-
* @param {Object} right - The right token object.
|
20
|
-
* @returns {boolean} Whether or not there is space between the tokens.
|
21
|
-
*/
|
22
|
-
function isSpaced(left, right) {
|
23
|
-
return left.range[1] < right.range[0];
|
24
|
-
}
|
25
|
-
|
26
|
-
/**
|
27
|
-
* Determines whether two adjacent tokens are on the same line.
|
28
|
-
* @param {Object} left - The left token object.
|
29
|
-
* @param {Object} right - The right token object.
|
30
|
-
* @returns {boolean} Whether or not the tokens are on the same line.
|
31
|
-
*/
|
32
|
-
function isSameLine(left, right) {
|
33
|
-
return left.loc.start.line === right.loc.start.line;
|
34
|
-
}
|
35
|
-
|
36
|
-
/**
|
37
|
-
* Checks the given BlockStatement node has a preceding space if it doesn’t start on a new line.
|
38
|
-
* @param {ASTNode|Token} node The AST node of a BlockStatement.
|
39
|
-
* @returns {void} undefined.
|
40
|
-
*/
|
41
|
-
function checkPrecedingSpace(node) {
|
42
|
-
var precedingToken = context.getTokenBefore(node),
|
43
|
-
hasSpace;
|
44
|
-
|
45
|
-
if (precedingToken && isSameLine(precedingToken, node)) {
|
46
|
-
hasSpace = isSpaced(precedingToken, node);
|
47
|
-
|
48
|
-
if (requireSpace) {
|
49
|
-
if (!hasSpace) {
|
50
|
-
context.report(node, "Missing space before opening brace.");
|
51
|
-
}
|
52
|
-
} else {
|
53
|
-
if (hasSpace) {
|
54
|
-
context.report(node, "Unexpected space before opening brace.");
|
55
|
-
}
|
56
|
-
}
|
57
|
-
}
|
58
|
-
}
|
59
|
-
|
60
|
-
/**
|
61
|
-
* Checks if the CaseBlock of an given SwitchStatement node has a preceding space.
|
62
|
-
* @param {ASTNode} node The node of a SwitchStatement.
|
63
|
-
* @returns {void} undefined.
|
64
|
-
*/
|
65
|
-
function checkSpaceBeforeCaseBlock(node) {
|
66
|
-
var cases = node.cases,
|
67
|
-
firstCase,
|
68
|
-
openingBrace;
|
69
|
-
|
70
|
-
if (cases.length > 0) {
|
71
|
-
firstCase = cases[0];
|
72
|
-
openingBrace = context.getTokenBefore(firstCase);
|
73
|
-
} else {
|
74
|
-
openingBrace = context.getLastToken(node, 1);
|
75
|
-
}
|
76
|
-
|
77
|
-
checkPrecedingSpace(openingBrace);
|
78
|
-
}
|
79
|
-
|
80
|
-
return {
|
81
|
-
"BlockStatement": checkPrecedingSpace,
|
82
|
-
"SwitchStatement": checkSpaceBeforeCaseBlock
|
83
|
-
};
|
84
|
-
|
85
|
-
};
|
86
|
-
|
87
|
-
module.exports.schema = [
|
88
|
-
{
|
89
|
-
"enum": ["always", "never"]
|
90
|
-
}
|
91
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview A rule to ensure whitespace before blocks.
|
3
|
+
* @author Mathias Schreck <https://github.com/lo1tuma>
|
4
|
+
* @copyright 2014 Mathias Schreck. All rights reserved.
|
5
|
+
*/
|
6
|
+
|
7
|
+
"use strict";
|
8
|
+
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
// Rule Definition
|
11
|
+
//------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
module.exports = function (context) {
|
14
|
+
var requireSpace = context.options[0] !== "never";
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Determines whether two adjacent tokens are have whitespace between them.
|
18
|
+
* @param {Object} left - The left token object.
|
19
|
+
* @param {Object} right - The right token object.
|
20
|
+
* @returns {boolean} Whether or not there is space between the tokens.
|
21
|
+
*/
|
22
|
+
function isSpaced(left, right) {
|
23
|
+
return left.range[1] < right.range[0];
|
24
|
+
}
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Determines whether two adjacent tokens are on the same line.
|
28
|
+
* @param {Object} left - The left token object.
|
29
|
+
* @param {Object} right - The right token object.
|
30
|
+
* @returns {boolean} Whether or not the tokens are on the same line.
|
31
|
+
*/
|
32
|
+
function isSameLine(left, right) {
|
33
|
+
return left.loc.start.line === right.loc.start.line;
|
34
|
+
}
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Checks the given BlockStatement node has a preceding space if it doesn’t start on a new line.
|
38
|
+
* @param {ASTNode|Token} node The AST node of a BlockStatement.
|
39
|
+
* @returns {void} undefined.
|
40
|
+
*/
|
41
|
+
function checkPrecedingSpace(node) {
|
42
|
+
var precedingToken = context.getTokenBefore(node),
|
43
|
+
hasSpace;
|
44
|
+
|
45
|
+
if (precedingToken && isSameLine(precedingToken, node)) {
|
46
|
+
hasSpace = isSpaced(precedingToken, node);
|
47
|
+
|
48
|
+
if (requireSpace) {
|
49
|
+
if (!hasSpace) {
|
50
|
+
context.report(node, "Missing space before opening brace.");
|
51
|
+
}
|
52
|
+
} else {
|
53
|
+
if (hasSpace) {
|
54
|
+
context.report(node, "Unexpected space before opening brace.");
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
/**
|
61
|
+
* Checks if the CaseBlock of an given SwitchStatement node has a preceding space.
|
62
|
+
* @param {ASTNode} node The node of a SwitchStatement.
|
63
|
+
* @returns {void} undefined.
|
64
|
+
*/
|
65
|
+
function checkSpaceBeforeCaseBlock(node) {
|
66
|
+
var cases = node.cases,
|
67
|
+
firstCase,
|
68
|
+
openingBrace;
|
69
|
+
|
70
|
+
if (cases.length > 0) {
|
71
|
+
firstCase = cases[0];
|
72
|
+
openingBrace = context.getTokenBefore(firstCase);
|
73
|
+
} else {
|
74
|
+
openingBrace = context.getLastToken(node, 1);
|
75
|
+
}
|
76
|
+
|
77
|
+
checkPrecedingSpace(openingBrace);
|
78
|
+
}
|
79
|
+
|
80
|
+
return {
|
81
|
+
"BlockStatement": checkPrecedingSpace,
|
82
|
+
"SwitchStatement": checkSpaceBeforeCaseBlock
|
83
|
+
};
|
84
|
+
|
85
|
+
};
|
86
|
+
|
87
|
+
module.exports.schema = [
|
88
|
+
{
|
89
|
+
"enum": ["always", "never"]
|
90
|
+
}
|
91
|
+
];
|