Optimize 0 param arrow
This commit is contained in:
parent
60335ce1ad
commit
4b440110a1
@ -6,28 +6,34 @@ export default function({ types: t }) {
|
|||||||
|
|
||||||
visitor: {
|
visitor: {
|
||||||
BinaryExpression(path) {
|
BinaryExpression(path) {
|
||||||
const { scope, parentPath } = path;
|
const { scope } = path;
|
||||||
const { node } = path;
|
const { operator, left, right } = path.node;
|
||||||
const { operator, left, right } = node;
|
|
||||||
if (operator !== "|>") return;
|
if (operator !== "|>") return;
|
||||||
|
|
||||||
// Why do I have to fix this here?!
|
let optimizeArrow =
|
||||||
if (parentPath.isArrowFunctionExpression({ body: node })) {
|
t.isArrowFunctionExpression(right) && t.isExpression(right.body);
|
||||||
path.replaceWith(t.blockStatement([t.returnStatement(node)]));
|
let param;
|
||||||
|
|
||||||
|
if (optimizeArrow) {
|
||||||
|
const { params } = right;
|
||||||
|
if (params.length === 1) {
|
||||||
|
param = params[0];
|
||||||
|
} else if (params.length > 1) {
|
||||||
|
optimizeArrow = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (optimizeArrow && !param) {
|
||||||
|
// Arrow function with 0 arguments
|
||||||
|
path.replaceWith(t.sequenceExpression([left, right.body]));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const optimizeArrow =
|
const placeholder = scope.generateUidIdentifierBasedOnNode(
|
||||||
t.isArrowFunctionExpression(right) &&
|
param || left,
|
||||||
right.params.length === 1 &&
|
);
|
||||||
t.isIdentifier(right.params[0]) &&
|
|
||||||
t.isExpression(right.body);
|
|
||||||
|
|
||||||
const param = optimizeArrow ? right.params[0] : left;
|
|
||||||
const placeholder = scope.generateUidIdentifierBasedOnNode(param);
|
|
||||||
scope.push({ id: placeholder });
|
scope.push({ id: placeholder });
|
||||||
|
if (param) {
|
||||||
if (optimizeArrow) {
|
|
||||||
path.get("right").scope.rename(param.name, placeholder.name);
|
path.get("right").scope.rename(param.name, placeholder.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,8 @@
|
|||||||
|
var a = 1,
|
||||||
|
b = 2,
|
||||||
|
c = 3;
|
||||||
|
var result = a
|
||||||
|
|> (a, b) => b
|
||||||
|
|> (a, b) => c;
|
||||||
|
|
||||||
|
assert.equal(result, c)
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
var a = 1,
|
||||||
|
b = 2,
|
||||||
|
c = 3;
|
||||||
|
var result = a
|
||||||
|
|> (a, b) => b
|
||||||
|
|> (a, b) => c;
|
||||||
|
|
||||||
|
assert.equal(result, c)
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
var _a;
|
||||||
|
|
||||||
|
var a = 1,
|
||||||
|
b = 2,
|
||||||
|
c = 3;
|
||||||
|
var result = (_a = a, ((a, b) => {
|
||||||
|
var _b;
|
||||||
|
|
||||||
|
return _b = b, ((a, b) => c)(_b);
|
||||||
|
})(_a));
|
||||||
|
assert.equal(result, c);
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
var a = 1,
|
||||||
|
b = 2,
|
||||||
|
c = 3;
|
||||||
|
var result = a
|
||||||
|
|> () => b
|
||||||
|
|> () => c;
|
||||||
|
|
||||||
|
assert.equal(result, c)
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
var a = 1,
|
||||||
|
b = 2,
|
||||||
|
c = 3;
|
||||||
|
var result = a
|
||||||
|
|> () => b
|
||||||
|
|> () => c;
|
||||||
|
|
||||||
|
assert.equal(result, c)
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
var a = 1,
|
||||||
|
b = 2,
|
||||||
|
c = 3;
|
||||||
|
var result = (a, (b, c));
|
||||||
|
assert.equal(result, c);
|
||||||
Loading…
x
Reference in New Issue
Block a user