Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(es/typescript): Fix handling of optional chaining #7660

Merged
merged 10 commits into from
Jul 24, 2023

Conversation

kdy1
Copy link
Member

@kdy1 kdy1 commented Jul 14, 2023

@kdy1 kdy1 added this to the Planned milestone Jul 14, 2023
@kdy1 kdy1 self-assigned this Jul 14, 2023
@kdy1
Copy link
Member Author

kdy1 commented Jul 18, 2023

Problematic:

[crates/swc_ecma_transforms_typescript/src/strip.rs:452] &expr = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                25,
            ),
            ctxt: #0,
        },
        optional: true,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                obj: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                22,
                            ),
                            ctxt: #2,
                        },
                        sym: Atom('a' type=static),
                        optional: false,
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                24,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('b' type=static),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:477] &obj = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                25,
            ),
            ctxt: #0,
        },
        optional: true,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                obj: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                22,
                            ),
                            ctxt: #2,
                        },
                        sym: Atom('a' type=static),
                        optional: false,
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                24,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('b' type=static),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:477] &obj = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                25,
            ),
            ctxt: #0,
        },
        optional: true,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                obj: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                22,
                            ),
                            ctxt: #2,
                        },
                        sym: Atom('a' type=static),
                        optional: false,
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                24,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('b' type=static),
                        optional: false,
                    },
                ),
            },
        ),
    },
)

@kdy1
Copy link
Member Author

kdy1 commented Jul 18, 2023

Wanted:

[crates/swc_ecma_transforms_typescript/src/strip.rs:2084] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                27,
            ),
            ctxt: #0,
        },
        optional: false,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        27,
                    ),
                    ctxt: #0,
                },
                obj: OptChain(
                    OptChainExpr {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        optional: true,
                        base: Member(
                            MemberExpr {
                                span: Span {
                                    lo: BytePos(
                                        21,
                                    ),
                                    hi: BytePos(
                                        25,
                                    ),
                                    ctxt: #0,
                                },
                                obj: Ident(
                                    Ident {
                                        span: Span {
                                            lo: BytePos(
                                                21,
                                            ),
                                            hi: BytePos(
                                                22,
                                            ),
                                            ctxt: #2,
                                        },
                                        sym: Atom('a' type=static),
                                        optional: false,
                                    },
                                ),
                                prop: Ident(
                                    Ident {
                                        span: Span {
                                            lo: BytePos(
                                                24,
                                            ),
                                            hi: BytePos(
                                                25,
                                            ),
                                            ctxt: #0,
                                        },
                                        sym: Atom('b' type=static),
                                        optional: false,
                                    },
                                ),
                            },
                        ),
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                26,
                            ),
                            hi: BytePos(
                                27,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('c' type=inline),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2084] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                25,
            ),
            ctxt: #0,
        },
        optional: true,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                obj: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                22,
                            ),
                            ctxt: #2,
                        },
                        sym: Atom('a' type=static),
                        optional: false,
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                24,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('b' type=static),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2096] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                25,
            ),
            ctxt: #0,
        },
        optional: true,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                obj: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                22,
                            ),
                            ctxt: #2,
                        },
                        sym: Atom('a' type=static),
                        optional: false,
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                24,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('b' type=static),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2096] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                27,
            ),
            ctxt: #0,
        },
        optional: false,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        27,
                    ),
                    ctxt: #0,
                },
                obj: OptChain(
                    OptChainExpr {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        optional: true,
                        base: Member(
                            MemberExpr {
                                span: Span {
                                    lo: BytePos(
                                        21,
                                    ),
                                    hi: BytePos(
                                        25,
                                    ),
                                    ctxt: #0,
                                },
                                obj: Ident(
                                    Ident {
                                        span: Span {
                                            lo: BytePos(
                                                21,
                                            ),
                                            hi: BytePos(
                                                22,
                                            ),
                                            ctxt: #2,
                                        },
                                        sym: Atom('a' type=static),
                                        optional: false,
                                    },
                                ),
                                prop: Ident(
                                    Ident {
                                        span: Span {
                                            lo: BytePos(
                                                24,
                                            ),
                                            hi: BytePos(
                                                25,
                                            ),
                                            ctxt: #0,
                                        },
                                        sym: Atom('b' type=static),
                                        optional: false,
                                    },
                                ),
                            },
                        ),
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                26,
                            ),
                            hi: BytePos(
                                27,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('c' type=inline),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2084] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                27,
            ),
            ctxt: #0,
        },
        optional: false,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        27,
                    ),
                    ctxt: #0,
                },
                obj: OptChain(
                    OptChainExpr {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        optional: true,
                        base: Member(
                            MemberExpr {
                                span: Span {
                                    lo: BytePos(
                                        21,
                                    ),
                                    hi: BytePos(
                                        25,
                                    ),
                                    ctxt: #0,
                                },
                                obj: Ident(
                                    Ident {
                                        span: Span {
                                            lo: BytePos(
                                                21,
                                            ),
                                            hi: BytePos(
                                                22,
                                            ),
                                            ctxt: #2,
                                        },
                                        sym: Atom('a' type=static),
                                        optional: false,
                                    },
                                ),
                                prop: Ident(
                                    Ident {
                                        span: Span {
                                            lo: BytePos(
                                                24,
                                            ),
                                            hi: BytePos(
                                                25,
                                            ),
                                            ctxt: #0,
                                        },
                                        sym: Atom('b' type=static),
                                        optional: false,
                                    },
                                ),
                            },
                        ),
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                26,
                            ),
                            hi: BytePos(
                                27,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('c' type=inline),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2084] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                25,
            ),
            ctxt: #0,
        },
        optional: true,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                obj: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                22,
                            ),
                            ctxt: #2,
                        },
                        sym: Atom('a' type=static),
                        optional: false,
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                24,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('b' type=static),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2096] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                25,
            ),
            ctxt: #0,
        },
        optional: true,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                obj: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                22,
                            ),
                            ctxt: #2,
                        },
                        sym: Atom('a' type=static),
                        optional: false,
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                24,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('b' type=static),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2096] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                27,
            ),
            ctxt: #0,
        },
        optional: false,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        27,
                    ),
                    ctxt: #0,
                },
                obj: OptChain(
                    OptChainExpr {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        optional: true,
                        base: Member(
                            MemberExpr {
                                span: Span {
                                    lo: BytePos(
                                        21,
                                    ),
                                    hi: BytePos(
                                        25,
                                    ),
                                    ctxt: #0,
                                },
                                obj: Ident(
                                    Ident {
                                        span: Span {
                                            lo: BytePos(
                                                21,
                                            ),
                                            hi: BytePos(
                                                22,
                                            ),
                                            ctxt: #2,
                                        },
                                        sym: Atom('a' type=static),
                                        optional: false,
                                    },
                                ),
                                prop: Ident(
                                    Ident {
                                        span: Span {
                                            lo: BytePos(
                                                24,
                                            ),
                                            hi: BytePos(
                                                25,
                                            ),
                                            ctxt: #0,
                                        },
                                        sym: Atom('b' type=static),
                                        optional: false,
                                    },
                                ),
                            },
                        ),
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                26,
                            ),
                            hi: BytePos(
                                27,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('c' type=inline),
                        optional: false,
                    },
                ),
            },
        ),
    },
)

Problematic:

[crates/swc_ecma_transforms_typescript/src/strip.rs:2084] &*n = Member(
    MemberExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                28,
            ),
            ctxt: #0,
        },
        obj: TsNonNull(
            TsNonNullExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        26,
                    ),
                    ctxt: #0,
                },
                expr: OptChain(
                    OptChainExpr {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        optional: true,
                        base: Member(
                            MemberExpr {
                                span: Span {
                                    lo: BytePos(
                                        21,
                                    ),
                                    hi: BytePos(
                                        25,
                                    ),
                                    ctxt: #0,
                                },
                                obj: Ident(
                                    Ident {
                                        span: Span {
                                            lo: BytePos(
                                                21,
                                            ),
                                            hi: BytePos(
                                                22,
                                            ),
                                            ctxt: #2,
                                        },
                                        sym: Atom('a' type=static),
                                        optional: false,
                                    },
                                ),
                                prop: Ident(
                                    Ident {
                                        span: Span {
                                            lo: BytePos(
                                                24,
                                            ),
                                            hi: BytePos(
                                                25,
                                            ),
                                            ctxt: #0,
                                        },
                                        sym: Atom('b' type=static),
                                        optional: false,
                                    },
                                ),
                            },
                        ),
                    },
                ),
            },
        ),
        prop: Ident(
            Ident {
                span: Span {
                    lo: BytePos(
                        27,
                    ),
                    hi: BytePos(
                        28,
                    ),
                    ctxt: #0,
                },
                sym: Atom('c' type=inline),
                optional: false,
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2084] &*n = TsNonNull(
    TsNonNullExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                26,
            ),
            ctxt: #0,
        },
        expr: OptChain(
            OptChainExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                optional: true,
                base: Member(
                    MemberExpr {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        obj: Ident(
                            Ident {
                                span: Span {
                                    lo: BytePos(
                                        21,
                                    ),
                                    hi: BytePos(
                                        22,
                                    ),
                                    ctxt: #2,
                                },
                                sym: Atom('a' type=static),
                                optional: false,
                            },
                        ),
                        prop: Ident(
                            Ident {
                                span: Span {
                                    lo: BytePos(
                                        24,
                                    ),
                                    hi: BytePos(
                                        25,
                                    ),
                                    ctxt: #0,
                                },
                                sym: Atom('b' type=static),
                                optional: false,
                            },
                        ),
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2084] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                25,
            ),
            ctxt: #0,
        },
        optional: true,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                obj: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                22,
                            ),
                            ctxt: #2,
                        },
                        sym: Atom('a' type=static),
                        optional: false,
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                24,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('b' type=static),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2096] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                25,
            ),
            ctxt: #0,
        },
        optional: true,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                obj: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                22,
                            ),
                            ctxt: #2,
                        },
                        sym: Atom('a' type=static),
                        optional: false,
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                24,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('b' type=static),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2096] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                25,
            ),
            ctxt: #0,
        },
        optional: true,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                obj: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                22,
                            ),
                            ctxt: #2,
                        },
                        sym: Atom('a' type=static),
                        optional: false,
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                24,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('b' type=static),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2096] &*n = Member(
    MemberExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                28,
            ),
            ctxt: #0,
        },
        obj: OptChain(
            OptChainExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                optional: true,
                base: Member(
                    MemberExpr {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        obj: Ident(
                            Ident {
                                span: Span {
                                    lo: BytePos(
                                        21,
                                    ),
                                    hi: BytePos(
                                        22,
                                    ),
                                    ctxt: #2,
                                },
                                sym: Atom('a' type=static),
                                optional: false,
                            },
                        ),
                        prop: Ident(
                            Ident {
                                span: Span {
                                    lo: BytePos(
                                        24,
                                    ),
                                    hi: BytePos(
                                        25,
                                    ),
                                    ctxt: #0,
                                },
                                sym: Atom('b' type=static),
                                optional: false,
                            },
                        ),
                    },
                ),
            },
        ),
        prop: Ident(
            Ident {
                span: Span {
                    lo: BytePos(
                        27,
                    ),
                    hi: BytePos(
                        28,
                    ),
                    ctxt: #0,
                },
                sym: Atom('c' type=inline),
                optional: false,
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2084] &*n = Member(
    MemberExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                28,
            ),
            ctxt: #0,
        },
        obj: OptChain(
            OptChainExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                optional: true,
                base: Member(
                    MemberExpr {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        obj: Ident(
                            Ident {
                                span: Span {
                                    lo: BytePos(
                                        21,
                                    ),
                                    hi: BytePos(
                                        22,
                                    ),
                                    ctxt: #2,
                                },
                                sym: Atom('a' type=static),
                                optional: false,
                            },
                        ),
                        prop: Ident(
                            Ident {
                                span: Span {
                                    lo: BytePos(
                                        24,
                                    ),
                                    hi: BytePos(
                                        25,
                                    ),
                                    ctxt: #0,
                                },
                                sym: Atom('b' type=static),
                                optional: false,
                            },
                        ),
                    },
                ),
            },
        ),
        prop: Ident(
            Ident {
                span: Span {
                    lo: BytePos(
                        27,
                    ),
                    hi: BytePos(
                        28,
                    ),
                    ctxt: #0,
                },
                sym: Atom('c' type=inline),
                optional: false,
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2084] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                25,
            ),
            ctxt: #0,
        },
        optional: true,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                obj: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                22,
                            ),
                            ctxt: #2,
                        },
                        sym: Atom('a' type=static),
                        optional: false,
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                24,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('b' type=static),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2096] &*n = OptChain(
    OptChainExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                25,
            ),
            ctxt: #0,
        },
        optional: true,
        base: Member(
            MemberExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                obj: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                22,
                            ),
                            ctxt: #2,
                        },
                        sym: Atom('a' type=static),
                        optional: false,
                    },
                ),
                prop: Ident(
                    Ident {
                        span: Span {
                            lo: BytePos(
                                24,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        sym: Atom('b' type=static),
                        optional: false,
                    },
                ),
            },
        ),
    },
)
[crates/swc_ecma_transforms_typescript/src/strip.rs:2096] &*n = Member(
    MemberExpr {
        span: Span {
            lo: BytePos(
                21,
            ),
            hi: BytePos(
                28,
            ),
            ctxt: #0,
        },
        obj: OptChain(
            OptChainExpr {
                span: Span {
                    lo: BytePos(
                        21,
                    ),
                    hi: BytePos(
                        25,
                    ),
                    ctxt: #0,
                },
                optional: true,
                base: Member(
                    MemberExpr {
                        span: Span {
                            lo: BytePos(
                                21,
                            ),
                            hi: BytePos(
                                25,
                            ),
                            ctxt: #0,
                        },
                        obj: Ident(
                            Ident {
                                span: Span {
                                    lo: BytePos(
                                        21,
                                    ),
                                    hi: BytePos(
                                        22,
                                    ),
                                    ctxt: #2,
                                },
                                sym: Atom('a' type=static),
                                optional: false,
                            },
                        ),
                        prop: Ident(
                            Ident {
                                span: Span {
                                    lo: BytePos(
                                        24,
                                    ),
                                    hi: BytePos(
                                        25,
                                    ),
                                    ctxt: #0,
                                },
                                sym: Atom('b' type=static),
                                optional: false,
                            },
                        ),
                    },
                ),
            },
        ),
        prop: Ident(
            Ident {
                span: Span {
                    lo: BytePos(
                        27,
                    ),
                    hi: BytePos(
                        28,
                    ),
                    ctxt: #0,
                },
                sym: Atom('c' type=inline),
                optional: false,
            },
        ),
    },
)

Copy link
Member Author

@kdy1 kdy1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

swc-bump:

  • swc_ecma_transforms_typescript

@kdy1 kdy1 marked this pull request as ready for review July 21, 2023 05:52
@kdy1 kdy1 enabled auto-merge (squash) July 21, 2023 05:52
Copy link
Collaborator

@swc-bot swc-bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review comment generated by auto-rebase script

Copy link
Member Author

@kdy1 kdy1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reset ci

@kdy1 kdy1 merged commit c017874 into swc-project:main Jul 24, 2023
248 checks passed
@kdy1 kdy1 deleted the issue-7659 branch July 24, 2023 04:37
@kdy1 kdy1 modified the milestones: Planned, v1.3.71 Jul 25, 2023
@swc-project swc-project locked as resolved and limited conversation to collaborators Aug 24, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Development

Successfully merging this pull request may close these issues.

Unexpected behaviour of optional chaining lead to reading property of 'undefined'
2 participants