feat(transformer/class-properties): insert statements after statement of class expression (#8116)

This commit is contained in:
Dunqing 2024-12-31 12:30:55 +00:00
parent 0cc71cf5e3
commit 3303e9986b
4 changed files with 22 additions and 9 deletions

View file

@ -617,6 +617,21 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
}
}
// Insert private methods
if !self.insert_after_stmts.is_empty() {
// Find address of statement of class expression
let position = ctx
.ancestors()
.position(Ancestor::is_parent_of_statement)
.expect("Expression always inside a statement.");
// Position points to parent of statement, we need to find the statement itself,
// so `position - 1`.
let stmt_ancestor = ctx.ancestor(position - 1);
self.ctx
.statement_injector
.insert_many_after(&stmt_ancestor, self.insert_after_stmts.drain(..));
}
// Insert computed key initializers
exprs.extend(self.insert_before.drain(..));

View file

@ -1,6 +1,6 @@
commit: 54a8389f
Passed: 631/1095
Passed: 632/1095
# All Passed:
* babel-plugin-transform-logical-assignment-operators
@ -462,7 +462,7 @@ x Output mismatch
x Output mismatch
# babel-plugin-transform-private-methods (16/148)
# babel-plugin-transform-private-methods (17/148)
* accessors/arguments/input.js
x Output mismatch
@ -565,9 +565,6 @@ x Output mismatch
* misc/multiple/input.js
x Output mismatch
* private-method/class-expression/input.js
x Output mismatch
* private-method/destructuring/input.js
x Output mismatch

View file

@ -53,9 +53,10 @@ TypeError: Cannot read properties of undefined (reading 'bind')
at ./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-parenthesized-optional-member-call-with-transform-exec.test.js:78:12
./fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-self-method-exec.test.js
ReferenceError: _bar is not defined
at Function.extract (./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-self-method-exec.test.js:13:46)
at ./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-self-method-exec.test.js:19:45
TypeError: Private element is not present on this object
at _assertClassBrand (./node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9)
at Function.extract (./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-self-method-exec.test.js:13:10)
at ./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-self-method-exec.test.js:34:45
./fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-shadow-exec.test.js
TypeError: e.has is not a function

View file

@ -11,7 +11,7 @@ AssertionError: expected [Function] to throw error including 'Receiver must be a
at Proxy.<anonymous> (./node_modules/.pnpm/@vitest+expect@2.1.2/node_modules/@vitest/expect/dist/index.js:1438:21)
at Proxy.<anonymous> (./node_modules/.pnpm/@vitest+expect@2.1.2/node_modules/@vitest/expect/dist/index.js:923:17)
at Proxy.methodWrapper (./node_modules/.pnpm/chai@5.1.2/node_modules/chai/chai.js:1610:25)
at ./tasks/transform_conformance/fixtures/oxc/babel-plugin-transform-class-properties-test-fixtures-private-field-resolve-to-method-in-computed-key-exec.test.js:87:33
at ./tasks/transform_conformance/fixtures/oxc/babel-plugin-transform-class-properties-test-fixtures-private-field-resolve-to-method-in-computed-key-exec.test.js:96:33
./fixtures/oxc/babel-plugin-transform-class-properties-test-fixtures-static-super-tagged-template-exec.test.js
AssertionError: expected undefined to be [Function C] // Object.is equality