Skip to content

Commit 15a66ab

Browse files
committedApr 5, 2017
Extract config finder
1 parent 23cff71 commit 15a66ab

5 files changed

+109
-80
lines changed
 

‎lib/config_finder.js

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
"use strict";
2+
3+
const CONFIG_FILES = require("eslint/lib/config/config-file").CONFIG_FILES
4+
, FileFinder = require("eslint/lib/file-finder")
5+
, path = require("path");
6+
7+
module.exports = function(configFile, analysisFiles) {
8+
if (configFile) {
9+
return [configFile];
10+
}
11+
12+
const dirs = analysisFiles.map(function(fileName){
13+
return path.dirname(fileName);
14+
});
15+
const directories = Array.from(new Set(dirs));
16+
17+
const localConfigFinder = new FileFinder(CONFIG_FILES, process.cwd());
18+
19+
const configs = new Set();
20+
for (const dir of directories) {
21+
const configFiles = localConfigFinder.findAllInDirectoryAndParents(dir);
22+
for (const file of configFiles) {
23+
configs.add(file);
24+
}
25+
}
26+
27+
return Array.from(configs);
28+
};

‎lib/config_upgrader.js

+4-30
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
"use strict";
22

3-
const Config = require("eslint/lib/config")
3+
const
4+
Config = require("eslint/lib/config")
45
, merge = require("eslint/lib/config/config-ops").merge
56
, path = require("path")
67
, stringify = require("json-stable-stringify")
7-
, CONFIG_FILES = require("eslint/lib/config/config-file").CONFIG_FILES
8-
, FileFinder = require("eslint/lib/file-finder");
8+
;
99

1010
var SEVERITIES = {
1111
0: "off",
@@ -226,34 +226,8 @@ class ConfigUpgrader {
226226
return [].concat(this._report);
227227
}
228228

229-
static configs(analysisFiles) {
230-
const dirs = analysisFiles.map(function(fileName){
231-
return path.dirname(fileName);
232-
});
233-
const directories = Array.from(new Set(dirs));
234-
235-
const localConfigFinder = new FileFinder(CONFIG_FILES, process.cwd());
236-
237-
const configs = new Set();
238-
for (const dir of directories) {
239-
const configFiles = localConfigFinder.findAllInDirectoryAndParents(dir);
240-
for (const file of configFiles) {
241-
configs.add(file);
242-
}
243-
}
244-
245-
return Array.from(configs);
246-
}
247-
248-
static upgradeInstructions(configFile, analysisFiles, root) {
249-
let configs;
250-
if (configFile) {
251-
configs = [configFile];
252-
}
253-
else {
254-
configs = this.configs(analysisFiles);
255-
}
256229

230+
static upgradeInstructions(configs, root) {
257231
const reports = configs.map(function(configFile) {
258232
let report = [];
259233

‎lib/eslint.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const checks = require("./checks");
1111
const validateConfig = require("./validate_config");
1212
const computeFingerprint = require("./compute_fingerprint");
1313
const ConfigUpgrader = require("./config_upgrader");
14+
const findConfigs = require("./config_finder");
1415

1516
const CLIEngine = eslint.CLIEngine;
1617
const options = { extensions: [".js"], ignore: true, reset: false, useEslintrc: true };
@@ -230,7 +231,14 @@ function run(console, runOptions) {
230231
if (validateConfig(options.configFile)) {
231232
console.error("ESLint is running with the " + cli.getConfigForFile(null).parser + " parser.");
232233

233-
for (const line of ConfigUpgrader.upgradeInstructions(options.configFile, analysisFiles, process.cwd())) {
234+
235+
let configs = findConfigs(options.configFile, analysisFiles);
236+
237+
let report = [
238+
ConfigUpgrader.upgradeInstructions(configs, process.cwd())
239+
].reduce(function(a, b) { return a.concat([""]).concat(b); });
240+
241+
for (const line of report) {
234242
console.error(line);
235243
}
236244

‎test/config_finder_test.js

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
const findConfigs = require("../lib/config_finder")
2+
, expect = require("chai").expect
3+
, fs = require("fs")
4+
, path = require("path")
5+
, temp = require('temp');
6+
7+
describe("findConfigs", function() {
8+
it("finds configs", function(done) {
9+
temp.mkdir("code ", function(err, directory) {
10+
if (err) { throw err; }
11+
12+
process.chdir(directory);
13+
14+
const configPath = path.join(directory, ".eslintrc");
15+
fs.writeFile(configPath, "{}", function(err) {
16+
if (err) { throw err; }
17+
18+
19+
let configs = findConfigs(null, [directory + '/file.js']);
20+
expect(configs).to.deep.eq([directory + '/.eslintrc']);
21+
done();
22+
});
23+
});
24+
});
25+
26+
it("ignores irrelevant configs", function(done) {
27+
temp.mkdir("code ", function(err, directory) {
28+
if (err) { throw err; }
29+
30+
process.chdir(directory);
31+
32+
const configPath = path.join(directory, ".eslintrc.json");
33+
fs.writeFile(configPath, "{}", function(err) {
34+
if (err) { throw err; }
35+
36+
fs.mkdir(path.join(directory, "lib"), function(err) {
37+
if (err) { throw err; }
38+
39+
fs.writeFile(path.join(directory, "lib", ".eslintrc"), "{}", function(err) {
40+
if (err) { throw err; }
41+
42+
let configs = findConfigs(null, [directory + '/file.js']);
43+
expect(configs).to.deep.eq([directory + "/.eslintrc.json"]);
44+
done();
45+
});
46+
});
47+
});
48+
});
49+
});
50+
51+
it("uses specific configs", function(done) {
52+
temp.mkdir("code", function(err, directory) {
53+
if (err) { throw err; }
54+
55+
process.chdir(directory);
56+
57+
const configPath = path.join(directory, "codeclimate-eslint");
58+
fs.writeFile(configPath, "{}", function(err) {
59+
if (err) { throw err; }
60+
61+
let configs = findConfigs("codeclimate-eslint", [directory + '/file.js']);
62+
expect(configs).to.deep.eq(["codeclimate-eslint"]);
63+
done();
64+
});
65+
});
66+
});
67+
});

‎test/config_upgrater_test.js

+1-49
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ describe("ConfigUpgrader", function() {
1919

2020

2121
let report = ConfigUpgrader
22-
.upgradeInstructions(null, [directory + '/file.js'], directory);
22+
.upgradeInstructions([directory + '/.eslintrc'], directory);
2323
expect(report).to.deep.eq([
2424
".eslintrc appears to be incompatible with ESLint 3.",
2525
"To upgrade it do the following:\n",
@@ -29,54 +29,6 @@ describe("ConfigUpgrader", function() {
2929
});
3030
});
3131
});
32-
33-
it("ignores irrelevant configs", function(done) {
34-
temp.mkdir("code ", function(err, directory) {
35-
if (err) { throw err; }
36-
37-
process.chdir(directory);
38-
39-
const configPath = path.join(directory, ".eslintrc.json");
40-
fs.writeFile(configPath, "{}", function(err) {
41-
if (err) { throw err; }
42-
43-
fs.mkdir(path.join(directory, "lib"), function(err) {
44-
if (err) { throw err; }
45-
46-
fs.writeFile(path.join(directory, "lib", ".eslintrc"), "{}", function(err) {
47-
if (err) { throw err; }
48-
49-
let report = ConfigUpgrader
50-
.upgradeInstructions(null, [directory + '/file.js'], directory);
51-
expect(report).to.deep.eq([]);
52-
done();
53-
});
54-
});
55-
});
56-
});
57-
});
58-
59-
it("uses specific configs", function(done) {
60-
temp.mkdir("code", function(err, directory) {
61-
if (err) { throw err; }
62-
63-
process.chdir(directory);
64-
65-
const configPath = path.join(directory, "codeclimate-eslint");
66-
fs.writeFile(configPath, "{}", function(err) {
67-
if (err) { throw err; }
68-
69-
let report = ConfigUpgrader
70-
.upgradeInstructions("codeclimate-eslint", [directory + '/file.js'], directory);
71-
expect(report).to.deep.eq([
72-
"codeclimate-eslint appears to be incompatible with ESLint 3.",
73-
"To upgrade it do the following:\n",
74-
"* Add .yml or .json to the config file name. Extension-less config file names are deprecated."
75-
]);
76-
done();
77-
});
78-
});
79-
});
8032
});
8133

8234

0 commit comments

Comments
 (0)
Please sign in to comment.