Skip to content

Commit

Permalink
Revert "fix corner cases in preserve_line (#3212)"
Browse files Browse the repository at this point in the history
This reverts commit 6a60eea.

And closes #85
  • Loading branch information
fabiosantoscode committed Jul 17, 2018
1 parent 6a60eea commit caad9c3
Show file tree
Hide file tree
Showing 5 changed files with 280 additions and 436 deletions.
4 changes: 2 additions & 2 deletions README.md
Expand Up @@ -948,8 +948,8 @@ can pass additional arguments that control the code output:
adjust for this text. Can be used to insert a comment containing
licensing information, for example.

- `preserve_line` (default `false`) -- pass `true` to retain line numbering on
a best effort basis.
- `preserve_line` (default `false`) -- pass `true` to preserve lines, but it
only works if `beautify` is set to `false`.

- `quote_keys` (default `false`) -- pass `true` to quote all keys in literal
objects
Expand Down
95 changes: 46 additions & 49 deletions lib/output.js
Expand Up @@ -214,24 +214,16 @@ function OutputStream(options) {
/* -----[ beautification/minification ]----- */

var has_parens = false;
var line_end = 0;
var line_fixed = true;
var might_need_space = false;
var might_need_semicolon = false;
var might_add_newline = 0;
var need_newline_indented = false;
var need_space = false;
var newline_insert = -1;
var last = "";
var mapping_token, mapping_name, mappings = options.source_map && [];

var adjust_mappings = mappings ? function(line, col) {
mappings.forEach(function(mapping) {
mapping.line += line;
mapping.col += col;
});
} : noop;

var flush_mappings = mappings ? function() {
var do_add_mapping = mappings ? function() {
mappings.forEach(function(mapping) {
try {
options.source_map.add(
Expand All @@ -254,30 +246,31 @@ function OutputStream(options) {
mappings = [];
} : noop;

function insert_newlines(count) {
var index = OUTPUT.lastIndexOf("\n");
if (line_end < index) line_end = index;
var left = OUTPUT.slice(0, line_end);
var right = OUTPUT.slice(line_end);
adjust_mappings(count, right.length - current_col);
current_line += count;
current_pos += count;
current_col = right.length;
OUTPUT = left;
while (count--) OUTPUT += "\n";
OUTPUT += right;
}

var fix_line = options.max_line_len ? function() {
if (line_fixed) {
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);
if (mappings) {
var delta = right.length - current_col;
mappings.forEach(function(mapping) {
mapping.line++;
mapping.col += delta;
});
}
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);
}
return;
}
if (current_col > options.max_line_len) insert_newlines(1);
line_fixed = true;
flush_mappings();
if (might_add_newline) {
might_add_newline = 0;
do_add_mapping();
}
} : noop;

var requireSemicolonChars = makePredicate("( [ + * / - , . `");
Expand Down Expand Up @@ -310,7 +303,7 @@ function OutputStream(options) {
current_col++;
current_pos++;
} else {
fix_line();
ensure_line_len();
OUTPUT += "\n";
current_pos++;
current_line++;
Expand All @@ -328,6 +321,18 @@ 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++;
current_col = 0;
might_need_space = false;
}
}

if (might_need_space) {
if ((is_identifier_char(prev)
&& (is_identifier_char(ch) || ch == "\\"))
Expand All @@ -349,7 +354,7 @@ function OutputStream(options) {
col: current_col
});
mapping_token = false;
if (line_fixed) flush_mappings();
if (!might_add_newline) do_add_mapping();
}

OUTPUT += str;
Expand All @@ -359,7 +364,7 @@ function OutputStream(options) {
current_line += n;
current_col += a[0].length;
if (n > 0) {
fix_line();
ensure_line_len();
current_col = a[n].length;
}
last = str;
Expand Down Expand Up @@ -390,12 +395,6 @@ function OutputStream(options) {
return ret;
} : function(col, cont) { return cont(); };

var may_add_newline = options.max_line_len || options.preserve_line ? function() {
fix_line();
line_end = OUTPUT.length;
line_fixed = false;
} : noop;

var newline = options.beautify ? function() {
if (newline_insert < 0) return print("\n");
if (OUTPUT[newline_insert] != "\n") {
Expand All @@ -404,7 +403,10 @@ function OutputStream(options) {
current_line++;
}
newline_insert++;
} : may_add_newline;
} : options.max_line_len ? function() {
ensure_line_len();
might_add_newline = OUTPUT.length;
} : noop;

var semicolon = options.beautify ? function() {
print(";");
Expand Down Expand Up @@ -466,7 +468,9 @@ function OutputStream(options) {
} : noop;

function get() {
if (!line_fixed) fix_line();
if (might_add_newline) {
ensure_line_len();
}
return OUTPUT;
}

Expand Down Expand Up @@ -637,14 +641,7 @@ function OutputStream(options) {
col : function() { return current_col; },
pos : function() { return current_pos; },
push_node : function(node) { stack.push(node); },
pop_node : options.preserve_line ? function() {
var node = stack.pop();
if (node.start && node.start.line > current_line) {
insert_newlines(node.start.line - current_line);
}
} : function() {
stack.pop();
},
pop_node : function() { return stack.pop(); },
parent : function(n) {
return stack[stack.length - 2 - (n || 0)];
}
Expand Down
3 changes: 2 additions & 1 deletion lib/utils.js
Expand Up @@ -170,7 +170,8 @@ var MAP = (function() {
})();

function push_uniq(array, el) {
if (array.indexOf(el) < 0) return array.push(el);
if (array.indexOf(el) < 0)
array.push(el);
}

function string_template(text, props) {
Expand Down
181 changes: 0 additions & 181 deletions test/compress/preserve_line.js

This file was deleted.

0 comments on commit caad9c3

Please sign in to comment.