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/camelcase.js
CHANGED
@@ -1,111 +1,111 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag non-camelcased identifiers
|
3
|
-
* @author Nicholas C. Zakas
|
4
|
-
* @copyright 2015 Dieter Oberkofler. All rights reserved.
|
5
|
-
*/
|
6
|
-
|
7
|
-
"use strict";
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Rule Definition
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
module.exports = function(context) {
|
14
|
-
|
15
|
-
//--------------------------------------------------------------------------
|
16
|
-
// Helpers
|
17
|
-
//--------------------------------------------------------------------------
|
18
|
-
|
19
|
-
/**
|
20
|
-
* Checks if a string contains an underscore and isn't all upper-case
|
21
|
-
* @param {String} name The string to check.
|
22
|
-
* @returns {boolean} if the string is underscored
|
23
|
-
* @private
|
24
|
-
*/
|
25
|
-
function isUnderscored(name) {
|
26
|
-
|
27
|
-
// if there's an underscore, it might be A_CONSTANT, which is okay
|
28
|
-
return name.indexOf("_") > -1 && name !== name.toUpperCase();
|
29
|
-
}
|
30
|
-
|
31
|
-
/**
|
32
|
-
* Reports an AST node as a rule violation.
|
33
|
-
* @param {ASTNode} node The node to report.
|
34
|
-
* @returns {void}
|
35
|
-
* @private
|
36
|
-
*/
|
37
|
-
function report(node) {
|
38
|
-
context.report(node, "Identifier '{{name}}' is not in camel case.", { name: node.name });
|
39
|
-
}
|
40
|
-
|
41
|
-
var options = context.options[0] || {},
|
42
|
-
properties = options.properties || "";
|
43
|
-
|
44
|
-
if (properties !== "always" && properties !== "never") {
|
45
|
-
properties = "always";
|
46
|
-
}
|
47
|
-
|
48
|
-
return {
|
49
|
-
|
50
|
-
"Identifier": function(node) {
|
51
|
-
|
52
|
-
// Leading and trailing underscores are commonly used to flag private/protected identifiers, strip them
|
53
|
-
var name = node.name.replace(/^_+|_+$/g, ""),
|
54
|
-
effectiveParent = (node.parent.type === "MemberExpression") ? node.parent.parent : node.parent;
|
55
|
-
|
56
|
-
// MemberExpressions get special rules
|
57
|
-
if (node.parent.type === "MemberExpression") {
|
58
|
-
|
59
|
-
// "never" check properties
|
60
|
-
if (properties === "never") {
|
61
|
-
return;
|
62
|
-
}
|
63
|
-
|
64
|
-
// Always report underscored object names
|
65
|
-
if (node.parent.object.type === "Identifier" &&
|
66
|
-
node.parent.object.name === node.name &&
|
67
|
-
isUnderscored(name)) {
|
68
|
-
report(node);
|
69
|
-
|
70
|
-
// Report AssignmentExpressions only if they are the left side of the assignment
|
71
|
-
} else if (effectiveParent.type === "AssignmentExpression" &&
|
72
|
-
isUnderscored(name) &&
|
73
|
-
(effectiveParent.right.type !== "MemberExpression" ||
|
74
|
-
effectiveParent.left.type === "MemberExpression" &&
|
75
|
-
effectiveParent.left.property.name === node.name)) {
|
76
|
-
report(node);
|
77
|
-
}
|
78
|
-
|
79
|
-
// Properties have their own rules
|
80
|
-
} else if (node.parent.type === "Property") {
|
81
|
-
|
82
|
-
// "never" check properties
|
83
|
-
if (properties === "never") {
|
84
|
-
return;
|
85
|
-
}
|
86
|
-
|
87
|
-
if (isUnderscored(name) && effectiveParent.type !== "CallExpression") {
|
88
|
-
report(node);
|
89
|
-
}
|
90
|
-
|
91
|
-
// Report anything that is underscored that isn't a CallExpression
|
92
|
-
} else if (isUnderscored(name) && effectiveParent.type !== "CallExpression") {
|
93
|
-
report(node);
|
94
|
-
}
|
95
|
-
}
|
96
|
-
|
97
|
-
};
|
98
|
-
|
99
|
-
};
|
100
|
-
|
101
|
-
module.exports.schema = [
|
102
|
-
{
|
103
|
-
"type": "object",
|
104
|
-
"properties": {
|
105
|
-
"properties": {
|
106
|
-
"enum": ["always", "never"]
|
107
|
-
}
|
108
|
-
},
|
109
|
-
"additionalProperties": false
|
110
|
-
}
|
111
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag non-camelcased identifiers
|
3
|
+
* @author Nicholas C. Zakas
|
4
|
+
* @copyright 2015 Dieter Oberkofler. All rights reserved.
|
5
|
+
*/
|
6
|
+
|
7
|
+
"use strict";
|
8
|
+
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
// Rule Definition
|
11
|
+
//------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
module.exports = function(context) {
|
14
|
+
|
15
|
+
//--------------------------------------------------------------------------
|
16
|
+
// Helpers
|
17
|
+
//--------------------------------------------------------------------------
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Checks if a string contains an underscore and isn't all upper-case
|
21
|
+
* @param {String} name The string to check.
|
22
|
+
* @returns {boolean} if the string is underscored
|
23
|
+
* @private
|
24
|
+
*/
|
25
|
+
function isUnderscored(name) {
|
26
|
+
|
27
|
+
// if there's an underscore, it might be A_CONSTANT, which is okay
|
28
|
+
return name.indexOf("_") > -1 && name !== name.toUpperCase();
|
29
|
+
}
|
30
|
+
|
31
|
+
/**
|
32
|
+
* Reports an AST node as a rule violation.
|
33
|
+
* @param {ASTNode} node The node to report.
|
34
|
+
* @returns {void}
|
35
|
+
* @private
|
36
|
+
*/
|
37
|
+
function report(node) {
|
38
|
+
context.report(node, "Identifier '{{name}}' is not in camel case.", { name: node.name });
|
39
|
+
}
|
40
|
+
|
41
|
+
var options = context.options[0] || {},
|
42
|
+
properties = options.properties || "";
|
43
|
+
|
44
|
+
if (properties !== "always" && properties !== "never") {
|
45
|
+
properties = "always";
|
46
|
+
}
|
47
|
+
|
48
|
+
return {
|
49
|
+
|
50
|
+
"Identifier": function(node) {
|
51
|
+
|
52
|
+
// Leading and trailing underscores are commonly used to flag private/protected identifiers, strip them
|
53
|
+
var name = node.name.replace(/^_+|_+$/g, ""),
|
54
|
+
effectiveParent = (node.parent.type === "MemberExpression") ? node.parent.parent : node.parent;
|
55
|
+
|
56
|
+
// MemberExpressions get special rules
|
57
|
+
if (node.parent.type === "MemberExpression") {
|
58
|
+
|
59
|
+
// "never" check properties
|
60
|
+
if (properties === "never") {
|
61
|
+
return;
|
62
|
+
}
|
63
|
+
|
64
|
+
// Always report underscored object names
|
65
|
+
if (node.parent.object.type === "Identifier" &&
|
66
|
+
node.parent.object.name === node.name &&
|
67
|
+
isUnderscored(name)) {
|
68
|
+
report(node);
|
69
|
+
|
70
|
+
// Report AssignmentExpressions only if they are the left side of the assignment
|
71
|
+
} else if (effectiveParent.type === "AssignmentExpression" &&
|
72
|
+
isUnderscored(name) &&
|
73
|
+
(effectiveParent.right.type !== "MemberExpression" ||
|
74
|
+
effectiveParent.left.type === "MemberExpression" &&
|
75
|
+
effectiveParent.left.property.name === node.name)) {
|
76
|
+
report(node);
|
77
|
+
}
|
78
|
+
|
79
|
+
// Properties have their own rules
|
80
|
+
} else if (node.parent.type === "Property") {
|
81
|
+
|
82
|
+
// "never" check properties
|
83
|
+
if (properties === "never") {
|
84
|
+
return;
|
85
|
+
}
|
86
|
+
|
87
|
+
if (isUnderscored(name) && effectiveParent.type !== "CallExpression") {
|
88
|
+
report(node);
|
89
|
+
}
|
90
|
+
|
91
|
+
// Report anything that is underscored that isn't a CallExpression
|
92
|
+
} else if (isUnderscored(name) && effectiveParent.type !== "CallExpression") {
|
93
|
+
report(node);
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
};
|
98
|
+
|
99
|
+
};
|
100
|
+
|
101
|
+
module.exports.schema = [
|
102
|
+
{
|
103
|
+
"type": "object",
|
104
|
+
"properties": {
|
105
|
+
"properties": {
|
106
|
+
"enum": ["always", "never"]
|
107
|
+
}
|
108
|
+
},
|
109
|
+
"additionalProperties": false
|
110
|
+
}
|
111
|
+
];
|
@@ -1,64 +1,67 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to forbid or enforce dangling commas.
|
3
|
-
* @author Ian Christian Myers
|
4
|
-
* @copyright 2015 Mathias Schreck
|
5
|
-
* @copyright 2013 Ian Christian Myers
|
6
|
-
*/
|
7
|
-
|
8
|
-
"use strict";
|
9
|
-
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
// Rule Definition
|
12
|
-
//------------------------------------------------------------------------------
|
13
|
-
|
14
|
-
module.exports = function (context) {
|
15
|
-
var allowDangle = context.options[0];
|
16
|
-
var forbidDangle = allowDangle !== "always-multiline" && allowDangle !== "always";
|
17
|
-
var UNEXPECTED_MESSAGE = "Unexpected trailing comma.";
|
18
|
-
var MISSING_MESSAGE = "Missing trailing comma.";
|
19
|
-
|
20
|
-
/**
|
21
|
-
* Checks the given node for trailing comma and reports violations.
|
22
|
-
* @param {ASTNode} node The node of an ObjectExpression or ArrayExpression
|
23
|
-
* @returns {void}
|
24
|
-
*/
|
25
|
-
function checkForTrailingComma(node) {
|
26
|
-
var items = node.properties || node.elements,
|
27
|
-
length = items.length,
|
28
|
-
|
29
|
-
lastItem,
|
30
|
-
penultimateToken,
|
31
|
-
hasDanglingComma;
|
32
|
-
|
33
|
-
if (length) {
|
34
|
-
lastItem = items[length - 1];
|
35
|
-
if (lastItem) {
|
36
|
-
penultimateToken = context.getLastToken(node, 1);
|
37
|
-
hasDanglingComma = penultimateToken.value === ",";
|
38
|
-
|
39
|
-
if (forbidDangle && hasDanglingComma) {
|
40
|
-
context.report(lastItem, penultimateToken.loc.start, UNEXPECTED_MESSAGE);
|
41
|
-
} else if (allowDangle === "always-multiline") {
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
"
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to forbid or enforce dangling commas.
|
3
|
+
* @author Ian Christian Myers
|
4
|
+
* @copyright 2015 Mathias Schreck
|
5
|
+
* @copyright 2013 Ian Christian Myers
|
6
|
+
*/
|
7
|
+
|
8
|
+
"use strict";
|
9
|
+
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
// Rule Definition
|
12
|
+
//------------------------------------------------------------------------------
|
13
|
+
|
14
|
+
module.exports = function (context) {
|
15
|
+
var allowDangle = context.options[0];
|
16
|
+
var forbidDangle = allowDangle !== "always-multiline" && allowDangle !== "always";
|
17
|
+
var UNEXPECTED_MESSAGE = "Unexpected trailing comma.";
|
18
|
+
var MISSING_MESSAGE = "Missing trailing comma.";
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Checks the given node for trailing comma and reports violations.
|
22
|
+
* @param {ASTNode} node The node of an ObjectExpression or ArrayExpression
|
23
|
+
* @returns {void}
|
24
|
+
*/
|
25
|
+
function checkForTrailingComma(node) {
|
26
|
+
var items = node.properties || node.elements,
|
27
|
+
length = items.length,
|
28
|
+
lastTokenOnNewLine,
|
29
|
+
lastItem,
|
30
|
+
penultimateToken,
|
31
|
+
hasDanglingComma;
|
32
|
+
|
33
|
+
if (length) {
|
34
|
+
lastItem = items[length - 1];
|
35
|
+
if (lastItem) {
|
36
|
+
penultimateToken = context.getLastToken(node, 1);
|
37
|
+
hasDanglingComma = penultimateToken.value === ",";
|
38
|
+
|
39
|
+
if (forbidDangle && hasDanglingComma) {
|
40
|
+
context.report(lastItem, penultimateToken.loc.start, UNEXPECTED_MESSAGE);
|
41
|
+
} else if (allowDangle === "always-multiline") {
|
42
|
+
lastTokenOnNewLine = node.loc.end.line !== penultimateToken.loc.end.line;
|
43
|
+
if (hasDanglingComma && !lastTokenOnNewLine) {
|
44
|
+
context.report(lastItem, penultimateToken.loc.start, UNEXPECTED_MESSAGE);
|
45
|
+
} else if (!hasDanglingComma && lastTokenOnNewLine) {
|
46
|
+
context.report(lastItem, penultimateToken.loc.end, MISSING_MESSAGE);
|
47
|
+
}
|
48
|
+
} else if (allowDangle === "always" && !hasDanglingComma) {
|
49
|
+
context.report(lastItem, lastItem.loc.end, MISSING_MESSAGE);
|
50
|
+
}
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
return {
|
56
|
+
"ObjectExpression": checkForTrailingComma,
|
57
|
+
"ObjectPattern": checkForTrailingComma,
|
58
|
+
"ArrayExpression": checkForTrailingComma,
|
59
|
+
"ArrayPattern": checkForTrailingComma
|
60
|
+
};
|
61
|
+
};
|
62
|
+
|
63
|
+
module.exports.schema = [
|
64
|
+
{
|
65
|
+
"enum": ["always", "always-multiline", "never"]
|
66
|
+
}
|
67
|
+
];
|