From 78d7c97357b1881f95806d8c72c00d52d28e6ec9 Mon Sep 17 00:00:00 2001
From: overlookmotel <557937+overlookmotel@users.noreply.github.com>
Date: Thu, 9 Jan 2025 02:26:32 +0000
Subject: [PATCH] fix(transformer/typescript): create `Reference` for
 `Infinity` (#8354)

Create a `Reference` when generating new `IdentifierReference` for `Infinity`.
---
 crates/oxc_transformer/src/typescript/enum.rs     | 10 ++++++++--
 tasks/coverage/snapshots/semantic_typescript.snap | 14 ++------------
 tasks/transform_conformance/snapshots/oxc.snap.md |  6 +-----
 3 files changed, 11 insertions(+), 19 deletions(-)

diff --git a/crates/oxc_transformer/src/typescript/enum.rs b/crates/oxc_transformer/src/typescript/enum.rs
index 85238eda262ba..941fd03e70040 100644
--- a/crates/oxc_transformer/src/typescript/enum.rs
+++ b/crates/oxc_transformer/src/typescript/enum.rs
@@ -308,12 +308,18 @@ impl<'a> TypeScriptEnum<'a> {
         ctx.ast.expression_numeric_literal(SPAN, value, None, NumberBase::Decimal)
     }
 
-    fn get_initializer_expr(value: f64, ctx: &TraverseCtx<'a>) -> Expression<'a> {
+    fn get_initializer_expr(value: f64, ctx: &mut TraverseCtx<'a>) -> Expression<'a> {
         let is_negative = value < 0.0;
 
         // Infinity
         let expr = if value.is_infinite() {
-            ctx.ast.expression_identifier_reference(SPAN, "Infinity")
+            let infinity_symbol_id = ctx.scopes().find_binding(ctx.current_scope_id(), "Infinity");
+            ctx.create_ident_expr(
+                SPAN,
+                Atom::from("Infinity"),
+                infinity_symbol_id,
+                ReferenceFlags::Read,
+            )
         } else {
             let value = if is_negative { -value } else { value };
             Self::get_number_literal_expression(value, ctx)
diff --git a/tasks/coverage/snapshots/semantic_typescript.snap b/tasks/coverage/snapshots/semantic_typescript.snap
index 4a1179fdef744..1cc719210b34c 100644
--- a/tasks/coverage/snapshots/semantic_typescript.snap
+++ b/tasks/coverage/snapshots/semantic_typescript.snap
@@ -13683,9 +13683,7 @@ after transform: ScopeId(0): [ScopeId(1)]
 rebuilt        : ScopeId(0): []
 
 tasks/coverage/typescript/tests/cases/compiler/fakeInfinity2.ts
-semantic error: Missing ReferenceId: "Infinity"
-Missing ReferenceId: "Infinity"
-Missing SymbolId: "X"
+semantic error: Missing SymbolId: "X"
 Missing SymbolId: "_X"
 Missing ReferenceId: "_X"
 Missing ReferenceId: "f"
@@ -13718,14 +13716,9 @@ rebuilt        : SymbolId(4): [ReferenceId(9)]
 Reference symbol mismatch for "X":
 after transform: SymbolId(3) "X"
 rebuilt        : SymbolId(2) "X"
-Unresolved references mismatch:
-after transform: ["Error"]
-rebuilt        : ["Error", "Infinity"]
 
 tasks/coverage/typescript/tests/cases/compiler/fakeInfinity3.ts
-semantic error: Missing ReferenceId: "Infinity"
-Missing ReferenceId: "Infinity"
-Missing SymbolId: "X"
+semantic error: Missing SymbolId: "X"
 Missing SymbolId: "_X"
 Missing ReferenceId: "_X"
 Missing ReferenceId: "f"
@@ -13755,9 +13748,6 @@ rebuilt        : SymbolId(4): SymbolFlags(FunctionScopedVariable)
 Symbol reference IDs mismatch for "f":
 after transform: SymbolId(6): []
 rebuilt        : SymbolId(4): [ReferenceId(9)]
-Symbol reference IDs mismatch for "Infinity":
-after transform: SymbolId(8): []
-rebuilt        : SymbolId(6): [ReferenceId(2), ReferenceId(5)]
 Reference symbol mismatch for "X":
 after transform: SymbolId(3) "X"
 rebuilt        : SymbolId(2) "X"
diff --git a/tasks/transform_conformance/snapshots/oxc.snap.md b/tasks/transform_conformance/snapshots/oxc.snap.md
index 8c4c1e30b1e2b..7de2940341909 100644
--- a/tasks/transform_conformance/snapshots/oxc.snap.md
+++ b/tasks/transform_conformance/snapshots/oxc.snap.md
@@ -53,10 +53,6 @@ after transform: ["const"]
 rebuilt        : []
 
 * computed-constant-value/input.ts
-Missing ReferenceId: "Infinity"
-Missing ReferenceId: "Infinity"
-Missing ReferenceId: "Infinity"
-Missing ReferenceId: "Infinity"
 Bindings mismatch:
 after transform: ScopeId(1): ["A", "a", "b", "c", "d", "e"]
 rebuilt        : ScopeId(1): ["A"]
@@ -97,7 +93,7 @@ Unresolved references mismatch:
 after transform: ["Infinity", "NaN"]
 rebuilt        : ["Infinity"]
 Unresolved reference IDs mismatch for "Infinity":
-after transform: [ReferenceId(0), ReferenceId(1), ReferenceId(2), ReferenceId(3)]
+after transform: [ReferenceId(0), ReferenceId(1), ReferenceId(2), ReferenceId(3), ReferenceId(8), ReferenceId(11), ReferenceId(14), ReferenceId(18)]
 rebuilt        : [ReferenceId(2), ReferenceId(5), ReferenceId(8), ReferenceId(12)]
 
 * elimination-declare/input.ts