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,83 +1,83 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag use of function declaration identifiers as variables.
|
3
|
-
* @author Ian Christian Myers
|
4
|
-
* @copyright 2013 Ian Christian Myers. 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
|
-
* Walk the scope chain looking for either a FunctionDeclaration or a
|
21
|
-
* VariableDeclaration with the same name as left-hand side of the
|
22
|
-
* AssignmentExpression. If we find the FunctionDeclaration first, then we
|
23
|
-
* warn, because a FunctionDeclaration is trying to become a Variable or a
|
24
|
-
* FunctionExpression. If we find a VariableDeclaration first, then we have
|
25
|
-
* a legitimate shadow variable.
|
26
|
-
*/
|
27
|
-
function checkIfIdentifierIsFunction(scope, name) {
|
28
|
-
var variable,
|
29
|
-
def,
|
30
|
-
i,
|
31
|
-
j;
|
32
|
-
|
33
|
-
// Loop over all of the identifiers available in scope.
|
34
|
-
for (i = 0; i < scope.variables.length; i++) {
|
35
|
-
variable = scope.variables[i];
|
36
|
-
|
37
|
-
// For each identifier, see if it was defined in _this_ scope.
|
38
|
-
for (j = 0; j < variable.defs.length; j++) {
|
39
|
-
def = variable.defs[j];
|
40
|
-
|
41
|
-
// Identifier is a function and was declared in this scope
|
42
|
-
if (def.type === "FunctionName" && def.name.name === name) {
|
43
|
-
return true;
|
44
|
-
}
|
45
|
-
|
46
|
-
// Identifier is a variable and was declared in this scope. This
|
47
|
-
// is a legitimate shadow variable.
|
48
|
-
if (def.name && def.name.name === name) {
|
49
|
-
return false;
|
50
|
-
}
|
51
|
-
}
|
52
|
-
}
|
53
|
-
|
54
|
-
// Check the upper scope.
|
55
|
-
if (scope.upper) {
|
56
|
-
return checkIfIdentifierIsFunction(scope.upper, name);
|
57
|
-
}
|
58
|
-
|
59
|
-
// We've reached the global scope and haven't found anything.
|
60
|
-
return false;
|
61
|
-
}
|
62
|
-
|
63
|
-
//--------------------------------------------------------------------------
|
64
|
-
// Public API
|
65
|
-
//--------------------------------------------------------------------------
|
66
|
-
|
67
|
-
return {
|
68
|
-
|
69
|
-
"AssignmentExpression": function(node) {
|
70
|
-
var scope = context.getScope(),
|
71
|
-
name = node.left.name;
|
72
|
-
|
73
|
-
if (checkIfIdentifierIsFunction(scope, name)) {
|
74
|
-
context.report(node, "'{{name}}' is a function.", { name: name });
|
75
|
-
}
|
76
|
-
|
77
|
-
}
|
78
|
-
|
79
|
-
};
|
80
|
-
|
81
|
-
};
|
82
|
-
|
83
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag use of function declaration identifiers as variables.
|
3
|
+
* @author Ian Christian Myers
|
4
|
+
* @copyright 2013 Ian Christian Myers. 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
|
+
* Walk the scope chain looking for either a FunctionDeclaration or a
|
21
|
+
* VariableDeclaration with the same name as left-hand side of the
|
22
|
+
* AssignmentExpression. If we find the FunctionDeclaration first, then we
|
23
|
+
* warn, because a FunctionDeclaration is trying to become a Variable or a
|
24
|
+
* FunctionExpression. If we find a VariableDeclaration first, then we have
|
25
|
+
* a legitimate shadow variable.
|
26
|
+
*/
|
27
|
+
function checkIfIdentifierIsFunction(scope, name) {
|
28
|
+
var variable,
|
29
|
+
def,
|
30
|
+
i,
|
31
|
+
j;
|
32
|
+
|
33
|
+
// Loop over all of the identifiers available in scope.
|
34
|
+
for (i = 0; i < scope.variables.length; i++) {
|
35
|
+
variable = scope.variables[i];
|
36
|
+
|
37
|
+
// For each identifier, see if it was defined in _this_ scope.
|
38
|
+
for (j = 0; j < variable.defs.length; j++) {
|
39
|
+
def = variable.defs[j];
|
40
|
+
|
41
|
+
// Identifier is a function and was declared in this scope
|
42
|
+
if (def.type === "FunctionName" && def.name.name === name) {
|
43
|
+
return true;
|
44
|
+
}
|
45
|
+
|
46
|
+
// Identifier is a variable and was declared in this scope. This
|
47
|
+
// is a legitimate shadow variable.
|
48
|
+
if (def.name && def.name.name === name) {
|
49
|
+
return false;
|
50
|
+
}
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
// Check the upper scope.
|
55
|
+
if (scope.upper) {
|
56
|
+
return checkIfIdentifierIsFunction(scope.upper, name);
|
57
|
+
}
|
58
|
+
|
59
|
+
// We've reached the global scope and haven't found anything.
|
60
|
+
return false;
|
61
|
+
}
|
62
|
+
|
63
|
+
//--------------------------------------------------------------------------
|
64
|
+
// Public API
|
65
|
+
//--------------------------------------------------------------------------
|
66
|
+
|
67
|
+
return {
|
68
|
+
|
69
|
+
"AssignmentExpression": function(node) {
|
70
|
+
var scope = context.getScope(),
|
71
|
+
name = node.left.name;
|
72
|
+
|
73
|
+
if (checkIfIdentifierIsFunction(scope, name)) {
|
74
|
+
context.report(node, "'{{name}}' is a function.", { name: name });
|
75
|
+
}
|
76
|
+
|
77
|
+
}
|
78
|
+
|
79
|
+
};
|
80
|
+
|
81
|
+
};
|
82
|
+
|
83
|
+
module.exports.schema = [];
|
@@ -1,76 +1,76 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag use of implied eval via setTimeout and setInterval
|
3
|
-
* @author James Allardice
|
4
|
-
* @copyright 2015 Mathias Schreck. All rights reserved.
|
5
|
-
* @copyright 2013 James Allardice. All rights reserved.
|
6
|
-
*/
|
7
|
-
|
8
|
-
"use strict";
|
9
|
-
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
// Rule Definition
|
12
|
-
//------------------------------------------------------------------------------
|
13
|
-
|
14
|
-
module.exports = function(context) {
|
15
|
-
var IMPLIED_EVAL = /set(?:Timeout|Interval)/;
|
16
|
-
|
17
|
-
//--------------------------------------------------------------------------
|
18
|
-
// Helpers
|
19
|
-
//--------------------------------------------------------------------------
|
20
|
-
|
21
|
-
/**
|
22
|
-
* Checks if the first argument of a given CallExpression node is a string literal.
|
23
|
-
* @param {ASTNode} node The CallExpression node the check.
|
24
|
-
* @returns {boolean} True if the first argument is a string literal, false if not.
|
25
|
-
*/
|
26
|
-
function hasStringLiteralArgument(node) {
|
27
|
-
var firstArgument = node.arguments[0];
|
28
|
-
|
29
|
-
return firstArgument && firstArgument.type === "Literal" && typeof firstArgument.value === "string";
|
30
|
-
}
|
31
|
-
|
32
|
-
/**
|
33
|
-
* Checks if the given MemberExpression node is window.setTimeout or window.setInterval.
|
34
|
-
* @param {ASTNode} node The MemberExpression node to check.
|
35
|
-
* @returns {boolean} Whether or not the given node is window.set*.
|
36
|
-
*/
|
37
|
-
function isSetMemberExpression(node) {
|
38
|
-
var object = node.object,
|
39
|
-
property = node.property,
|
40
|
-
hasSetPropertyName = IMPLIED_EVAL.test(property.name) || IMPLIED_EVAL.test(property.value);
|
41
|
-
|
42
|
-
return object.name === "window" && hasSetPropertyName;
|
43
|
-
|
44
|
-
}
|
45
|
-
|
46
|
-
/**
|
47
|
-
* Determines if a node represents a call to setTimeout/setInterval with
|
48
|
-
* a string argument.
|
49
|
-
* @param {ASTNode} node The node to check.
|
50
|
-
* @returns {boolean} True if the node matches, false if not.
|
51
|
-
* @private
|
52
|
-
*/
|
53
|
-
function isImpliedEval(node) {
|
54
|
-
var isMemberExpression = (node.callee.type === "MemberExpression"),
|
55
|
-
isIdentifier = (node.callee.type === "Identifier"),
|
56
|
-
isSetMethod = (isIdentifier && IMPLIED_EVAL.test(node.callee.name)) ||
|
57
|
-
(isMemberExpression && isSetMemberExpression(node.callee));
|
58
|
-
|
59
|
-
return isSetMethod && hasStringLiteralArgument(node);
|
60
|
-
}
|
61
|
-
|
62
|
-
//--------------------------------------------------------------------------
|
63
|
-
// Public
|
64
|
-
//--------------------------------------------------------------------------
|
65
|
-
|
66
|
-
return {
|
67
|
-
"CallExpression": function(node) {
|
68
|
-
if (isImpliedEval(node)) {
|
69
|
-
context.report(node, "Implied eval. Consider passing a function instead of a string.");
|
70
|
-
}
|
71
|
-
}
|
72
|
-
};
|
73
|
-
|
74
|
-
};
|
75
|
-
|
76
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag use of implied eval via setTimeout and setInterval
|
3
|
+
* @author James Allardice
|
4
|
+
* @copyright 2015 Mathias Schreck. All rights reserved.
|
5
|
+
* @copyright 2013 James Allardice. All rights reserved.
|
6
|
+
*/
|
7
|
+
|
8
|
+
"use strict";
|
9
|
+
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
// Rule Definition
|
12
|
+
//------------------------------------------------------------------------------
|
13
|
+
|
14
|
+
module.exports = function(context) {
|
15
|
+
var IMPLIED_EVAL = /set(?:Timeout|Interval)|execScript/;
|
16
|
+
|
17
|
+
//--------------------------------------------------------------------------
|
18
|
+
// Helpers
|
19
|
+
//--------------------------------------------------------------------------
|
20
|
+
|
21
|
+
/**
|
22
|
+
* Checks if the first argument of a given CallExpression node is a string literal.
|
23
|
+
* @param {ASTNode} node The CallExpression node the check.
|
24
|
+
* @returns {boolean} True if the first argument is a string literal, false if not.
|
25
|
+
*/
|
26
|
+
function hasStringLiteralArgument(node) {
|
27
|
+
var firstArgument = node.arguments[0];
|
28
|
+
|
29
|
+
return firstArgument && firstArgument.type === "Literal" && typeof firstArgument.value === "string";
|
30
|
+
}
|
31
|
+
|
32
|
+
/**
|
33
|
+
* Checks if the given MemberExpression node is window.setTimeout or window.setInterval.
|
34
|
+
* @param {ASTNode} node The MemberExpression node to check.
|
35
|
+
* @returns {boolean} Whether or not the given node is window.set*.
|
36
|
+
*/
|
37
|
+
function isSetMemberExpression(node) {
|
38
|
+
var object = node.object,
|
39
|
+
property = node.property,
|
40
|
+
hasSetPropertyName = IMPLIED_EVAL.test(property.name) || IMPLIED_EVAL.test(property.value);
|
41
|
+
|
42
|
+
return object.name === "window" && hasSetPropertyName;
|
43
|
+
|
44
|
+
}
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Determines if a node represents a call to setTimeout/setInterval with
|
48
|
+
* a string argument.
|
49
|
+
* @param {ASTNode} node The node to check.
|
50
|
+
* @returns {boolean} True if the node matches, false if not.
|
51
|
+
* @private
|
52
|
+
*/
|
53
|
+
function isImpliedEval(node) {
|
54
|
+
var isMemberExpression = (node.callee.type === "MemberExpression"),
|
55
|
+
isIdentifier = (node.callee.type === "Identifier"),
|
56
|
+
isSetMethod = (isIdentifier && IMPLIED_EVAL.test(node.callee.name)) ||
|
57
|
+
(isMemberExpression && isSetMemberExpression(node.callee));
|
58
|
+
|
59
|
+
return isSetMethod && hasStringLiteralArgument(node);
|
60
|
+
}
|
61
|
+
|
62
|
+
//--------------------------------------------------------------------------
|
63
|
+
// Public
|
64
|
+
//--------------------------------------------------------------------------
|
65
|
+
|
66
|
+
return {
|
67
|
+
"CallExpression": function(node) {
|
68
|
+
if (isImpliedEval(node)) {
|
69
|
+
context.report(node, "Implied eval. Consider passing a function instead of a string.");
|
70
|
+
}
|
71
|
+
}
|
72
|
+
};
|
73
|
+
|
74
|
+
};
|
75
|
+
|
76
|
+
module.exports.schema = [];
|
@@ -1,49 +1,49 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Enforces or disallows inline comments.
|
3
|
-
* @author Greg Cochard
|
4
|
-
* @copyright 2014 Greg Cochard. All rights reserved.
|
5
|
-
*/
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Rule Definition
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
module.exports = function(context) {
|
13
|
-
|
14
|
-
/**
|
15
|
-
* Will check that comments are not on lines starting with or ending with code
|
16
|
-
* @param {ASTNode} node The comment node to check
|
17
|
-
* @private
|
18
|
-
* @returns {void}
|
19
|
-
*/
|
20
|
-
function testCodeAroundComment(node) {
|
21
|
-
|
22
|
-
// Get the whole line and cut it off at the start of the comment
|
23
|
-
var startLine = String(context.getSourceLines()[node.loc.start.line - 1]);
|
24
|
-
var endLine = String(context.getSourceLines()[node.loc.end.line - 1]);
|
25
|
-
|
26
|
-
var preamble = startLine.slice(0, node.loc.start.column).trim();
|
27
|
-
|
28
|
-
// Also check after the comment
|
29
|
-
var postamble = endLine.slice(node.loc.end.column).trim();
|
30
|
-
|
31
|
-
// Should be empty if there was only whitespace around the comment
|
32
|
-
if (preamble || postamble) {
|
33
|
-
context.report(node, "Unexpected comment inline with code.");
|
34
|
-
}
|
35
|
-
}
|
36
|
-
|
37
|
-
//--------------------------------------------------------------------------
|
38
|
-
// Public
|
39
|
-
//--------------------------------------------------------------------------
|
40
|
-
|
41
|
-
return {
|
42
|
-
|
43
|
-
"LineComment": testCodeAroundComment,
|
44
|
-
"BlockComment": testCodeAroundComment
|
45
|
-
|
46
|
-
};
|
47
|
-
};
|
48
|
-
|
49
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Enforces or disallows inline comments.
|
3
|
+
* @author Greg Cochard
|
4
|
+
* @copyright 2014 Greg Cochard. All rights reserved.
|
5
|
+
*/
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
|
12
|
+
module.exports = function(context) {
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Will check that comments are not on lines starting with or ending with code
|
16
|
+
* @param {ASTNode} node The comment node to check
|
17
|
+
* @private
|
18
|
+
* @returns {void}
|
19
|
+
*/
|
20
|
+
function testCodeAroundComment(node) {
|
21
|
+
|
22
|
+
// Get the whole line and cut it off at the start of the comment
|
23
|
+
var startLine = String(context.getSourceLines()[node.loc.start.line - 1]);
|
24
|
+
var endLine = String(context.getSourceLines()[node.loc.end.line - 1]);
|
25
|
+
|
26
|
+
var preamble = startLine.slice(0, node.loc.start.column).trim();
|
27
|
+
|
28
|
+
// Also check after the comment
|
29
|
+
var postamble = endLine.slice(node.loc.end.column).trim();
|
30
|
+
|
31
|
+
// Should be empty if there was only whitespace around the comment
|
32
|
+
if (preamble || postamble) {
|
33
|
+
context.report(node, "Unexpected comment inline with code.");
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
//--------------------------------------------------------------------------
|
38
|
+
// Public
|
39
|
+
//--------------------------------------------------------------------------
|
40
|
+
|
41
|
+
return {
|
42
|
+
|
43
|
+
"LineComment": testCodeAroundComment,
|
44
|
+
"BlockComment": testCodeAroundComment
|
45
|
+
|
46
|
+
};
|
47
|
+
};
|
48
|
+
|
49
|
+
module.exports.schema = [];
|
@@ -1,78 +1,78 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to enforce declarations in program or function body root.
|
3
|
-
* @author Brandon Mills
|
4
|
-
* @copyright 2014 Brandon Mills. All rights reserved.
|
5
|
-
*/
|
6
|
-
|
7
|
-
"use strict";
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Rule Definition
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
module.exports = function(context) {
|
14
|
-
|
15
|
-
/**
|
16
|
-
* Find the nearest Program or Function ancestor node.
|
17
|
-
* @returns {Object} Ancestor's type and distance from node.
|
18
|
-
*/
|
19
|
-
function nearestBody() {
|
20
|
-
var ancestors = context.getAncestors(),
|
21
|
-
ancestor = ancestors.pop(),
|
22
|
-
generation = 1;
|
23
|
-
|
24
|
-
while (ancestor && ["Program", "FunctionDeclaration",
|
25
|
-
"FunctionExpression", "ArrowFunctionExpression"
|
26
|
-
].indexOf(ancestor.type) < 0) {
|
27
|
-
generation += 1;
|
28
|
-
ancestor = ancestors.pop();
|
29
|
-
}
|
30
|
-
|
31
|
-
return {
|
32
|
-
// Type of containing ancestor
|
33
|
-
type: ancestor.type,
|
34
|
-
// Separation between ancestor and node
|
35
|
-
distance: generation
|
36
|
-
};
|
37
|
-
}
|
38
|
-
|
39
|
-
/**
|
40
|
-
* Ensure that a given node is at a program or function body's root.
|
41
|
-
* @param {ASTNode} node Declaration node to check.
|
42
|
-
* @returns {void}
|
43
|
-
*/
|
44
|
-
function check(node) {
|
45
|
-
var body = nearestBody(node),
|
46
|
-
valid = ((body.type === "Program" && body.distance === 1) ||
|
47
|
-
body.distance === 2);
|
48
|
-
|
49
|
-
if (!valid) {
|
50
|
-
context.report(node, "Move {{type}} declaration to {{body}} root.",
|
51
|
-
{
|
52
|
-
type: (node.type === "FunctionDeclaration" ?
|
53
|
-
"function" : "variable"),
|
54
|
-
body: (body.type === "Program" ?
|
55
|
-
"program" : "function body")
|
56
|
-
}
|
57
|
-
);
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
return {
|
62
|
-
|
63
|
-
"FunctionDeclaration": check,
|
64
|
-
"VariableDeclaration": function(node) {
|
65
|
-
if (context.options[0] === "both" && node.kind === "var") {
|
66
|
-
check(node);
|
67
|
-
}
|
68
|
-
}
|
69
|
-
|
70
|
-
};
|
71
|
-
|
72
|
-
};
|
73
|
-
|
74
|
-
module.exports.schema = [
|
75
|
-
{
|
76
|
-
"enum": ["functions", "both"]
|
77
|
-
}
|
78
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to enforce declarations in program or function body root.
|
3
|
+
* @author Brandon Mills
|
4
|
+
* @copyright 2014 Brandon Mills. All rights reserved.
|
5
|
+
*/
|
6
|
+
|
7
|
+
"use strict";
|
8
|
+
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
// Rule Definition
|
11
|
+
//------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
module.exports = function(context) {
|
14
|
+
|
15
|
+
/**
|
16
|
+
* Find the nearest Program or Function ancestor node.
|
17
|
+
* @returns {Object} Ancestor's type and distance from node.
|
18
|
+
*/
|
19
|
+
function nearestBody() {
|
20
|
+
var ancestors = context.getAncestors(),
|
21
|
+
ancestor = ancestors.pop(),
|
22
|
+
generation = 1;
|
23
|
+
|
24
|
+
while (ancestor && ["Program", "FunctionDeclaration",
|
25
|
+
"FunctionExpression", "ArrowFunctionExpression"
|
26
|
+
].indexOf(ancestor.type) < 0) {
|
27
|
+
generation += 1;
|
28
|
+
ancestor = ancestors.pop();
|
29
|
+
}
|
30
|
+
|
31
|
+
return {
|
32
|
+
// Type of containing ancestor
|
33
|
+
type: ancestor.type,
|
34
|
+
// Separation between ancestor and node
|
35
|
+
distance: generation
|
36
|
+
};
|
37
|
+
}
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Ensure that a given node is at a program or function body's root.
|
41
|
+
* @param {ASTNode} node Declaration node to check.
|
42
|
+
* @returns {void}
|
43
|
+
*/
|
44
|
+
function check(node) {
|
45
|
+
var body = nearestBody(node),
|
46
|
+
valid = ((body.type === "Program" && body.distance === 1) ||
|
47
|
+
body.distance === 2);
|
48
|
+
|
49
|
+
if (!valid) {
|
50
|
+
context.report(node, "Move {{type}} declaration to {{body}} root.",
|
51
|
+
{
|
52
|
+
type: (node.type === "FunctionDeclaration" ?
|
53
|
+
"function" : "variable"),
|
54
|
+
body: (body.type === "Program" ?
|
55
|
+
"program" : "function body")
|
56
|
+
}
|
57
|
+
);
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
return {
|
62
|
+
|
63
|
+
"FunctionDeclaration": check,
|
64
|
+
"VariableDeclaration": function(node) {
|
65
|
+
if (context.options[0] === "both" && node.kind === "var") {
|
66
|
+
check(node);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
};
|
71
|
+
|
72
|
+
};
|
73
|
+
|
74
|
+
module.exports.schema = [
|
75
|
+
{
|
76
|
+
"enum": ["functions", "both"]
|
77
|
+
}
|
78
|
+
];
|