Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion crates/oxc_transformer/src/jsx/jsx_impl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -716,7 +716,13 @@ impl<'a> JsxImpl<'a, '_> {
}

// this
if self.options.jsx_self_plugin && JsxSelf::can_add_self_attribute(ctx) {
// In automatic development mode (`is_automatic && is_development`), `this` is passed
// as the last argument to jsxDEV, not used in the props object.
// This is safe even in constructors before super() because it's just a reference
// being passed to a function call. In contrast, classic mode adds `__self: this`
// to the props object, which could cause "this before super" errors, so it needs
// the `can_add_self_attribute` check (see line 726 below).
if self.options.jsx_self_plugin {
arguments.push(Argument::from(ctx.ast.expression_this(SPAN)));
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export class Foo2 { foo = <div/> }
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"assumptions": {
"setPublicClassFields": true
},
"plugins": [
["transform-react-jsx-development"]
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
var _reactJsxDevRuntime = require("react/jsx-dev-runtime");
var _jsxFileName = "<CWD>/tests/babel-plugin-transform-react-jsx/test/fixtures/jsx-self-in-class-field-no-super/input.tsx";
export class Foo2 {
constructor() {
this.foo = /* @__PURE__ */ _reactJsxDevRuntime.jsxDEV("div", {}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 1,
columnNumber: 27
}, this);
}
foo;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export class Foo1 extends Object { foo = <div/> }
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"assumptions": {
"setPublicClassFields": true
},
"plugins": [
["transform-react-jsx-development"]
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
var _reactJsxDevRuntime = require("react/jsx-dev-runtime");
var _jsxFileName = "<CWD>/tests/babel-plugin-transform-react-jsx/test/fixtures/jsx-self-in-class-field/input.tsx";
export class Foo1 extends Object {
constructor(..._args) {
super(..._args);
this.foo = /* @__PURE__ */ _reactJsxDevRuntime.jsxDEV("div", {}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 1,
columnNumber: 42
}, this);
}
foo;
}
Loading