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,191 +1,191 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Comma spacing - validates spacing before and after comma
|
3
|
-
* @author Vignesh Anand aka vegetableman.
|
4
|
-
* @copyright 2014 Vignesh Anand. All rights reserved.
|
5
|
-
*/
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Rule Definition
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
module.exports = function(context) {
|
13
|
-
|
14
|
-
var options = {
|
15
|
-
before: context.options[0] ? !!context.options[0].before : false,
|
16
|
-
after: context.options[0] ? !!context.options[0].after : true
|
17
|
-
};
|
18
|
-
|
19
|
-
//--------------------------------------------------------------------------
|
20
|
-
// Helpers
|
21
|
-
//--------------------------------------------------------------------------
|
22
|
-
|
23
|
-
// the index of the last comment that was checked
|
24
|
-
var lastCommentIndex = 0;
|
25
|
-
var allComments;
|
26
|
-
|
27
|
-
/**
|
28
|
-
* Determines the length of comment between 2 tokens
|
29
|
-
* @param {Object} left - The left token object.
|
30
|
-
* @param {Object} right - The right token object.
|
31
|
-
* @returns {number} Length of comment in between tokens
|
32
|
-
*/
|
33
|
-
function getCommentLengthBetweenTokens(left, right) {
|
34
|
-
return allComments.reduce(function(val, comment) {
|
35
|
-
if (left.range[1] <= comment.range[0] && comment.range[1] <= right.range[0]) {
|
36
|
-
val = val + comment.range[1] - comment.range[0];
|
37
|
-
}
|
38
|
-
return val;
|
39
|
-
}, 0);
|
40
|
-
}
|
41
|
-
|
42
|
-
/**
|
43
|
-
* Determines whether two adjacent tokens have whitespace between them.
|
44
|
-
* @param {Object} left - The left token object.
|
45
|
-
* @param {Object} right - The right token object.
|
46
|
-
* @returns {boolean} Whether or not there is space between the tokens.
|
47
|
-
*/
|
48
|
-
function isSpaced(left, right) {
|
49
|
-
var punctuationLength = context.getTokensBetween(left, right).length; // the length of any parenthesis
|
50
|
-
var commentLenth = getCommentLengthBetweenTokens(left, right);
|
51
|
-
return (left.range[1] + punctuationLength + commentLenth) < right.range[0];
|
52
|
-
}
|
53
|
-
|
54
|
-
/**
|
55
|
-
* Checks whether two tokens are on the same line.
|
56
|
-
* @param {ASTNode} left The leftmost token.
|
57
|
-
* @param {ASTNode} right The rightmost token.
|
58
|
-
* @returns {boolean} True if the tokens are on the same line, false if not.
|
59
|
-
* @private
|
60
|
-
*/
|
61
|
-
function isSameLine(left, right) {
|
62
|
-
return left.loc.end.line === right.loc.start.line;
|
63
|
-
}
|
64
|
-
|
65
|
-
/**
|
66
|
-
* Determines if a given token is a comma operator.
|
67
|
-
* @param {ASTNode} token The token to check.
|
68
|
-
* @returns {boolean} True if the token is a comma, false if not.
|
69
|
-
* @private
|
70
|
-
*/
|
71
|
-
function isComma(token) {
|
72
|
-
return !!token && (token.type === "Punctuator") && (token.value === ",");
|
73
|
-
}
|
74
|
-
|
75
|
-
/**
|
76
|
-
* Reports a spacing error with an appropriate message.
|
77
|
-
* @param {ASTNode} node The binary expression node to report.
|
78
|
-
* @param {string} dir Is the error "before" or "after" the comma?
|
79
|
-
* @returns {void}
|
80
|
-
* @private
|
81
|
-
*/
|
82
|
-
function report(node, dir) {
|
83
|
-
context.report(node, options[dir] ?
|
84
|
-
"A space is required " + dir + " ','." :
|
85
|
-
"There should be no space " + dir + " ','.");
|
86
|
-
}
|
87
|
-
|
88
|
-
/**
|
89
|
-
* Validates the spacing around a comma token.
|
90
|
-
* @param {Object} tokens - The tokens to be validated.
|
91
|
-
* @param {Token} tokens.comma The token representing the comma.
|
92
|
-
* @param {Token} [tokens.left] The last token before the comma.
|
93
|
-
* @param {Token} [tokens.right] The first token after the comma.
|
94
|
-
* @param {Token|ASTNode} reportItem The item to use when reporting an error.
|
95
|
-
* @returns {void}
|
96
|
-
* @private
|
97
|
-
*/
|
98
|
-
function validateCommaItemSpacing(tokens, reportItem) {
|
99
|
-
if (tokens.left && isSameLine(tokens.left, tokens.comma) &&
|
100
|
-
(options.before !== isSpaced(tokens.left, tokens.comma))
|
101
|
-
) {
|
102
|
-
report(reportItem, "before");
|
103
|
-
}
|
104
|
-
if (tokens.right && isSameLine(tokens.comma, tokens.right) &&
|
105
|
-
(options.after !== isSpaced(tokens.comma, tokens.right))
|
106
|
-
) {
|
107
|
-
report(reportItem, "after");
|
108
|
-
}
|
109
|
-
}
|
110
|
-
|
111
|
-
/**
|
112
|
-
* Determines if a given source index is in a comment or not by checking
|
113
|
-
* the index against the comment range. Since the check goes straight
|
114
|
-
* through the file, once an index is passed a certain comment, we can
|
115
|
-
* go to the next comment to check that.
|
116
|
-
* @param {int} index The source index to check.
|
117
|
-
* @param {ASTNode[]} comments An array of comment nodes.
|
118
|
-
* @returns {boolean} True if the index is within a comment, false if not.
|
119
|
-
* @private
|
120
|
-
*/
|
121
|
-
function isIndexInComment(index, comments) {
|
122
|
-
|
123
|
-
var comment;
|
124
|
-
|
125
|
-
while (lastCommentIndex < comments.length) {
|
126
|
-
|
127
|
-
comment = comments[lastCommentIndex];
|
128
|
-
|
129
|
-
if (comment.range[0] <= index && index < comment.range[1]) {
|
130
|
-
return true;
|
131
|
-
} else if (index > comment.range[1]) {
|
132
|
-
lastCommentIndex++;
|
133
|
-
} else {
|
134
|
-
break;
|
135
|
-
}
|
136
|
-
|
137
|
-
}
|
138
|
-
|
139
|
-
return false;
|
140
|
-
}
|
141
|
-
|
142
|
-
//--------------------------------------------------------------------------
|
143
|
-
// Public
|
144
|
-
//--------------------------------------------------------------------------
|
145
|
-
|
146
|
-
return {
|
147
|
-
"Program": function() {
|
148
|
-
|
149
|
-
var source = context.getSource(),
|
150
|
-
pattern = /,/g,
|
151
|
-
commaToken,
|
152
|
-
previousToken,
|
153
|
-
nextToken;
|
154
|
-
|
155
|
-
allComments = context.getAllComments();
|
156
|
-
while (pattern.test(source)) {
|
157
|
-
|
158
|
-
// do not flag anything inside of comments
|
159
|
-
if (!isIndexInComment(pattern.lastIndex, allComments)) {
|
160
|
-
commaToken = context.getTokenByRangeStart(pattern.lastIndex - 1);
|
161
|
-
|
162
|
-
if (commaToken && commaToken.type !== "JSXText") {
|
163
|
-
previousToken = context.getTokenBefore(commaToken);
|
164
|
-
nextToken = context.getTokenAfter(commaToken);
|
165
|
-
validateCommaItemSpacing({
|
166
|
-
comma: commaToken,
|
167
|
-
left: isComma(previousToken) ? null : previousToken,
|
168
|
-
right: isComma(nextToken) ? null : nextToken
|
169
|
-
}, commaToken);
|
170
|
-
}
|
171
|
-
}
|
172
|
-
}
|
173
|
-
}
|
174
|
-
};
|
175
|
-
|
176
|
-
};
|
177
|
-
|
178
|
-
module.exports.schema = [
|
179
|
-
{
|
180
|
-
"type": "object",
|
181
|
-
"properties": {
|
182
|
-
"before": {
|
183
|
-
"type": "boolean"
|
184
|
-
},
|
185
|
-
"after": {
|
186
|
-
"type": "boolean"
|
187
|
-
}
|
188
|
-
},
|
189
|
-
"additionalProperties": false
|
190
|
-
}
|
191
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Comma spacing - validates spacing before and after comma
|
3
|
+
* @author Vignesh Anand aka vegetableman.
|
4
|
+
* @copyright 2014 Vignesh Anand. All rights reserved.
|
5
|
+
*/
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
|
12
|
+
module.exports = function(context) {
|
13
|
+
|
14
|
+
var options = {
|
15
|
+
before: context.options[0] ? !!context.options[0].before : false,
|
16
|
+
after: context.options[0] ? !!context.options[0].after : true
|
17
|
+
};
|
18
|
+
|
19
|
+
//--------------------------------------------------------------------------
|
20
|
+
// Helpers
|
21
|
+
//--------------------------------------------------------------------------
|
22
|
+
|
23
|
+
// the index of the last comment that was checked
|
24
|
+
var lastCommentIndex = 0;
|
25
|
+
var allComments;
|
26
|
+
|
27
|
+
/**
|
28
|
+
* Determines the length of comment between 2 tokens
|
29
|
+
* @param {Object} left - The left token object.
|
30
|
+
* @param {Object} right - The right token object.
|
31
|
+
* @returns {number} Length of comment in between tokens
|
32
|
+
*/
|
33
|
+
function getCommentLengthBetweenTokens(left, right) {
|
34
|
+
return allComments.reduce(function(val, comment) {
|
35
|
+
if (left.range[1] <= comment.range[0] && comment.range[1] <= right.range[0]) {
|
36
|
+
val = val + comment.range[1] - comment.range[0];
|
37
|
+
}
|
38
|
+
return val;
|
39
|
+
}, 0);
|
40
|
+
}
|
41
|
+
|
42
|
+
/**
|
43
|
+
* Determines whether two adjacent tokens have whitespace between them.
|
44
|
+
* @param {Object} left - The left token object.
|
45
|
+
* @param {Object} right - The right token object.
|
46
|
+
* @returns {boolean} Whether or not there is space between the tokens.
|
47
|
+
*/
|
48
|
+
function isSpaced(left, right) {
|
49
|
+
var punctuationLength = context.getTokensBetween(left, right).length; // the length of any parenthesis
|
50
|
+
var commentLenth = getCommentLengthBetweenTokens(left, right);
|
51
|
+
return (left.range[1] + punctuationLength + commentLenth) < right.range[0];
|
52
|
+
}
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Checks whether two tokens are on the same line.
|
56
|
+
* @param {ASTNode} left The leftmost token.
|
57
|
+
* @param {ASTNode} right The rightmost token.
|
58
|
+
* @returns {boolean} True if the tokens are on the same line, false if not.
|
59
|
+
* @private
|
60
|
+
*/
|
61
|
+
function isSameLine(left, right) {
|
62
|
+
return left.loc.end.line === right.loc.start.line;
|
63
|
+
}
|
64
|
+
|
65
|
+
/**
|
66
|
+
* Determines if a given token is a comma operator.
|
67
|
+
* @param {ASTNode} token The token to check.
|
68
|
+
* @returns {boolean} True if the token is a comma, false if not.
|
69
|
+
* @private
|
70
|
+
*/
|
71
|
+
function isComma(token) {
|
72
|
+
return !!token && (token.type === "Punctuator") && (token.value === ",");
|
73
|
+
}
|
74
|
+
|
75
|
+
/**
|
76
|
+
* Reports a spacing error with an appropriate message.
|
77
|
+
* @param {ASTNode} node The binary expression node to report.
|
78
|
+
* @param {string} dir Is the error "before" or "after" the comma?
|
79
|
+
* @returns {void}
|
80
|
+
* @private
|
81
|
+
*/
|
82
|
+
function report(node, dir) {
|
83
|
+
context.report(node, options[dir] ?
|
84
|
+
"A space is required " + dir + " ','." :
|
85
|
+
"There should be no space " + dir + " ','.");
|
86
|
+
}
|
87
|
+
|
88
|
+
/**
|
89
|
+
* Validates the spacing around a comma token.
|
90
|
+
* @param {Object} tokens - The tokens to be validated.
|
91
|
+
* @param {Token} tokens.comma The token representing the comma.
|
92
|
+
* @param {Token} [tokens.left] The last token before the comma.
|
93
|
+
* @param {Token} [tokens.right] The first token after the comma.
|
94
|
+
* @param {Token|ASTNode} reportItem The item to use when reporting an error.
|
95
|
+
* @returns {void}
|
96
|
+
* @private
|
97
|
+
*/
|
98
|
+
function validateCommaItemSpacing(tokens, reportItem) {
|
99
|
+
if (tokens.left && isSameLine(tokens.left, tokens.comma) &&
|
100
|
+
(options.before !== isSpaced(tokens.left, tokens.comma))
|
101
|
+
) {
|
102
|
+
report(reportItem, "before");
|
103
|
+
}
|
104
|
+
if (tokens.right && isSameLine(tokens.comma, tokens.right) &&
|
105
|
+
(options.after !== isSpaced(tokens.comma, tokens.right))
|
106
|
+
) {
|
107
|
+
report(reportItem, "after");
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
/**
|
112
|
+
* Determines if a given source index is in a comment or not by checking
|
113
|
+
* the index against the comment range. Since the check goes straight
|
114
|
+
* through the file, once an index is passed a certain comment, we can
|
115
|
+
* go to the next comment to check that.
|
116
|
+
* @param {int} index The source index to check.
|
117
|
+
* @param {ASTNode[]} comments An array of comment nodes.
|
118
|
+
* @returns {boolean} True if the index is within a comment, false if not.
|
119
|
+
* @private
|
120
|
+
*/
|
121
|
+
function isIndexInComment(index, comments) {
|
122
|
+
|
123
|
+
var comment;
|
124
|
+
|
125
|
+
while (lastCommentIndex < comments.length) {
|
126
|
+
|
127
|
+
comment = comments[lastCommentIndex];
|
128
|
+
|
129
|
+
if (comment.range[0] <= index && index < comment.range[1]) {
|
130
|
+
return true;
|
131
|
+
} else if (index > comment.range[1]) {
|
132
|
+
lastCommentIndex++;
|
133
|
+
} else {
|
134
|
+
break;
|
135
|
+
}
|
136
|
+
|
137
|
+
}
|
138
|
+
|
139
|
+
return false;
|
140
|
+
}
|
141
|
+
|
142
|
+
//--------------------------------------------------------------------------
|
143
|
+
// Public
|
144
|
+
//--------------------------------------------------------------------------
|
145
|
+
|
146
|
+
return {
|
147
|
+
"Program": function() {
|
148
|
+
|
149
|
+
var source = context.getSource(),
|
150
|
+
pattern = /,/g,
|
151
|
+
commaToken,
|
152
|
+
previousToken,
|
153
|
+
nextToken;
|
154
|
+
|
155
|
+
allComments = context.getAllComments();
|
156
|
+
while (pattern.test(source)) {
|
157
|
+
|
158
|
+
// do not flag anything inside of comments
|
159
|
+
if (!isIndexInComment(pattern.lastIndex, allComments)) {
|
160
|
+
commaToken = context.getTokenByRangeStart(pattern.lastIndex - 1);
|
161
|
+
|
162
|
+
if (commaToken && commaToken.type !== "JSXText") {
|
163
|
+
previousToken = context.getTokenBefore(commaToken);
|
164
|
+
nextToken = context.getTokenAfter(commaToken);
|
165
|
+
validateCommaItemSpacing({
|
166
|
+
comma: commaToken,
|
167
|
+
left: isComma(previousToken) ? null : previousToken,
|
168
|
+
right: isComma(nextToken) ? null : nextToken
|
169
|
+
}, commaToken);
|
170
|
+
}
|
171
|
+
}
|
172
|
+
}
|
173
|
+
}
|
174
|
+
};
|
175
|
+
|
176
|
+
};
|
177
|
+
|
178
|
+
module.exports.schema = [
|
179
|
+
{
|
180
|
+
"type": "object",
|
181
|
+
"properties": {
|
182
|
+
"before": {
|
183
|
+
"type": "boolean"
|
184
|
+
},
|
185
|
+
"after": {
|
186
|
+
"type": "boolean"
|
187
|
+
}
|
188
|
+
},
|
189
|
+
"additionalProperties": false
|
190
|
+
}
|
191
|
+
];
|