Skip to content

Commit

Permalink
add skipTransparentExprWrapperNodes helper (#13687)
Browse files Browse the repository at this point in the history
* overload `skipTransparentExprWrappers`

* fixes isSimpleMemberExpression
  in @babel/plugin-proposal-optional-chaining

* use skipTransparentExprWrappers<Expression> instead of the NodePath
  overload where possible in @babel/plugin-proposal-optional-chaining

* Revert "overload `skipTransparentExprWrappers`"

This reverts commit fad4759.

* add helper `skipTransparentExprWrapperNodes`

* avoids constructing NodePaths when only the Node is needed

* fixes isSimpleMemberExpression
  in @babel/plugin-proposal-optional-chaining

* use this new helper instead of skipTransparentExprWrappers
  where possible in @babel/plugin-proposal-optional-chaining
  • Loading branch information
lightmare committed Oct 28, 2021
1 parent b179365 commit 99a3fef
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 13 deletions.
Expand Up @@ -41,3 +41,12 @@ export function skipTransparentExprWrappers(
}
return path;
}

export function skipTransparentExprWrapperNodes(
node: t.Expression,
): t.Expression {
while (isTransparentExprWrapper(node)) {
node = node.expression;
}
return node;
}
14 changes: 4 additions & 10 deletions packages/babel-plugin-proposal-optional-chaining/src/transform.js
@@ -1,14 +1,14 @@
import { types as t, template } from "@babel/core";
import {
isTransparentExprWrapper,
skipTransparentExprWrapperNodes,
skipTransparentExprWrappers,
} from "@babel/helper-skip-transparent-expression-wrappers";
import { willPathCastToBoolean, findOutermostTransparentParent } from "./util";

const { ast } = template.expression;

function isSimpleMemberExpression(expression) {
expression = skipTransparentExprWrappers(expression);
expression = skipTransparentExprWrapperNodes(expression);
return (
t.isIdentifier(expression) ||
t.isSuper(expression) ||
Expand Down Expand Up @@ -103,11 +103,7 @@ export function transform(
const replaceKey = isCall ? "callee" : "object";

const chainWithTypes = node[replaceKey];
let chain = chainWithTypes;

while (isTransparentExprWrapper(chain)) {
chain = chain.expression;
}
const chain = skipTransparentExprWrapperNodes(chainWithTypes);

let ref;
let check;
Expand Down Expand Up @@ -169,9 +165,7 @@ export function transform(
// i.e. `?.b` in `(a?.b.c)()`
if (i === 0 && parentIsCall) {
// `(a?.b)()` to `(a == null ? undefined : a.b.bind(a))()`
const object = skipTransparentExprWrappers(
replacementPath.get("object"),
).node;
const object = skipTransparentExprWrapperNodes(replacement.object);
let baseRef;
if (!pureGetters || !isSimpleMemberExpression(object)) {
// memoize the context object when getters are not always pure
Expand Down
@@ -1,3 +1 @@
var _bar, _ref;

(_bar = ((_ref = (foo as A)).bar as B)) == null ? void 0 : _bar.call(_ref, foo.bar, false);
((foo as A).bar as B) == null ? void 0 : ((foo as A).bar as B)(foo.bar, false);

0 comments on commit 99a3fef

Please sign in to comment.