From f88e7fe4120b8355ec290acea54036874edec641 Mon Sep 17 00:00:00 2001 From: Mofei Zhang Date: Thu, 18 Jan 2024 18:29:18 -0500 Subject: [PATCH] [repro] add fixture repro for destructuring bug --- ...g-same-property-identifier-names.expect.md | 51 +++++++++++++++++++ ...ucturing-same-property-identifier-names.js | 9 ++++ .../packages/sprout/src/SproutTodoFilter.ts | 1 + 3 files changed, 61 insertions(+) create mode 100644 compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug-destructuring-same-property-identifier-names.expect.md create mode 100644 compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug-destructuring-same-property-identifier-names.js diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug-destructuring-same-property-identifier-names.expect.md b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug-destructuring-same-property-identifier-names.expect.md new file mode 100644 index 0000000000..96781a24c6 --- /dev/null +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug-destructuring-same-property-identifier-names.expect.md @@ -0,0 +1,51 @@ + +## Input + +```javascript +function Component(props) { + const { + x: { destructured }, + sameName: renamed, + } = props; + const sameName = foo(destructured); + + return [sameName, renamed]; +} + +``` + +## Code + +```javascript +import { unstable_useMemoCache as useMemoCache } from "react"; +function Component(props) { + const $ = useMemoCache(6); + let sameName; + let renamed; + if ($[0] !== props) { + const { x: t20, sameName: t32 } = props; + renamed = t32; + sameName = foo(destructured); + $[0] = props; + $[1] = sameName; + $[2] = renamed; + } else { + sameName = $[1]; + renamed = $[2]; + } + + const t0 = sameName; + let t1; + if ($[3] !== t0 || $[4] !== renamed) { + t1 = [t0, renamed]; + $[3] = t0; + $[4] = renamed; + $[5] = t1; + } else { + t1 = $[5]; + } + return t1; +} + +``` + \ No newline at end of file diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug-destructuring-same-property-identifier-names.js b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug-destructuring-same-property-identifier-names.js new file mode 100644 index 0000000000..60714f1965 --- /dev/null +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug-destructuring-same-property-identifier-names.js @@ -0,0 +1,9 @@ +function Component(props) { + const { + x: { destructured }, + sameName: renamed, + } = props; + const sameName = foo(destructured); + + return [sameName, renamed]; +} diff --git a/compiler/packages/sprout/src/SproutTodoFilter.ts b/compiler/packages/sprout/src/SproutTodoFilter.ts index 3373f69b11..4943d61474 100644 --- a/compiler/packages/sprout/src/SproutTodoFilter.ts +++ b/compiler/packages/sprout/src/SproutTodoFilter.ts @@ -516,6 +516,7 @@ const skipFilter = new Set([ "bug-jsx-memberexpr-tag-in-lambda", "bug-invalid-code-when-bailout", "component-syntax-ref-gating.flow", + "bug-destructuring-same-property-identifier-names", // 'react-forget-runtime' not yet supported "flag-enable-emit-hook-guards",