add new arrows compress option (#2154)

Convert ES5 style anonymous function expressions
to arrow functions if permissible by language semantics.

Note: `arrows` requires that the `ecma` compress option
is set to `6` or greater.

fixes #2150
This commit is contained in:
Alex Lam S.L
2017-06-24 14:45:24 +08:00
committed by GitHub
parent 7b95b63ca1
commit d1f085bce7
7 changed files with 140 additions and 10 deletions

View File

@@ -210,3 +210,73 @@ no_leading_parentheses: {
}
expect_exact: "(x,y)=>x(y);async(x,y)=>await x(y);"
}
async_identifiers: {
options = {
arrows: true,
ecma: 6,
}
input: {
var async = function(x){ console.log("async", x); };
var await = function(x){ console.log("await", x); };
async(1);
await(2);
}
expect: {
var async = x => { console.log("async", x); };
var await = x => { console.log("await", x); };
async(1);
await(2);
}
expect_stdout: [
"async 1",
"await 2",
]
node_version: ">=4"
}
async_function_expression: {
options = {
arrows: true,
ecma: 6,
evaluate: true,
side_effects: true,
}
input: {
var named = async function foo() {
await bar(1 + 0) + (2 + 0);
}
var anon = async function() {
await (1 + 0) + bar(2 + 0);
}
}
expect: {
var named = async function foo() {
await bar(1);
};
var anon = async () => {
await 1, bar(2);
};
}
}
issue_27: {
options = {
arrows: true,
collapse_vars: true,
ecma: 6,
unused: true,
}
input: {
(function(jQuery) {
var $;
$ = jQuery;
$("body").addClass("foo");
})(jQuery);
}
expect: {
(jQuery => {
jQuery("body").addClass("foo");
})(jQuery);
}
}

View File

@@ -167,14 +167,14 @@ async_inline: {
async_identifiers: {
input: {
let async = function(x){ console.log("async", x); };
let await = function(x){ console.log("await", x); };
var async = function(x){ console.log("async", x); };
var await = function(x){ console.log("await", x); };
async(1);
await(2);
}
expect: {
let async = function(x){ console.log("async", x); };
let await = function(x){ console.log("await", x); };
var async = function(x){ console.log("async", x); };
var await = function(x){ console.log("await", x); };
async(1);
await(2);
}
@@ -182,7 +182,6 @@ async_identifiers: {
"async 1",
"await 2",
]
node_version: ">=8"
}
async_shorthand_property: {

View File

@@ -32,3 +32,25 @@ compress_new_function_with_destruct: {
Function("[[a]]", "[{bb:b}]", 'return a');
}
}
compress_new_function_with_destruct_arrows: {
options = {
arrows: true,
unsafe: true,
unsafe_Func: true,
ecma: 6
}
beautify = {
ecma: 6
}
input: {
new Function("aa, [bb]", 'return aa;');
new Function("aa, {bb}", 'return aa;');
new Function("[[aa]], [{bb}]", 'return aa;');
}
expect: {
Function("aa, [bb]", 'return aa;');
Function("aa, {bb}", 'return aa;');
Function("[[aa]], [{bb}]", 'return aa;');
}
}

View File

@@ -1,4 +1,7 @@
arrow_functions: {
options = {
arrows: true,
}
input: {
(a) => b; // 1 args
(a, b) => c; // n args
@@ -13,6 +16,9 @@ arrow_functions: {
}
arrow_return: {
options = {
arrows: true,
}
input: {
() => {};
() => { return; };