Files
oxc-project__oxc/crates/oxc_react_compiler/tests/snapshots/method-call-scope-merge-mutable-range-sync.snap
Boshen 6efce65746 test(react_compiler): snapshot the upstream fixture corpus (#24101)
## Summary

`oxc_react_compiler` had no committed test over the upstream React
Compiler fixture corpus — the fixtures lived only in the
`oxc-project/forked-react-compiler` checkout, exercised out-of-tree.
That gap let real regressions slip past the 15 in-crate integration
tests. This PR closes it.

- **`crates/oxc_react_compiler/fixtures/`** — 1734 fixture *input* files
(`.js`/`.ts`/`.tsx`/`.jsx`/`.mjs`), copied from the fork's
`babel-plugin-react-compiler/src/__tests__/fixtures/compiler` tree with
subdirectories preserved. Flow fixtures (the `@flow`-pragma ones) are
excluded — oxc has no Flow parser. The upstream `.expect.md` goldens are
also not copied; insta is the golden here.
- **`crates/oxc_react_compiler/tests/snapshot.rs`** — an `insta::glob!`
test that, per fixture, derives `PluginOptions`/`EnvironmentConfig` from
the first-line `// @directive` pragmas (base `compilationMode=all` /
`panicThreshold=all_errors`, matching the upstream `snap` runner),
parses → builds semantic → runs `transform`, and snapshots the compiled
output plus diagnostics. Unrecognised directives are ignored, as
upstream does; camelCase flag directives map to `EnvironmentConfig`
fields via `convert_case`.
- **`crates/oxc_react_compiler/tests/snapshots/`** — 1734 committed
`.snap` goldens (oxc's own output).
- **`.typos.toml`** — excludes the fixtures dir (the upstream fixtures
contain intentional typos; `**/*.snap` was already excluded).

These snapshots are oxc's own golden output, so `cargo test` (and CI)
now catches any change in compiler behaviour across the corpus.
Regenerate after an intended change with `cargo insta accept`.

## Verification

- `cargo test -p oxc_react_compiler` passes — the 1734-fixture snapshot
test plus the existing 15 integration tests; also green under
`--all-features` (matches the cross-target CI job).
- clippy `-D warnings`, `cargo fmt`, and `typos` clean.
- No fixture panics; 1336 compiled / 398 unchanged / 335 with
diagnostics.
- The `error.*` fixtures capture the exact diagnostics — including the
"Cannot reassign variable after render" error that a recent scoping
change had silently suppressed, confirming the suite catches real
regressions.

---

AI usage disclosure: authored with Claude Code and reviewed before
submission.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-07-03 16:49:53 +08:00

182 lines
4.0 KiB
Plaintext

---
source: crates/oxc_react_compiler/tests/snapshot.rs
input_file: crates/oxc_react_compiler/fixtures/method-call-scope-merge-mutable-range-sync.js
---
import { c as _c } from "react/compiler-runtime";
import fbt from "fbt";
import * as React from "react";
import { useState } from "react";
// Minimized from MusicPartnerManagerMusicWorkDocumentStoreRenderer.react.js
// Tests AlignMethodCallScopes mutable_range sync after scope merging.
function nullthrows(x) {
if (x != null) {
return x;
}
throw new Error("nullthrows");
}
function Component(t0) {
const $ = _c(37);
const { store } = t0;
const [isShown, setIsShown] = useState(false);
const t1 = store?.id;
let t2;
if ($[0] !== t1) {
t2 = nullthrows(t1);
$[0] = t1;
$[1] = t2;
} else {
t2 = $[1];
}
const id = t2;
let t3;
let t4;
let t5;
let t6;
let t7;
let t8;
let t9;
if ($[2] !== store) {
t9 = Symbol.for("react.early_return_sentinel");
bb0: {
const storeUri = nullthrows(store?.store_uri);
const licensedGeos = nullthrows(store?.licensed_geos);
const documentSchema = nullthrows(store?.document_schema);
const ingestionEnabled = nullthrows(store?.ingestion_enabled);
const cwrSenderIds = store?.cwr_sender_ids;
if (!store.hasOwnProperty("store_uri")) {
t9 = undefined;
break bb0;
}
t8 = store.id;
const t10 = fbt(`Directory: ${fbt.param("store URI", storeUri.replace("sftp://sftp.fb.com", ""))}`, "directory info");
if ($[10] !== t10) {
t4 = <span>{t10}</span>;
$[10] = t10;
$[11] = t4;
} else {
t4 = $[11];
}
t5 = <span>{fbt(`Schema: ${fbt.param("schema", documentSchema)}`, "schema")},{" "}{fbt(`Geos: ${fbt.param("geos", licensedGeos.length)}`, "geos count")},{" "}</span>;
if ($[12] !== cwrSenderIds) {
t6 = cwrSenderIds != null && <span>Sender ID: {cwrSenderIds[0]}</span>;
$[12] = cwrSenderIds;
$[13] = t6;
} else {
t6 = $[13];
}
const t11 = ingestionEnabled ? "Enabled" : "Disabled";
if ($[14] !== t11) {
t7 = <span>Ingestion: {t11}</span>;
$[14] = t11;
$[15] = t7;
} else {
t7 = $[15];
}
t3 = [...licensedGeos].sort().join(",");
}
$[2] = store;
$[3] = t3;
$[4] = t4;
$[5] = t5;
$[6] = t6;
$[7] = t7;
$[8] = t8;
$[9] = t9;
} else {
t3 = $[3];
t4 = $[4];
t5 = $[5];
t6 = $[6];
t7 = $[7];
t8 = $[8];
t9 = $[9];
}
if (t9 !== Symbol.for("react.early_return_sentinel")) {
return t9;
}
let t10;
if ($[16] === Symbol.for("react.memo_cache_sentinel")) {
t10 = <button onClick={_temp}>Copy</button>;
$[16] = t10;
} else {
t10 = $[16];
}
let t11;
if ($[17] !== t3) {
t11 = <span>{t3}{t10}</span>;
$[17] = t3;
$[18] = t11;
} else {
t11 = $[18];
}
let t12;
if ($[19] !== t11 || $[20] !== t4 || $[21] !== t5 || $[22] !== t6 || $[23] !== t7) {
t12 = <span>{t4}{t5}{t6}{t7}{t11}</span>;
$[19] = t11;
$[20] = t4;
$[21] = t5;
$[22] = t6;
$[23] = t7;
$[24] = t12;
} else {
t12 = $[24];
}
let t13;
if ($[25] === Symbol.for("react.memo_cache_sentinel")) {
t13 = <button onClick={() => setIsShown(true)} />;
$[25] = t13;
} else {
t13 = $[25];
}
let t14;
if ($[26] !== id) {
t14 = <button onClick={() => console.log(id.toString())} />;
$[26] = id;
$[27] = t14;
} else {
t14 = $[27];
}
let t15;
if ($[28] !== isShown) {
t15 = isShown && <button onClick={() => setIsShown(false)} />;
$[28] = isShown;
$[29] = t15;
} else {
t15 = $[29];
}
let t16;
if ($[30] !== t14 || $[31] !== t15) {
t16 = <span>{t13}{t14}{t15}</span>;
$[30] = t14;
$[31] = t15;
$[32] = t16;
} else {
t16 = $[32];
}
let t17;
if ($[33] !== t12 || $[34] !== t16 || $[35] !== t8) {
t17 = <div key={t8}>{t12}{t16}</div>;
$[33] = t12;
$[34] = t16;
$[35] = t8;
$[36] = t17;
} else {
t17 = $[36];
}
return t17;
}
function _temp() {
console.log("copied");
}
export const FIXTURE_ENTRYPOINT = {
fn: Component,
params: [{ store: {
id: "1",
store_uri: "sftp://sftp.fb.com/Music",
licensed_geos: ["US", "GB"],
document_schema: "CWR",
ingestion_enabled: true,
cwr_sender_ids: ["123"]
} }]
};