Skip to content

Commit

Permalink
Better error messaging when preset options are given without a corres…
Browse files Browse the repository at this point in the history
…ponding preset
  • Loading branch information
kaicataldo committed Oct 6, 2016
1 parent 33eb56a commit 2c0a21b
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 12 deletions.
Expand Up @@ -179,9 +179,17 @@ export default class OptionManager {
// check for an unknown option
if (!option && this.log) {
let pluginOptsInfo = "Check out http://babeljs.io/docs/usage/options/ for more info";
let presetConfigInfo = "For correct configuration, please see http://babeljs.io/docs/plugins/#pluginpresets-options.";

if (removed[key]) {
this.log.error(`Using removed Babel 5 option: ${alias}.${key} - ${removed[key].message}`, ReferenceError);
} else if (opts.presets && Array.isArray(opts.presets)) {
for (let i = 0; i < opts.presets.length; i++) {
let preset = opts.presets[i];
if (typeof preset === "object" && !Array.isArray(preset) && preset !== null) {
this.log.error(`Found configuration options ${JSON.stringify(opts)} without corresponding preset. ${presetConfigInfo}`);
}
}
} else {
this.log.error(`Unknown option: ${alias}.${key}. ${pluginOptsInfo}`, ReferenceError);
}
Expand Down
52 changes: 40 additions & 12 deletions packages/babel-core/test/option-manager.js
Expand Up @@ -45,18 +45,6 @@ suite("option-manager", function () {
/Using removed Babel 5 option: base.auxiliaryComment - Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`/
);
});

test("throws for resolved but erroring preset", function() {
return assert.throws(
function () {
var opt = new OptionManager(new Logger(null, "unknown"));
opt.init({
'presets': [path.join(__dirname, "fixtures/option-manager/not-a-preset")]
});
},
/While processing preset: .*option-manager(?:\/|\\\\)not-a-preset\.js/
);
});
});

suite("presets", function () {
Expand All @@ -82,4 +70,44 @@ suite("option-manager", function () {
presetTest('es2015_named');

});

test("throws for resolved but erroring preset", function() {
return assert.throws(
function () {
var opt = new OptionManager(new Logger(null, "unknown"));
opt.init({
'presets': [path.join(__dirname, "fixtures/option-manager/not-a-preset")]
});
},
/While processing preset: .*option-manager(?:\/|\\\\)not-a-preset\.js/
);
});

suite("throws for standalone preset configuration object", function() {
var presetConfig = { presetOptions: 'hi' };

test("when alone", function() {
return assert.throws(
function () {
var opt = new OptionManager(new Logger(null, "unknown"));
opt.init({
'presets': [presetConfig]
});
},
"Found configuration options " + presetConfig + " without corresponding preset. For correct configuration, please see http://babeljs.io/docs/plugins/#pluginpresets-options."
);
});

test("when other presets are present", function() {
return assert.throws(
function () {
var opt = new OptionManager(new Logger(null, "unknown"));
opt.init({
'presets': [path.join(__dirname, "fixtures/option-manager/presets/es5"), presetConfig]
});
},
"Found configuration options " + presetConfig + " without corresponding preset. For correct configuration, please see http://babeljs.io/docs/plugins/#pluginpresets-options."
);
});
});
});

0 comments on commit 2c0a21b

Please sign in to comment.