From 4020af6a6926474ef1d77a18157def0bc7bfb4e8 Mon Sep 17 00:00:00 2001 From: yeonjuan Date: Fri, 3 Jan 2020 22:33:08 +0900 Subject: [PATCH 1/6] Fix: error in extending recommended config (fixes #12707) --- lib/init/autoconfig.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/init/autoconfig.js b/lib/init/autoconfig.js index 64be3d2a84f..399ffd6a644 100644 --- a/lib/init/autoconfig.js +++ b/lib/init/autoconfig.js @@ -319,7 +319,7 @@ class Registry { * This will return a new config with `"extends": "eslint:recommended"` and * only the rules which have configurations different from the recommended config. * @param {Object} config config object - * @returns {Object} config object using `"extends": "eslint:recommended"` + * @returns {Object} config object using `"extends": ["eslint:recommended"]` */ function extendFromRecommended(config) { const newConfig = Object.assign({}, config); @@ -333,7 +333,7 @@ function extendFromRecommended(config) { delete newConfig.rules[ruleId]; } }); - newConfig.extends = RECOMMENDED_CONFIG_NAME; + newConfig.extends = [RECOMMENDED_CONFIG_NAME]; return newConfig; } From 02f11ab953bb5e1e34f8fb2aa002d05225d9220e Mon Sep 17 00:00:00 2001 From: yeonjuan Date: Sat, 4 Jan 2020 10:45:34 +0900 Subject: [PATCH 2/6] change to push --- lib/init/autoconfig.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/init/autoconfig.js b/lib/init/autoconfig.js index 399ffd6a644..79a9ce2831c 100644 --- a/lib/init/autoconfig.js +++ b/lib/init/autoconfig.js @@ -316,7 +316,7 @@ class Registry { /** * Extract rule configuration into eslint:recommended where possible. * - * This will return a new config with `"extends": "eslint:recommended"` and + * This will return a new config with `["extends": [ ..., "eslint:recommended"]` and * only the rules which have configurations different from the recommended config. * @param {Object} config config object * @returns {Object} config object using `"extends": ["eslint:recommended"]` @@ -333,7 +333,7 @@ function extendFromRecommended(config) { delete newConfig.rules[ruleId]; } }); - newConfig.extends = [RECOMMENDED_CONFIG_NAME]; + newConfig.extends.push(RECOMMENDED_CONFIG_NAME); return newConfig; } From 5622de900f5b7732dc7110c403de2a753ec911b0 Mon Sep 17 00:00:00 2001 From: yeonjuan Date: Sat, 4 Jan 2020 17:11:02 +0900 Subject: [PATCH 3/6] add test cases --- tests/lib/init/autoconfig.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/lib/init/autoconfig.js b/tests/lib/init/autoconfig.js index 3ce766a1283..51d9081eeb9 100644 --- a/tests/lib/init/autoconfig.js +++ b/tests/lib/init/autoconfig.js @@ -328,4 +328,28 @@ describe("autoconfig", () => { }); }); }); + + describe("extendFromRecommended()", () => { + it("should return a configuration which includes `eslint:recommended` in `extends`", () => { + const oldConfig = { extends: [], rules: {} }; + const newConfig = autoconfig.extendFromRecommended(oldConfig); + + assert.include(newConfig.extends, "eslint:recommended"); + }); + + it("should return a configuration which preserves the previous extending configurations", () => { + const oldConfig = { extends: ["pevious:configuration1", "previous:configuration2"], rules: {} }; + const newConfig = autoconfig.extendFromRecommended(oldConfig); + + assert.includeMembers(newConfig.extends, oldConfig.extends); + }); + + it("should return a configuration which has `eslint:recommended` at the last of `extends`", () => { + const oldConfig = { extends: ["pevious:configuration1", "previous:configuration2"], rules: {} }; + const newConfig = autoconfig.extendFromRecommended(oldConfig); + const lastExtendInNewConfig = newConfig.extends[newConfig.extends.length - 1]; + + assert.strictEqual(lastExtendInNewConfig, "eslint:recommended"); + }); + }); }); From 166465f6311f271c3b7264fe6422b0eda6521683 Mon Sep 17 00:00:00 2001 From: yeonjuan Date: Sat, 4 Jan 2020 22:40:54 +0900 Subject: [PATCH 4/6] add test case --- tests/lib/init/autoconfig.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/lib/init/autoconfig.js b/tests/lib/init/autoconfig.js index 51d9081eeb9..6cd68ce1165 100644 --- a/tests/lib/init/autoconfig.js +++ b/tests/lib/init/autoconfig.js @@ -12,7 +12,8 @@ const assert = require("chai").assert, autoconfig = require("../../../lib/init/autoconfig"), sourceCodeUtils = require("../../../lib/init/source-code-utils"), - baseDefaultOptions = require("../../../conf/default-cli-options"); + baseDefaultOptions = require("../../../conf/default-cli-options"), + recommendedConfig = require("../../conf/eslint-recommended"); const defaultOptions = Object.assign({}, baseDefaultOptions, { cwd: process.cwd() }); @@ -351,5 +352,12 @@ describe("autoconfig", () => { assert.strictEqual(lastExtendInNewConfig, "eslint:recommended"); }); + + it("should return a configuration which not includes rules configured in `eslint:recommended`", () => { + const oldConfig = { extends: [], rules: { ...recommendedConfig.rules } }; + const newConfig = autoconfig.extendFromRecommended(oldConfig); + + assert.notInclude(newConfig.rules, oldConfig.rules); + }); }); }); From caf2bb54020d4ec82f0cea5f97c9ced331a41ba8 Mon Sep 17 00:00:00 2001 From: yeonjuan Date: Tue, 7 Jan 2020 20:17:38 +0900 Subject: [PATCH 5/6] fix typo, add test case --- tests/lib/init/autoconfig.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tests/lib/init/autoconfig.js b/tests/lib/init/autoconfig.js index 6cd68ce1165..6834b5e3a92 100644 --- a/tests/lib/init/autoconfig.js +++ b/tests/lib/init/autoconfig.js @@ -331,7 +331,15 @@ describe("autoconfig", () => { }); describe("extendFromRecommended()", () => { - it("should return a configuration which includes `eslint:recommended` in `extends`", () => { + it("should return a configuration which has `extends` key with Array type value", () => { + const oldConfig = { extends: [], rules: {} }; + const newConfig = autoconfig.extendFromRecommended(oldConfig); + + assert.exists(newConfig.extends); + assert.isArray(newConfig.extends); + }); + + it("should return a configuration which has array property `extends`", () => { const oldConfig = { extends: [], rules: {} }; const newConfig = autoconfig.extendFromRecommended(oldConfig); @@ -339,14 +347,14 @@ describe("autoconfig", () => { }); it("should return a configuration which preserves the previous extending configurations", () => { - const oldConfig = { extends: ["pevious:configuration1", "previous:configuration2"], rules: {} }; + const oldConfig = { extends: ["previous:configuration1", "previous:configuration2"], rules: {} }; const newConfig = autoconfig.extendFromRecommended(oldConfig); assert.includeMembers(newConfig.extends, oldConfig.extends); }); it("should return a configuration which has `eslint:recommended` at the last of `extends`", () => { - const oldConfig = { extends: ["pevious:configuration1", "previous:configuration2"], rules: {} }; + const oldConfig = { extends: ["previous:configuration1", "previous:configuration2"], rules: {} }; const newConfig = autoconfig.extendFromRecommended(oldConfig); const lastExtendInNewConfig = newConfig.extends[newConfig.extends.length - 1]; From 0f5b3423da825cbf0fb7544eae0c34032a379f71 Mon Sep 17 00:00:00 2001 From: yeonjuan Date: Sat, 11 Jan 2020 17:12:24 +0900 Subject: [PATCH 6/6] change to put eslint:recommended at the beginning. --- lib/init/autoconfig.js | 2 +- tests/lib/init/autoconfig.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/init/autoconfig.js b/lib/init/autoconfig.js index 79a9ce2831c..c47c242dbd5 100644 --- a/lib/init/autoconfig.js +++ b/lib/init/autoconfig.js @@ -333,7 +333,7 @@ function extendFromRecommended(config) { delete newConfig.rules[ruleId]; } }); - newConfig.extends.push(RECOMMENDED_CONFIG_NAME); + newConfig.extends.unshift(RECOMMENDED_CONFIG_NAME); return newConfig; } diff --git a/tests/lib/init/autoconfig.js b/tests/lib/init/autoconfig.js index 6834b5e3a92..1fa2b0476de 100644 --- a/tests/lib/init/autoconfig.js +++ b/tests/lib/init/autoconfig.js @@ -353,12 +353,12 @@ describe("autoconfig", () => { assert.includeMembers(newConfig.extends, oldConfig.extends); }); - it("should return a configuration which has `eslint:recommended` at the last of `extends`", () => { + it("should return a configuration which has `eslint:recommended` at the first of `extends`", () => { const oldConfig = { extends: ["previous:configuration1", "previous:configuration2"], rules: {} }; const newConfig = autoconfig.extendFromRecommended(oldConfig); - const lastExtendInNewConfig = newConfig.extends[newConfig.extends.length - 1]; + const [firstExtendInNewConfig] = newConfig.extends; - assert.strictEqual(lastExtendInNewConfig, "eslint:recommended"); + assert.strictEqual(firstExtendInNewConfig, "eslint:recommended"); }); it("should return a configuration which not includes rules configured in `eslint:recommended`", () => {