-
-
Notifications
You must be signed in to change notification settings - Fork 454
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
feat(transformer): complete the async-to-generator plugin #6658
feat(transformer): complete the async-to-generator plugin #6658
Conversation
Your org has enabled the Graphite merge queue for merging into mainAdd the label “0-merge” to the PR and Graphite will automatically add it to the merge queue when it’s ready to merge. Or use the label “hotfix” to add to the merge queue as a hot fix. You must have a Graphite account and log in to Graphite in order to use the merge queue. Sign up using this link. |
This stack of pull requests is managed by Graphite. Learn more about stacking. |
CodSpeed Performance ReportMerging #6658 will degrade performances by 6.29%Comparing Summary
Benchmarks breakdown
|
fd51a01
to
4db28a4
Compare
b9da8f5
to
3a2051e
Compare
05745f0
to
3e43a15
Compare
a1b0d3e
to
c80323a
Compare
c80323a
to
d1cdbdd
Compare
Part of #6658 This API is useful when we want to move a scope to another scope
Part of #6658 This API is useful when we want to move a scope to another scope
3d212e9
to
410d5bb
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've not reviewed the logic of this transform, as I don't know it well enough. But this PR makes the tests pass so 👍!
All my comments are style nits, and some notes about use of #[inline]
. I hope that's useful, and not annoying!
3c3b956
to
afdb90b
Compare
Mering this! |
Merge activity
|
In this PR, most of the async functions have transformed correctly. But the async arrow functions don't fully transform correctly yet, it is related to we need to transform the arrow function to the generator function. For example: Input: ```js function declaration() { const asy = async () => { console.log(this.name) } } ``` Output: ```js function declaration() { const asy = babelHelpers.asyncToGenerator(function* () { console.log(this.name); }); } ``` Expected Output: ```js function declaration() { var _this = this; const asy = /*#__PURE__*/function () { var _ref = babelHelpers.asyncToGenerator(function* () { console.log(_this.name); }); return function asy() { return _ref.apply(this, arguments); }; }(); } ``` From the expected output, we haven't handled `this` correctly, which means even if the `arrow-function` plugin doesn't enable, we still need to handle this correctly as the `arrow-function` plugin does, and further question if `arrow-function` plugin is enabled, how to avoid these making conflict? I thought we may move out the implementation of `arrow-function` and as a common helper, this way every plugin can handle this well
afdb90b
to
d145f22
Compare
In this PR, most of the async functions have transformed correctly. But the async arrow functions don't fully transform correctly yet, it is related to we need to transform the arrow function to the generator function. For example: Input: ```js function declaration() { const asy = async () => { console.log(this.name) } } ``` Output: ```js function declaration() { const asy = babelHelpers.asyncToGenerator(function* () { console.log(this.name); }); } ``` Expected Output: ```js function declaration() { var _this = this; const asy = /*#__PURE__*/function () { var _ref = babelHelpers.asyncToGenerator(function* () { console.log(_this.name); }); return function asy() { return _ref.apply(this, arguments); }; }(); } ``` From the expected output, we haven't handled `this` correctly, which means even if the `arrow-function` plugin doesn't enable, we still need to handle this correctly as the `arrow-function` plugin does, and further question if `arrow-function` plugin is enabled, how to avoid these making conflict? I thought we may move out the implementation of `arrow-function` and as a common helper, this way every plugin can handle this well
d145f22
to
0d0bb17
Compare
## [0.34.0] - 2024-10-26 - 4618aa2 transformer: [**BREAKING**] Rename `TransformerOptions::react` to `jsx` (#6888) (Boshen) - 90c786c regular_expression: [**BREAKING**] Support ES2025 Duplicated named capture groups (#6847) (leaysgur) - 67a7bde napi/parser: [**BREAKING**] Add typings to napi/parser (#6796) (ottomated) ### Features - 1145341 ast_tools: Output typescript to a separate package (#6755) (ottomated) - 4429754 ecmascript: Constant eval `null` to number (#6879) (Boshen) - fd57e00 ecmascript: Add abstract_relational_comparison to dce (#6846) (Boshen) - 8bcaf59 minifier: Late peeophole optimization (#6882) (Boshen) - 860cbca minifier: Implement folding simple arrow fns (#6875) (camc314) - c26020e minifier: Implement folding String.prototype.replaceAll (#6871) (camc314) - 50744f3 minifier: Implement folding String.prototype.replace (#6870) (camc314) - fccf82e minifier: Implement folding `substring` string fns (#6869) (camc314) - e6a5a1b minifier: Implement folding `charCodeAt` string fns (#6475) (camc314) - 0d0bb17 transformer: Complete the async-to-generator plugin (#6658) (Dunqing) - 419343b traverse: Implement `GetAddress` for `Ancestor` (#6877) (overlookmotel) ### Bug Fixes - a47c70e minifier: Fix remaining runtime bugs (#6855) (Boshen) - 686727f minifier: Reference read has side effect (#6851) (Boshen) - c658d93 minifier: Keep template literals with expressions (#6849) (Boshen) - 4dc5e51 transformer: Only run typescript plugin for typescript source (#6889) (Boshen) - 076f5c3 transformer/typescript: Retain ExportNamedDeclaration without specifiers and declaration (#6848) (Dunqing) - b075982 types: Change @oxc/types package name (#6874) (ottomated) ### Documentation - 6eeb0e6 ast: Mention typescript-eslint, field ordering and shape (#6863) (Boshen) - 99e3b32 napi: Remove JSON.parse from example (#6836) (ottomated) ### Refactor - adb5039 allocator: Add `impl GetAddress for Address` (#6891) (overlookmotel) - 3e7507f ast_tools: Reduce macro usage (#6895) (overlookmotel) - 423d54c rust: Remove the annoying `clippy::wildcard_imports` (#6860) (Boshen) - 2d95009 transformer: Implement `Debug` on `StatementInjector` internal types (#6886) (overlookmotel) - c383c34 transformer: Make `StatementInjectorStore` methods generic over `GetAddress` (#6885) (overlookmotel) - 1f29523 transformer: Rename ReactJsx to Jsx (#6883) (Boshen) - 333b758 transformer: `StatementInjectorStore` methods take `&Statement` as target (#6858) (overlookmotel) - c19996c transformer: Add `StatementInjectorStore::insert_many_before` method (#6857) (overlookmotel) - 7339dde transformer: `StatementInjectorStore::insert_many_after` take an iterator (#6856) (overlookmotel) - 4348eae transformer/typescript: Re-order visitor methods (#6864) (overlookmotel) - 3a56d59 transformer/typescript: Insert assignments after super by `StatementInjector` (#6654) (Dunqing) - a366fae traverse: Rename `TraverseScoping::generate_binding_in_current_scope` (#6832) (overlookmotel) - 3b99fe6 traverse: Move `generate_binding` to `TraverseScoping` (#6831) (overlookmotel) - 60f487a traverse: `TraverseCtx::generate_binding` take an `Atom` (#6830) (overlookmotel) ### Styling - 262b2ed ast: Move crate doc comment to top of file (#6890) (overlookmotel) --------- Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
…t#6658) In this PR, most of the async functions have transformed correctly. But the async arrow functions don't fully transform correctly yet, it is related to we need to transform the arrow function to the generator function. For example: Input: ```js function declaration() { const asy = async () => { console.log(this.name) } } ``` Output: ```js function declaration() { const asy = babelHelpers.asyncToGenerator(function* () { console.log(this.name); }); } ``` Expected Output: ```js function declaration() { var _this = this; const asy = /*#__PURE__*/function () { var _ref = babelHelpers.asyncToGenerator(function* () { console.log(_this.name); }); return function asy() { return _ref.apply(this, arguments); }; }(); } ``` From the expected output, we haven't handled `this` correctly, which means even if the `arrow-function` plugin doesn't enable, we still need to handle this correctly as the `arrow-function` plugin does, and further question if `arrow-function` plugin is enabled, how to avoid these making conflict? I thought we may move out the implementation of `arrow-function` and as a common helper, this way every plugin can handle this well
## [0.34.0] - 2024-10-26 - 4618aa2 transformer: [**BREAKING**] Rename `TransformerOptions::react` to `jsx` (oxc-project#6888) (Boshen) - 90c786c regular_expression: [**BREAKING**] Support ES2025 Duplicated named capture groups (oxc-project#6847) (leaysgur) - 67a7bde napi/parser: [**BREAKING**] Add typings to napi/parser (oxc-project#6796) (ottomated) ### Features - 1145341 ast_tools: Output typescript to a separate package (oxc-project#6755) (ottomated) - 4429754 ecmascript: Constant eval `null` to number (oxc-project#6879) (Boshen) - fd57e00 ecmascript: Add abstract_relational_comparison to dce (oxc-project#6846) (Boshen) - 8bcaf59 minifier: Late peeophole optimization (oxc-project#6882) (Boshen) - 860cbca minifier: Implement folding simple arrow fns (oxc-project#6875) (camc314) - c26020e minifier: Implement folding String.prototype.replaceAll (oxc-project#6871) (camc314) - 50744f3 minifier: Implement folding String.prototype.replace (oxc-project#6870) (camc314) - fccf82e minifier: Implement folding `substring` string fns (oxc-project#6869) (camc314) - e6a5a1b minifier: Implement folding `charCodeAt` string fns (oxc-project#6475) (camc314) - 0d0bb17 transformer: Complete the async-to-generator plugin (oxc-project#6658) (Dunqing) - 419343b traverse: Implement `GetAddress` for `Ancestor` (oxc-project#6877) (overlookmotel) ### Bug Fixes - a47c70e minifier: Fix remaining runtime bugs (oxc-project#6855) (Boshen) - 686727f minifier: Reference read has side effect (oxc-project#6851) (Boshen) - c658d93 minifier: Keep template literals with expressions (oxc-project#6849) (Boshen) - 4dc5e51 transformer: Only run typescript plugin for typescript source (oxc-project#6889) (Boshen) - 076f5c3 transformer/typescript: Retain ExportNamedDeclaration without specifiers and declaration (oxc-project#6848) (Dunqing) - b075982 types: Change @oxc/types package name (oxc-project#6874) (ottomated) ### Documentation - 6eeb0e6 ast: Mention typescript-eslint, field ordering and shape (oxc-project#6863) (Boshen) - 99e3b32 napi: Remove JSON.parse from example (oxc-project#6836) (ottomated) ### Refactor - adb5039 allocator: Add `impl GetAddress for Address` (oxc-project#6891) (overlookmotel) - 3e7507f ast_tools: Reduce macro usage (oxc-project#6895) (overlookmotel) - 423d54c rust: Remove the annoying `clippy::wildcard_imports` (oxc-project#6860) (Boshen) - 2d95009 transformer: Implement `Debug` on `StatementInjector` internal types (oxc-project#6886) (overlookmotel) - c383c34 transformer: Make `StatementInjectorStore` methods generic over `GetAddress` (oxc-project#6885) (overlookmotel) - 1f29523 transformer: Rename ReactJsx to Jsx (oxc-project#6883) (Boshen) - 333b758 transformer: `StatementInjectorStore` methods take `&Statement` as target (oxc-project#6858) (overlookmotel) - c19996c transformer: Add `StatementInjectorStore::insert_many_before` method (oxc-project#6857) (overlookmotel) - 7339dde transformer: `StatementInjectorStore::insert_many_after` take an iterator (oxc-project#6856) (overlookmotel) - 4348eae transformer/typescript: Re-order visitor methods (oxc-project#6864) (overlookmotel) - 3a56d59 transformer/typescript: Insert assignments after super by `StatementInjector` (oxc-project#6654) (Dunqing) - a366fae traverse: Rename `TraverseScoping::generate_binding_in_current_scope` (oxc-project#6832) (overlookmotel) - 3b99fe6 traverse: Move `generate_binding` to `TraverseScoping` (oxc-project#6831) (overlookmotel) - 60f487a traverse: `TraverseCtx::generate_binding` take an `Atom` (oxc-project#6830) (overlookmotel) ### Styling - 262b2ed ast: Move crate doc comment to top of file (oxc-project#6890) (overlookmotel) --------- Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Passed 15/19 tests. The remaining 4 failed tests related to `this` expression, the problem same as I mentioned in #6658. I will fix them in follow-up PRs.
In this PR, most of the async functions have transformed correctly. But the async arrow functions don't fully transform correctly yet, it is related to we need to transform the arrow function to the generator function. For example:
Input:
Output:
Expected Output:
From the expected output, we haven't handled
this
correctly, which means even if thearrow-function
plugin doesn't enable, we still need to handle this correctly as thearrow-function
plugin does, and further question ifarrow-function
plugin is enabled, how to avoid these making conflict?I thought we may move out the implementation of
arrow-function
and as a common helper, this way every plugin can handle this well