report top-level default options (#3797)

This commit is contained in:
Alex Lam S.L
2020-04-18 11:03:06 +01:00
committed by GitHub
parent dac9e69f9e
commit 708973e51d
4 changed files with 34 additions and 14 deletions

View File

@@ -23,12 +23,29 @@ program.parse = undefined;
if (process.argv.indexOf("ast") >= 0) program.helpInformation = UglifyJS.describe_ast; if (process.argv.indexOf("ast") >= 0) program.helpInformation = UglifyJS.describe_ast;
else if (process.argv.indexOf("options") >= 0) program.helpInformation = function() { else if (process.argv.indexOf("options") >= 0) program.helpInformation = function() {
var text = []; var text = [];
var toplevels = [];
var padding = "";
var options = UglifyJS.default_options(); var options = UglifyJS.default_options();
for (var option in options) { for (var name in options) {
text.push("--" + (option == "output" ? "beautify" : option == "sourceMap" ? "source-map" : option) + " options:"); var option = options[name];
text.push(format_object(options[option])); if (option && typeof option == "object") {
text.push(""); text.push("--" + ({
output: "beautify",
sourceMap: "source-map",
}[name] || name) + " options:");
text.push(format_object(option));
text.push("");
} else {
if (padding.length < name.length) padding = Array(name.length + 1).join(" ");
toplevels.push([ {
keep_fnames: "keep-fnames",
nameCache: "name-cache",
}[name] || name, option ]);
}
} }
toplevels.forEach(function(tokens) {
text.push("--" + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]);
});
return text.join("\n"); return text.join("\n");
}; };
program.option("-p, --parse <options>", "Specify parser options.", parse_js()); program.option("-p, --parse <options>", "Specify parser options.", parse_js());

View File

@@ -87,9 +87,11 @@ DefaultsError.prototype.name = "DefaultsError";
configure_error_stack(DefaultsError); configure_error_stack(DefaultsError);
function defaults(args, defs, croak) { function defaults(args, defs, croak) {
for (var i in args) if (HOP(args, i)) { if (croak) for (var i in args) {
if (croak && !HOP(defs, i)) throw new DefaultsError("`" + i + "` is not a supported option", defs); if (HOP(args, i) && !HOP(defs, i)) throw new DefaultsError("`" + i + "` is not a supported option", defs);
defs[i] = args[i]; }
for (var i in args) {
if (HOP(args, i)) defs[i] = args[i];
} }
return defs; return defs;
} }

View File

@@ -1045,10 +1045,8 @@ function log_suspects(minify_options, component) {
} }
function log_suspects_global(options) { function log_suspects_global(options) {
var o = {}; var suspects = Object.keys(default_options).filter(function(component) {
UglifyJS.minify("", o); return typeof default_options[component] != "object";
var suspects = Object.keys(o).filter(function(component) {
return typeof o[component] != "object";
}).filter(function(component) { }).filter(function(component) {
var m = JSON.parse(options); var m = JSON.parse(options);
m[component] = false; m[component] = false;
@@ -1115,7 +1113,10 @@ function log(options) {
errorln(JSON.stringify(JSON.parse(options), null, 2)); errorln(JSON.stringify(JSON.parse(options), null, 2));
errorln(); errorln();
if (!ok && typeof uglify_code == "string") { if (!ok && typeof uglify_code == "string") {
Object.keys(default_options).forEach(log_suspects.bind(null, JSON.parse(options))); Object.keys(default_options).filter(function(component) {
var defs = default_options[component];
return defs && typeof defs == "object";
}).forEach(log_suspects.bind(null, JSON.parse(options)));
log_suspects_global(options); log_suspects_global(options);
errorln("!!!!!! Failed... round " + round); errorln("!!!!!! Failed... round " + round);
} }

View File

@@ -66,8 +66,8 @@ function infer_options(options) {
} }
exports.default_options = function() { exports.default_options = function() {
var defs = {}; var defs = infer_options({ 0: 0 });
Object.keys(infer_options({ 0: 0 })).forEach(function(component) { Object.keys(defs).forEach(function(component) {
var options = {}; var options = {};
options[component] = { 0: 0 }; options[component] = { 0: 0 };
if (options = infer_options(options)) { if (options = infer_options(options)) {