Skip to content

Commit

Permalink
WIP: Better error messaging when preset options are given without a c…
Browse files Browse the repository at this point in the history
…orresponding preset

fixes #4677
  • Loading branch information
kaicataldo committed Oct 8, 2016
1 parent 760bbd6 commit aa982da
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
Expand Up @@ -176,6 +176,17 @@ export default class OptionManager {
for (let key in opts) {
let option = config[key];

// check presets for options without corresponding preset
if (key === "presets" && Array.isArray(opts.presets)) {
for (let preset of opts.presets) {
if (typeof preset === "object" && preset !== null && !Array.isArray(preset)) {
let presetConfigInfo = "For correct configuration, please see http://babeljs.io/docs/plugins/#pluginpresets-options.";

this.log.error(`Found configuration options ${JSON.stringify(preset)} without corresponding preset. ${presetConfigInfo}`, ReferenceError);
}
}
}

// check for an unknown option
if (!option && this.log) {
let pluginOptsInfo = "Check out http://babeljs.io/docs/usage/options/ for more info";
Expand Down
27 changes: 26 additions & 1 deletion packages/babel-core/test/option-manager.js
Expand Up @@ -57,6 +57,32 @@ suite("option-manager", function () {
/While processing preset: .*option-manager(?:\/|\\\\)not-a-preset\.js/
);
});

suite("throws for preset configuration without a preset", function() {
test("when alone", function() {
return assert.throws(
function () {
var opt = new OptionManager(new Logger(null, "unknown"));
opt.init({
'presets': [{ foo: 'bar' }]
});
},
/Found configuration options {"foo":"bar"} 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': ['preset1', ['preset2', { opt1: 'foo' }], { opt2: 'bar' }]
});
},
/Found configuration options {"opt2":"bar"} without corresponding preset. For correct configuration, please see http:\/\/babeljs.io\/docs\/plugins\/#pluginpresets-options./
);
});
});
});

suite("presets", function () {
Expand All @@ -80,6 +106,5 @@ suite("option-manager", function () {
presetTest('es2015_function');
presetTest('es2015_function_fallback');
presetTest('es2015_named');

});
});

0 comments on commit aa982da

Please sign in to comment.