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/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;
|