handle trailing line comments correctly (#2736)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sat, 6 Jan 2018 13:05:21 +0000 (21:05 +0800)
committerGitHub <noreply@github.com>
Sat, 6 Jan 2018 13:05:21 +0000 (21:05 +0800)
fixes #2734

lib/output.js
test/mocha/comment.js

index 58521e3..83cd37b 100644 (file)
@@ -534,7 +534,11 @@ function OutputStream(options) {
         var token = node.end;
         if (!token) return;
         var comments = token[tail ? "comments_before" : "comments_after"];
-        if (comments && comments._dumped !== self) {
+        if (comments
+            && comments._dumped !== self
+            && (node instanceof AST_Statement || all(comments, function(c) {
+                return !/comment[134]/.test(c.type);
+            }))) {
             comments._dumped = self;
             var insert = OUTPUT.length;
             comments.filter(comment_filter, node).forEach(function(c, i) {
@@ -599,7 +603,7 @@ function OutputStream(options) {
         add_mapping     : add_mapping,
         option          : function(opt) { return options[opt] },
         prepend_comments: readonly ? noop : prepend_comments,
-        append_comments : readonly ? noop : append_comments,
+        append_comments : readonly || comment_filter === return_false ? noop : append_comments,
         line            : function() { return current_line },
         col             : function() { return current_col },
         pos             : function() { return current_pos },
index 3bad9e0..4db46b5 100644 (file)
@@ -219,4 +219,24 @@ describe("Comment", function() {
         if (result.error) throw result.error;
         assert.strictEqual(result.code, "/*a*/ /*b*/(function(){/*c*/}/*d*/ /*e*/)();");
     });
+
+    it("Should output line comments after statements", function() {
+        var result = uglify.minify([
+            "x()//foo",
+            "{y()//bar",
+            "}",
+        ].join("\n"), {
+            compress: false,
+            mangle: false,
+            output: {
+                comments: "all",
+            },
+        });
+        if (result.error) throw result.error;
+        assert.strictEqual(result.code, [
+            "x();//foo",
+            "{y();//bar",
+            "}",
+        ].join("\n"));
+    });
 });