From 926f74eed21521af3b0a384e91a1e14646c31ac7 Mon Sep 17 00:00:00 2001 From: Toru Nagashima Date: Sun, 14 Jul 2019 10:58:33 +0900 Subject: [PATCH 1/3] Fix: --init with Vue.js failed (fixes #11970) --- lib/init/config-initializer.js | 23 +++++++++++++++-------- tests/lib/init/config-initializer.js | 11 +++++++++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/lib/init/config-initializer.js b/lib/init/config-initializer.js index 4d52377d267..0c0d057cb41 100644 --- a/lib/init/config-initializer.js +++ b/lib/init/config-initializer.js @@ -100,14 +100,21 @@ function getModulesList(config, installESLint) { modules[`eslint-plugin-${plugin}`] = "latest"; } } - if (config.extends && config.extends.indexOf("eslint:") === -1) { - const moduleName = `eslint-config-${config.extends}`; - - modules[moduleName] = "latest"; - Object.assign( - modules, - getPeerDependencies(`${moduleName}@latest`) - ); + if (config.extends) { + const extendList = Array.isArray(config.extends) ? config.extends : [config.extends]; + + for (const extend of extendList) { + if (extend.startsWith("eslint:") || extend.startsWith("plugin:")) { + continue; + } + const moduleName = `eslint-config-${extend}`; + + modules[moduleName] = "latest"; + Object.assign( + modules, + getPeerDependencies(`${moduleName}@latest`) + ); + } } if (installESLint === false) { diff --git a/tests/lib/init/config-initializer.js b/tests/lib/init/config-initializer.js index 68cd06e1d1a..4ee6ff6b732 100644 --- a/tests/lib/init/config-initializer.js +++ b/tests/lib/init/config-initializer.js @@ -306,6 +306,17 @@ describe("configInitializer", () => { }); }); }); + + it("should support the standard style guide with Vue.js", () => { + const config = { + plugins: ["vue"], + extends: ["plugin:vue/essential", "standard"] + }; + const modules = init.getModulesList(config); + + assert.include(modules, "eslint-plugin-vue@latest"); + assert.include(modules, "eslint-config-standard@latest"); + }); }); describe("auto", () => { From 0b2b12737caac40ffd6df39ad2e3a8b0fa1c2ee7 Mon Sep 17 00:00:00 2001 From: Toru Nagashima Date: Sun, 14 Jul 2019 12:19:25 +0900 Subject: [PATCH 2/3] move 'naming.js' to 'shared' directory --- lib/cli-engine/cli-engine.js | 2 +- lib/cli-engine/config-array-factory.js | 2 +- lib/{cli-engine => shared}/naming.js | 0 tests/lib/{cli-engine => shared}/naming.js | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename lib/{cli-engine => shared}/naming.js (100%) rename tests/lib/{cli-engine => shared}/naming.js (97%) diff --git a/lib/cli-engine/cli-engine.js b/lib/cli-engine/cli-engine.js index 81e1b07c83e..d7512fe3f36 100644 --- a/lib/cli-engine/cli-engine.js +++ b/lib/cli-engine/cli-engine.js @@ -20,6 +20,7 @@ const path = require("path"); const defaultOptions = require("../../conf/default-cli-options"); const pkg = require("../../package.json"); const ConfigOps = require("../shared/config-ops"); +const naming = require("../shared/naming"); const ModuleResolver = require("../shared/relative-module-resolver"); const { Linter } = require("../linter"); const builtInRules = require("../rules"); @@ -29,7 +30,6 @@ const { FileEnumerator } = require("./file-enumerator"); const hash = require("./hash"); const { IgnoredPaths } = require("./ignored-paths"); const LintResultCache = require("./lint-result-cache"); -const naming = require("./naming"); const debug = require("debug")("eslint:cli-engine"); const validFixTypes = new Set(["problem", "suggestion", "layout"]); diff --git a/lib/cli-engine/config-array-factory.js b/lib/cli-engine/config-array-factory.js index 782bb1d148f..95430c358df 100644 --- a/lib/cli-engine/config-array-factory.js +++ b/lib/cli-engine/config-array-factory.js @@ -38,9 +38,9 @@ const path = require("path"); const importFresh = require("import-fresh"); const stripComments = require("strip-json-comments"); const { validateConfigSchema } = require("../shared/config-validator"); +const naming = require("../shared/naming"); const ModuleResolver = require("../shared/relative-module-resolver"); const { ConfigArray, ConfigDependency, OverrideTester } = require("./config-array"); -const naming = require("./naming"); const debug = require("debug")("eslint:config-array-factory"); //------------------------------------------------------------------------------ diff --git a/lib/cli-engine/naming.js b/lib/shared/naming.js similarity index 100% rename from lib/cli-engine/naming.js rename to lib/shared/naming.js diff --git a/tests/lib/cli-engine/naming.js b/tests/lib/shared/naming.js similarity index 97% rename from tests/lib/cli-engine/naming.js rename to tests/lib/shared/naming.js index 3bc917baf1f..f6239dab1ea 100644 --- a/tests/lib/cli-engine/naming.js +++ b/tests/lib/shared/naming.js @@ -9,7 +9,7 @@ const assert = require("chai").assert, leche = require("leche"), - naming = require("../../../lib/cli-engine/naming"); + naming = require("../../../lib/shared/naming"); //------------------------------------------------------------------------------ // Tests From 31a854482deb62419760ac4d1ad673994df99fac Mon Sep 17 00:00:00 2001 From: Toru Nagashima Date: Sun, 14 Jul 2019 12:23:22 +0900 Subject: [PATCH 3/3] use naming utility --- lib/init/config-initializer.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/init/config-initializer.js b/lib/init/config-initializer.js index 0c0d057cb41..17aa96505a3 100644 --- a/lib/init/config-initializer.js +++ b/lib/init/config-initializer.js @@ -18,6 +18,7 @@ const util = require("util"), recConfig = require("../../conf/eslint-recommended"), ConfigOps = require("../shared/config-ops"), log = require("../shared/logging"), + naming = require("../shared/naming"), ModuleResolver = require("../shared/relative-module-resolver"), autoconfig = require("./autoconfig.js"), ConfigFile = require("./config-file"), @@ -97,7 +98,9 @@ function getModulesList(config, installESLint) { // Create a list of modules which should be installed based on config if (config.plugins) { for (const plugin of config.plugins) { - modules[`eslint-plugin-${plugin}`] = "latest"; + const moduleName = naming.normalizePackageName(plugin, "eslint-plugin"); + + modules[moduleName] = "latest"; } } if (config.extends) { @@ -107,7 +110,7 @@ function getModulesList(config, installESLint) { if (extend.startsWith("eslint:") || extend.startsWith("plugin:")) { continue; } - const moduleName = `eslint-config-${extend}`; + const moduleName = naming.normalizePackageName(extend, "eslint-config"); modules[moduleName] = "latest"; Object.assign(