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:
11
bin/uglifyjs
11
bin/uglifyjs
@@ -228,9 +228,10 @@ if (ARGS.mangle_props === true) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var OUTPUT_OPTIONS = {
|
var OUTPUT_OPTIONS = {
|
||||||
beautify : BEAUTIFY ? true : false,
|
beautify : BEAUTIFY ? true : false,
|
||||||
preamble : ARGS.preamble || null,
|
max_line_len : 32000,
|
||||||
quote_style : ARGS.quotes != null ? ARGS.quotes : 0
|
preamble : ARGS.preamble || null,
|
||||||
|
quote_style : ARGS.quotes != null ? ARGS.quotes : 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (ARGS.mangle_props == 2) {
|
if (ARGS.mangle_props == 2) {
|
||||||
@@ -540,7 +541,7 @@ function getOptions(flag, constants) {
|
|||||||
ast.walk(new UglifyJS.TreeWalker(function(node){
|
ast.walk(new UglifyJS.TreeWalker(function(node){
|
||||||
if (node instanceof UglifyJS.AST_Seq) return; // descend
|
if (node instanceof UglifyJS.AST_Seq) return; // descend
|
||||||
if (node instanceof UglifyJS.AST_Assign) {
|
if (node instanceof UglifyJS.AST_Assign) {
|
||||||
var name = node.left.print_to_string({ beautify: false }).replace(/-/g, "_");
|
var name = node.left.print_to_string().replace(/-/g, "_");
|
||||||
var value = node.right;
|
var value = node.right;
|
||||||
if (constants)
|
if (constants)
|
||||||
value = new Function("return (" + value.print_to_string() + ")")();
|
value = new Function("return (" + value.print_to_string() + ")")();
|
||||||
@@ -548,7 +549,7 @@ function getOptions(flag, constants) {
|
|||||||
return true; // no descend
|
return true; // no descend
|
||||||
}
|
}
|
||||||
if (node instanceof UglifyJS.AST_Symbol || node instanceof UglifyJS.AST_Binary) {
|
if (node instanceof UglifyJS.AST_Symbol || node instanceof UglifyJS.AST_Binary) {
|
||||||
var name = node.print_to_string({ beautify: false }).replace(/-/g, "_");
|
var name = node.print_to_string().replace(/-/g, "_");
|
||||||
ret[name] = true;
|
ret[name] = true;
|
||||||
return true; // no descend
|
return true; // no descend
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ function OutputStream(options) {
|
|||||||
unescape_regexps : false,
|
unescape_regexps : false,
|
||||||
inline_script : false,
|
inline_script : false,
|
||||||
width : 80,
|
width : 80,
|
||||||
max_line_len : 32000,
|
max_line_len : false,
|
||||||
beautify : false,
|
beautify : false,
|
||||||
source_map : null,
|
source_map : null,
|
||||||
bracketize : false,
|
bracketize : false,
|
||||||
@@ -198,16 +198,29 @@ function OutputStream(options) {
|
|||||||
|
|
||||||
var might_need_space = false;
|
var might_need_space = false;
|
||||||
var might_need_semicolon = false;
|
var might_need_semicolon = false;
|
||||||
|
var might_add_newline = 0;
|
||||||
var last = null;
|
var last = null;
|
||||||
|
|
||||||
function last_char() {
|
function last_char() {
|
||||||
return last.charAt(last.length - 1);
|
return last.charAt(last.length - 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
function maybe_newline() {
|
var ensure_line_len = options.max_line_len ? function() {
|
||||||
if (options.max_line_len && current_col > options.max_line_len)
|
if (current_col > options.max_line_len) {
|
||||||
print("\n");
|
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("( [ + * / - , .");
|
var requireSemicolonChars = makePredicate("( [ + * / - , .");
|
||||||
|
|
||||||
@@ -223,6 +236,7 @@ function OutputStream(options) {
|
|||||||
current_col++;
|
current_col++;
|
||||||
current_pos++;
|
current_pos++;
|
||||||
} else {
|
} else {
|
||||||
|
ensure_line_len();
|
||||||
OUTPUT += "\n";
|
OUTPUT += "\n";
|
||||||
current_pos++;
|
current_pos++;
|
||||||
current_line++;
|
current_line++;
|
||||||
@@ -243,6 +257,7 @@ function OutputStream(options) {
|
|||||||
if (!options.beautify && options.preserve_line && stack[stack.length - 1]) {
|
if (!options.beautify && options.preserve_line && stack[stack.length - 1]) {
|
||||||
var target_line = stack[stack.length - 1].start.line;
|
var target_line = stack[stack.length - 1].start.line;
|
||||||
while (current_line < target_line) {
|
while (current_line < target_line) {
|
||||||
|
ensure_line_len();
|
||||||
OUTPUT += "\n";
|
OUTPUT += "\n";
|
||||||
current_pos++;
|
current_pos++;
|
||||||
current_line++;
|
current_line++;
|
||||||
@@ -264,16 +279,16 @@ function OutputStream(options) {
|
|||||||
}
|
}
|
||||||
might_need_space = false;
|
might_need_space = false;
|
||||||
}
|
}
|
||||||
|
OUTPUT += str;
|
||||||
|
current_pos += str.length;
|
||||||
var a = str.split(/\r?\n/), n = a.length - 1;
|
var a = str.split(/\r?\n/), n = a.length - 1;
|
||||||
current_line += n;
|
current_line += n;
|
||||||
if (n == 0) {
|
current_col += a[0].length;
|
||||||
current_col += a[n].length;
|
if (n > 0) {
|
||||||
} else {
|
ensure_line_len();
|
||||||
current_col = a[n].length;
|
current_col = a[n].length;
|
||||||
}
|
}
|
||||||
current_pos += str.length;
|
|
||||||
last = str;
|
last = str;
|
||||||
OUTPUT += str;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var space = options.beautify ? function() {
|
var space = options.beautify ? function() {
|
||||||
@@ -299,7 +314,10 @@ function OutputStream(options) {
|
|||||||
|
|
||||||
var newline = options.beautify ? function() {
|
var newline = options.beautify ? function() {
|
||||||
print("\n");
|
print("\n");
|
||||||
} : maybe_newline;
|
} : options.max_line_len ? function() {
|
||||||
|
ensure_line_len();
|
||||||
|
might_add_newline = OUTPUT.length;
|
||||||
|
} : noop;
|
||||||
|
|
||||||
var semicolon = options.beautify ? function() {
|
var semicolon = options.beautify ? function() {
|
||||||
print(";");
|
print(";");
|
||||||
@@ -376,6 +394,9 @@ function OutputStream(options) {
|
|||||||
} : noop;
|
} : noop;
|
||||||
|
|
||||||
function get() {
|
function get() {
|
||||||
|
if (might_add_newline) {
|
||||||
|
ensure_line_len();
|
||||||
|
}
|
||||||
return OUTPUT;
|
return OUTPUT;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
28
test/compress/max_line_len.js
Normal file
28
test/compress/max_line_len.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
too_short: {
|
||||||
|
beautify = {
|
||||||
|
max_line_len: 10,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function f(a) {
|
||||||
|
return { c: 42, d: a(), e: "foo"};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expect_exact: 'function f(a){\nreturn{\nc:42,\nd:a(),\ne:"foo"}}'
|
||||||
|
expect_warnings: [
|
||||||
|
"WARN: Output exceeds 10 characters"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
just_enough: {
|
||||||
|
beautify = {
|
||||||
|
max_line_len: 14,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function f(a) {
|
||||||
|
return { c: 42, d: a(), e: "foo"};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expect_exact: 'function f(a){\nreturn{c:42,\nd:a(),e:"foo"}\n}'
|
||||||
|
expect_warnings: [
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -115,7 +115,7 @@ exports.minify = function(files, options) {
|
|||||||
|
|
||||||
// 5. output
|
// 5. output
|
||||||
var inMap = options.inSourceMap;
|
var inMap = options.inSourceMap;
|
||||||
var output = {};
|
var output = { max_line_len: 32000 };
|
||||||
if (typeof options.inSourceMap == "string") {
|
if (typeof options.inSourceMap == "string") {
|
||||||
inMap = JSON.parse(fs.readFileSync(options.inSourceMap, "utf8"));
|
inMap = JSON.parse(fs.readFileSync(options.inSourceMap, "utf8"));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user