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/curly.js
CHANGED
@@ -1,109 +1,109 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag statements without curly braces
|
3
|
-
* @author Nicholas C. Zakas
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
//------------------------------------------------------------------------------
|
8
|
-
// Rule Definition
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
|
11
|
-
module.exports = function(context) {
|
12
|
-
|
13
|
-
var multiOnly = (context.options[0] === "multi");
|
14
|
-
var multiLine = (context.options[0] === "multi-line");
|
15
|
-
|
16
|
-
//--------------------------------------------------------------------------
|
17
|
-
// Helpers
|
18
|
-
//--------------------------------------------------------------------------
|
19
|
-
|
20
|
-
/**
|
21
|
-
* Determines if a given node is a one-liner that's on the same line as it's preceding code.
|
22
|
-
* @param {ASTNode} node The node to check.
|
23
|
-
* @returns {boolean} True if the node is a one-liner that's on the same line as it's preceding code.
|
24
|
-
* @private
|
25
|
-
*/
|
26
|
-
function isCollapsedOneLiner(node) {
|
27
|
-
var before = context.getTokenBefore(node),
|
28
|
-
last = context.getLastToken(node);
|
29
|
-
return before.loc.start.line === last.loc.end.line;
|
30
|
-
}
|
31
|
-
|
32
|
-
/**
|
33
|
-
* Checks the body of a node to see if it's a block statement. Depending on
|
34
|
-
* the rule options, reports the appropriate problems.
|
35
|
-
* @param {ASTNode} node The node to report if there's a problem.
|
36
|
-
* @param {ASTNode} body The body node to check for blocks.
|
37
|
-
* @param {string} name The name to report if there's a problem.
|
38
|
-
* @param {string} suffix Additional string to add to the end of a report.
|
39
|
-
* @returns {void}
|
40
|
-
*/
|
41
|
-
function checkBody(node, body, name, suffix) {
|
42
|
-
var hasBlock = (body.type === "BlockStatement");
|
43
|
-
|
44
|
-
if (multiOnly) {
|
45
|
-
if (hasBlock && body.body.length === 1) {
|
46
|
-
context.report(node, "Unnecessary { after '{{name}}'{{suffix}}.",
|
47
|
-
{
|
48
|
-
name: name,
|
49
|
-
suffix: (suffix ? " " + suffix : "")
|
50
|
-
}
|
51
|
-
);
|
52
|
-
}
|
53
|
-
} else if (multiLine) {
|
54
|
-
if (!hasBlock && !isCollapsedOneLiner(body)) {
|
55
|
-
context.report(node, "Expected { after '{{name}}'{{suffix}}.",
|
56
|
-
{
|
57
|
-
name: name,
|
58
|
-
suffix: (suffix ? " " + suffix : "")
|
59
|
-
}
|
60
|
-
);
|
61
|
-
}
|
62
|
-
} else {
|
63
|
-
if (!hasBlock) {
|
64
|
-
context.report(node, "Expected { after '{{name}}'{{suffix}}.",
|
65
|
-
{
|
66
|
-
name: name,
|
67
|
-
suffix: (suffix ? " " + suffix : "")
|
68
|
-
}
|
69
|
-
);
|
70
|
-
}
|
71
|
-
}
|
72
|
-
}
|
73
|
-
|
74
|
-
//--------------------------------------------------------------------------
|
75
|
-
// Public
|
76
|
-
//--------------------------------------------------------------------------
|
77
|
-
|
78
|
-
return {
|
79
|
-
|
80
|
-
"IfStatement": function(node) {
|
81
|
-
|
82
|
-
checkBody(node, node.consequent, "if", "condition");
|
83
|
-
|
84
|
-
if (node.alternate && node.alternate.type !== "IfStatement") {
|
85
|
-
checkBody(node, node.alternate, "else");
|
86
|
-
}
|
87
|
-
|
88
|
-
},
|
89
|
-
|
90
|
-
"WhileStatement": function(node) {
|
91
|
-
checkBody(node, node.body, "while", "condition");
|
92
|
-
},
|
93
|
-
|
94
|
-
"DoWhileStatement": function (node) {
|
95
|
-
checkBody(node, node.body, "do");
|
96
|
-
},
|
97
|
-
|
98
|
-
"ForStatement": function(node) {
|
99
|
-
checkBody(node, node.body, "for", "condition");
|
100
|
-
}
|
101
|
-
};
|
102
|
-
|
103
|
-
};
|
104
|
-
|
105
|
-
module.exports.schema = [
|
106
|
-
{
|
107
|
-
"enum": ["all", "multi", "multi-line"]
|
108
|
-
}
|
109
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag statements without curly braces
|
3
|
+
* @author Nicholas C. Zakas
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
//------------------------------------------------------------------------------
|
8
|
+
// Rule Definition
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
|
11
|
+
module.exports = function(context) {
|
12
|
+
|
13
|
+
var multiOnly = (context.options[0] === "multi");
|
14
|
+
var multiLine = (context.options[0] === "multi-line");
|
15
|
+
|
16
|
+
//--------------------------------------------------------------------------
|
17
|
+
// Helpers
|
18
|
+
//--------------------------------------------------------------------------
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Determines if a given node is a one-liner that's on the same line as it's preceding code.
|
22
|
+
* @param {ASTNode} node The node to check.
|
23
|
+
* @returns {boolean} True if the node is a one-liner that's on the same line as it's preceding code.
|
24
|
+
* @private
|
25
|
+
*/
|
26
|
+
function isCollapsedOneLiner(node) {
|
27
|
+
var before = context.getTokenBefore(node),
|
28
|
+
last = context.getLastToken(node);
|
29
|
+
return before.loc.start.line === last.loc.end.line;
|
30
|
+
}
|
31
|
+
|
32
|
+
/**
|
33
|
+
* Checks the body of a node to see if it's a block statement. Depending on
|
34
|
+
* the rule options, reports the appropriate problems.
|
35
|
+
* @param {ASTNode} node The node to report if there's a problem.
|
36
|
+
* @param {ASTNode} body The body node to check for blocks.
|
37
|
+
* @param {string} name The name to report if there's a problem.
|
38
|
+
* @param {string} suffix Additional string to add to the end of a report.
|
39
|
+
* @returns {void}
|
40
|
+
*/
|
41
|
+
function checkBody(node, body, name, suffix) {
|
42
|
+
var hasBlock = (body.type === "BlockStatement");
|
43
|
+
|
44
|
+
if (multiOnly) {
|
45
|
+
if (hasBlock && body.body.length === 1) {
|
46
|
+
context.report(node, "Unnecessary { after '{{name}}'{{suffix}}.",
|
47
|
+
{
|
48
|
+
name: name,
|
49
|
+
suffix: (suffix ? " " + suffix : "")
|
50
|
+
}
|
51
|
+
);
|
52
|
+
}
|
53
|
+
} else if (multiLine) {
|
54
|
+
if (!hasBlock && !isCollapsedOneLiner(body)) {
|
55
|
+
context.report(node, "Expected { after '{{name}}'{{suffix}}.",
|
56
|
+
{
|
57
|
+
name: name,
|
58
|
+
suffix: (suffix ? " " + suffix : "")
|
59
|
+
}
|
60
|
+
);
|
61
|
+
}
|
62
|
+
} else {
|
63
|
+
if (!hasBlock) {
|
64
|
+
context.report(node, "Expected { after '{{name}}'{{suffix}}.",
|
65
|
+
{
|
66
|
+
name: name,
|
67
|
+
suffix: (suffix ? " " + suffix : "")
|
68
|
+
}
|
69
|
+
);
|
70
|
+
}
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
//--------------------------------------------------------------------------
|
75
|
+
// Public
|
76
|
+
//--------------------------------------------------------------------------
|
77
|
+
|
78
|
+
return {
|
79
|
+
|
80
|
+
"IfStatement": function(node) {
|
81
|
+
|
82
|
+
checkBody(node, node.consequent, "if", "condition");
|
83
|
+
|
84
|
+
if (node.alternate && node.alternate.type !== "IfStatement") {
|
85
|
+
checkBody(node, node.alternate, "else");
|
86
|
+
}
|
87
|
+
|
88
|
+
},
|
89
|
+
|
90
|
+
"WhileStatement": function(node) {
|
91
|
+
checkBody(node, node.body, "while", "condition");
|
92
|
+
},
|
93
|
+
|
94
|
+
"DoWhileStatement": function (node) {
|
95
|
+
checkBody(node, node.body, "do");
|
96
|
+
},
|
97
|
+
|
98
|
+
"ForStatement": function(node) {
|
99
|
+
checkBody(node, node.body, "for", "condition");
|
100
|
+
}
|
101
|
+
};
|
102
|
+
|
103
|
+
};
|
104
|
+
|
105
|
+
module.exports.schema = [
|
106
|
+
{
|
107
|
+
"enum": ["all", "multi", "multi-line"]
|
108
|
+
}
|
109
|
+
];
|
@@ -1,66 +1,66 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview require default case in switch statements
|
3
|
-
* @author Aliaksei Shytkin
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
var COMMENT_VALUE = "no default";
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Rule Definition
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
module.exports = function(context) {
|
14
|
-
|
15
|
-
//--------------------------------------------------------------------------
|
16
|
-
// Helpers
|
17
|
-
//--------------------------------------------------------------------------
|
18
|
-
|
19
|
-
/**
|
20
|
-
* Shortcut to get last element of array
|
21
|
-
* @param {*[]} collection Array
|
22
|
-
* @returns {*} Last element
|
23
|
-
*/
|
24
|
-
function last(collection) {
|
25
|
-
return collection[collection.length - 1];
|
26
|
-
}
|
27
|
-
|
28
|
-
//--------------------------------------------------------------------------
|
29
|
-
// Public
|
30
|
-
//--------------------------------------------------------------------------
|
31
|
-
|
32
|
-
return {
|
33
|
-
|
34
|
-
"SwitchStatement": function(node) {
|
35
|
-
|
36
|
-
if (!node.cases.length) {
|
37
|
-
// skip check of empty switch because there is no easy way
|
38
|
-
// to extract comments inside it now
|
39
|
-
return;
|
40
|
-
}
|
41
|
-
|
42
|
-
var hasDefault = node.cases.some(function(v) {
|
43
|
-
return v.test === null;
|
44
|
-
});
|
45
|
-
|
46
|
-
if (!hasDefault) {
|
47
|
-
|
48
|
-
var comment;
|
49
|
-
var comments;
|
50
|
-
|
51
|
-
var lastCase = last(node.cases);
|
52
|
-
comments = context.getComments(lastCase).trailing;
|
53
|
-
|
54
|
-
if (comments.length) {
|
55
|
-
comment = last(comments);
|
56
|
-
}
|
57
|
-
|
58
|
-
if (!comment || comment.value.trim() !== COMMENT_VALUE) {
|
59
|
-
context.report(node, "Expected a default case.");
|
60
|
-
}
|
61
|
-
}
|
62
|
-
}
|
63
|
-
};
|
64
|
-
};
|
65
|
-
|
66
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview require default case in switch statements
|
3
|
+
* @author Aliaksei Shytkin
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
var COMMENT_VALUE = "no default";
|
8
|
+
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
// Rule Definition
|
11
|
+
//------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
module.exports = function(context) {
|
14
|
+
|
15
|
+
//--------------------------------------------------------------------------
|
16
|
+
// Helpers
|
17
|
+
//--------------------------------------------------------------------------
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Shortcut to get last element of array
|
21
|
+
* @param {*[]} collection Array
|
22
|
+
* @returns {*} Last element
|
23
|
+
*/
|
24
|
+
function last(collection) {
|
25
|
+
return collection[collection.length - 1];
|
26
|
+
}
|
27
|
+
|
28
|
+
//--------------------------------------------------------------------------
|
29
|
+
// Public
|
30
|
+
//--------------------------------------------------------------------------
|
31
|
+
|
32
|
+
return {
|
33
|
+
|
34
|
+
"SwitchStatement": function(node) {
|
35
|
+
|
36
|
+
if (!node.cases.length) {
|
37
|
+
// skip check of empty switch because there is no easy way
|
38
|
+
// to extract comments inside it now
|
39
|
+
return;
|
40
|
+
}
|
41
|
+
|
42
|
+
var hasDefault = node.cases.some(function(v) {
|
43
|
+
return v.test === null;
|
44
|
+
});
|
45
|
+
|
46
|
+
if (!hasDefault) {
|
47
|
+
|
48
|
+
var comment;
|
49
|
+
var comments;
|
50
|
+
|
51
|
+
var lastCase = last(node.cases);
|
52
|
+
comments = context.getComments(lastCase).trailing;
|
53
|
+
|
54
|
+
if (comments.length) {
|
55
|
+
comment = last(comments);
|
56
|
+
}
|
57
|
+
|
58
|
+
if (!comment || comment.value.trim() !== COMMENT_VALUE) {
|
59
|
+
context.report(node, "Expected a default case.");
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
63
|
+
};
|
64
|
+
};
|
65
|
+
|
66
|
+
module.exports.schema = [];
|
@@ -1,63 +1,63 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Validates newlines before and after dots
|
3
|
-
* @author Greg Cochard
|
4
|
-
* @copyright 2015 Greg Cochard
|
5
|
-
*/
|
6
|
-
|
7
|
-
"use strict";
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Rule Definition
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
module.exports = function (context) {
|
14
|
-
|
15
|
-
var config = context.options[0],
|
16
|
-
// default to onObject if no preference is passed
|
17
|
-
onObject = config === "object" || !config;
|
18
|
-
|
19
|
-
/**
|
20
|
-
* Checks whether two tokens are on the same line.
|
21
|
-
* @param {Object} left The leftmost token.
|
22
|
-
* @param {Object} right The rightmost token.
|
23
|
-
* @returns {boolean} True if the tokens are on the same line, false if not.
|
24
|
-
* @private
|
25
|
-
*/
|
26
|
-
function isSameLine(left, right) {
|
27
|
-
return left.loc.end.line === right.loc.start.line;
|
28
|
-
}
|
29
|
-
|
30
|
-
/**
|
31
|
-
* Reports if the dot between object and property is on the correct loccation.
|
32
|
-
* @param {ASTNode} obj The object owning the property.
|
33
|
-
* @param {ASTNode} prop The property of the object.
|
34
|
-
* @param {ASTNode} node The corresponding node of the token.
|
35
|
-
* @returns {void}
|
36
|
-
*/
|
37
|
-
function checkDotLocation(obj, prop, node) {
|
38
|
-
var dot = context.getTokenBefore(prop);
|
39
|
-
|
40
|
-
if (dot.type === "Punctuator" && dot.value === ".") {
|
41
|
-
if (onObject) {
|
42
|
-
if (!isSameLine(obj, dot)) {
|
43
|
-
context.report(node, dot.loc.start, "Expected dot to be on same line as object.");
|
44
|
-
}
|
45
|
-
} else if (!isSameLine(dot, prop)) {
|
46
|
-
context.report(node, dot.loc.start, "Expected dot to be on same line as property.");
|
47
|
-
}
|
48
|
-
}
|
49
|
-
}
|
50
|
-
|
51
|
-
/**
|
52
|
-
* Checks the spacing of the dot within a member expression.
|
53
|
-
* @param {ASTNode} node The node to check.
|
54
|
-
* @returns {void}
|
55
|
-
*/
|
56
|
-
function checkNode(node) {
|
57
|
-
checkDotLocation(node.object, node.property, node);
|
58
|
-
}
|
59
|
-
|
60
|
-
return {
|
61
|
-
"MemberExpression": checkNode
|
62
|
-
};
|
63
|
-
};
|
1
|
+
/**
|
2
|
+
* @fileoverview Validates newlines before and after dots
|
3
|
+
* @author Greg Cochard
|
4
|
+
* @copyright 2015 Greg Cochard
|
5
|
+
*/
|
6
|
+
|
7
|
+
"use strict";
|
8
|
+
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
// Rule Definition
|
11
|
+
//------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
module.exports = function (context) {
|
14
|
+
|
15
|
+
var config = context.options[0],
|
16
|
+
// default to onObject if no preference is passed
|
17
|
+
onObject = config === "object" || !config;
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Checks whether two tokens are on the same line.
|
21
|
+
* @param {Object} left The leftmost token.
|
22
|
+
* @param {Object} right The rightmost token.
|
23
|
+
* @returns {boolean} True if the tokens are on the same line, false if not.
|
24
|
+
* @private
|
25
|
+
*/
|
26
|
+
function isSameLine(left, right) {
|
27
|
+
return left.loc.end.line === right.loc.start.line;
|
28
|
+
}
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Reports if the dot between object and property is on the correct loccation.
|
32
|
+
* @param {ASTNode} obj The object owning the property.
|
33
|
+
* @param {ASTNode} prop The property of the object.
|
34
|
+
* @param {ASTNode} node The corresponding node of the token.
|
35
|
+
* @returns {void}
|
36
|
+
*/
|
37
|
+
function checkDotLocation(obj, prop, node) {
|
38
|
+
var dot = context.getTokenBefore(prop);
|
39
|
+
|
40
|
+
if (dot.type === "Punctuator" && dot.value === ".") {
|
41
|
+
if (onObject) {
|
42
|
+
if (!isSameLine(obj, dot)) {
|
43
|
+
context.report(node, dot.loc.start, "Expected dot to be on same line as object.");
|
44
|
+
}
|
45
|
+
} else if (!isSameLine(dot, prop)) {
|
46
|
+
context.report(node, dot.loc.start, "Expected dot to be on same line as property.");
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
/**
|
52
|
+
* Checks the spacing of the dot within a member expression.
|
53
|
+
* @param {ASTNode} node The node to check.
|
54
|
+
* @returns {void}
|
55
|
+
*/
|
56
|
+
function checkNode(node) {
|
57
|
+
checkDotLocation(node.object, node.property, node);
|
58
|
+
}
|
59
|
+
|
60
|
+
return {
|
61
|
+
"MemberExpression": checkNode
|
62
|
+
};
|
63
|
+
};
|