From: Alex Lam S.L Date: Tue, 13 Mar 2018 10:44:21 +0000 (+0800) Subject: retain comments within brackets (#2999) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=188c39e8d5b3fba5a7cb92fbf5867c9f3e897c46;p=UglifyJS.git retain comments within brackets (#2999) fixes #2998 --- diff --git a/lib/output.js b/lib/output.js index 0569ab53..0aaec42b 100644 --- a/lib/output.js +++ b/lib/output.js @@ -886,18 +886,19 @@ function OutputStream(options) { self.body.print(output); output.semicolon(); }); + function print_bracketed_empty(self, output) { + output.print("{"); + output.with_indent(output.next_indent(), function() { + output.append_comments(self, true); + }); + output.print("}"); + } function print_bracketed(self, output, allow_directives) { if (self.body.length > 0) { output.with_block(function() { display_body(self.body, false, output, allow_directives); }); - } else { - output.print("{"); - output.with_indent(output.next_indent(), function() { - output.append_comments(self, true); - }); - output.print("}"); - } + } else print_bracketed_empty(self, output); }; DEFPRINT(AST_BlockStatement, function(self, output){ print_bracketed(self, output); @@ -1092,7 +1093,7 @@ function OutputStream(options) { }); output.space(); var last = self.body.length - 1; - if (last < 0) output.print("{}"); + if (last < 0) print_bracketed_empty(self, output); else output.with_block(function(){ self.body.forEach(function(branch, i){ output.indent(true); @@ -1347,7 +1348,7 @@ function OutputStream(options) { }); output.newline(); }); - else output.print("{}"); + else print_bracketed_empty(self, output); }); function print_property_name(key, quote, output) { diff --git a/test/mocha/comment.js b/test/mocha/comment.js index 4db46b52..74ae962c 100644 --- a/test/mocha/comment.js +++ b/test/mocha/comment.js @@ -139,6 +139,26 @@ describe("Comment", function() { assert.strictEqual(result.code, code); }); + it("Should retain comments within brackets", function() { + var code = [ + "{/* foo */}", + "a({/* foo */});", + "while (a) {/* foo */}", + "switch (a) {/* foo */}", + "if (a) {/* foo */} else {/* bar */}", + ].join("\n\n"); + var result = uglify.minify(code, { + compress: false, + mangle: false, + output: { + beautify: true, + comments: "all", + }, + }); + if (result.error) throw result.error; + assert.strictEqual(result.code, code); + }); + it("Should correctly preserve new lines around comments", function() { var tests = [ [