From b6196e1f7304c29ac44fc82ab899b0b7381d8441 Mon Sep 17 00:00:00 2001 From: Mofei Zhang Date: Thu, 18 Jul 2024 19:02:37 -0400 Subject: [PATCH 1/2] [compiler][repro] Test fixture for fbt whitespace bug [ghstack-poisoned] --- .../fbt-preserve-whitespace-param.expect.md | 100 ++++++++++++++++++ .../fbt/fbt-preserve-whitespace-param.tsx | 32 ++++++ .../packages/snap/src/SproutTodoFilter.ts | 1 + 3 files changed, 133 insertions(+) create mode 100644 compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/fbt-preserve-whitespace-param.expect.md create mode 100644 compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/fbt-preserve-whitespace-param.tsx diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/fbt-preserve-whitespace-param.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/fbt-preserve-whitespace-param.expect.md new file mode 100644 index 00000000000..812d5d8d6d8 --- /dev/null +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/fbt-preserve-whitespace-param.expect.md @@ -0,0 +1,100 @@ + +## Input + +```javascript +import fbt from "fbt"; + +/** + * Currently fails with the following: + * Found differences in evaluator results + * Non-forget (expected): + * (kind: ok)
Jason !
+ * Forget: + * (kind: ok)
Jason!
+ + */ + +function Foo(props) { + return ( + // prettier-ignore +
+ + + + {props.name} + + ! + + +
+ ); +} + +export const FIXTURE_ENTRYPOINT = { + fn: Foo, + params: [{ name: "Jason" }], +}; + +``` + +## Code + +```javascript +import { c as _c } from "react/compiler-runtime"; +import fbt from "fbt"; + +/** + * Currently fails with the following: + * Found differences in evaluator results + * Non-forget (expected): + * (kind: ok)
Jason !
+ * Forget: + * (kind: ok)
Jason!
+ + */ + +function Foo(props) { + const $ = _c(2); + let t0; + if ($[0] !== props.name) { + t0 = ( +
+ {fbt._( + "{=m0}", + [ + fbt._implicitParam( + "=m0", + + {fbt._( + "{user name}!", + [ + fbt._param( + "user name", + + props.name, + ), + ], + { hk: "mBBZ9" }, + )} + , + ), + ], + { hk: "3RVfuk" }, + )} +
+ ); + $[0] = props.name; + $[1] = t0; + } else { + t0 = $[1]; + } + return t0; +} + +export const FIXTURE_ENTRYPOINT = { + fn: Foo, + params: [{ name: "Jason" }], +}; + +``` + \ No newline at end of file diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/fbt-preserve-whitespace-param.tsx b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/fbt-preserve-whitespace-param.tsx new file mode 100644 index 00000000000..3add68e52c6 --- /dev/null +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/fbt-preserve-whitespace-param.tsx @@ -0,0 +1,32 @@ +import fbt from "fbt"; + +/** + * Currently fails with the following: + * Found differences in evaluator results + * Non-forget (expected): + * (kind: ok)
Jason !
+ * Forget: + * (kind: ok)
Jason!
+ + */ + +function Foo(props) { + return ( + // prettier-ignore +
+ + + + {props.name} + + ! + + +
+ ); +} + +export const FIXTURE_ENTRYPOINT = { + fn: Foo, + params: [{ name: "Jason" }], +}; diff --git a/compiler/packages/snap/src/SproutTodoFilter.ts b/compiler/packages/snap/src/SproutTodoFilter.ts index 85f7413534b..6873f5af79b 100644 --- a/compiler/packages/snap/src/SproutTodoFilter.ts +++ b/compiler/packages/snap/src/SproutTodoFilter.ts @@ -484,6 +484,7 @@ const skipFilter = new Set([ "rules-of-hooks/rules-of-hooks-69521d94fa03", // bugs + "fbt/fbt-preserve-whitespace-param", "bug-invalid-hoisting-functionexpr", "original-reactive-scopes-fork/bug-nonmutating-capture-in-unsplittable-memo-block", "original-reactive-scopes-fork/bug-hoisted-declaration-with-scope", From 768aad37841a02772bc8bf3a62265bf64931a0e6 Mon Sep 17 00:00:00 2001 From: Mofei Zhang Date: Fri, 19 Jul 2024 11:51:23 -0400 Subject: [PATCH 2/2] Update on "[compiler][repro] Test fixture for fbt whitespace bug" [ghstack-poisoned] --- ...am.expect.md => bug-fbt-preserve-whitespace-param.expect.md} | 0 ...itespace-param.tsx => bug-fbt-preserve-whitespace-param.tsx} | 0 compiler/packages/snap/src/SproutTodoFilter.ts | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/{fbt-preserve-whitespace-param.expect.md => bug-fbt-preserve-whitespace-param.expect.md} (100%) rename compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/{fbt-preserve-whitespace-param.tsx => bug-fbt-preserve-whitespace-param.tsx} (100%) diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/fbt-preserve-whitespace-param.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/bug-fbt-preserve-whitespace-param.expect.md similarity index 100% rename from compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/fbt-preserve-whitespace-param.expect.md rename to compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/bug-fbt-preserve-whitespace-param.expect.md diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/fbt-preserve-whitespace-param.tsx b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/bug-fbt-preserve-whitespace-param.tsx similarity index 100% rename from compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/fbt-preserve-whitespace-param.tsx rename to compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/fbt/bug-fbt-preserve-whitespace-param.tsx diff --git a/compiler/packages/snap/src/SproutTodoFilter.ts b/compiler/packages/snap/src/SproutTodoFilter.ts index 6873f5af79b..4fcde299655 100644 --- a/compiler/packages/snap/src/SproutTodoFilter.ts +++ b/compiler/packages/snap/src/SproutTodoFilter.ts @@ -484,7 +484,7 @@ const skipFilter = new Set([ "rules-of-hooks/rules-of-hooks-69521d94fa03", // bugs - "fbt/fbt-preserve-whitespace-param", + "fbt/bug-fbt-preserve-whitespace-param", "bug-invalid-hoisting-functionexpr", "original-reactive-scopes-fork/bug-nonmutating-capture-in-unsplittable-memo-block", "original-reactive-scopes-fork/bug-hoisted-declaration-with-scope",