improve comment formatting logic (#4794)

This commit is contained in:
Alex Lam S.L
2021-03-17 05:51:52 +00:00
committed by GitHub
parent 9fc0ff5953
commit 7d595e2eac
4 changed files with 44 additions and 71 deletions

View File

@@ -347,6 +347,7 @@ function OutputStream(options) {
};
var indent = options.beautify ? function(half) {
if (need_newline_indented) print("\n");
print(repeat_string(" ", half ? indentation - (options.indent_level >> 1) : indentation));
} : noop;
@@ -450,6 +451,27 @@ function OutputStream(options) {
return /^ *$/.test(OUTPUT.slice(index + 1));
}
function pad_comment(token, force) {
if (need_newline_indented) return;
if (token.nlb && (force || !has_nlb())) {
need_newline_indented = true;
} else if (force) {
need_space = true;
}
}
function print_comment(comment) {
var value = comment.value.replace(/[@#]__PURE__/g, " ");
if (/^\s*$/.test(value) && !/^\s*$/.test(comment.value)) return false;
if (/comment[134]/.test(comment.type)) {
print("//" + value);
need_newline_indented = true;
} else if (comment.type == "comment2") {
print("/*" + value + "*/");
}
return true;
}
function prepend_comments(node) {
var self = this;
var scan = node instanceof AST_Exit && node.value;
@@ -489,37 +511,12 @@ function OutputStream(options) {
}
comments = comments.filter(comment_filter, node);
if (comments.length == 0) return;
var last_nlb = has_nlb();
comments.forEach(function(c, i) {
if (!last_nlb) {
if (c.nlb) {
print("\n");
indent();
last_nlb = true;
} else if (i > 0) {
space();
}
}
var value = c.value.replace(/[@#]__PURE__/g, " ");
if (/^\s*$/.test(value)) return;
if (/comment[134]/.test(c.type)) {
print("//" + value + "\n");
indent();
last_nlb = true;
} else if (c.type == "comment2") {
print("/*" + value + "*/");
last_nlb = false;
}
var printed = false;
comments.forEach(function(comment, index) {
pad_comment(comment, index);
if (print_comment(comment)) printed = true;
});
if (!last_nlb) {
if (node.start.nlb) {
print("\n");
indent();
} else {
space();
}
}
if (printed) pad_comment(node.start, true);
function dump(node) {
var token = node.start;
@@ -549,27 +546,9 @@ function OutputStream(options) {
}))) return;
comments._dumped = self;
var insert = OUTPUT.length;
comments.filter(comment_filter, node).forEach(function(c, i) {
need_space = false;
if (need_newline_indented) {
print("\n");
indent();
need_newline_indented = false;
} else if (c.nlb && (i > 0 || !has_nlb())) {
print("\n");
indent();
} else if (i > 0 || !tail) {
space();
}
var value = c.value.replace(/[@#]__PURE__/g, " ");
if (/^\s*$/.test(value)) return;
if (/comment[134]/.test(c.type)) {
print("//" + value);
need_newline_indented = true;
} else if (c.type == "comment2") {
print("/*" + value + "*/");
need_space = true;
}
comments.filter(comment_filter, node).forEach(function(comment, index) {
pad_comment(comment, index || !tail);
print_comment(comment);
});
if (OUTPUT.length > insert) newline_insert = insert;
}