Skip to content

Commit

Permalink
fix(es/decorators): Use correct class name reference (#9375)
Browse files Browse the repository at this point in the history
- Closes #9350
  • Loading branch information
magic-akari committed Aug 4, 2024
1 parent a3a3040 commit badd6a9
Show file tree
Hide file tree
Showing 7 changed files with 99 additions and 3 deletions.
5 changes: 5 additions & 0 deletions .changeset/flat-geese-care.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
swc_ecma_transforms_proposal: patch
---

fix(es/decorator): Use correct class name reference
13 changes: 13 additions & 0 deletions crates/swc/tests/fixture/issues-9xxx/9350/input/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"jsc": {
"parser": {
"syntax": "typescript",
"decorators": true
},
"target": "es2016"
},
"module": {
"type": "es6"
},
"isModule": true
}
18 changes: 18 additions & 0 deletions crates/swc/tests/fixture/issues-9xxx/9350/input/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
function registerHook(key) {
return (...args) => console.log(args);
}

export default function design(base: typeof Component) {
return class Design extends base {
copy() {
console.log("copy");
}

@registerHook("beforeRender")
@registerHook("afterRender")
render() {
super.render();
console.log("design render");
}
};
}
19 changes: 19 additions & 0 deletions crates/swc/tests/fixture/issues-9xxx/9350/input/test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
function registerHook(key) {
return (...args) => console.log(args);
}

export default function design(base: typeof Component) {
const Design = "test name conflict";
return class Design extends base {
copy() {
console.log("copy");
}

@registerHook("beforeRender")
@registerHook("afterRender")
render() {
super.render();
console.log("design render");
}
};
}
19 changes: 19 additions & 0 deletions crates/swc/tests/fixture/issues-9xxx/9350/output/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { _ as _ts_decorate } from "@swc/helpers/_/_ts_decorate";
function registerHook(key) {
return (...args)=>console.log(args);
}
export default function design(base) {
var Design;
return Design = class Design extends base {
copy() {
console.log("copy");
}
render() {
super.render();
console.log("design render");
}
}, _ts_decorate([
registerHook("beforeRender"),
registerHook("afterRender")
], Design.prototype, "render", null), Design;
}
20 changes: 20 additions & 0 deletions crates/swc/tests/fixture/issues-9xxx/9350/output/test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { _ as _ts_decorate } from "@swc/helpers/_/_ts_decorate";
function registerHook(key) {
return (...args)=>console.log(args);
}
export default function design(base) {
const Design = "test name conflict";
var Design1;
return Design1 = class Design1 extends base {
copy() {
console.log("copy");
}
render() {
super.render();
console.log("design render");
}
}, _ts_decorate([
registerHook("beforeRender"),
registerHook("afterRender")
], Design1.prototype, "render", null), Design1;
}
Original file line number Diff line number Diff line change
Expand Up @@ -332,14 +332,16 @@ impl VisitMut for TscDecorator {
return;
}

let var_name = private_ident!("_class");
let ident = n.ident.get_or_insert_with(|| var_name.clone());
let ident = n
.ident
.get_or_insert_with(|| private_ident!("_class"))
.clone();

let old = mem::replace(&mut self.class_name, Some(ident.clone()));

n.visit_mut_children_with(self);

self.assign_class_expr_to = Some(var_name);
self.assign_class_expr_to = Some(ident);

self.class_name = old;
}
Expand Down

0 comments on commit badd6a9

Please sign in to comment.