Skip to content

Commit 880647b

Browse files
committed
perf(transformer/decorator-metadata): return Object as early as possible if there is a TSTypeReference within TSUnionType (#10361)
No output effect is expected. This PR is to avoid creating never-used references for TSTypeReference inside `TSUnionType`. From the semantic snapshot changes, we can see that there is a mismatched `_ref` reference that has gone.
1 parent 17d26d9 commit 880647b

File tree

4 files changed

+33
-83
lines changed

4 files changed

+33
-83
lines changed

crates/oxc_transformer/src/decorator/legacy/metadata.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,10 @@ impl<'a> LegacyDecoratorMetadata<'a, '_> {
458458
TSType::TSAnyKeyword(_) => {
459459
return Self::global_object(ctx);
460460
}
461+
// Unlike TypeScript, we don't have a way to determine what the referent is,
462+
// so return `Object` early, because once have a type reference, the final
463+
// type is `Object` anyway.
464+
TSType::TSTypeReference(_) => return Self::global_object(ctx),
461465
_ => {}
462466
}
463467

tasks/coverage/snapshots/semantic_typescript.snap

Lines changed: 23 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -8301,8 +8301,8 @@ rebuilt : ScopeId(0): []
83018301

83028302
tasks/coverage/typescript/tests/cases/compiler/decoratorMetadataConditionalType.ts
83038303
semantic error: Bindings mismatch:
8304-
after transform: ScopeId(0): ["BaseEntity", "C", "_decorate", "_decorateMetadata", "_defineProperty", "_ref", "d"]
8305-
rebuilt : ScopeId(0): ["BaseEntity", "C", "_decorate", "_decorateMetadata", "_defineProperty", "_ref"]
8304+
after transform: ScopeId(0): ["BaseEntity", "C", "_decorate", "_decorateMetadata", "_defineProperty", "d"]
8305+
rebuilt : ScopeId(0): ["BaseEntity", "C", "_decorate", "_decorateMetadata", "_defineProperty"]
83068306
Scope children mismatch:
83078307
after transform: ScopeId(0): [ScopeId(1), ScopeId(2), ScopeId(4)]
83088308
rebuilt : ScopeId(0): [ScopeId(1), ScopeId(3)]
@@ -8312,9 +8312,6 @@ rebuilt : ScopeId(1): [ScopeId(2)]
83128312
Scope children mismatch:
83138313
after transform: ScopeId(4): [ScopeId(5), ScopeId(7)]
83148314
rebuilt : ScopeId(3): [ScopeId(4)]
8315-
Symbol reference IDs mismatch for "_ref":
8316-
after transform: SymbolId(6): [ReferenceId(8), ReferenceId(9)]
8317-
rebuilt : SymbolId(3): []
83188315
Reference symbol mismatch for "d":
83198316
after transform: SymbolId(0) "d"
83208317
rebuilt : <None>
@@ -8324,11 +8321,8 @@ rebuilt : <None>
83248321
Unresolved references mismatch:
83258322
after transform: ["Boolean", "Object", "PropertyDecorator", "require"]
83268323
rebuilt : ["Boolean", "Object", "d", "require"]
8327-
Unresolved reference IDs mismatch for "Object":
8328-
after transform: [ReferenceId(10), ReferenceId(11)]
8329-
rebuilt : [ReferenceId(7)]
83308324
Unresolved reference IDs mismatch for "Boolean":
8331-
after transform: [ReferenceId(16), ReferenceId(17)]
8325+
after transform: [ReferenceId(11), ReferenceId(12)]
83328326
rebuilt : [ReferenceId(13)]
83338327

83348328
tasks/coverage/typescript/tests/cases/compiler/decoratorMetadataElidedImport.ts
@@ -19766,31 +19760,19 @@ semantic error: Namespaces exporting non-const are not supported by Babel. Chang
1976619760

1976719761
tasks/coverage/typescript/tests/cases/compiler/metadataOfClassFromAlias.ts
1976819762
semantic error: Bindings mismatch:
19769-
after transform: ScopeId(0): ["ClassA", "SomeClass", "_decorate", "_decorateMetadata", "_defineProperty", "_ref", "annotation"]
19770-
rebuilt : ScopeId(0): ["ClassA", "_decorate", "_decorateMetadata", "_defineProperty", "_ref", "annotation"]
19771-
Symbol reference IDs mismatch for "_ref":
19772-
after transform: SymbolId(5): [ReferenceId(6), ReferenceId(7)]
19773-
rebuilt : SymbolId(3): []
19763+
after transform: ScopeId(0): ["ClassA", "SomeClass", "_decorate", "_decorateMetadata", "_defineProperty", "annotation"]
19764+
rebuilt : ScopeId(0): ["ClassA", "_decorate", "_decorateMetadata", "_defineProperty", "annotation"]
1977419765
Unresolved references mismatch:
1977519766
after transform: ["Object", "PropertyDecorator"]
1977619767
rebuilt : ["Object"]
19777-
Unresolved reference IDs mismatch for "Object":
19778-
after transform: [ReferenceId(8), ReferenceId(9)]
19779-
rebuilt : [ReferenceId(4)]
1978019768

1978119769
tasks/coverage/typescript/tests/cases/compiler/metadataOfClassFromAlias2.ts
1978219770
semantic error: Bindings mismatch:
19783-
after transform: ScopeId(0): ["ClassA", "SomeClass", "_decorate", "_decorateMetadata", "_defineProperty", "_ref", "annotation"]
19784-
rebuilt : ScopeId(0): ["ClassA", "_decorate", "_decorateMetadata", "_defineProperty", "_ref", "annotation"]
19785-
Symbol reference IDs mismatch for "_ref":
19786-
after transform: SymbolId(5): [ReferenceId(6), ReferenceId(7)]
19787-
rebuilt : SymbolId(3): []
19771+
after transform: ScopeId(0): ["ClassA", "SomeClass", "_decorate", "_decorateMetadata", "_defineProperty", "annotation"]
19772+
rebuilt : ScopeId(0): ["ClassA", "_decorate", "_decorateMetadata", "_defineProperty", "annotation"]
1978819773
Unresolved references mismatch:
1978919774
after transform: ["Object", "PropertyDecorator"]
1979019775
rebuilt : ["Object"]
19791-
Unresolved reference IDs mismatch for "Object":
19792-
after transform: [ReferenceId(8), ReferenceId(9)]
19793-
rebuilt : [ReferenceId(4)]
1979419776

1979519777
tasks/coverage/typescript/tests/cases/compiler/metadataOfClassFromModule.ts
1979619778
semantic error: Scope flags mismatch:
@@ -19826,70 +19808,43 @@ rebuilt : ScopeId(5): ["E"]
1982619808
Scope flags mismatch:
1982719809
after transform: ScopeId(4): ScopeFlags(0x0)
1982819810
rebuilt : ScopeId(5): ScopeFlags(Function)
19829-
Symbol reference IDs mismatch for "_ref":
19830-
after transform: SymbolId(12): [ReferenceId(20), ReferenceId(21)]
19831-
rebuilt : SymbolId(3): []
19832-
Symbol reference IDs mismatch for "_ref3":
19833-
after transform: SymbolId(17): [ReferenceId(60), ReferenceId(61)]
19834-
rebuilt : SymbolId(5): []
19835-
Symbol reference IDs mismatch for "_ref4":
19836-
after transform: SymbolId(18): [ReferenceId(65), ReferenceId(66)]
19837-
rebuilt : SymbolId(6): []
19838-
Symbol reference IDs mismatch for "_ref6":
19839-
after transform: SymbolId(20): [ReferenceId(78), ReferenceId(79)]
19840-
rebuilt : SymbolId(8): []
1984119811
Symbol reference IDs mismatch for "A":
19842-
after transform: SymbolId(3): [ReferenceId(2), ReferenceId(18), ReferenceId(19)]
19843-
rebuilt : SymbolId(12): []
19812+
after transform: SymbolId(3): [ReferenceId(2)]
19813+
rebuilt : SymbolId(8): []
1984419814
Symbol flags mismatch for "E":
1984519815
after transform: SymbolId(5): SymbolFlags(RegularEnum)
19846-
rebuilt : SymbolId(14): SymbolFlags(FunctionScopedVariable)
19816+
rebuilt : SymbolId(10): SymbolFlags(FunctionScopedVariable)
1984719817
Symbol reference IDs mismatch for "E":
19848-
after transform: SymbolId(5): [ReferenceId(6), ReferenceId(8), ReferenceId(9), ReferenceId(11), ReferenceId(13), ReferenceId(47), ReferenceId(52), ReferenceId(53), ReferenceId(58), ReferenceId(59), ReferenceId(63), ReferenceId(64), ReferenceId(70), ReferenceId(71), ReferenceId(76), ReferenceId(77)]
19849-
rebuilt : SymbolId(14): [ReferenceId(30), ReferenceId(39), ReferenceId(40), ReferenceId(53), ReferenceId(54)]
19818+
after transform: SymbolId(5): [ReferenceId(6), ReferenceId(8), ReferenceId(9), ReferenceId(11), ReferenceId(13), ReferenceId(42), ReferenceId(47), ReferenceId(48), ReferenceId(55), ReferenceId(56)]
19819+
rebuilt : SymbolId(10): [ReferenceId(30), ReferenceId(39), ReferenceId(40), ReferenceId(53), ReferenceId(54)]
1985019820
Unresolved references mismatch:
19851-
after transform: ["Boolean", "Number", "Object", "String", "require"]
19821+
after transform: ["Boolean", "Object", "String", "require"]
1985219822
rebuilt : ["Boolean", "Object", "require"]
1985319823
Unresolved reference IDs mismatch for "Boolean":
19854-
after transform: [ReferenceId(25), ReferenceId(26), ReferenceId(29)]
19824+
after transform: [ReferenceId(20), ReferenceId(21), ReferenceId(24)]
1985519825
rebuilt : [ReferenceId(14)]
1985619826
Unresolved reference IDs mismatch for "Object":
19857-
after transform: [ReferenceId(0), ReferenceId(22), ReferenceId(23), ReferenceId(30), ReferenceId(56), ReferenceId(62), ReferenceId(67), ReferenceId(68), ReferenceId(74), ReferenceId(80), ReferenceId(82)]
19827+
after transform: [ReferenceId(0), ReferenceId(18), ReferenceId(25), ReferenceId(51), ReferenceId(53), ReferenceId(59), ReferenceId(61)]
1985819828
rebuilt : [ReferenceId(9), ReferenceId(19), ReferenceId(42), ReferenceId(47), ReferenceId(56), ReferenceId(61)]
1985919829

1986019830
tasks/coverage/typescript/tests/cases/compiler/metadataOfUnionWithNull.ts
19861-
semantic error: Symbol reference IDs mismatch for "_ref":
19862-
after transform: SymbolId(7): [ReferenceId(46), ReferenceId(47)]
19863-
rebuilt : SymbolId(3): []
19864-
Symbol reference IDs mismatch for "_ref2":
19865-
after transform: SymbolId(8): [ReferenceId(53), ReferenceId(54)]
19866-
rebuilt : SymbolId(4): []
19867-
Symbol reference IDs mismatch for "_ref3":
19868-
after transform: SymbolId(9): [ReferenceId(60), ReferenceId(61)]
19869-
rebuilt : SymbolId(5): []
19870-
Symbol reference IDs mismatch for "A":
19871-
after transform: SymbolId(3): [ReferenceId(10), ReferenceId(12), ReferenceId(44), ReferenceId(45), ReferenceId(51), ReferenceId(52)]
19872-
rebuilt : SymbolId(9): []
19831+
semantic error: Symbol reference IDs mismatch for "A":
19832+
after transform: SymbolId(3): [ReferenceId(10), ReferenceId(12)]
19833+
rebuilt : SymbolId(6): []
1987319834
Symbol reference IDs mismatch for "B":
19874-
after transform: SymbolId(4): [ReferenceId(14), ReferenceId(58), ReferenceId(59), ReferenceId(68), ReferenceId(70), ReferenceId(72), ReferenceId(74), ReferenceId(76), ReferenceId(78), ReferenceId(80), ReferenceId(82), ReferenceId(84), ReferenceId(86), ReferenceId(88), ReferenceId(90)]
19875-
rebuilt : SymbolId(10): [ReferenceId(19), ReferenceId(24), ReferenceId(29), ReferenceId(33), ReferenceId(37), ReferenceId(41), ReferenceId(45), ReferenceId(50), ReferenceId(55), ReferenceId(60), ReferenceId(65), ReferenceId(70)]
19835+
after transform: SymbolId(4): [ReferenceId(14), ReferenceId(53), ReferenceId(55), ReferenceId(57), ReferenceId(59), ReferenceId(61), ReferenceId(63), ReferenceId(65), ReferenceId(67), ReferenceId(69), ReferenceId(71), ReferenceId(73), ReferenceId(75)]
19836+
rebuilt : SymbolId(7): [ReferenceId(19), ReferenceId(24), ReferenceId(29), ReferenceId(33), ReferenceId(37), ReferenceId(41), ReferenceId(45), ReferenceId(50), ReferenceId(55), ReferenceId(60), ReferenceId(65), ReferenceId(70)]
1987619837
Unresolved references mismatch:
1987719838
after transform: ["Boolean", "Object", "String", "Symbol", "require"]
1987819839
rebuilt : ["Boolean", "Object", "require"]
1987919840
Unresolved reference IDs mismatch for "Object":
19880-
after transform: [ReferenceId(0), ReferenceId(29), ReferenceId(34), ReferenceId(41), ReferenceId(48), ReferenceId(49), ReferenceId(55), ReferenceId(56), ReferenceId(62), ReferenceId(63), ReferenceId(66)]
19841+
after transform: [ReferenceId(0), ReferenceId(29), ReferenceId(34), ReferenceId(41), ReferenceId(44), ReferenceId(46), ReferenceId(48), ReferenceId(51)]
1988119842
rebuilt : [ReferenceId(18), ReferenceId(28), ReferenceId(49), ReferenceId(54), ReferenceId(59), ReferenceId(64), ReferenceId(69)]
1988219843

1988319844
tasks/coverage/typescript/tests/cases/compiler/metadataReferencedWithinFilteredUnion.ts
1988419845
semantic error: Bindings mismatch:
19885-
after transform: ScopeId(0): ["Class1", "Class2", "_decorate", "_decorateMetadata", "_ref", "decorate"]
19886-
rebuilt : ScopeId(0): ["Class2", "_decorate", "_decorateMetadata", "_ref", "decorate"]
19887-
Symbol reference IDs mismatch for "_ref":
19888-
after transform: SymbolId(6): [ReferenceId(8), ReferenceId(9)]
19889-
rebuilt : SymbolId(2): []
19890-
Unresolved reference IDs mismatch for "Object":
19891-
after transform: [ReferenceId(10), ReferenceId(11)]
19892-
rebuilt : [ReferenceId(7)]
19846+
after transform: ScopeId(0): ["Class1", "Class2", "_decorate", "_decorateMetadata", "decorate"]
19847+
rebuilt : ScopeId(0): ["Class2", "_decorate", "_decorateMetadata", "decorate"]
1989319848

1989419849
tasks/coverage/typescript/tests/cases/compiler/methodContainingLocalFunction.ts
1989519850
semantic error: Scope flags mismatch:

tasks/transform_conformance/snapshots/oxc.snap.md

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -377,23 +377,17 @@ rebuilt : SymbolId(3): Span { start: 87, end: 94 }
377377

378378
* oxc/metadata/imports/input.ts
379379
Bindings mismatch:
380-
after transform: ScopeId(0): ["Bar", "Cls", "Foo", "_ref", "_ref2", "_ref3", "dec"]
381-
rebuilt : ScopeId(0): ["Cls", "_ref", "_ref2", "_ref3"]
380+
after transform: ScopeId(0): ["Bar", "Cls", "Foo", "_ref", "dec"]
381+
rebuilt : ScopeId(0): ["Cls", "_ref"]
382382
Scope children mismatch:
383383
after transform: ScopeId(0): [ScopeId(1), ScopeId(2)]
384384
rebuilt : ScopeId(0): [ScopeId(1)]
385-
Symbol reference IDs mismatch for "_ref2":
386-
after transform: SymbolId(10): [ReferenceId(15), ReferenceId(16)]
387-
rebuilt : SymbolId(1): []
388-
Symbol reference IDs mismatch for "_ref3":
389-
after transform: SymbolId(11): [ReferenceId(20), ReferenceId(21)]
390-
rebuilt : SymbolId(2): []
391385
Symbol span mismatch for "Cls":
392386
after transform: SymbolId(6): Span { start: 135, end: 138 }
393-
rebuilt : SymbolId(3): Span { start: 0, end: 0 }
387+
rebuilt : SymbolId(1): Span { start: 0, end: 0 }
394388
Symbol span mismatch for "Cls":
395-
after transform: SymbolId(12): Span { start: 0, end: 0 }
396-
rebuilt : SymbolId(4): Span { start: 135, end: 138 }
389+
after transform: SymbolId(10): Span { start: 0, end: 0 }
390+
rebuilt : SymbolId(2): Span { start: 135, end: 138 }
397391
Reference symbol mismatch for "Foo":
398392
after transform: SymbolId(0) "Foo"
399393
rebuilt : <None>
@@ -412,9 +406,6 @@ rebuilt : <None>
412406
Unresolved references mismatch:
413407
after transform: ["Object", "PropertyDescriptor", "babelHelpers", "console"]
414408
rebuilt : ["Foo", "Object", "babelHelpers", "console", "dec"]
415-
Unresolved reference IDs mismatch for "Object":
416-
after transform: [ReferenceId(12), ReferenceId(17), ReferenceId(22), ReferenceId(23)]
417-
rebuilt : [ReferenceId(10), ReferenceId(11)]
418409

419410
* oxc/metadata/typescript-syntax/input.ts
420411
Bindings mismatch:

tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/imports/output.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var _ref, _ref2, _ref3;
1+
var _ref;
22

33
let Cls = class Cls {
44
constructor(param, param2) {

0 commit comments

Comments
 (0)