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,105 +1,105 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag use of variables before they are defined
|
3
|
-
* @author Ilya Volodin
|
4
|
-
* @copyright 2013 Ilya Volodin. All rights reserved.
|
5
|
-
*/
|
6
|
-
|
7
|
-
"use strict";
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Constants
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
var NO_FUNC = "nofunc";
|
14
|
-
|
15
|
-
//------------------------------------------------------------------------------
|
16
|
-
// Rule Definition
|
17
|
-
//------------------------------------------------------------------------------
|
18
|
-
|
19
|
-
module.exports = function(context) {
|
20
|
-
|
21
|
-
/**
|
22
|
-
* Finds variable declarations in a given scope.
|
23
|
-
* @param {string} name The variable name to find.
|
24
|
-
* @param {Scope} scope The scope to search in.
|
25
|
-
* @returns {Object} The variable declaration object.
|
26
|
-
* @private
|
27
|
-
*/
|
28
|
-
function findDeclaration(name, scope) {
|
29
|
-
// try searching in the current scope first
|
30
|
-
for (var i = 0, l = scope.variables.length; i < l; i++) {
|
31
|
-
if (scope.variables[i].name === name) {
|
32
|
-
return scope.variables[i];
|
33
|
-
}
|
34
|
-
}
|
35
|
-
// check if there's upper scope and call recursivly till we find the variable
|
36
|
-
if (scope.upper) {
|
37
|
-
return findDeclaration(name, scope.upper);
|
38
|
-
}
|
39
|
-
}
|
40
|
-
|
41
|
-
/**
|
42
|
-
* Finds and validates all variables in a given scope.
|
43
|
-
* @param {Scope} scope The scope object.
|
44
|
-
* @returns {void}
|
45
|
-
* @private
|
46
|
-
*/
|
47
|
-
function findVariablesInScope(scope) {
|
48
|
-
var typeOption = context.options[0];
|
49
|
-
|
50
|
-
function checkLocationAndReport(reference, declaration) {
|
51
|
-
if (typeOption !== NO_FUNC || declaration.defs[0].type !== "FunctionName") {
|
52
|
-
if (declaration.identifiers[0].range[1] > reference.identifier.range[1]) {
|
53
|
-
context.report(reference.identifier, "{{a}} was used before it was defined", {a: reference.identifier.name});
|
54
|
-
}
|
55
|
-
}
|
56
|
-
}
|
57
|
-
|
58
|
-
scope.references.forEach(function(reference) {
|
59
|
-
// if the reference is resolved check for declaration location
|
60
|
-
// if not, it could be function invocation, try to find manually
|
61
|
-
if (reference.resolved && reference.resolved.identifiers.length > 0) {
|
62
|
-
checkLocationAndReport(reference, reference.resolved);
|
63
|
-
} else {
|
64
|
-
var declaration = findDeclaration(reference.identifier.name, scope);
|
65
|
-
// if there're no identifiers, this is a global environment variable
|
66
|
-
if (declaration && declaration.identifiers.length !== 0) {
|
67
|
-
checkLocationAndReport(reference, declaration);
|
68
|
-
}
|
69
|
-
}
|
70
|
-
});
|
71
|
-
}
|
72
|
-
|
73
|
-
|
74
|
-
/**
|
75
|
-
* Validates variables inside of a node's scope.
|
76
|
-
* @param {ASTNode} node The node to check.
|
77
|
-
* @returns {void}
|
78
|
-
* @private
|
79
|
-
*/
|
80
|
-
function findVariables() {
|
81
|
-
var scope = context.getScope();
|
82
|
-
findVariablesInScope(scope);
|
83
|
-
}
|
84
|
-
|
85
|
-
return {
|
86
|
-
"Program": function() {
|
87
|
-
var scope = context.getScope();
|
88
|
-
findVariablesInScope(scope);
|
89
|
-
|
90
|
-
// both Node.js and Modules have an extra scope
|
91
|
-
if (context.ecmaFeatures.globalReturn || context.ecmaFeatures.modules) {
|
92
|
-
findVariablesInScope(scope.childScopes[0]);
|
93
|
-
}
|
94
|
-
},
|
95
|
-
"FunctionExpression": findVariables,
|
96
|
-
"FunctionDeclaration": findVariables,
|
97
|
-
"ArrowFunctionExpression": findVariables
|
98
|
-
};
|
99
|
-
};
|
100
|
-
|
101
|
-
module.exports.schema = [
|
102
|
-
{
|
103
|
-
"enum": ["nofunc"]
|
104
|
-
}
|
105
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag use of variables before they are defined
|
3
|
+
* @author Ilya Volodin
|
4
|
+
* @copyright 2013 Ilya Volodin. All rights reserved.
|
5
|
+
*/
|
6
|
+
|
7
|
+
"use strict";
|
8
|
+
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
// Constants
|
11
|
+
//------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
var NO_FUNC = "nofunc";
|
14
|
+
|
15
|
+
//------------------------------------------------------------------------------
|
16
|
+
// Rule Definition
|
17
|
+
//------------------------------------------------------------------------------
|
18
|
+
|
19
|
+
module.exports = function(context) {
|
20
|
+
|
21
|
+
/**
|
22
|
+
* Finds variable declarations in a given scope.
|
23
|
+
* @param {string} name The variable name to find.
|
24
|
+
* @param {Scope} scope The scope to search in.
|
25
|
+
* @returns {Object} The variable declaration object.
|
26
|
+
* @private
|
27
|
+
*/
|
28
|
+
function findDeclaration(name, scope) {
|
29
|
+
// try searching in the current scope first
|
30
|
+
for (var i = 0, l = scope.variables.length; i < l; i++) {
|
31
|
+
if (scope.variables[i].name === name) {
|
32
|
+
return scope.variables[i];
|
33
|
+
}
|
34
|
+
}
|
35
|
+
// check if there's upper scope and call recursivly till we find the variable
|
36
|
+
if (scope.upper) {
|
37
|
+
return findDeclaration(name, scope.upper);
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
/**
|
42
|
+
* Finds and validates all variables in a given scope.
|
43
|
+
* @param {Scope} scope The scope object.
|
44
|
+
* @returns {void}
|
45
|
+
* @private
|
46
|
+
*/
|
47
|
+
function findVariablesInScope(scope) {
|
48
|
+
var typeOption = context.options[0];
|
49
|
+
|
50
|
+
function checkLocationAndReport(reference, declaration) {
|
51
|
+
if (typeOption !== NO_FUNC || declaration.defs[0].type !== "FunctionName") {
|
52
|
+
if (declaration.identifiers[0].range[1] > reference.identifier.range[1]) {
|
53
|
+
context.report(reference.identifier, "{{a}} was used before it was defined", {a: reference.identifier.name});
|
54
|
+
}
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
scope.references.forEach(function(reference) {
|
59
|
+
// if the reference is resolved check for declaration location
|
60
|
+
// if not, it could be function invocation, try to find manually
|
61
|
+
if (reference.resolved && reference.resolved.identifiers.length > 0) {
|
62
|
+
checkLocationAndReport(reference, reference.resolved);
|
63
|
+
} else {
|
64
|
+
var declaration = findDeclaration(reference.identifier.name, scope);
|
65
|
+
// if there're no identifiers, this is a global environment variable
|
66
|
+
if (declaration && declaration.identifiers.length !== 0) {
|
67
|
+
checkLocationAndReport(reference, declaration);
|
68
|
+
}
|
69
|
+
}
|
70
|
+
});
|
71
|
+
}
|
72
|
+
|
73
|
+
|
74
|
+
/**
|
75
|
+
* Validates variables inside of a node's scope.
|
76
|
+
* @param {ASTNode} node The node to check.
|
77
|
+
* @returns {void}
|
78
|
+
* @private
|
79
|
+
*/
|
80
|
+
function findVariables() {
|
81
|
+
var scope = context.getScope();
|
82
|
+
findVariablesInScope(scope);
|
83
|
+
}
|
84
|
+
|
85
|
+
return {
|
86
|
+
"Program": function() {
|
87
|
+
var scope = context.getScope();
|
88
|
+
findVariablesInScope(scope);
|
89
|
+
|
90
|
+
// both Node.js and Modules have an extra scope
|
91
|
+
if (context.ecmaFeatures.globalReturn || context.ecmaFeatures.modules) {
|
92
|
+
findVariablesInScope(scope.childScopes[0]);
|
93
|
+
}
|
94
|
+
},
|
95
|
+
"FunctionExpression": findVariables,
|
96
|
+
"FunctionDeclaration": findVariables,
|
97
|
+
"ArrowFunctionExpression": findVariables
|
98
|
+
};
|
99
|
+
};
|
100
|
+
|
101
|
+
module.exports.schema = [
|
102
|
+
{
|
103
|
+
"enum": ["nofunc"]
|
104
|
+
}
|
105
|
+
];
|
package/lib/rules/no-var.js
CHANGED
@@ -1,26 +1,26 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to check for the usage of var.
|
3
|
-
* @author Jamund Ferguson
|
4
|
-
* @copyright 2014 Jamund Ferguson. All rights reserved.
|
5
|
-
*/
|
6
|
-
|
7
|
-
"use strict";
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Rule Definition
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
module.exports = function(context) {
|
14
|
-
|
15
|
-
return {
|
16
|
-
"VariableDeclaration": function (node) {
|
17
|
-
if (node.kind === "var") {
|
18
|
-
context.report(node, "Unexpected var, use let or const instead.");
|
19
|
-
}
|
20
|
-
}
|
21
|
-
|
22
|
-
};
|
23
|
-
|
24
|
-
};
|
25
|
-
|
26
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to check for the usage of var.
|
3
|
+
* @author Jamund Ferguson
|
4
|
+
* @copyright 2014 Jamund Ferguson. All rights reserved.
|
5
|
+
*/
|
6
|
+
|
7
|
+
"use strict";
|
8
|
+
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
// Rule Definition
|
11
|
+
//------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
module.exports = function(context) {
|
14
|
+
|
15
|
+
return {
|
16
|
+
"VariableDeclaration": function (node) {
|
17
|
+
if (node.kind === "var") {
|
18
|
+
context.report(node, "Unexpected var, use let or const instead.");
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
};
|
23
|
+
|
24
|
+
};
|
25
|
+
|
26
|
+
module.exports.schema = [];
|
package/lib/rules/no-void.js
CHANGED
@@ -1,28 +1,28 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to disallow use of void operator.
|
3
|
-
* @author Mike Sidorov
|
4
|
-
* @copyright 2014 Mike Sidorov. All rights reserved.
|
5
|
-
*/
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Rule Definition
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
module.exports = function(context) {
|
13
|
-
|
14
|
-
//--------------------------------------------------------------------------
|
15
|
-
// Public
|
16
|
-
//--------------------------------------------------------------------------
|
17
|
-
|
18
|
-
return {
|
19
|
-
"UnaryExpression": function(node) {
|
20
|
-
if (node.operator === "void") {
|
21
|
-
context.report(node, "Expected 'undefined' and instead saw 'void'.");
|
22
|
-
}
|
23
|
-
}
|
24
|
-
};
|
25
|
-
|
26
|
-
};
|
27
|
-
|
28
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to disallow use of void operator.
|
3
|
+
* @author Mike Sidorov
|
4
|
+
* @copyright 2014 Mike Sidorov. All rights reserved.
|
5
|
+
*/
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
|
12
|
+
module.exports = function(context) {
|
13
|
+
|
14
|
+
//--------------------------------------------------------------------------
|
15
|
+
// Public
|
16
|
+
//--------------------------------------------------------------------------
|
17
|
+
|
18
|
+
return {
|
19
|
+
"UnaryExpression": function(node) {
|
20
|
+
if (node.operator === "void") {
|
21
|
+
context.report(node, "Expected 'undefined' and instead saw 'void'.");
|
22
|
+
}
|
23
|
+
}
|
24
|
+
};
|
25
|
+
|
26
|
+
};
|
27
|
+
|
28
|
+
module.exports.schema = [];
|
@@ -1,102 +1,102 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule that warns about used warning comments
|
3
|
-
* @author Alexander Schmidt <https://github.com/lxanders>
|
4
|
-
*/
|
5
|
-
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Rule Definition
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
module.exports = function (context) {
|
13
|
-
|
14
|
-
var configuration = context.options[0] || {},
|
15
|
-
warningTerms = configuration.terms || ["todo", "fixme", "xxx"],
|
16
|
-
location = configuration.location || "start",
|
17
|
-
warningRegExps;
|
18
|
-
|
19
|
-
/**
|
20
|
-
* Convert a warning term into a RegExp which will match a comment containing that whole word in the specified
|
21
|
-
* location ("start" or "anywhere"). If the term starts or ends with non word characters, then the match will not
|
22
|
-
* require word boundaries on that side.
|
23
|
-
*
|
24
|
-
* @param {String} term A term to convert to a RegExp
|
25
|
-
* @returns {RegExp} The term converted to a RegExp
|
26
|
-
*/
|
27
|
-
function convertToRegExp(term) {
|
28
|
-
var escaped = term.replace(/[-\/\\$\^*+?.()|\[\]{}]/g, "\\$&"),
|
29
|
-
// If the term ends in a word character (a-z0-9_), ensure a word boundary at the end, so that substrings do
|
30
|
-
// not get falsely matched. eg "todo" in a string such as "mastodon".
|
31
|
-
// If the term ends in a non-word character, then \b won't match on the boundary to the next non-word
|
32
|
-
// character, which would likely be a space. For example `/\bFIX!\b/.test('FIX! blah') === false`.
|
33
|
-
// In these cases, use no bounding match. Same applies for the prefix, handled below.
|
34
|
-
suffix = /\w$/.test(term) ? "\\b" : "",
|
35
|
-
prefix;
|
36
|
-
|
37
|
-
if (location === "start") {
|
38
|
-
// When matching at the start, ignore leading whitespace, and there's no need to worry about word boundaries
|
39
|
-
prefix = "^\\s*";
|
40
|
-
} else if (/^\w/.test(term)) {
|
41
|
-
prefix = "\\b";
|
42
|
-
} else {
|
43
|
-
prefix = "";
|
44
|
-
}
|
45
|
-
|
46
|
-
return new RegExp(prefix + escaped + suffix, "i");
|
47
|
-
}
|
48
|
-
|
49
|
-
/**
|
50
|
-
* Checks the specified comment for matches of the configured warning terms and returns the matches.
|
51
|
-
* @param {String} comment The comment which is checked.
|
52
|
-
* @returns {Array} All matched warning terms for this comment.
|
53
|
-
*/
|
54
|
-
function commentContainsWarningTerm(comment) {
|
55
|
-
var matches = [];
|
56
|
-
|
57
|
-
warningRegExps.forEach(function (regex, index) {
|
58
|
-
if (regex.test(comment)) {
|
59
|
-
matches.push(warningTerms[index]);
|
60
|
-
}
|
61
|
-
});
|
62
|
-
|
63
|
-
return matches;
|
64
|
-
}
|
65
|
-
|
66
|
-
/**
|
67
|
-
* Checks the specified node for matching warning comments and reports them.
|
68
|
-
* @param {ASTNode} node The AST node being checked.
|
69
|
-
* @returns {void} undefined.
|
70
|
-
*/
|
71
|
-
function checkComment(node) {
|
72
|
-
var matches = commentContainsWarningTerm(node.value);
|
73
|
-
|
74
|
-
matches.forEach(function (matchedTerm) {
|
75
|
-
context.report(node, "Unexpected " + matchedTerm + " comment.");
|
76
|
-
});
|
77
|
-
}
|
78
|
-
|
79
|
-
warningRegExps = warningTerms.map(convertToRegExp);
|
80
|
-
return {
|
81
|
-
"BlockComment": checkComment,
|
82
|
-
"LineComment": checkComment
|
83
|
-
};
|
84
|
-
};
|
85
|
-
|
86
|
-
module.exports.schema = [
|
87
|
-
{
|
88
|
-
"type": "object",
|
89
|
-
"properties": {
|
90
|
-
"terms": {
|
91
|
-
"type": "array",
|
92
|
-
"items": {
|
93
|
-
"type": "string"
|
94
|
-
}
|
95
|
-
},
|
96
|
-
"location": {
|
97
|
-
"enum": ["start", "anywhere"]
|
98
|
-
}
|
99
|
-
},
|
100
|
-
"additionalProperties": false
|
101
|
-
}
|
102
|
-
];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule that warns about used warning comments
|
3
|
+
* @author Alexander Schmidt <https://github.com/lxanders>
|
4
|
+
*/
|
5
|
+
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
|
12
|
+
module.exports = function (context) {
|
13
|
+
|
14
|
+
var configuration = context.options[0] || {},
|
15
|
+
warningTerms = configuration.terms || ["todo", "fixme", "xxx"],
|
16
|
+
location = configuration.location || "start",
|
17
|
+
warningRegExps;
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Convert a warning term into a RegExp which will match a comment containing that whole word in the specified
|
21
|
+
* location ("start" or "anywhere"). If the term starts or ends with non word characters, then the match will not
|
22
|
+
* require word boundaries on that side.
|
23
|
+
*
|
24
|
+
* @param {String} term A term to convert to a RegExp
|
25
|
+
* @returns {RegExp} The term converted to a RegExp
|
26
|
+
*/
|
27
|
+
function convertToRegExp(term) {
|
28
|
+
var escaped = term.replace(/[-\/\\$\^*+?.()|\[\]{}]/g, "\\$&"),
|
29
|
+
// If the term ends in a word character (a-z0-9_), ensure a word boundary at the end, so that substrings do
|
30
|
+
// not get falsely matched. eg "todo" in a string such as "mastodon".
|
31
|
+
// If the term ends in a non-word character, then \b won't match on the boundary to the next non-word
|
32
|
+
// character, which would likely be a space. For example `/\bFIX!\b/.test('FIX! blah') === false`.
|
33
|
+
// In these cases, use no bounding match. Same applies for the prefix, handled below.
|
34
|
+
suffix = /\w$/.test(term) ? "\\b" : "",
|
35
|
+
prefix;
|
36
|
+
|
37
|
+
if (location === "start") {
|
38
|
+
// When matching at the start, ignore leading whitespace, and there's no need to worry about word boundaries
|
39
|
+
prefix = "^\\s*";
|
40
|
+
} else if (/^\w/.test(term)) {
|
41
|
+
prefix = "\\b";
|
42
|
+
} else {
|
43
|
+
prefix = "";
|
44
|
+
}
|
45
|
+
|
46
|
+
return new RegExp(prefix + escaped + suffix, "i");
|
47
|
+
}
|
48
|
+
|
49
|
+
/**
|
50
|
+
* Checks the specified comment for matches of the configured warning terms and returns the matches.
|
51
|
+
* @param {String} comment The comment which is checked.
|
52
|
+
* @returns {Array} All matched warning terms for this comment.
|
53
|
+
*/
|
54
|
+
function commentContainsWarningTerm(comment) {
|
55
|
+
var matches = [];
|
56
|
+
|
57
|
+
warningRegExps.forEach(function (regex, index) {
|
58
|
+
if (regex.test(comment)) {
|
59
|
+
matches.push(warningTerms[index]);
|
60
|
+
}
|
61
|
+
});
|
62
|
+
|
63
|
+
return matches;
|
64
|
+
}
|
65
|
+
|
66
|
+
/**
|
67
|
+
* Checks the specified node for matching warning comments and reports them.
|
68
|
+
* @param {ASTNode} node The AST node being checked.
|
69
|
+
* @returns {void} undefined.
|
70
|
+
*/
|
71
|
+
function checkComment(node) {
|
72
|
+
var matches = commentContainsWarningTerm(node.value);
|
73
|
+
|
74
|
+
matches.forEach(function (matchedTerm) {
|
75
|
+
context.report(node, "Unexpected " + matchedTerm + " comment.");
|
76
|
+
});
|
77
|
+
}
|
78
|
+
|
79
|
+
warningRegExps = warningTerms.map(convertToRegExp);
|
80
|
+
return {
|
81
|
+
"BlockComment": checkComment,
|
82
|
+
"LineComment": checkComment
|
83
|
+
};
|
84
|
+
};
|
85
|
+
|
86
|
+
module.exports.schema = [
|
87
|
+
{
|
88
|
+
"type": "object",
|
89
|
+
"properties": {
|
90
|
+
"terms": {
|
91
|
+
"type": "array",
|
92
|
+
"items": {
|
93
|
+
"type": "string"
|
94
|
+
}
|
95
|
+
},
|
96
|
+
"location": {
|
97
|
+
"enum": ["start", "anywhere"]
|
98
|
+
}
|
99
|
+
},
|
100
|
+
"additionalProperties": false
|
101
|
+
}
|
102
|
+
];
|
package/lib/rules/no-with.js
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag use of with statement
|
3
|
-
* @author Nicholas C. Zakas
|
4
|
-
*/
|
5
|
-
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Rule Definition
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
module.exports = function(context) {
|
13
|
-
|
14
|
-
return {
|
15
|
-
"WithStatement": function(node) {
|
16
|
-
context.report(node, "Unexpected use of 'with' statement.");
|
17
|
-
}
|
18
|
-
};
|
19
|
-
|
20
|
-
};
|
21
|
-
|
22
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag use of with statement
|
3
|
+
* @author Nicholas C. Zakas
|
4
|
+
*/
|
5
|
+
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
|
12
|
+
module.exports = function(context) {
|
13
|
+
|
14
|
+
return {
|
15
|
+
"WithStatement": function(node) {
|
16
|
+
context.report(node, "Unexpected use of 'with' statement.");
|
17
|
+
}
|
18
|
+
};
|
19
|
+
|
20
|
+
};
|
21
|
+
|
22
|
+
module.exports.schema = [];
|