diff --git a/lib/cli-engine/index.js b/lib/cli-engine/index.js index 52e45a6d7910..d26a15fd805e 100644 --- a/lib/cli-engine/index.js +++ b/lib/cli-engine/index.js @@ -1,7 +1,9 @@ "use strict"; const { CLIEngine } = require("./cli-engine"); +const { normalizePackageName } = require("./naming"); module.exports = { - CLIEngine + CLIEngine, + normalizePackageName }; diff --git a/lib/init/config-initializer.js b/lib/init/config-initializer.js index 4d52377d2678..3c54e6865e87 100644 --- a/lib/init/config-initializer.js +++ b/lib/init/config-initializer.js @@ -16,6 +16,7 @@ const util = require("util"), ProgressBar = require("progress"), semver = require("semver"), recConfig = require("../../conf/eslint-recommended"), + { normalizePackageName } = require("../cli-engine"), ConfigOps = require("../shared/config-ops"), log = require("../shared/logging"), ModuleResolver = require("../shared/relative-module-resolver"), @@ -100,14 +101,29 @@ 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) { + let moduleName; + + if (extend.startsWith("eslint:")) { + continue; + } else if (extend.startsWith("plugin:")) { + const slashIndex = extend.lastIndexOf("/"); + const pluginName = extend.slice("plugin:".length, slashIndex); + + moduleName = normalizePackageName(pluginName, "eslint-plugin"); + } else { + moduleName = normalizePackageName(extend, "eslint-config"); + } + + 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 68cd06e1d1a6..6cd0e1bd4d3c 100644 --- a/tests/lib/init/config-initializer.js +++ b/tests/lib/init/config-initializer.js @@ -306,6 +306,19 @@ describe("configInitializer", () => { }); }); }); + + it("should support the standard style guide with Vue.js", () => { + const config = { + 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", () => {