Skip to content

Commit

Permalink
feat: transform ?.#x and ?.#m()
Browse files Browse the repository at this point in the history
  • Loading branch information
JLHwung committed May 22, 2020
1 parent 0742d99 commit 397d516
Show file tree
Hide file tree
Showing 10 changed files with 598 additions and 138 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -125,12 +125,6 @@ const handle = {
throw member.buildCodeFrameError(`can't handle delete`);
}

if (node.optional) {
throw member.buildCodeFrameError(
`can't handle '?.' directly before ${node.property.type}`,
);
}

// Now, we're looking for the start of this optional chain, which is
// optional to the left of this member.
//
Expand All @@ -150,6 +144,8 @@ const handle = {
startingOptional = startingOptional.get("callee");
continue;
}
// prevent infinite loop: unreachable if the AST is well-formed
throw new Error("Internal error");
}

const { scope } = member;
Expand All @@ -160,8 +156,13 @@ const handle = {
const baseRef = scope.generateUidIdentifierBasedOnNode(startingNode);
scope.push({ id: baseRef });

// Compute parentIsOptionalCall before `startingOptional` is replaced
// as `node` may refer to `startingOptional.node` before replaced.
const parentIsOptionalCall = parentPath.isOptionalCallExpression({
callee: node,
});
startingOptional.replaceWith(toNonOptional(startingOptional, baseRef));
if (parentPath.isOptionalCallExpression({ callee: node })) {
if (parentIsOptionalCall) {
parentPath.replaceWith(this.call(member, parent.arguments));
} else {
member.replaceWith(this.get(member));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,38 @@ class Foo {
return deep;
}

Foo?.#m();
Foo?.#m().toString;
Foo?.#m().toString();

o?.Foo.#m();
o?.Foo.#m().toString;
o?.Foo.#m().toString();

o?.Foo?.#m();
o?.Foo?.#m().toString;
o?.Foo?.#m().toString();

deep?.very.o?.Foo.#m();
deep?.very.o?.Foo.#m().toString;
deep?.very.o?.Foo.#m().toString();

deep?.very.o?.Foo?.#m();
deep?.very.o?.Foo?.#m().toString;
deep?.very.o?.Foo?.#m().toString();

o?.Foo.#self.#m();
o?.Foo.#self.self.#m();
o?.Foo.#self?.self.#m();
o?.Foo.#self.self?.self.#m();
o?.Foo.#self?.self?.self.#m();

o?.Foo.#self?.#m();
o?.Foo.#self.self?.#m();
o?.Foo.#self?.self?.#m();
o?.Foo.#self.self?.self?.#m();
o?.Foo.#self?.self?.self?.#m();

o?.Foo.#self.getSelf().#m();
o?.Foo.#self.getSelf?.().#m();
o?.Foo.#self?.getSelf().#m();
Expand All @@ -38,20 +56,43 @@ class Foo {
o?.Foo.#self?.getSelf()?.self.#m();
o?.Foo.#self?.getSelf?.()?.self.#m();

o?.Foo.#self.getSelf()?.#m();
o?.Foo.#self.getSelf?.()?.#m();
o?.Foo.#self?.getSelf()?.#m();
o?.Foo.#self?.getSelf?.()?.#m();
o?.Foo.#self.getSelf()?.self?.#m();
o?.Foo.#self.getSelf?.()?.self?.#m();
o?.Foo.#self?.getSelf()?.self?.#m();
o?.Foo.#self?.getSelf?.()?.self?.#m()

fn?.().Foo.#m();
fn?.().Foo.#m().toString;
fn?.().Foo.#m().toString();

fn?.().Foo?.#m();
fn?.().Foo?.#m().toString;
fn?.().Foo?.#m().toString();

fnDeep?.().very.o?.Foo.#m();
fnDeep?.().very.o?.Foo.#m().toString;
fnDeep?.().very.o?.Foo.#m().toString();

fnDeep?.().very.o?.Foo?.#m();
fnDeep?.().very.o?.Foo?.#m().toString;
fnDeep?.().very.o?.Foo?.#m().toString();

fn?.().Foo.#self.#m();
fn?.().Foo.#self.self.#m();
fn?.().Foo.#self?.self.#m();
fn?.().Foo.#self.self?.self.#m();
fn?.().Foo.#self?.self?.self.#m();

fn?.().Foo.#self?.#m();
fn?.().Foo.#self.self?.#m();
fn?.().Foo.#self?.self?.#m();
fn?.().Foo.#self.self?.self?.#m();
fn?.().Foo.#self?.self?.self?.#m();

fn?.().Foo.#self.getSelf().#m();
fn?.().Foo.#self.getSelf?.().#m();
fn?.().Foo.#self?.getSelf().#m();
Expand All @@ -60,6 +101,15 @@ class Foo {
fn?.().Foo.#self.getSelf?.()?.self.#m();
fn?.().Foo.#self?.getSelf()?.self.#m();
fn?.().Foo.#self?.getSelf?.()?.self.#m();

fn?.().Foo.#self.getSelf()?.#m();
fn?.().Foo.#self.getSelf?.()?.#m();
fn?.().Foo.#self?.getSelf()?.#m();
fn?.().Foo.#self?.getSelf?.()?.#m();
fn?.().Foo.#self.getSelf()?.self?.#m();
fn?.().Foo.#self.getSelf?.()?.self?.#m();
fn?.().Foo.#self?.getSelf()?.self?.#m();
fn?.().Foo.#self?.getSelf?.()?.self?.#m();
}
}

Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,38 @@ class Foo {
return deep;
}

Foo?.#m();
Foo?.#m().toString;
Foo?.#m().toString();

o?.Foo.#m();
o?.Foo.#m().toString;
o?.Foo.#m().toString();

o?.Foo?.#m();
o?.Foo?.#m().toString;
o?.Foo?.#m().toString();

deep?.very.o?.Foo.#m();
deep?.very.o?.Foo.#m().toString;
deep?.very.o?.Foo.#m().toString();

deep?.very.o?.Foo?.#m();
deep?.very.o?.Foo?.#m().toString;
deep?.very.o?.Foo?.#m().toString();

o?.Foo.#self.#m();
o?.Foo.#self.self.#m();
o?.Foo.#self?.self.#m();
o?.Foo.#self.self?.self.#m();
o?.Foo.#self?.self?.self.#m();

o?.Foo.#self?.#m();
o?.Foo.#self.self?.#m();
o?.Foo.#self?.self?.#m();
o?.Foo.#self.self?.self?.#m();
o?.Foo.#self?.self?.self?.#m();

o?.Foo.#self.getSelf().#m();
o?.Foo.#self.getSelf?.().#m();
o?.Foo.#self?.getSelf().#m();
Expand All @@ -38,20 +56,43 @@ class Foo {
o?.Foo.#self?.getSelf()?.self.#m();
o?.Foo.#self?.getSelf?.()?.self.#m();

o?.Foo.#self.getSelf()?.#m();
o?.Foo.#self.getSelf?.()?.#m();
o?.Foo.#self?.getSelf()?.#m();
o?.Foo.#self?.getSelf?.()?.#m();
o?.Foo.#self.getSelf()?.self?.#m();
o?.Foo.#self.getSelf?.()?.self?.#m();
o?.Foo.#self?.getSelf()?.self?.#m();
o?.Foo.#self?.getSelf?.()?.self?.#m()

fn?.().Foo.#m();
fn?.().Foo.#m().toString;
fn?.().Foo.#m().toString();

fn?.().Foo?.#m();
fn?.().Foo?.#m().toString;
fn?.().Foo?.#m().toString();

fnDeep?.().very.o?.Foo.#m();
fnDeep?.().very.o?.Foo.#m().toString;
fnDeep?.().very.o?.Foo.#m().toString();

fnDeep?.().very.o?.Foo?.#m();
fnDeep?.().very.o?.Foo?.#m().toString;
fnDeep?.().very.o?.Foo?.#m().toString();

fn?.().Foo.#self.#m();
fn?.().Foo.#self.self.#m();
fn?.().Foo.#self?.self.#m();
fn?.().Foo.#self.self?.self.#m();
fn?.().Foo.#self?.self?.self.#m();

fn?.().Foo.#self?.#m();
fn?.().Foo.#self.self?.#m();
fn?.().Foo.#self?.self?.#m();
fn?.().Foo.#self.self?.self?.#m();
fn?.().Foo.#self?.self?.self?.#m();

fn?.().Foo.#self.getSelf().#m();
fn?.().Foo.#self.getSelf?.().#m();
fn?.().Foo.#self?.getSelf().#m();
Expand All @@ -60,6 +101,15 @@ class Foo {
fn?.().Foo.#self.getSelf?.()?.self.#m();
fn?.().Foo.#self?.getSelf()?.self.#m();
fn?.().Foo.#self?.getSelf?.()?.self.#m();

fn?.().Foo.#self.getSelf()?.#m();
fn?.().Foo.#self.getSelf?.()?.#m();
fn?.().Foo.#self?.getSelf()?.#m();
fn?.().Foo.#self?.getSelf?.()?.#m();
fn?.().Foo.#self.getSelf()?.self?.#m();
fn?.().Foo.#self.getSelf?.()?.self?.#m();
fn?.().Foo.#self?.getSelf()?.self?.#m();
fn?.().Foo.#self?.getSelf?.()?.self?.#m();
}
}

Expand Down
Loading

0 comments on commit 397d516

Please sign in to comment.