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.
Files changed (201) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +111 -95
  3. package/bin/eslint.js +41 -41
  4. package/conf/environments.js +87 -81
  5. package/conf/eslint.json +186 -179
  6. package/lib/api.js +13 -12
  7. package/lib/cli-engine.js +441 -451
  8. package/lib/cli.js +196 -196
  9. package/lib/config-initializer.js +145 -145
  10. package/lib/config-validator.js +110 -110
  11. package/lib/config.js +428 -416
  12. package/lib/eslint.js +1072 -1073
  13. package/lib/file-finder.js +167 -167
  14. package/lib/formatters/checkstyle.js +68 -68
  15. package/lib/formatters/compact.js +53 -53
  16. package/lib/formatters/jslint-xml.js +40 -40
  17. package/lib/formatters/junit.js +63 -63
  18. package/lib/formatters/stylish.js +90 -90
  19. package/lib/formatters/tap.js +86 -86
  20. package/lib/ignored-paths.js +137 -137
  21. package/lib/load-rules.js +39 -39
  22. package/lib/options.js +132 -126
  23. package/lib/rule-context.js +107 -107
  24. package/lib/rules/accessor-pairs.js +65 -65
  25. package/lib/rules/array-bracket-spacing.js +180 -0
  26. package/lib/rules/block-scoped-var.js +339 -320
  27. package/lib/rules/brace-style.js +228 -228
  28. package/lib/rules/camelcase.js +111 -111
  29. package/lib/rules/comma-dangle.js +67 -64
  30. package/lib/rules/comma-spacing.js +191 -191
  31. package/lib/rules/comma-style.js +195 -195
  32. package/lib/rules/complexity.js +94 -94
  33. package/lib/rules/computed-property-spacing.js +144 -0
  34. package/lib/rules/consistent-return.js +75 -75
  35. package/lib/rules/consistent-this.js +119 -119
  36. package/lib/rules/constructor-super.js +108 -0
  37. package/lib/rules/curly.js +109 -109
  38. package/lib/rules/default-case.js +66 -66
  39. package/lib/rules/dot-location.js +63 -63
  40. package/lib/rules/dot-notation.js +119 -119
  41. package/lib/rules/eol-last.js +38 -38
  42. package/lib/rules/eqeqeq.js +96 -96
  43. package/lib/rules/func-names.js +45 -45
  44. package/lib/rules/func-style.js +49 -49
  45. package/lib/rules/generator-star-spacing.js +104 -87
  46. package/lib/rules/generator-star.js +76 -76
  47. package/lib/rules/global-strict.js +49 -49
  48. package/lib/rules/guard-for-in.js +32 -32
  49. package/lib/rules/handle-callback-err.js +81 -124
  50. package/lib/rules/indent.js +486 -486
  51. package/lib/rules/key-spacing.js +325 -325
  52. package/lib/rules/linebreak-style.js +44 -44
  53. package/lib/rules/lines-around-comment.js +228 -160
  54. package/lib/rules/max-depth.js +89 -89
  55. package/lib/rules/max-len.js +76 -76
  56. package/lib/rules/max-nested-callbacks.js +73 -73
  57. package/lib/rules/max-params.js +45 -45
  58. package/lib/rules/max-statements.js +61 -61
  59. package/lib/rules/new-cap.js +224 -224
  60. package/lib/rules/new-parens.js +29 -29
  61. package/lib/rules/newline-after-var.js +127 -127
  62. package/lib/rules/no-alert.js +153 -153
  63. package/lib/rules/no-array-constructor.js +31 -31
  64. package/lib/rules/no-bitwise.js +57 -57
  65. package/lib/rules/no-caller.js +29 -29
  66. package/lib/rules/no-catch-shadow.js +52 -52
  67. package/lib/rules/no-comma-dangle.js +45 -45
  68. package/lib/rules/no-cond-assign.js +123 -123
  69. package/lib/rules/no-console.js +27 -27
  70. package/lib/rules/no-constant-condition.js +73 -73
  71. package/lib/rules/no-continue.js +23 -23
  72. package/lib/rules/no-control-regex.js +58 -58
  73. package/lib/rules/no-debugger.js +22 -22
  74. package/lib/rules/no-delete-var.js +25 -25
  75. package/lib/rules/no-div-regex.js +27 -27
  76. package/lib/rules/no-dupe-args.js +89 -85
  77. package/lib/rules/no-dupe-keys.js +43 -43
  78. package/lib/rules/no-duplicate-case.js +67 -67
  79. package/lib/rules/no-else-return.js +125 -125
  80. package/lib/rules/no-empty-character-class.js +43 -43
  81. package/lib/rules/no-empty-class.js +45 -45
  82. package/lib/rules/no-empty-label.js +27 -27
  83. package/lib/rules/no-empty.js +49 -49
  84. package/lib/rules/no-eq-null.js +29 -29
  85. package/lib/rules/no-eval.js +26 -26
  86. package/lib/rules/no-ex-assign.js +42 -42
  87. package/lib/rules/no-extend-native.js +103 -103
  88. package/lib/rules/no-extra-bind.js +81 -81
  89. package/lib/rules/no-extra-boolean-cast.js +71 -71
  90. package/lib/rules/no-extra-parens.js +368 -355
  91. package/lib/rules/no-extra-semi.js +70 -23
  92. package/lib/rules/no-extra-strict.js +86 -86
  93. package/lib/rules/no-fallthrough.js +97 -97
  94. package/lib/rules/no-floating-decimal.js +30 -30
  95. package/lib/rules/no-func-assign.js +83 -83
  96. package/lib/rules/no-implied-eval.js +76 -76
  97. package/lib/rules/no-inline-comments.js +49 -49
  98. package/lib/rules/no-inner-declarations.js +78 -78
  99. package/lib/rules/no-invalid-regexp.js +53 -53
  100. package/lib/rules/no-irregular-whitespace.js +135 -135
  101. package/lib/rules/no-iterator.js +28 -28
  102. package/lib/rules/no-label-var.js +64 -64
  103. package/lib/rules/no-labels.js +44 -44
  104. package/lib/rules/no-lone-blocks.js +106 -27
  105. package/lib/rules/no-lonely-if.js +30 -30
  106. package/lib/rules/no-loop-func.js +58 -58
  107. package/lib/rules/no-mixed-requires.js +165 -165
  108. package/lib/rules/no-mixed-spaces-and-tabs.js +74 -74
  109. package/lib/rules/no-multi-spaces.js +119 -119
  110. package/lib/rules/no-multi-str.js +43 -43
  111. package/lib/rules/no-multiple-empty-lines.js +98 -98
  112. package/lib/rules/no-native-reassign.js +62 -62
  113. package/lib/rules/no-negated-in-lhs.js +25 -25
  114. package/lib/rules/no-nested-ternary.js +24 -24
  115. package/lib/rules/no-new-func.js +25 -25
  116. package/lib/rules/no-new-object.js +25 -25
  117. package/lib/rules/no-new-require.js +25 -25
  118. package/lib/rules/no-new-wrappers.js +26 -26
  119. package/lib/rules/no-new.js +27 -27
  120. package/lib/rules/no-obj-calls.js +28 -28
  121. package/lib/rules/no-octal-escape.js +39 -39
  122. package/lib/rules/no-octal.js +25 -25
  123. package/lib/rules/no-param-reassign.js +87 -87
  124. package/lib/rules/no-path-concat.js +39 -39
  125. package/lib/rules/no-plusplus.js +24 -24
  126. package/lib/rules/no-process-env.js +30 -30
  127. package/lib/rules/no-process-exit.js +33 -33
  128. package/lib/rules/no-proto.js +28 -28
  129. package/lib/rules/no-redeclare.js +68 -68
  130. package/lib/rules/no-regex-spaces.js +35 -35
  131. package/lib/rules/no-reserved-keys.js +56 -56
  132. package/lib/rules/no-restricted-modules.js +85 -85
  133. package/lib/rules/no-return-assign.js +53 -24
  134. package/lib/rules/no-script-url.js +34 -34
  135. package/lib/rules/no-self-compare.js +29 -29
  136. package/lib/rules/no-sequences.js +94 -94
  137. package/lib/rules/no-shadow-restricted-names.js +51 -51
  138. package/lib/rules/no-shadow.js +181 -136
  139. package/lib/rules/no-space-before-semi.js +98 -98
  140. package/lib/rules/no-spaced-func.js +37 -37
  141. package/lib/rules/no-sparse-arrays.js +33 -33
  142. package/lib/rules/no-sync.js +30 -30
  143. package/lib/rules/no-ternary.js +24 -24
  144. package/lib/rules/no-this-before-super.js +144 -0
  145. package/lib/rules/no-throw-literal.js +33 -33
  146. package/lib/rules/no-trailing-spaces.js +74 -63
  147. package/lib/rules/no-undef-init.js +28 -28
  148. package/lib/rules/no-undef.js +92 -92
  149. package/lib/rules/no-undefined.js +27 -27
  150. package/lib/rules/no-underscore-dangle.js +73 -73
  151. package/lib/rules/no-unexpected-multiline.js +58 -0
  152. package/lib/rules/no-unneeded-ternary.js +48 -48
  153. package/lib/rules/no-unreachable.js +98 -98
  154. package/lib/rules/no-unused-expressions.js +76 -76
  155. package/lib/rules/no-unused-vars.js +252 -250
  156. package/lib/rules/no-use-before-define.js +105 -105
  157. package/lib/rules/no-var.js +26 -26
  158. package/lib/rules/no-void.js +28 -28
  159. package/lib/rules/no-warning-comments.js +102 -102
  160. package/lib/rules/no-with.js +22 -22
  161. package/lib/rules/no-wrap-func.js +65 -65
  162. package/lib/rules/object-curly-spacing.js +231 -206
  163. package/lib/rules/object-shorthand.js +74 -73
  164. package/lib/rules/one-var.js +311 -304
  165. package/lib/rules/operator-assignment.js +118 -118
  166. package/lib/rules/operator-linebreak.js +114 -114
  167. package/lib/rules/padded-blocks.js +98 -98
  168. package/lib/rules/prefer-const.js +91 -0
  169. package/lib/rules/quote-props.js +72 -72
  170. package/lib/rules/quotes.js +92 -92
  171. package/lib/rules/radix.js +41 -41
  172. package/lib/rules/semi-spacing.js +167 -167
  173. package/lib/rules/semi.js +136 -136
  174. package/lib/rules/sort-vars.js +49 -49
  175. package/lib/rules/space-after-function-name.js +49 -49
  176. package/lib/rules/space-after-keywords.js +82 -82
  177. package/lib/rules/space-before-blocks.js +91 -91
  178. package/lib/rules/space-before-function-paren.js +139 -139
  179. package/lib/rules/space-before-function-parentheses.js +139 -139
  180. package/lib/rules/space-in-brackets.js +305 -305
  181. package/lib/rules/space-in-parens.js +281 -281
  182. package/lib/rules/space-infix-ops.js +106 -106
  183. package/lib/rules/space-return-throw-case.js +38 -38
  184. package/lib/rules/space-unary-ops.js +124 -133
  185. package/lib/rules/spaced-comment.js +143 -0
  186. package/lib/rules/spaced-line-comment.js +89 -89
  187. package/lib/rules/strict.js +242 -242
  188. package/lib/rules/use-isnan.js +26 -26
  189. package/lib/rules/valid-jsdoc.js +215 -215
  190. package/lib/rules/valid-typeof.js +42 -42
  191. package/lib/rules/vars-on-top.js +115 -115
  192. package/lib/rules/wrap-iife.js +48 -48
  193. package/lib/rules/wrap-regex.js +38 -38
  194. package/lib/rules/yoda.js +242 -225
  195. package/lib/rules.js +88 -88
  196. package/lib/timing.js +109 -109
  197. package/lib/token-store.js +201 -201
  198. package/lib/util/traverse.js +105 -105
  199. package/lib/util.js +125 -85
  200. package/package.json +6 -6
  201. package/CHANGELOG.md +0 -1638
@@ -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 = [];