clean up max_line_len

- never exceed specified limit
- otherwise warning is shown
- enabled only for final output

closes #1496
This commit is contained in:
alexlamsl
2017-02-18 22:44:53 +08:00
parent ec64acd2c8
commit 8898b8a0fe
4 changed files with 67 additions and 17 deletions

View File

@@ -70,7 +70,7 @@ function OutputStream(options) {
unescape_regexps : false,
inline_script : false,
width : 80,
max_line_len : 32000,
max_line_len : false,
beautify : false,
source_map : null,
bracketize : false,
@@ -198,16 +198,29 @@ function OutputStream(options) {
var might_need_space = false;
var might_need_semicolon = false;
var might_add_newline = 0;
var last = null;
function last_char() {
return last.charAt(last.length - 1);
};
function maybe_newline() {
if (options.max_line_len && current_col > options.max_line_len)
print("\n");
};
var ensure_line_len = options.max_line_len ? function() {
if (current_col > options.max_line_len) {
if (might_add_newline) {
var left = OUTPUT.slice(0, might_add_newline);
var right = OUTPUT.slice(might_add_newline);
OUTPUT = left + "\n" + right;
current_line++;
current_pos++;
current_col = right.length;
}
if (current_col > options.max_line_len) {
AST_Node.warn("Output exceeds {max_line_len} characters", options);
}
}
might_add_newline = 0;
} : noop;
var requireSemicolonChars = makePredicate("( [ + * / - , .");
@@ -223,6 +236,7 @@ function OutputStream(options) {
current_col++;
current_pos++;
} else {
ensure_line_len();
OUTPUT += "\n";
current_pos++;
current_line++;
@@ -243,6 +257,7 @@ function OutputStream(options) {
if (!options.beautify && options.preserve_line && stack[stack.length - 1]) {
var target_line = stack[stack.length - 1].start.line;
while (current_line < target_line) {
ensure_line_len();
OUTPUT += "\n";
current_pos++;
current_line++;
@@ -264,16 +279,16 @@ function OutputStream(options) {
}
might_need_space = false;
}
OUTPUT += str;
current_pos += str.length;
var a = str.split(/\r?\n/), n = a.length - 1;
current_line += n;
if (n == 0) {
current_col += a[n].length;
} else {
current_col += a[0].length;
if (n > 0) {
ensure_line_len();
current_col = a[n].length;
}
current_pos += str.length;
last = str;
OUTPUT += str;
};
var space = options.beautify ? function() {
@@ -299,7 +314,10 @@ function OutputStream(options) {
var newline = options.beautify ? function() {
print("\n");
} : maybe_newline;
} : options.max_line_len ? function() {
ensure_line_len();
might_add_newline = OUTPUT.length;
} : noop;
var semicolon = options.beautify ? function() {
print(";");
@@ -376,6 +394,9 @@ function OutputStream(options) {
} : noop;
function get() {
if (might_add_newline) {
ensure_line_len();
}
return OUTPUT;
};