oxc/tasks/transform_conformance
overlookmotel 9778298fdb feat(transformer): class properties transform (#7011)
Add class properties transform.

Implementation is incomplete. Notable missing parts:

* Scopes are not updated where property initializers move from class body into class constructor / `_super` function.
* Does not handle binding shadowing problems when property initializers move from class body into class constructor.
* `this` and references to class name in static property initializers need to be transformed to point to a temp var.
* Not all usages of private properties are supported (see below).
* Code which is moved to outside of class body is not transformed by other transforms for class declarations (works OK for class expressions). This includes static property initializers, static blocks, and computed property/method keys.
* Only basic checks for whether computed property/method keys may have side effects.
* Numerous other small issues noted in TODO comments through the code.

### Private properties

Currently does not handle the following usages of private properties:

```js
class Class {
  #prop;
  static #static;

  method() {
    object?.#prop;
    object?.#prop();
    [object.#prop] = [1];
    ({x: object.#prop} = {x: 1});
    object.#prop`xyz`;

    object?.#static;
    object?.#static();
    [object.#static] = [1];
    ({x: object.#static} = {x: 1});
    object.#static`xyz`;
  }
}
```
2024-11-25 10:24:20 +00:00
..
snapshots feat(transformer): class properties transform (#7011) 2024-11-25 10:24:20 +00:00
src feat(transformer): class properties transform (#7011) 2024-11-25 10:24:20 +00:00
tests feat(transformer): transform object rest spread (#7003) 2024-11-21 11:33:26 +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 test(transformer): script to amend Babel fixtures (#7122) 2024-11-25 10:24:19 +00:00
README.md test(transformer): update transform conformance README (#5919) 2024-09-20 11:46:44 +01:00
update_fixtures.js test(transformer): script to amend Babel fixtures (#7122) 2024-11-25 10:24:19 +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.