From 58dfe4352fe97c267e88b70219ba9e1693486f2a Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 5 Jul 2022 15:14:51 -0700 Subject: [PATCH] implement `--line-length` --- README.md | 1 + bin/uglifyjs | 5 +++++ lib/minify.js | 2 ++ test/mocha/cli.js | 15 +++++++++++++++ 4 files changed, 23 insertions(+) diff --git a/README.md b/README.md index 60ee8145ca0..bdc5baec1c8 100644 --- a/README.md +++ b/README.md @@ -118,6 +118,7 @@ a double dash to prevent input files being used as option arguments: --keep-fargs Do not mangle/drop function arguments. --keep-fnames Do not mangle/drop function names. Useful for code relying on Function.prototype.name. + -l, --line-length Maximum line length for output code. --module Process input as ES module (implies --toplevel) --name-cache File to hold mangled name mappings. --self Build UglifyJS as a library (implies --wrap UglifyJS) diff --git a/bin/uglifyjs b/bin/uglifyjs index 304d84de703..94b08e8049f 100755 --- a/bin/uglifyjs +++ b/bin/uglifyjs @@ -21,6 +21,7 @@ var short_forms = { d: "define", e: "enclose", h: "help", + l: "line-length", m: "mangle", o: "output", O: "output-opts", @@ -107,6 +108,7 @@ function process_option(name, no_value) { " --ie Support non-standard Internet Explorer.", " --keep-fargs Do not mangle/drop function arguments.", " --keep-fnames Do not mangle/drop function names. Useful for code relying on Function.prototype.name.", + " -l, --line-length Maximum line length for output code.", " --module Process input as ES module (implies --toplevel)", " --name-cache File to hold mangled name mappings.", " --rename Force symbol expansion.", @@ -153,6 +155,9 @@ function process_option(name, no_value) { case "annotations": case "ie": case "ie8": + case "line-length": + options.max_line_len = read_value(true); + break; case "module": case "timings": case "toplevel": diff --git a/lib/minify.js b/lib/minify.js index 2e9c33253a6..e7b07e8d12d 100644 --- a/lib/minify.js +++ b/lib/minify.js @@ -80,6 +80,7 @@ function minify(files, options) { ie8: false, keep_fargs: false, keep_fnames: false, + max_line_len: undefined, mangle: {}, module: false, nameCache: null, @@ -214,6 +215,7 @@ function minify(files, options) { var output = defaults(options.output, { ast: false, code: true, + max_line_len: options.max_line_len, }); if (output.ast) result.ast = toplevel; if (output.code) { diff --git a/test/mocha/cli.js b/test/mocha/cli.js index 34b97101d50..b397208c98d 100644 --- a/test/mocha/cli.js +++ b/test/mocha/cli.js @@ -964,4 +964,19 @@ describe("bin/uglifyjs", function() { done(); }).stdin.end(code); }); + it("Should fail with empty --line-length", function(done) { + exec(uglifyjscmd + " -l", function(err, stdout, stderr) { + assert.ok(err); + assert.strictEqual(stdout, ""); + assert.strictEqual(stderr, "ERROR: missing option argument for --line-length\n"); + done(); + }) + }); + it("Should work with --line-length", function(done) { + exec(uglifyjscmd + " --line-length 20 test/input/reduce/label.js", function(err, stdout, stderr) { + assert.strictEqual(stdout, "UNUSED:{console.log(\n0-.1-.1-.1)}\n"); + assert.strictEqual(stderr, ""); + done(); + }) + }); });