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/no-undef.js
CHANGED
@@ -1,92 +1,92 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag references to undeclared variables.
|
3
|
-
* @author Mark Macdonald
|
4
|
-
* @copyright 2015 Nicholas C. Zakas. All rights reserved.
|
5
|
-
* @copyright 2013 Mark Macdonald. All rights reserved.
|
6
|
-
*/
|
7
|
-
"use strict";
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Requirements
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
// none!
|
14
|
-
|
15
|
-
//------------------------------------------------------------------------------
|
16
|
-
// Helpers
|
17
|
-
//------------------------------------------------------------------------------
|
18
|
-
|
19
|
-
function isImplicitGlobal(variable) {
|
20
|
-
return variable.defs.every(function(def) {
|
21
|
-
return def.type === "ImplicitGlobalVariable";
|
22
|
-
});
|
23
|
-
}
|
24
|
-
|
25
|
-
/**
|
26
|
-
* Gets the declared variable, defined in `scope`, that `ref` refers to.
|
27
|
-
* @param {Scope} scope The scope in which to search.
|
28
|
-
* @param {Reference} ref The reference to find in the scope.
|
29
|
-
* @returns {Variable} The variable, or null if ref refers to an undeclared variable.
|
30
|
-
*/
|
31
|
-
function getDeclaredGlobalVariable(scope, ref) {
|
32
|
-
var declaredGlobal = null;
|
33
|
-
scope.variables.some(function(variable) {
|
34
|
-
if (variable.name === ref.identifier.name) {
|
35
|
-
// If it's an implicit global, it must have a `writeable` field (indicating it was declared)
|
36
|
-
if (!isImplicitGlobal(variable) || {}.hasOwnProperty.call(variable, "writeable")) {
|
37
|
-
declaredGlobal = variable;
|
38
|
-
return true;
|
39
|
-
}
|
40
|
-
}
|
41
|
-
return false;
|
42
|
-
});
|
43
|
-
return declaredGlobal;
|
44
|
-
}
|
45
|
-
|
46
|
-
/**
|
47
|
-
* Checks if the given node is the argument of a typeof operator.
|
48
|
-
* @param {ASTNode} node The AST node being checked.
|
49
|
-
* @returns {boolean} Whether or not the node is the argument of a typeof operator.
|
50
|
-
*/
|
51
|
-
function hasTypeOfOperator(node) {
|
52
|
-
var parent = node.parent;
|
53
|
-
return parent.type === "UnaryExpression" && parent.operator === "typeof";
|
54
|
-
}
|
55
|
-
|
56
|
-
//------------------------------------------------------------------------------
|
57
|
-
// Rule Definition
|
58
|
-
//------------------------------------------------------------------------------
|
59
|
-
|
60
|
-
module.exports = function(context) {
|
61
|
-
|
62
|
-
var NOT_DEFINED_MESSAGE = "\"{{name}}\" is not defined.",
|
63
|
-
READ_ONLY_MESSAGE = "\"{{name}}\" is read only.";
|
64
|
-
|
65
|
-
return {
|
66
|
-
|
67
|
-
"Program:exit": function(/*node*/) {
|
68
|
-
|
69
|
-
var globalScope = context.getScope();
|
70
|
-
|
71
|
-
globalScope.through.forEach(function(ref) {
|
72
|
-
var variable = getDeclaredGlobalVariable(globalScope, ref),
|
73
|
-
name = ref.identifier.name;
|
74
|
-
|
75
|
-
if (hasTypeOfOperator(ref.identifier)) {
|
76
|
-
return;
|
77
|
-
}
|
78
|
-
|
79
|
-
if (!variable) {
|
80
|
-
context.report(ref.identifier, NOT_DEFINED_MESSAGE, { name: name });
|
81
|
-
} else if (ref.isWrite() && variable.writeable === false) {
|
82
|
-
context.report(ref.identifier, READ_ONLY_MESSAGE, { name: name });
|
83
|
-
}
|
84
|
-
});
|
85
|
-
|
86
|
-
}
|
87
|
-
|
88
|
-
};
|
89
|
-
|
90
|
-
};
|
91
|
-
|
92
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag references to undeclared variables.
|
3
|
+
* @author Mark Macdonald
|
4
|
+
* @copyright 2015 Nicholas C. Zakas. All rights reserved.
|
5
|
+
* @copyright 2013 Mark Macdonald. All rights reserved.
|
6
|
+
*/
|
7
|
+
"use strict";
|
8
|
+
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
// Requirements
|
11
|
+
//------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
// none!
|
14
|
+
|
15
|
+
//------------------------------------------------------------------------------
|
16
|
+
// Helpers
|
17
|
+
//------------------------------------------------------------------------------
|
18
|
+
|
19
|
+
function isImplicitGlobal(variable) {
|
20
|
+
return variable.defs.every(function(def) {
|
21
|
+
return def.type === "ImplicitGlobalVariable";
|
22
|
+
});
|
23
|
+
}
|
24
|
+
|
25
|
+
/**
|
26
|
+
* Gets the declared variable, defined in `scope`, that `ref` refers to.
|
27
|
+
* @param {Scope} scope The scope in which to search.
|
28
|
+
* @param {Reference} ref The reference to find in the scope.
|
29
|
+
* @returns {Variable} The variable, or null if ref refers to an undeclared variable.
|
30
|
+
*/
|
31
|
+
function getDeclaredGlobalVariable(scope, ref) {
|
32
|
+
var declaredGlobal = null;
|
33
|
+
scope.variables.some(function(variable) {
|
34
|
+
if (variable.name === ref.identifier.name) {
|
35
|
+
// If it's an implicit global, it must have a `writeable` field (indicating it was declared)
|
36
|
+
if (!isImplicitGlobal(variable) || {}.hasOwnProperty.call(variable, "writeable")) {
|
37
|
+
declaredGlobal = variable;
|
38
|
+
return true;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
return false;
|
42
|
+
});
|
43
|
+
return declaredGlobal;
|
44
|
+
}
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Checks if the given node is the argument of a typeof operator.
|
48
|
+
* @param {ASTNode} node The AST node being checked.
|
49
|
+
* @returns {boolean} Whether or not the node is the argument of a typeof operator.
|
50
|
+
*/
|
51
|
+
function hasTypeOfOperator(node) {
|
52
|
+
var parent = node.parent;
|
53
|
+
return parent.type === "UnaryExpression" && parent.operator === "typeof";
|
54
|
+
}
|
55
|
+
|
56
|
+
//------------------------------------------------------------------------------
|
57
|
+
// Rule Definition
|
58
|
+
//------------------------------------------------------------------------------
|
59
|
+
|
60
|
+
module.exports = function(context) {
|
61
|
+
|
62
|
+
var NOT_DEFINED_MESSAGE = "\"{{name}}\" is not defined.",
|
63
|
+
READ_ONLY_MESSAGE = "\"{{name}}\" is read only.";
|
64
|
+
|
65
|
+
return {
|
66
|
+
|
67
|
+
"Program:exit": function(/*node*/) {
|
68
|
+
|
69
|
+
var globalScope = context.getScope();
|
70
|
+
|
71
|
+
globalScope.through.forEach(function(ref) {
|
72
|
+
var variable = getDeclaredGlobalVariable(globalScope, ref),
|
73
|
+
name = ref.identifier.name;
|
74
|
+
|
75
|
+
if (hasTypeOfOperator(ref.identifier)) {
|
76
|
+
return;
|
77
|
+
}
|
78
|
+
|
79
|
+
if (!variable) {
|
80
|
+
context.report(ref.identifier, NOT_DEFINED_MESSAGE, { name: name });
|
81
|
+
} else if (ref.isWrite() && variable.writeable === false) {
|
82
|
+
context.report(ref.identifier, READ_ONLY_MESSAGE, { name: name });
|
83
|
+
}
|
84
|
+
});
|
85
|
+
|
86
|
+
}
|
87
|
+
|
88
|
+
};
|
89
|
+
|
90
|
+
};
|
91
|
+
|
92
|
+
module.exports.schema = [];
|
@@ -1,27 +1,27 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag references to the undefined variable.
|
3
|
-
* @author Michael Ficarra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
//------------------------------------------------------------------------------
|
8
|
-
// Rule Definition
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
|
11
|
-
module.exports = function(context) {
|
12
|
-
|
13
|
-
return {
|
14
|
-
|
15
|
-
"Identifier": function(node) {
|
16
|
-
if (node.name === "undefined") {
|
17
|
-
var parent = context.getAncestors().pop();
|
18
|
-
if (!parent || parent.type !== "MemberExpression" || node !== parent.property || parent.computed) {
|
19
|
-
context.report(node, "Unexpected use of undefined.");
|
20
|
-
}
|
21
|
-
}
|
22
|
-
}
|
23
|
-
};
|
24
|
-
|
25
|
-
};
|
26
|
-
|
27
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag references to the undefined variable.
|
3
|
+
* @author Michael Ficarra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
//------------------------------------------------------------------------------
|
8
|
+
// Rule Definition
|
9
|
+
//------------------------------------------------------------------------------
|
10
|
+
|
11
|
+
module.exports = function(context) {
|
12
|
+
|
13
|
+
return {
|
14
|
+
|
15
|
+
"Identifier": function(node) {
|
16
|
+
if (node.name === "undefined") {
|
17
|
+
var parent = context.getAncestors().pop();
|
18
|
+
if (!parent || parent.type !== "MemberExpression" || node !== parent.property || parent.computed) {
|
19
|
+
context.report(node, "Unexpected use of undefined.");
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
};
|
24
|
+
|
25
|
+
};
|
26
|
+
|
27
|
+
module.exports.schema = [];
|
@@ -1,73 +1,73 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag trailing underscores in variable declarations.
|
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
|
-
//-------------------------------------------------------------------------
|
15
|
-
// Helpers
|
16
|
-
//-------------------------------------------------------------------------
|
17
|
-
|
18
|
-
function hasTrailingUnderscore(identifier) {
|
19
|
-
var len = identifier.length;
|
20
|
-
|
21
|
-
return identifier !== "_" && (identifier[0] === "_" || identifier[len - 1] === "_");
|
22
|
-
}
|
23
|
-
|
24
|
-
function isSpecialCaseIdentifierForMemberExpression(identifier) {
|
25
|
-
return identifier === "__proto__";
|
26
|
-
}
|
27
|
-
|
28
|
-
function isSpecialCaseIdentifierInVariableExpression(identifier) {
|
29
|
-
// Checks for the underscore library usage here
|
30
|
-
return identifier === "_";
|
31
|
-
}
|
32
|
-
|
33
|
-
function checkForTrailingUnderscoreInFunctionDeclaration(node) {
|
34
|
-
if (node.id) {
|
35
|
-
var identifier = node.id.name;
|
36
|
-
|
37
|
-
if (typeof identifier !== "undefined" && hasTrailingUnderscore(identifier)) {
|
38
|
-
context.report(node, "Unexpected dangling \"_\" in \"" + identifier + "\".");
|
39
|
-
}
|
40
|
-
}
|
41
|
-
}
|
42
|
-
|
43
|
-
function checkForTrailingUnderscoreInVariableExpression(node) {
|
44
|
-
var identifier = node.id.name;
|
45
|
-
|
46
|
-
if (typeof identifier !== "undefined" && hasTrailingUnderscore(identifier) &&
|
47
|
-
!isSpecialCaseIdentifierInVariableExpression(identifier)) {
|
48
|
-
context.report(node, "Unexpected dangling \"_\" in \"" + identifier + "\".");
|
49
|
-
}
|
50
|
-
}
|
51
|
-
|
52
|
-
function checkForTrailingUnderscoreInMemberExpression(node) {
|
53
|
-
var identifier = node.property.name;
|
54
|
-
|
55
|
-
if (typeof identifier !== "undefined" && hasTrailingUnderscore(identifier) &&
|
56
|
-
!isSpecialCaseIdentifierForMemberExpression(identifier)) {
|
57
|
-
context.report(node, "Unexpected dangling \"_\" in \"" + identifier + "\".");
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
//--------------------------------------------------------------------------
|
62
|
-
// Public API
|
63
|
-
//--------------------------------------------------------------------------
|
64
|
-
|
65
|
-
return {
|
66
|
-
"FunctionDeclaration": checkForTrailingUnderscoreInFunctionDeclaration,
|
67
|
-
"VariableDeclarator": checkForTrailingUnderscoreInVariableExpression,
|
68
|
-
"MemberExpression": checkForTrailingUnderscoreInMemberExpression
|
69
|
-
};
|
70
|
-
|
71
|
-
};
|
72
|
-
|
73
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag trailing underscores in variable declarations.
|
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
|
+
//-------------------------------------------------------------------------
|
15
|
+
// Helpers
|
16
|
+
//-------------------------------------------------------------------------
|
17
|
+
|
18
|
+
function hasTrailingUnderscore(identifier) {
|
19
|
+
var len = identifier.length;
|
20
|
+
|
21
|
+
return identifier !== "_" && (identifier[0] === "_" || identifier[len - 1] === "_");
|
22
|
+
}
|
23
|
+
|
24
|
+
function isSpecialCaseIdentifierForMemberExpression(identifier) {
|
25
|
+
return identifier === "__proto__";
|
26
|
+
}
|
27
|
+
|
28
|
+
function isSpecialCaseIdentifierInVariableExpression(identifier) {
|
29
|
+
// Checks for the underscore library usage here
|
30
|
+
return identifier === "_";
|
31
|
+
}
|
32
|
+
|
33
|
+
function checkForTrailingUnderscoreInFunctionDeclaration(node) {
|
34
|
+
if (node.id) {
|
35
|
+
var identifier = node.id.name;
|
36
|
+
|
37
|
+
if (typeof identifier !== "undefined" && hasTrailingUnderscore(identifier)) {
|
38
|
+
context.report(node, "Unexpected dangling \"_\" in \"" + identifier + "\".");
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
function checkForTrailingUnderscoreInVariableExpression(node) {
|
44
|
+
var identifier = node.id.name;
|
45
|
+
|
46
|
+
if (typeof identifier !== "undefined" && hasTrailingUnderscore(identifier) &&
|
47
|
+
!isSpecialCaseIdentifierInVariableExpression(identifier)) {
|
48
|
+
context.report(node, "Unexpected dangling \"_\" in \"" + identifier + "\".");
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
function checkForTrailingUnderscoreInMemberExpression(node) {
|
53
|
+
var identifier = node.property.name;
|
54
|
+
|
55
|
+
if (typeof identifier !== "undefined" && hasTrailingUnderscore(identifier) &&
|
56
|
+
!isSpecialCaseIdentifierForMemberExpression(identifier)) {
|
57
|
+
context.report(node, "Unexpected dangling \"_\" in \"" + identifier + "\".");
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
//--------------------------------------------------------------------------
|
62
|
+
// Public API
|
63
|
+
//--------------------------------------------------------------------------
|
64
|
+
|
65
|
+
return {
|
66
|
+
"FunctionDeclaration": checkForTrailingUnderscoreInFunctionDeclaration,
|
67
|
+
"VariableDeclarator": checkForTrailingUnderscoreInVariableExpression,
|
68
|
+
"MemberExpression": checkForTrailingUnderscoreInMemberExpression
|
69
|
+
};
|
70
|
+
|
71
|
+
};
|
72
|
+
|
73
|
+
module.exports.schema = [];
|
@@ -0,0 +1,58 @@
|
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to spot scenarios where a newline looks like it is ending a statement, but is not.
|
3
|
+
* @author Glen Mailer
|
4
|
+
* @copyright 2015 Glen Mailer
|
5
|
+
*/
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
//------------------------------------------------------------------------------
|
9
|
+
// Rule Definition
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
module.exports = function(context) {
|
12
|
+
|
13
|
+
var FUNCTION_MESSAGE = "Unexpected newline between function and ( of function call.";
|
14
|
+
var PROPERTY_MESSAGE = "Unexpected newline between object and [ of property access.";
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Check to see if the bracket prior to the node is continuing the previous
|
18
|
+
* line's expression
|
19
|
+
* @param {ASTNode} node The node to check.
|
20
|
+
* @param {string} msg The error message to use.
|
21
|
+
* @returns {void}
|
22
|
+
* @private
|
23
|
+
*/
|
24
|
+
function checkForBreakBefore(node, msg) {
|
25
|
+
var tokens = context.getTokensBefore(node, 2);
|
26
|
+
var paren = tokens[1];
|
27
|
+
var before = tokens[0];
|
28
|
+
if (paren.loc.start.line !== before.loc.end.line) {
|
29
|
+
context.report(node, paren.loc.start, msg, { char: paren.value });
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
//--------------------------------------------------------------------------
|
34
|
+
// Public API
|
35
|
+
//--------------------------------------------------------------------------
|
36
|
+
|
37
|
+
return {
|
38
|
+
|
39
|
+
"MemberExpression": function(node) {
|
40
|
+
if (!node.computed) {
|
41
|
+
return;
|
42
|
+
}
|
43
|
+
|
44
|
+
checkForBreakBefore(node.property, PROPERTY_MESSAGE);
|
45
|
+
},
|
46
|
+
|
47
|
+
"CallExpression": function(node) {
|
48
|
+
if (node.arguments.length === 0) {
|
49
|
+
return;
|
50
|
+
}
|
51
|
+
|
52
|
+
checkForBreakBefore(node.arguments[0], FUNCTION_MESSAGE);
|
53
|
+
}
|
54
|
+
};
|
55
|
+
|
56
|
+
};
|
57
|
+
|
58
|
+
module.exports.schema = [];
|
@@ -1,48 +1,48 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Rule to flag no-unneeded-ternary
|
3
|
-
* @author Gyandeep Singh
|
4
|
-
* @copyright 2015 Gyandeep Singh. All rights reserved.
|
5
|
-
* @copyright 2015 Michael Ficarra. All rights reserved.
|
6
|
-
*/
|
7
|
-
|
8
|
-
"use strict";
|
9
|
-
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
// Rule Definition
|
12
|
-
//------------------------------------------------------------------------------
|
13
|
-
|
14
|
-
module.exports = function(context) {
|
15
|
-
|
16
|
-
/**
|
17
|
-
* Reports an AST node as a rule violation.
|
18
|
-
* @param {ASTNode} mainNode The node to report.
|
19
|
-
* @param {object} culpritNode - The token which has a problem
|
20
|
-
* @returns {void}
|
21
|
-
* @private
|
22
|
-
*/
|
23
|
-
function report(mainNode, culpritNode) {
|
24
|
-
context.report(mainNode, culpritNode.loc.start, "Unnecessary use of boolean literals in conditional expression");
|
25
|
-
}
|
26
|
-
|
27
|
-
/**
|
28
|
-
* Test if the node is a boolean literal
|
29
|
-
* @param {ASTNode} node - The node to report.
|
30
|
-
* @returns {boolean} True if the its a boolean literal
|
31
|
-
* @private
|
32
|
-
*/
|
33
|
-
function isBooleanLiteral(node) {
|
34
|
-
return node.type === "Literal" && typeof node.value === "boolean";
|
35
|
-
}
|
36
|
-
|
37
|
-
return {
|
38
|
-
|
39
|
-
"ConditionalExpression": function(node) {
|
40
|
-
|
41
|
-
if (isBooleanLiteral(node.alternate) && isBooleanLiteral(node.consequent)) {
|
42
|
-
report(node, node.consequent);
|
43
|
-
}
|
44
|
-
}
|
45
|
-
};
|
46
|
-
};
|
47
|
-
|
48
|
-
module.exports.schema = [];
|
1
|
+
/**
|
2
|
+
* @fileoverview Rule to flag no-unneeded-ternary
|
3
|
+
* @author Gyandeep Singh
|
4
|
+
* @copyright 2015 Gyandeep Singh. All rights reserved.
|
5
|
+
* @copyright 2015 Michael Ficarra. All rights reserved.
|
6
|
+
*/
|
7
|
+
|
8
|
+
"use strict";
|
9
|
+
|
10
|
+
//------------------------------------------------------------------------------
|
11
|
+
// Rule Definition
|
12
|
+
//------------------------------------------------------------------------------
|
13
|
+
|
14
|
+
module.exports = function(context) {
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Reports an AST node as a rule violation.
|
18
|
+
* @param {ASTNode} mainNode The node to report.
|
19
|
+
* @param {object} culpritNode - The token which has a problem
|
20
|
+
* @returns {void}
|
21
|
+
* @private
|
22
|
+
*/
|
23
|
+
function report(mainNode, culpritNode) {
|
24
|
+
context.report(mainNode, culpritNode.loc.start, "Unnecessary use of boolean literals in conditional expression");
|
25
|
+
}
|
26
|
+
|
27
|
+
/**
|
28
|
+
* Test if the node is a boolean literal
|
29
|
+
* @param {ASTNode} node - The node to report.
|
30
|
+
* @returns {boolean} True if the its a boolean literal
|
31
|
+
* @private
|
32
|
+
*/
|
33
|
+
function isBooleanLiteral(node) {
|
34
|
+
return node.type === "Literal" && typeof node.value === "boolean";
|
35
|
+
}
|
36
|
+
|
37
|
+
return {
|
38
|
+
|
39
|
+
"ConditionalExpression": function(node) {
|
40
|
+
|
41
|
+
if (isBooleanLiteral(node.alternate) && isBooleanLiteral(node.consequent)) {
|
42
|
+
report(node, node.consequent);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
};
|
46
|
+
};
|
47
|
+
|
48
|
+
module.exports.schema = [];
|