Dedupe code when calling buildOptimizedSequenceExpression (#13535)
This commit is contained in:
parent
234316161f
commit
f639eee2f5
@ -1,12 +1,17 @@
|
|||||||
import { types as t } from "@babel/core";
|
import { types as t } from "@babel/core";
|
||||||
|
|
||||||
// tries to optimize sequence expressions in the format
|
// tries to optimize sequence expressions in the format
|
||||||
// (a = b, ((c) => d + e)(a))
|
// (a = b, (c => c + e)(a))
|
||||||
// to
|
// to
|
||||||
// (a = b, a + e)
|
// (a = b, a + e)
|
||||||
const buildOptimizedSequenceExpression = ({ assign, call, path }) => {
|
const buildOptimizedSequenceExpression = ({ call, path, placeholder }) => {
|
||||||
const { left: placeholderNode, right: pipelineLeft } = assign;
|
|
||||||
const { callee: calledExpression } = call;
|
const { callee: calledExpression } = call;
|
||||||
|
const pipelineLeft = path.node.left;
|
||||||
|
const assign = t.assignmentExpression(
|
||||||
|
"=",
|
||||||
|
t.cloneNode(placeholder),
|
||||||
|
pipelineLeft,
|
||||||
|
);
|
||||||
|
|
||||||
let optimizeArrow =
|
let optimizeArrow =
|
||||||
t.isArrowFunctionExpression(calledExpression) &&
|
t.isArrowFunctionExpression(calledExpression) &&
|
||||||
@ -30,7 +35,7 @@ const buildOptimizedSequenceExpression = ({ assign, call, path }) => {
|
|||||||
|
|
||||||
call.callee = evalSequence;
|
call.callee = evalSequence;
|
||||||
|
|
||||||
path.scope.push({ id: t.cloneNode(placeholderNode) });
|
path.scope.push({ id: t.cloneNode(placeholder) });
|
||||||
|
|
||||||
return t.sequenceExpression([assign, call]);
|
return t.sequenceExpression([assign, call]);
|
||||||
}
|
}
|
||||||
@ -40,10 +45,10 @@ const buildOptimizedSequenceExpression = ({ assign, call, path }) => {
|
|||||||
return t.sequenceExpression([pipelineLeft, calledExpression.body]);
|
return t.sequenceExpression([pipelineLeft, calledExpression.body]);
|
||||||
}
|
}
|
||||||
|
|
||||||
path.scope.push({ id: t.cloneNode(placeholderNode) });
|
path.scope.push({ id: t.cloneNode(placeholder) });
|
||||||
|
|
||||||
if (param) {
|
if (param) {
|
||||||
path.get("right").scope.rename(param.name, placeholderNode.name);
|
path.get("right").scope.rename(param.name, placeholder.name);
|
||||||
|
|
||||||
return t.sequenceExpression([assign, calledExpression.body]);
|
return t.sequenceExpression([assign, calledExpression.body]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,7 +14,7 @@ const fsharpVisitor = {
|
|||||||
? t.awaitExpression(t.cloneNode(placeholder))
|
? t.awaitExpression(t.cloneNode(placeholder))
|
||||||
: t.callExpression(right, [t.cloneNode(placeholder)]);
|
: t.callExpression(right, [t.cloneNode(placeholder)]);
|
||||||
const sequence = buildOptimizedSequenceExpression({
|
const sequence = buildOptimizedSequenceExpression({
|
||||||
assign: t.assignmentExpression("=", t.cloneNode(placeholder), left),
|
placeholder,
|
||||||
call,
|
call,
|
||||||
path,
|
path,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -12,7 +12,7 @@ const minimalVisitor = {
|
|||||||
const call = t.callExpression(right, [t.cloneNode(placeholder)]);
|
const call = t.callExpression(right, [t.cloneNode(placeholder)]);
|
||||||
path.replaceWith(
|
path.replaceWith(
|
||||||
buildOptimizedSequenceExpression({
|
buildOptimizedSequenceExpression({
|
||||||
assign: t.assignmentExpression("=", t.cloneNode(placeholder), left),
|
placeholder,
|
||||||
call,
|
call,
|
||||||
path,
|
path,
|
||||||
}),
|
}),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user