configure `rename` with CLI (#2802)
authorAlex Lam S.L <alexlamsl@gmail.com>
Wed, 17 Jan 2018 07:12:22 +0000 (15:12 +0800)
committerGitHub <noreply@github.com>
Wed, 17 Jan 2018 07:12:22 +0000 (15:12 +0800)
bin/uglifyjs
test/input/rename/input.js [new file with mode: 0644]
test/mocha/cli.js

index 9a3257e..2ff1feb 100755 (executable)
@@ -43,6 +43,7 @@ program.option("-d, --define <expr>[=value]", "Global definitions.", parse_js("d
 program.option("--ie8", "Support non-standard Internet Explorer 8.");
 program.option("--keep-fnames", "Do not mangle/drop function names. Useful for code relying on Function.prototype.name.");
 program.option("--name-cache <file>", "File to hold mangled name mappings.");
+program.option("--rename", "Force symbol expansion.");
 program.option("--no-rename", "Disable symbol expansion.");
 program.option("--self", "Build UglifyJS as a library (implies --wrap UglifyJS)");
 program.option("--source-map [options]", "Enable source map/specify source map options.", parse_source_map());
@@ -62,13 +63,11 @@ if (!program.output && program.sourceMap && program.sourceMap.url != "inline") {
     "compress",
     "ie8",
     "mangle",
-    "rename",
     "sourceMap",
     "toplevel",
     "wrap"
 ].forEach(function(name) {
     if (name in program) {
-        if (name == "rename" && program[name]) return;
         options[name] = program[name];
     }
 });
@@ -121,6 +120,11 @@ if (program.parse) {
         fatal("ERROR: inline source map only works with built-in parser");
     }
 }
+if (~program.rawArgs.indexOf("--rename")) {
+    options.rename = true;
+} else if (!program.rename) {
+    options.rename = false;
+}
 var convert_path = function(name) {
     return name;
 };
diff --git a/test/input/rename/input.js b/test/input/rename/input.js
new file mode 100644 (file)
index 0000000..ef6daed
--- /dev/null
@@ -0,0 +1,6 @@
+function f(x) {
+    return g(x);
+    function g(x) {
+        return x;
+    }
+}
index 85b2e8c..671d700 100644 (file)
@@ -650,4 +650,36 @@ describe("bin/uglifyjs", function () {
             done();
         });
     });
+    it("Should work with explicit --rename", function(done) {
+        var command = uglifyjscmd + " test/input/rename/input.js --rename";
+        exec(command, function(err, stdout, stderr) {
+            if (err) throw err;
+            assert.strictEqual(stdout, "function f(a){return b(a);function b(c){return c}}\n");
+            done();
+        });
+    });
+    it("Should work with explicit --no-rename", function(done) {
+        var command = uglifyjscmd + " test/input/rename/input.js -mc --no-rename";
+        exec(command, function(err, stdout, stderr) {
+            if (err) throw err;
+            assert.strictEqual(stdout, "function f(n){return function(n){return n}(n)}\n");
+            done();
+        });
+    });
+    it("Should work with implicit --rename", function(done) {
+        var command = uglifyjscmd + " test/input/rename/input.js -mc";
+        exec(command, function(err, stdout, stderr) {
+            if (err) throw err;
+            assert.strictEqual(stdout, "function f(n){return n}\n");
+            done();
+        });
+    });
+    it("Should work with implicit --no-rename", function(done) {
+        var command = uglifyjscmd + " test/input/rename/input.js -c";
+        exec(command, function(err, stdout, stderr) {
+            if (err) throw err;
+            assert.strictEqual(stdout, "function f(x){return function(x){return x}(x)}\n");
+            done();
+        });
+    });
 });