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
package/lib/cli.js CHANGED
@@ -1,196 +1,196 @@
1
- /**
2
- * @fileoverview Main CLI object.
3
- * @author Nicholas C. Zakas
4
- */
5
-
6
- "use strict";
7
-
8
- /*
9
- * The CLI object should *not* call process.exit() directly. It should only return
10
- * exit codes. This allows other programs to use the CLI object and still control
11
- * when the program exits.
12
- */
13
-
14
- //------------------------------------------------------------------------------
15
- // Requirements
16
- //------------------------------------------------------------------------------
17
-
18
- var fs = require("fs"),
19
- path = require("path"),
20
-
21
- debug = require("debug"),
22
-
23
- options = require("./options"),
24
- CLIEngine = require("./cli-engine"),
25
- mkdirp = require("mkdirp");
26
-
27
- //------------------------------------------------------------------------------
28
- // Helpers
29
- //------------------------------------------------------------------------------
30
-
31
- debug = debug("eslint:cli");
32
-
33
- /**
34
- * Translates the CLI options into the options expected by the CLIEngine.
35
- * @param {Object} cliOptions The CLI options to translate.
36
- * @returns {CLIEngineOptions} The options object for the CLIEngine.
37
- * @private
38
- */
39
- function translateOptions(cliOptions) {
40
- return {
41
- envs: cliOptions.env,
42
- extensions: cliOptions.ext,
43
- rules: cliOptions.rule,
44
- plugins: cliOptions.plugin,
45
- globals: cliOptions.global,
46
- ignore: cliOptions.ignore,
47
- ignorePath: cliOptions.ignorePath,
48
- ignorePattern: cliOptions.ignorePattern,
49
- configFile: cliOptions.config,
50
- rulePaths: cliOptions.rulesdir,
51
- reset: cliOptions.reset,
52
- useEslintrc: cliOptions.eslintrc
53
- };
54
- }
55
-
56
- /**
57
- * Outputs the results of the linting.
58
- * @param {CLIEngine} engine The CLIEngine to use.
59
- * @param {LintResult[]} results The results to print.
60
- * @param {string} format The name of the formatter to use or the path to the formatter.
61
- * @param {string} outputFile The path for the output file.
62
- * @returns {boolean} True if the printing succeeds, false if not.
63
- * @private
64
- */
65
- function printResults(engine, results, format, outputFile) {
66
- var formatter,
67
- output,
68
- filePath;
69
-
70
- formatter = engine.getFormatter(format);
71
- if (!formatter) {
72
- console.error("Could not find formatter '%s'.", format);
73
- return false;
74
- }
75
-
76
- output = formatter(results);
77
-
78
- if (output) {
79
- if (outputFile) {
80
- filePath = path.resolve(process.cwd(), outputFile);
81
-
82
- if (fs.existsSync(filePath) && fs.statSync(filePath).isDirectory()) {
83
- console.error("Cannot write to output file path, it is a directory: %s", outputFile);
84
- return false;
85
- }
86
-
87
- try {
88
- mkdirp.sync(path.dirname(filePath));
89
- fs.writeFileSync(filePath, output);
90
- } catch (ex) {
91
- console.error("There was a problem writing the output file:\n%s", ex);
92
- return false;
93
- }
94
- } else {
95
- console.log(output);
96
- }
97
- }
98
-
99
- return true;
100
-
101
- }
102
-
103
- /**
104
- * Checks if the given message is an error message.
105
- * @param {object} message The message to check.
106
- * @returns {boolean} Whether or not the message is an error message.
107
- */
108
- function isErrorMessage(message) {
109
- return message.severity === 2;
110
- }
111
-
112
- /**
113
- * Returns results that only contains errors.
114
- * @param {LintResult[]} results The results to filter.
115
- * @returns {LintResult[]} The filtered results.
116
- */
117
- function getErrorResults(results) {
118
- var filtered = [];
119
-
120
- results.forEach(function (result) {
121
- var filteredMessages = result.messages.filter(isErrorMessage);
122
-
123
- if (filteredMessages.length > 0) {
124
- filtered.push({
125
- filePath: result.filePath,
126
- messages: filteredMessages
127
- });
128
- }
129
- });
130
-
131
- return filtered;
132
- }
133
-
134
- //------------------------------------------------------------------------------
135
- // Public Interface
136
- //------------------------------------------------------------------------------
137
-
138
- /**
139
- * Encapsulates all CLI behavior for eslint. Makes it easier to test as well as
140
- * for other Node.js programs to effectively run the CLI.
141
- */
142
- var cli = {
143
-
144
- /**
145
- * Executes the CLI based on an array of arguments that is passed in.
146
- * @param {string|Array|Object} args The arguments to process.
147
- * @param {string} [text] The text to lint (used for TTY).
148
- * @returns {int} The exit code for the operation.
149
- */
150
- execute: function(args, text) {
151
-
152
- var currentOptions,
153
- files,
154
- result,
155
- engine;
156
-
157
- try {
158
- currentOptions = options.parse(args);
159
- } catch (error) {
160
- console.error(error.message);
161
- return 1;
162
- }
163
-
164
- files = currentOptions._;
165
-
166
- if (currentOptions.version) { // version from package.json
167
-
168
- console.log("v" + require("../package.json").version);
169
-
170
- } else if (currentOptions.help || (!files.length && !text)) {
171
-
172
- console.log(options.generateHelp());
173
-
174
- } else {
175
-
176
- engine = new CLIEngine(translateOptions(currentOptions));
177
- debug("Running on " + (text ? "text" : "files"));
178
-
179
- result = text ? engine.executeOnText(text, currentOptions.stdinFilename) : engine.executeOnFiles(files);
180
- if (currentOptions.quiet) {
181
- result.results = getErrorResults(result.results);
182
- }
183
-
184
- if (printResults(engine, result.results, currentOptions.format, currentOptions.outputFile)) {
185
- return result.errorCount ? 1 : 0;
186
- } else {
187
- return 1;
188
- }
189
-
190
- }
191
-
192
- return 0;
193
- }
194
- };
195
-
196
- module.exports = cli;
1
+ /**
2
+ * @fileoverview Main CLI object.
3
+ * @author Nicholas C. Zakas
4
+ */
5
+
6
+ "use strict";
7
+
8
+ /*
9
+ * The CLI object should *not* call process.exit() directly. It should only return
10
+ * exit codes. This allows other programs to use the CLI object and still control
11
+ * when the program exits.
12
+ */
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Requirements
16
+ //------------------------------------------------------------------------------
17
+
18
+ var fs = require("fs"),
19
+ path = require("path"),
20
+
21
+ debug = require("debug"),
22
+
23
+ options = require("./options"),
24
+ CLIEngine = require("./cli-engine"),
25
+ mkdirp = require("mkdirp");
26
+
27
+ //------------------------------------------------------------------------------
28
+ // Helpers
29
+ //------------------------------------------------------------------------------
30
+
31
+ debug = debug("eslint:cli");
32
+
33
+ /**
34
+ * Translates the CLI options into the options expected by the CLIEngine.
35
+ * @param {Object} cliOptions The CLI options to translate.
36
+ * @returns {CLIEngineOptions} The options object for the CLIEngine.
37
+ * @private
38
+ */
39
+ function translateOptions(cliOptions) {
40
+ return {
41
+ envs: cliOptions.env,
42
+ extensions: cliOptions.ext,
43
+ rules: cliOptions.rule,
44
+ plugins: cliOptions.plugin,
45
+ globals: cliOptions.global,
46
+ ignore: cliOptions.ignore,
47
+ ignorePath: cliOptions.ignorePath,
48
+ ignorePattern: cliOptions.ignorePattern,
49
+ configFile: cliOptions.config,
50
+ rulePaths: cliOptions.rulesdir,
51
+ reset: cliOptions.reset,
52
+ useEslintrc: cliOptions.eslintrc
53
+ };
54
+ }
55
+
56
+ /**
57
+ * Outputs the results of the linting.
58
+ * @param {CLIEngine} engine The CLIEngine to use.
59
+ * @param {LintResult[]} results The results to print.
60
+ * @param {string} format The name of the formatter to use or the path to the formatter.
61
+ * @param {string} outputFile The path for the output file.
62
+ * @returns {boolean} True if the printing succeeds, false if not.
63
+ * @private
64
+ */
65
+ function printResults(engine, results, format, outputFile) {
66
+ var formatter,
67
+ output,
68
+ filePath;
69
+
70
+ formatter = engine.getFormatter(format);
71
+ if (!formatter) {
72
+ console.error("Could not find formatter '%s'.", format);
73
+ return false;
74
+ }
75
+
76
+ output = formatter(results);
77
+
78
+ if (output) {
79
+ if (outputFile) {
80
+ filePath = path.resolve(process.cwd(), outputFile);
81
+
82
+ if (fs.existsSync(filePath) && fs.statSync(filePath).isDirectory()) {
83
+ console.error("Cannot write to output file path, it is a directory: %s", outputFile);
84
+ return false;
85
+ }
86
+
87
+ try {
88
+ mkdirp.sync(path.dirname(filePath));
89
+ fs.writeFileSync(filePath, output);
90
+ } catch (ex) {
91
+ console.error("There was a problem writing the output file:\n%s", ex);
92
+ return false;
93
+ }
94
+ } else {
95
+ console.log(output);
96
+ }
97
+ }
98
+
99
+ return true;
100
+
101
+ }
102
+
103
+ /**
104
+ * Checks if the given message is an error message.
105
+ * @param {object} message The message to check.
106
+ * @returns {boolean} Whether or not the message is an error message.
107
+ */
108
+ function isErrorMessage(message) {
109
+ return message.severity === 2;
110
+ }
111
+
112
+ /**
113
+ * Returns results that only contains errors.
114
+ * @param {LintResult[]} results The results to filter.
115
+ * @returns {LintResult[]} The filtered results.
116
+ */
117
+ function getErrorResults(results) {
118
+ var filtered = [];
119
+
120
+ results.forEach(function (result) {
121
+ var filteredMessages = result.messages.filter(isErrorMessage);
122
+
123
+ if (filteredMessages.length > 0) {
124
+ filtered.push({
125
+ filePath: result.filePath,
126
+ messages: filteredMessages
127
+ });
128
+ }
129
+ });
130
+
131
+ return filtered;
132
+ }
133
+
134
+ //------------------------------------------------------------------------------
135
+ // Public Interface
136
+ //------------------------------------------------------------------------------
137
+
138
+ /**
139
+ * Encapsulates all CLI behavior for eslint. Makes it easier to test as well as
140
+ * for other Node.js programs to effectively run the CLI.
141
+ */
142
+ var cli = {
143
+
144
+ /**
145
+ * Executes the CLI based on an array of arguments that is passed in.
146
+ * @param {string|Array|Object} args The arguments to process.
147
+ * @param {string} [text] The text to lint (used for TTY).
148
+ * @returns {int} The exit code for the operation.
149
+ */
150
+ execute: function(args, text) {
151
+
152
+ var currentOptions,
153
+ files,
154
+ result,
155
+ engine;
156
+
157
+ try {
158
+ currentOptions = options.parse(args);
159
+ } catch (error) {
160
+ console.error(error.message);
161
+ return 1;
162
+ }
163
+
164
+ files = currentOptions._;
165
+
166
+ if (currentOptions.version) { // version from package.json
167
+
168
+ console.log("v" + require("../package.json").version);
169
+
170
+ } else if (currentOptions.help || (!files.length && !text)) {
171
+
172
+ console.log(options.generateHelp());
173
+
174
+ } else {
175
+
176
+ engine = new CLIEngine(translateOptions(currentOptions));
177
+ debug("Running on " + (text ? "text" : "files"));
178
+
179
+ result = text ? engine.executeOnText(text, currentOptions.stdinFilename) : engine.executeOnFiles(files);
180
+ if (currentOptions.quiet) {
181
+ result.results = getErrorResults(result.results);
182
+ }
183
+
184
+ if (printResults(engine, result.results, currentOptions.format, currentOptions.outputFile)) {
185
+ return result.errorCount ? 1 : 0;
186
+ } else {
187
+ return 1;
188
+ }
189
+
190
+ }
191
+
192
+ return 0;
193
+ }
194
+ };
195
+
196
+ module.exports = cli;