From ccc533ea74fd90f616778ec2d78cc89ca343d04a Mon Sep 17 00:00:00 2001 From: Gordon Diggs Date: Tue, 28 Feb 2017 12:40:16 -0500 Subject: [PATCH 1/2] Revert "Fix error when there are no config files" This reverts commit 32edfff7aae15654d2cfa4a10da9b8f81e021bce. --- lib/config_upgrader.js | 6 +----- test/config_upgrater_test.js | 13 ------------- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/lib/config_upgrader.js b/lib/config_upgrader.js index 78cb8d9a6..9a4f39004 100644 --- a/lib/config_upgrader.js +++ b/lib/config_upgrader.js @@ -269,11 +269,7 @@ class ConfigUpgrader { return report; }); - if (reports.length > 0) { - return reports.reduce(function(a, b) { return a.concat([""]).concat(b); }); - } else { - return reports; - } + return reports.reduce(function(a, b) { return a.concat([""]).concat(b); }); } } diff --git a/test/config_upgrater_test.js b/test/config_upgrater_test.js index 1f1c356c0..e6cba7123 100644 --- a/test/config_upgrater_test.js +++ b/test/config_upgrater_test.js @@ -55,19 +55,6 @@ describe("ConfigUpgrader", function() { }); }); }); - - it("doesn't care if there aren't any configs", function(done) { - temp.mkdir("code ", function(err, directory) { - if (err) { throw err; } - - process.chdir(directory); - - let report = ConfigUpgrader - .upgradeInstructions([directory + '/file.js'], directory); - expect(report).to.deep.eq([]); - done(); - }); - }); }); From 7766652b497729f16c92691dc28d40f98a5c2366 Mon Sep 17 00:00:00 2001 From: Alexander Mankuta Date: Fri, 24 Feb 2017 14:07:54 +0200 Subject: [PATCH 2/2] Fix upgrader with specified ESLint config Upgrader improperly kept detecting ESLint config file when engine had a specific config file specified. This behaviour resulted in providing upgrade instructions for the wrong config file or in worse case trowing an exception of missing config file. --- bin/eslint.js | 2 +- lib/config_upgrader.js | 21 ++++++++++++++++++--- lib/validate_config.js | 4 ++-- test/config_upgrater_test.js | 26 ++++++++++++++++++++++++-- 4 files changed, 45 insertions(+), 8 deletions(-) diff --git a/bin/eslint.js b/bin/eslint.js index 67543f476..88db9563d 100755 --- a/bin/eslint.js +++ b/bin/eslint.js @@ -236,7 +236,7 @@ function analyzeFiles() { if (validateConfig(options.configFile)) { console.error("ESLint is running with the " + cli.getConfigForFile(null).parser + " parser."); - for (const line of ConfigUpgrader.upgradeInstructions(analysisFiles, process.cwd())) { + for (const line of ConfigUpgrader.upgradeInstructions(options.configFile, analysisFiles, process.cwd())) { console.error(line); } diff --git a/lib/config_upgrader.js b/lib/config_upgrader.js index 9a4f39004..9f9aeb4cb 100644 --- a/lib/config_upgrader.js +++ b/lib/config_upgrader.js @@ -245,12 +245,23 @@ class ConfigUpgrader { return Array.from(configs); } - static upgradeInstructions(analysisFiles, root) { - const reports = this.configs(analysisFiles).map(function(configFile) { + static upgradeInstructions(configFile, analysisFiles, root) { + let configs; + if (configFile) { + configs = [configFile]; + } + else { + configs = this.configs(analysisFiles); + } + + const reports = configs.map(function(configFile) { let report = []; const upgrader = new ConfigUpgrader(); - const config = new Config({configFile: configFile}); + const config = new Config({ + configFile: configFile, + cwd: process.cwd() + }); upgrader.upgrade(config.useSpecificConfig); if (path.extname(configFile) === '') { @@ -269,6 +280,10 @@ class ConfigUpgrader { return report; }); + if (reports.length === 0) { + reports.push([]); + } + return reports.reduce(function(a, b) { return a.concat([""]).concat(b); }); } } diff --git a/lib/validate_config.js b/lib/validate_config.js index 91de99c7d..f00198fbd 100644 --- a/lib/validate_config.js +++ b/lib/validate_config.js @@ -1,12 +1,12 @@ var CLIEngine = require("eslint").CLIEngine - , cli = new CLIEngine() , fs = require("fs"); module.exports = function(configPath) { if (configPath) { return true; } else { - var config = cli.getConfigForFile(null); + let cli = new CLIEngine(); + let config = cli.getConfigForFile(null); return Object.keys(config.rules).length > 0; } diff --git a/test/config_upgrater_test.js b/test/config_upgrater_test.js index e6cba7123..1c24e0da5 100644 --- a/test/config_upgrater_test.js +++ b/test/config_upgrater_test.js @@ -19,7 +19,7 @@ describe("ConfigUpgrader", function() { let report = ConfigUpgrader - .upgradeInstructions([directory + '/file.js'], directory); + .upgradeInstructions(null, [directory + '/file.js'], directory); expect(report).to.deep.eq([ ".eslintrc appears to be incompatible with ESLint 3.", "To upgrade it do the following:\n", @@ -47,7 +47,7 @@ describe("ConfigUpgrader", function() { if (err) { throw err; } let report = ConfigUpgrader - .upgradeInstructions([directory + '/file.js'], directory); + .upgradeInstructions(null, [directory + '/file.js'], directory); expect(report).to.deep.eq([]); done(); }); @@ -55,6 +55,28 @@ describe("ConfigUpgrader", function() { }); }); }); + + it("uses specific configs", function(done) { + temp.mkdir("code", function(err, directory) { + if (err) { throw err; } + + process.chdir(directory); + + const configPath = path.join(directory, "codeclimate-eslint"); + fs.writeFile(configPath, "{}", function(err) { + if (err) { throw err; } + + let report = ConfigUpgrader + .upgradeInstructions("codeclimate-eslint", [directory + '/file.js'], directory); + expect(report).to.deep.eq([ + "codeclimate-eslint appears to be incompatible with ESLint 3.", + "To upgrade it do the following:\n", + "* Add .yml or .json to the config file name. Extension-less config file names are deprecated." + ]); + done(); + }); + }); + }); });