From ddacda023bc0fbe7510652cb104595045b1a559e Mon Sep 17 00:00:00 2001 From: Mike Vitousek Date: Tue, 2 Jul 2024 09:59:45 -0700 Subject: [PATCH] Update base for Update on "[compiler][ez] Rename disableMemoizationForDebugging to just disableMemoization" Summary: We don't really need to make positive claims about what a particular mode is for in the name [ghstack-poisoned] --- .../src/HIR/Environment.ts | 23 +++++++++++------ .../useMemo-preserve-non-idempotent.expect.md | 4 +-- .../useMemo-preserve-non-idempotent.js | 2 +- .../useMemo-simple-preserved.expect.md | 4 +-- .../compiler/useMemo-simple-preserved.js | 2 +- compiler/packages/snap/src/compiler.ts | 25 +++++++++++++------ 6 files changed, 40 insertions(+), 20 deletions(-) diff --git a/compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts b/compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts index e74fb4a8c1..4188e536a4 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts @@ -480,19 +480,28 @@ export function parseConfigPragma(pragma: string): EnvironmentConfig { } if ( - key === "enablePreserveExistingManualUseMemoAsHook" && - (val === undefined || val === "true") + key === "enablePreserveExistingManualUseMemo" && + (val === undefined || val === "true" || val === "scope") ) { - maybeConfig["enablePreserveExistingManualUseMemo"] = "hook"; + maybeConfig[key] = "scope"; + continue; + } + + if (key === "enablePreserveExistingManualUseMemo" && val === "hook") { + maybeConfig[key] = "hook"; continue; } if ( - key === "enablePreserveExistingManualUseMemoAsScope" && - (val === undefined || val === "true") + key === "enablePreserveExistingManualUseMemo" && + !(val === "false" || val === "off") ) { - maybeConfig["enablePreserveExistingManualUseMemo"] = "scope"; - continue; + CompilerError.throwInvalidConfig({ + reason: `Invalid setting '${val}' for 'enablePreserveExistingManualUseMemo'. Valid settings are 'hook', 'scope', or 'off'.`, + description: null, + loc: null, + suggestions: null, + }); } if (typeof defaultConfig[key as keyof EnvironmentConfig] !== "boolean") { diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-preserve-non-idempotent.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-preserve-non-idempotent.expect.md index 87bba8504d..deb36c578b 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-preserve-non-idempotent.expect.md +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-preserve-non-idempotent.expect.md @@ -2,7 +2,7 @@ ## Input ```javascript -// @enablePreserveExistingManualUseMemoAsScope +// @enablePreserveExistingManualUseMemo import { useMemo } from "react"; let cur = 99; function random(id) { @@ -28,7 +28,7 @@ export const FIXTURE_ENTRYPOINT = { ## Code ```javascript -import { c as _c } from "react/compiler-runtime"; // @enablePreserveExistingManualUseMemoAsScope +import { c as _c } from "react/compiler-runtime"; // @enablePreserveExistingManualUseMemo import { useMemo } from "react"; let cur = 99; function random(id) { diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-preserve-non-idempotent.js b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-preserve-non-idempotent.js index dfe6e8de63..63a5be8eee 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-preserve-non-idempotent.js +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-preserve-non-idempotent.js @@ -1,4 +1,4 @@ -// @enablePreserveExistingManualUseMemoAsScope +// @enablePreserveExistingManualUseMemo import { useMemo } from "react"; let cur = 99; function random(id) { diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-simple-preserved.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-simple-preserved.expect.md index 0a78356a5e..c72e3a140d 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-simple-preserved.expect.md +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-simple-preserved.expect.md @@ -2,7 +2,7 @@ ## Input ```javascript -// @enablePreserveExistingManualUseMemoAsScope +// @enablePreserveExistingManualUseMemo import { useMemo } from "react"; function Component({ a }) { @@ -21,7 +21,7 @@ export const FIXTURE_ENTRYPOINT = { ## Code ```javascript -import { c as _c } from "react/compiler-runtime"; // @enablePreserveExistingManualUseMemoAsScope +import { c as _c } from "react/compiler-runtime"; // @enablePreserveExistingManualUseMemo import { useMemo } from "react"; function Component(t0) { diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-simple-preserved.js b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-simple-preserved.js index 52a88490f2..a5731f2f09 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-simple-preserved.js +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useMemo-simple-preserved.js @@ -1,4 +1,4 @@ -// @enablePreserveExistingManualUseMemoAsScope +// @enablePreserveExistingManualUseMemo import { useMemo } from "react"; function Component({ a }) { diff --git a/compiler/packages/snap/src/compiler.ts b/compiler/packages/snap/src/compiler.ts index 889514bd34..8afbecde8a 100644 --- a/compiler/packages/snap/src/compiler.ts +++ b/compiler/packages/snap/src/compiler.ts @@ -141,17 +141,28 @@ function makePluginOptions( }, }; } - if (firstLine.includes("@enablePreserveExistingManualUseMemoAsHook")) { - enablePreserveExistingManualUseMemo = "hook"; - } else if ( - firstLine.includes("@enablePreserveExistingManualUseMemoAsScope") + + const useMemoMatch = /@enablePreserveExistingManualUseMemo:"([^"]+)"/.exec( + firstLine + ); + if ( + useMemoMatch && + (useMemoMatch[1] === "hook" || useMemoMatch[1] === "scope") ) { - enablePreserveExistingManualUseMemo = "scope"; - } else if (firstLine.includes("@enablePreserveExistingManualUseMemo")) { + enablePreserveExistingManualUseMemo = useMemoMatch[1]; + } else if ( + useMemoMatch && + (useMemoMatch[1] === "false" || useMemoMatch[1] === "off") + ) { + enablePreserveExistingManualUseMemo = null; + } else if (useMemoMatch) { throw new Error( - "Use either @enablePreserveExistingManualUseMemoAsScope or @enablePreserveExistingManualUseMemoAsHook" + `Invalid setting '${useMemoMatch[1]}' for 'enablePreserveExistingManualUseMemo'. Valid settings are 'hook', 'scope', or 'off'.` ); + } else if (firstLine.includes("@enablePreserveExistingManualUseMemo")) { + enablePreserveExistingManualUseMemo = "scope"; } + const hookPatternMatch = /@hookPattern:"([^"]+)"/.exec(firstLine); if ( hookPatternMatch &&