From 543dd7d3d750e83b00e50bbf74fa786a7c1d243e Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sun, 20 Oct 2019 03:21:30 +0800 Subject: [PATCH] fix corner case in `comments` (#3500) --- lib/output.js | 2 +- test/mocha/comments.js | 119 ++++++++++++++++++++++++++--------------- 2 files changed, 76 insertions(+), 45 deletions(-) diff --git a/lib/output.js b/lib/output.js index 827fa43a..b9d8a137 100644 --- a/lib/output.js +++ b/lib/output.js @@ -452,7 +452,7 @@ function OutputStream(options) { var self = this; var scan = node instanceof AST_Exit && node.value; var comments = dump(node); - if (!comments) return; + if (!comments) comments = []; if (scan) { var tw = new TreeWalker(function(node) { diff --git a/test/mocha/comments.js b/test/mocha/comments.js index 04dd171e..764f6db8 100644 --- a/test/mocha/comments.js +++ b/test/mocha/comments.js @@ -48,53 +48,84 @@ describe("comments", function() { } }); - it("Should handle comment within return correctly", function() { - var result = UglifyJS.minify([ - "function unequal(x, y) {", - " return (", - " // Either one", - " x < y", - " ||", - " y < x", - " );", - "}", - ].join("\n"), { - compress: false, - mangle: false, - output: { - beautify: true, - comments: "all", - }, + describe("comment within return", function() { + it("Should handle leading return", function() { + var result = UglifyJS.minify([ + "function unequal(x, y) {", + " return (", + " // Either one", + " x < y", + " ||", + " y < x", + " );", + "}", + ].join("\n"), { + compress: false, + mangle: false, + output: { + beautify: true, + comments: "all", + }, + }); + if (result.error) throw result.error; + assert.strictEqual(result.code, [ + "function unequal(x, y) {", + " // Either one", + " return x < y || y < x;", + "}", + ].join("\n")); }); - if (result.error) throw result.error; - assert.strictEqual(result.code, [ - "function unequal(x, y) {", - " // Either one", - " return x < y || y < x;", - "}", - ].join("\n")); - }); - it("Should handle comment folded into return correctly", function() { - var result = UglifyJS.minify([ - "function f() {", - " /* boo */ x();", - " return y();", - "}", - ].join("\n"), { - mangle: false, - output: { - beautify: true, - comments: "all", - }, + it("Should handle trailing return", function() { + var result = UglifyJS.minify([ + "function unequal(x) {", + " var y;", + " return (", + " // Either one", + " x < y", + " ||", + " y < x", + " );", + "}", + ].join("\n"), { + compress: false, + mangle: false, + output: { + beautify: true, + comments: "all", + }, + }); + if (result.error) throw result.error; + assert.strictEqual(result.code, [ + "function unequal(x) {", + " var y;", + " // Either one", + " return x < y || y < x;", + "}", + ].join("\n")); + }); + + it("Should handle comment folded into return", function() { + var result = UglifyJS.minify([ + "function f() {", + " /* boo */ x();", + " return y();", + "}", + ].join("\n"), { + mangle: false, + output: { + beautify: true, + comments: "all", + }, + }); + if (result.error) throw result.error; + assert.strictEqual(result.code, [ + "function f() {", + " /* boo */", + " return x(), y();", + "}", + ].join("\n")); }); - if (result.error) throw result.error; - assert.strictEqual(result.code, [ - "function f() {", - " /* boo */", - " return x(), y();", - "}", - ].join("\n")); }); it("Should not drop comments after first OutputStream", function() { -- 2.34.1