fix corner cases in braces & sequences (#4221)

fixes #4220
This commit is contained in:
Alex Lam S.L
2020-10-14 16:39:35 +01:00
committed by GitHub
parent 7f35d9cee0
commit 3d71e97dd1
3 changed files with 51 additions and 3 deletions

View File

@@ -2513,7 +2513,7 @@ merge(Compressor.prototype, {
var line = block.body[i]; var line = block.body[i];
if (line instanceof AST_Var && declarations_only(line)) { if (line instanceof AST_Var && declarations_only(line)) {
decls.push(line); decls.push(line);
} else if (stat) { } else if (stat || line instanceof AST_Const) {
return false; return false;
} else { } else {
stat = line; stat = line;

View File

@@ -990,7 +990,7 @@ function OutputStream(options) {
/* -----[ if ]----- */ /* -----[ if ]----- */
function make_then(self, output) { function make_then(self, output) {
var b = self.body; var b = self.body;
if (output.option("braces") if (output.option("braces") && !(b instanceof AST_Const)
|| output.option("ie8") && b instanceof AST_Do) || output.option("ie8") && b instanceof AST_Do)
return make_block(b, output); return make_block(b, output);
// The squeezer replaces "block"-s that contain only a single // The squeezer replaces "block"-s that contain only a single
@@ -1381,7 +1381,7 @@ function OutputStream(options) {
}); });
function force_statement(stat, output) { function force_statement(stat, output) {
if (output.option("braces")) { if (output.option("braces") && !(stat instanceof AST_Const)) {
make_block(stat, output); make_block(stat, output);
} else if (!stat || stat instanceof AST_EmptyStatement) { } else if (!stat || stat instanceof AST_EmptyStatement) {
output.force_semicolon(); output.force_semicolon();

View File

@@ -1056,3 +1056,51 @@ issue_4216: {
} }
expect_stdout: true expect_stdout: true
} }
skip_braces: {
beautify = {
beautify: true,
braces: true,
}
input: {
if (console)
const a = 42;
else
const b = null;
console.log(typeof a, typeof b);
}
expect_exact: [
"if (console) const a = 42; else const b = null;",
"",
"console.log(typeof a, typeof b);",
]
expect_stdout: true
}
issue_4220: {
options = {
collapse_vars: true,
conditionals: true,
sequences: true,
toplevel: true,
}
input: {
if (console) {
var o = console;
for (var k in o);
} else {
const a = 0;
}
console.log(typeof a);
}
expect: {
if (console) {
var o;
for (var k in console);
} else {
const a = 0;
}
console.log(typeof a);
}
expect_stdout: true
}