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/vars-on-top.js
CHANGED
@@ -1,115 +1,115 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to enforce var declarations are only at the top of a function.
|
3
|
-
* @author Danny Fritz
|
4
|
-
* @author Gyandeep Singh
|
5
|
-
* @copyright 2014 Danny Fritz. All rights reserved.
|
6
|
-
* @copyright 2014 Gyandeep Singh. All rights reserved.
|
7
|
-
*/
|
8
|
-
"use strict";
|
9
|
-
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
// Rule Definition
|
12
|
-
//------------------------------------------------------------------------------
|
13
|
-
|
14
|
-
module.exports = function (context) {
|
15
|
-
var errorMessage = "All \"var\" declarations must be at the top of the function scope.";
|
16
|
-
|
17
|
-
//--------------------------------------------------------------------------
|
18
|
-
// Helpers
|
19
|
-
//--------------------------------------------------------------------------
|
20
|
-
|
21
|
-
/**
|
22
|
-
* @param {ASTNode} node - any node
|
23
|
-
* @returns {Boolean} whether the given node structurally represents a directive
|
24
|
-
*/
|
25
|
-
function looksLikeDirective(node) {
|
26
|
-
return node.type === "ExpressionStatement" &&
|
27
|
-
node.expression.type === "Literal" && typeof node.expression.value === "string";
|
28
|
-
}
|
29
|
-
|
30
|
-
/**
|
31
|
-
* Check to see if its a ES6 import declaration
|
32
|
-
* @param {ASTNode} node - any node
|
33
|
-
* @returns {Boolean} whether the given node represents a import declaration
|
34
|
-
*/
|
35
|
-
function looksLikeImport(node) {
|
36
|
-
return node.type === "ImportDeclaration" || node.type === "ImportSpecifier" ||
|
37
|
-
node.type === "ImportDefaultSpecifier" || node.type === "ImportNamespaceSpecifier";
|
38
|
-
}
|
39
|
-
|
40
|
-
/**
|
41
|
-
* Checks whether this variable is on top of the block body
|
42
|
-
* @param {ASTNode} node - The node to check
|
43
|
-
* @param {ASTNode[]} statements - collection of ASTNodes for the parent node block
|
44
|
-
* @returns {Boolean} True if var is on top otherwise false
|
45
|
-
*/
|
46
|
-
function isVarOnTop(node, statements) {
|
47
|
-
var i = 0, l = statements.length;
|
48
|
-
|
49
|
-
// skip over directives
|
50
|
-
for (; i < l; ++i) {
|
51
|
-
if (!looksLikeDirective(statements[i]) && !looksLikeImport(statements[i])) {
|
52
|
-
break;
|
53
|
-
}
|
54
|
-
}
|
55
|
-
|
56
|
-
for (; i < l; ++i) {
|
57
|
-
if (statements[i].type !== "VariableDeclaration") {
|
58
|
-
return false;
|
59
|
-
}
|
60
|
-
if (statements[i] === node) {
|
61
|
-
return true;
|
62
|
-
}
|
63
|
-
}
|
64
|
-
}
|
65
|
-
|
66
|
-
/**
|
67
|
-
* Checks whether variable is on top at the global level
|
68
|
-
* @param {ASTNode} node - The node to check
|
69
|
-
* @param {ASTNode} parent - Parent of the node
|
70
|
-
* @returns {void}
|
71
|
-
*/
|
72
|
-
function globalVarCheck(node, parent) {
|
73
|
-
if (!isVarOnTop(node, parent.body)) {
|
74
|
-
context.report(node, errorMessage);
|
75
|
-
}
|
76
|
-
}
|
77
|
-
|
78
|
-
/**
|
79
|
-
* Checks whether variable is on top at functional block scope level
|
80
|
-
* @param {ASTNode} node - The node to check
|
81
|
-
* @param {ASTNode} parent - Parent of the node
|
82
|
-
* @param {ASTNode} grandParent - Parent of the node's parent
|
83
|
-
* @returns {void}
|
84
|
-
*/
|
85
|
-
function blockScopeVarCheck(node, parent, grandParent) {
|
86
|
-
if (!(/Function/.test(grandParent.type) &&
|
87
|
-
parent.type === "BlockStatement" &&
|
88
|
-
isVarOnTop(node, parent.body))) {
|
89
|
-
context.report(node, errorMessage);
|
90
|
-
}
|
91
|
-
}
|
92
|
-
|
93
|
-
//--------------------------------------------------------------------------
|
94
|
-
// Public API
|
95
|
-
//--------------------------------------------------------------------------
|
96
|
-
|
97
|
-
return {
|
98
|
-
"VariableDeclaration": function (node) {
|
99
|
-
var ancestors = context.getAncestors();
|
100
|
-
var parent = ancestors.pop();
|
101
|
-
var grandParent = ancestors.pop();
|
102
|
-
|
103
|
-
if (node.kind === "var") {// check variable is `var` type and not `let` or `const`
|
104
|
-
if (parent.type === "Program") {// That means its a global variable
|
105
|
-
globalVarCheck(node, parent);
|
106
|
-
} else {
|
107
|
-
blockScopeVarCheck(node, parent, grandParent);
|
108
|
-
}
|
109
|
-
}
|
110
|
-
}
|
111
|
-
};
|
112
|
-
|
113
|
-
};
|
114
|
-
|
115
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to enforce var declarations are only at the top of a function.
|
3
|
+
* @author Danny Fritz
|
4
|
+
* @author Gyandeep Singh
|
5
|
+
* @copyright 2014 Danny Fritz. All rights reserved.
|
6
|
+
* @copyright 2014 Gyandeep Singh. All rights reserved.
|
7
|
+
*/
|
8
|
+
"use strict";
|
9
|
+
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
// Rule Definition
|
12
|
+
//------------------------------------------------------------------------------
|
13
|
+
|
14
|
+
module.exports = function (context) {
|
15
|
+
var errorMessage = "All \"var\" declarations must be at the top of the function scope.";
|
16
|
+
|
17
|
+
//--------------------------------------------------------------------------
|
18
|
+
// Helpers
|
19
|
+
//--------------------------------------------------------------------------
|
20
|
+
|
21
|
+
/**
|
22
|
+
* @param {ASTNode} node - any node
|
23
|
+
* @returns {Boolean} whether the given node structurally represents a directive
|
24
|
+
*/
|
25
|
+
function looksLikeDirective(node) {
|
26
|
+
return node.type === "ExpressionStatement" &&
|
27
|
+
node.expression.type === "Literal" && typeof node.expression.value === "string";
|
28
|
+
}
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Check to see if its a ES6 import declaration
|
32
|
+
* @param {ASTNode} node - any node
|
33
|
+
* @returns {Boolean} whether the given node represents a import declaration
|
34
|
+
*/
|
35
|
+
function looksLikeImport(node) {
|
36
|
+
return node.type === "ImportDeclaration" || node.type === "ImportSpecifier" ||
|
37
|
+
node.type === "ImportDefaultSpecifier" || node.type === "ImportNamespaceSpecifier";
|
38
|
+
}
|
39
|
+
|
40
|
+
/**
|
41
|
+
* Checks whether this variable is on top of the block body
|
42
|
+
* @param {ASTNode} node - The node to check
|
43
|
+
* @param {ASTNode[]} statements - collection of ASTNodes for the parent node block
|
44
|
+
* @returns {Boolean} True if var is on top otherwise false
|
45
|
+
*/
|
46
|
+
function isVarOnTop(node, statements) {
|
47
|
+
var i = 0, l = statements.length;
|
48
|
+
|
49
|
+
// skip over directives
|
50
|
+
for (; i < l; ++i) {
|
51
|
+
if (!looksLikeDirective(statements[i]) && !looksLikeImport(statements[i])) {
|
52
|
+
break;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
for (; i < l; ++i) {
|
57
|
+
if (statements[i].type !== "VariableDeclaration") {
|
58
|
+
return false;
|
59
|
+
}
|
60
|
+
if (statements[i] === node) {
|
61
|
+
return true;
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
/**
|
67
|
+
* Checks whether variable is on top at the global level
|
68
|
+
* @param {ASTNode} node - The node to check
|
69
|
+
* @param {ASTNode} parent - Parent of the node
|
70
|
+
* @returns {void}
|
71
|
+
*/
|
72
|
+
function globalVarCheck(node, parent) {
|
73
|
+
if (!isVarOnTop(node, parent.body)) {
|
74
|
+
context.report(node, errorMessage);
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
/**
|
79
|
+
* Checks whether variable is on top at functional block scope level
|
80
|
+
* @param {ASTNode} node - The node to check
|
81
|
+
* @param {ASTNode} parent - Parent of the node
|
82
|
+
* @param {ASTNode} grandParent - Parent of the node's parent
|
83
|
+
* @returns {void}
|
84
|
+
*/
|
85
|
+
function blockScopeVarCheck(node, parent, grandParent) {
|
86
|
+
if (!(/Function/.test(grandParent.type) &&
|
87
|
+
parent.type === "BlockStatement" &&
|
88
|
+
isVarOnTop(node, parent.body))) {
|
89
|
+
context.report(node, errorMessage);
|
90
|
+
}
|
91
|
+
}
|
92
|
+
|
93
|
+
//--------------------------------------------------------------------------
|
94
|
+
// Public API
|
95
|
+
//--------------------------------------------------------------------------
|
96
|
+
|
97
|
+
return {
|
98
|
+
"VariableDeclaration": function (node) {
|
99
|
+
var ancestors = context.getAncestors();
|
100
|
+
var parent = ancestors.pop();
|
101
|
+
var grandParent = ancestors.pop();
|
102
|
+
|
103
|
+
if (node.kind === "var") {// check variable is `var` type and not `let` or `const`
|
104
|
+
if (parent.type === "Program") {// That means its a global variable
|
105
|
+
globalVarCheck(node, parent);
|
106
|
+
} else {
|
107
|
+
blockScopeVarCheck(node, parent, grandParent);
|
108
|
+
}
|
109
|
+
}
|
110
|
+
}
|
111
|
+
};
|
112
|
+
|
113
|
+
};
|
114
|
+
|
115
|
+
module.exports.schema = [];
|
package/lib/rules/wrap-iife.js
CHANGED
@@ -1,48 +1,48 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag when IIFE is not wrapped in parens
|
3
|
-
* @author Ilya Volodin
|
4
|
-
* @copyright 2013 Ilya Volodin. All rights reserved.
|
5
|
-
*/
|
6
|
-
|
7
|
-
"use strict";
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Rule Definition
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
module.exports = function(context) {
|
14
|
-
|
15
|
-
var style = context.options[0] || "outside";
|
16
|
-
|
17
|
-
function wrapped(node) {
|
18
|
-
var previousToken = context.getTokenBefore(node),
|
19
|
-
nextToken = context.getTokenAfter(node);
|
20
|
-
return previousToken && previousToken.value === "(" &&
|
21
|
-
nextToken && nextToken.value === ")";
|
22
|
-
}
|
23
|
-
|
24
|
-
return {
|
25
|
-
|
26
|
-
"CallExpression": function(node) {
|
27
|
-
if (node.callee.type === "FunctionExpression") {
|
28
|
-
var callExpressionWrapped = wrapped(node),
|
29
|
-
functionExpressionWrapped = wrapped(node.callee);
|
30
|
-
|
31
|
-
if (!callExpressionWrapped && !functionExpressionWrapped) {
|
32
|
-
context.report(node, "Wrap an immediate function invocation in parentheses.");
|
33
|
-
} else if (style === "inside" && !functionExpressionWrapped) {
|
34
|
-
context.report(node, "Wrap only the function expression in parens.");
|
35
|
-
} else if (style === "outside" && !callExpressionWrapped) {
|
36
|
-
context.report(node, "Move the invocation into the parens that contain the function.");
|
37
|
-
}
|
38
|
-
}
|
39
|
-
}
|
40
|
-
};
|
41
|
-
|
42
|
-
};
|
43
|
-
|
44
|
-
module.exports.schema = [
|
45
|
-
{
|
46
|
-
"enum": ["outside", "inside", "any"]
|
47
|
-
}
|
48
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag when IIFE is not wrapped in parens
|
3
|
+
* @author Ilya Volodin
|
4
|
+
* @copyright 2013 Ilya Volodin. All rights reserved.
|
5
|
+
*/
|
6
|
+
|
7
|
+
"use strict";
|
8
|
+
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
// Rule Definition
|
11
|
+
//------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
module.exports = function(context) {
|
14
|
+
|
15
|
+
var style = context.options[0] || "outside";
|
16
|
+
|
17
|
+
function wrapped(node) {
|
18
|
+
var previousToken = context.getTokenBefore(node),
|
19
|
+
nextToken = context.getTokenAfter(node);
|
20
|
+
return previousToken && previousToken.value === "(" &&
|
21
|
+
nextToken && nextToken.value === ")";
|
22
|
+
}
|
23
|
+
|
24
|
+
return {
|
25
|
+
|
26
|
+
"CallExpression": function(node) {
|
27
|
+
if (node.callee.type === "FunctionExpression") {
|
28
|
+
var callExpressionWrapped = wrapped(node),
|
29
|
+
functionExpressionWrapped = wrapped(node.callee);
|
30
|
+
|
31
|
+
if (!callExpressionWrapped && !functionExpressionWrapped) {
|
32
|
+
context.report(node, "Wrap an immediate function invocation in parentheses.");
|
33
|
+
} else if (style === "inside" && !functionExpressionWrapped) {
|
34
|
+
context.report(node, "Wrap only the function expression in parens.");
|
35
|
+
} else if (style === "outside" && !callExpressionWrapped) {
|
36
|
+
context.report(node, "Move the invocation into the parens that contain the function.");
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
};
|
41
|
+
|
42
|
+
};
|
43
|
+
|
44
|
+
module.exports.schema = [
|
45
|
+
{
|
46
|
+
"enum": ["outside", "inside", "any"]
|
47
|
+
}
|
48
|
+
];
|
package/lib/rules/wrap-regex.js
CHANGED
@@ -1,38 +1,38 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag when regex literals are not wrapped in parens
|
3
|
-
* @author Matt DuVall <http://www.mattduvall.com>
|
4
|
-
*/
|
5
|
-
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Rule Definition
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
module.exports = function(context) {
|
13
|
-
|
14
|
-
return {
|
15
|
-
|
16
|
-
"Literal": function(node) {
|
17
|
-
var token = context.getFirstToken(node),
|
18
|
-
nodeType = token.type,
|
19
|
-
source,
|
20
|
-
grandparent,
|
21
|
-
ancestors;
|
22
|
-
|
23
|
-
if (nodeType === "RegularExpression") {
|
24
|
-
source = context.getTokenBefore(node);
|
25
|
-
ancestors = context.getAncestors();
|
26
|
-
grandparent = ancestors[ancestors.length - 1];
|
27
|
-
|
28
|
-
if (grandparent.type === "MemberExpression" && grandparent.object === node &&
|
29
|
-
(!source || source.value !== "(")) {
|
30
|
-
context.report(node, "Wrap the regexp literal in parens to disambiguate the slash.");
|
31
|
-
}
|
32
|
-
}
|
33
|
-
}
|
34
|
-
};
|
35
|
-
|
36
|
-
};
|
37
|
-
|
38
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag when regex literals are not wrapped in parens
|
3
|
+
* @author Matt DuVall <http://www.mattduvall.com>
|
4
|
+
*/
|
5
|
+
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
|
12
|
+
module.exports = function(context) {
|
13
|
+
|
14
|
+
return {
|
15
|
+
|
16
|
+
"Literal": function(node) {
|
17
|
+
var token = context.getFirstToken(node),
|
18
|
+
nodeType = token.type,
|
19
|
+
source,
|
20
|
+
grandparent,
|
21
|
+
ancestors;
|
22
|
+
|
23
|
+
if (nodeType === "RegularExpression") {
|
24
|
+
source = context.getTokenBefore(node);
|
25
|
+
ancestors = context.getAncestors();
|
26
|
+
grandparent = ancestors[ancestors.length - 1];
|
27
|
+
|
28
|
+
if (grandparent.type === "MemberExpression" && grandparent.object === node &&
|
29
|
+
(!source || source.value !== "(")) {
|
30
|
+
context.report(node, "Wrap the regexp literal in parens to disambiguate the slash.");
|
31
|
+
}
|
32
|
+
}
|
33
|
+
}
|
34
|
+
};
|
35
|
+
|
36
|
+
};
|
37
|
+
|
38
|
+
module.exports.schema = [];
|