oxc/tasks/transform_conformance
Dunqing 06ccb51fae fix(transformer/async-to-generator): move parameters to the inner generator function when they could throw errors (#8500)
The new implementation port from [esbuild](df815ac27b/internal/js_parser/js_parser_lower.go (L355-L467)), before from `Babel`.

Babel's transform implementation for the async method is incorrect because the async method should return a rejecting promise when it throws an error. Everything is good if the errors are thrown in the async method body, but the following case will throw an error in the parameters which causes the whole program crushed not a rejecting promise. So we should move the parameters to the inner generator function when the parameters could throw an error.

Input:
```js
class Cls {
  // ReferenceError: Cannot access 'b' before initialization
  async method(a = b, b = 0) {}
}
```

Before output
```js
class Cls {
  method(a = b, b = 0) {
    return babelHelpers.asyncToGenerator(function* () {})();
  }
}
```

After output:
```js
class Cls {
  method() {
     // ReferenceError: Cannot access 'b' before initialization
    return babelHelpers.asyncToGenerator(function* (a = b, b = 0) {}).apply(this, arguments);
  }
}
```

No override tests because Babel doesn't cover this case.
2025-01-16 00:18:05 +00:00
..
overrides fix(transformer/typescript): remove type-only import = when only_remove_type_imports is true (#8275) 2025-01-11 08:42:51 +00:00
snapshots fix(transformer/async-to-generator): move parameters to the inner generator function when they could throw errors (#8500) 2025-01-16 00:18:05 +00:00
src test(transformer): handle more exec tests (#8493) 2025-01-15 02:07:04 +00:00
tests fix(transformer/async-to-generator): move parameters to the inner generator function when they could throw errors (#8500) 2025-01-16 00:18:05 +00:00
.gitignore chore(transformer_conformance): only ignore root fixtures directory (#7198) 2024-11-08 02:36:22 +00:00
Cargo.toml ci(transformer): move post-transform checker to tasks crate (#6288) 2024-10-05 14:48:37 +00:00
package.json feat(transform-conformance): support enabling all class-related plugins when any of them are enabled in update_fixtures (#8200) 2024-12-31 12:30:57 +00:00
README.md test(transformer): update transform conformance README (#5919) 2024-09-20 11:46:44 +01:00
reporter.mjs test(transformer): fix exec test reporter (#7722) 2024-12-08 01:41:30 +00:00
update_fixtures.mjs test(transformer): remove repeated code from fixtures updating script (#8287) 2025-01-06 11:55:00 +00:00

Transformation Conformance Test Runner

Execution

This test runner uses the transformation plugin test suite from the Babel repository.

Additional tests are in the tests directory.

The failing test cases are listed in:

To get started, run

cargo run -p oxc_transform_conformance

or watch for changes

just watch 'run -p oxc_transform_conformance'

Options

--filter

To filter for a specific test case, apply the --filter path option, e.g.

cargo run -p oxc_transform_conformance -- --filter react/arrow-functions

--exec

The Babel test suite contains many exec.js files, which need to be executed by a runtime.

bun is the preferred way to execute these tests, which you may install them via https://bun.sh/docs/installation.

Once bun is installed, apply the --exec flag:

cargo run -p oxc_transform_conformance -- --exec

The failing test cases are listed in babel_exec.snap.md.