From ec05176fb3950f905f16616934c560d4150130d3 Mon Sep 17 00:00:00 2001 From: Lauren Tan Date: Thu, 11 Apr 2024 10:45:35 -0400 Subject: [PATCH] Make string values for config case-insensitive Fixes a tiny inconsistency with compiler options where one was all uppercase and one all lowercase by normalizing to lowercase regardless of the casing of the user's config. ghstack-source-id: fe60a3259de89a1b3fdd7475950e16e96cc57f6b Pull Request resolved: https://github.com/facebook/react-forget/pull/2832 --- .../src/Babel/RunReactForgetBabelPlugin.ts | 2 +- .../src/Entrypoint/Options.ts | 14 +++++++++----- .../src/Entrypoint/Program.ts | 4 ++-- .../src/__tests__/Logger-test.ts | 4 ++-- .../repro-retain-source-when-bailout.expect.md | 4 ++-- .../compiler/repro-retain-source-when-bailout.js | 2 +- ...t-without-compilation-annotation-mode.expect.md | 4 ++-- ...-bailout-without-compilation-annotation-mode.js | 2 +- ...ailout-without-compilation-infer-mode.expect.md | 4 ++-- ...hould-bailout-without-compilation-infer-mode.js | 2 +- .../src/rules/ReactCompilerRule.ts | 2 +- compiler/packages/snap/src/compiler.ts | 6 +++--- 12 files changed, 27 insertions(+), 23 deletions(-) diff --git a/compiler/packages/babel-plugin-react-forget/src/Babel/RunReactForgetBabelPlugin.ts b/compiler/packages/babel-plugin-react-forget/src/Babel/RunReactForgetBabelPlugin.ts index f6bcf92673..b1b072e2a4 100644 --- a/compiler/packages/babel-plugin-react-forget/src/Babel/RunReactForgetBabelPlugin.ts +++ b/compiler/packages/babel-plugin-react-forget/src/Babel/RunReactForgetBabelPlugin.ts @@ -18,7 +18,7 @@ export function runReactForgetBabelPlugin( text: string, file: string, language: "flow" | "typescript", - options: PluginOptions | null, + options: Partial | null, includeAst: boolean = false ): BabelCore.BabelFileResult { let ast; diff --git a/compiler/packages/babel-plugin-react-forget/src/Entrypoint/Options.ts b/compiler/packages/babel-plugin-react-forget/src/Entrypoint/Options.ts index bcefec39ef..5989411375 100644 --- a/compiler/packages/babel-plugin-react-forget/src/Entrypoint/Options.ts +++ b/compiler/packages/babel-plugin-react-forget/src/Entrypoint/Options.ts @@ -17,15 +17,15 @@ const PanicThresholdOptionsSchema = z.enum([ * If Forget is invoked through `ReactForgetBabelPlugin`, this will at the least * skip Forget compilation for the rest of current file. */ - "ALL_ERRORS", + "all_errors", /* * Panic by throwing an exception only on critical or unrecognized errors. * For all other errors, skip the erroring function without inserting * a Forget-compiled version (i.e. same behavior as noEmit). */ - "CRITICAL_ERRORS", + "critical_errors", // Never panic by throwing an exception. - "NONE", + "none", ]); export type PanicThresholdOptions = z.infer; @@ -173,7 +173,7 @@ export type Logger = { export const defaultOptions: PluginOptions = { compilationMode: "infer", - panicThreshold: "NONE", + panicThreshold: "none", environment: {}, logger: null, gating: null, @@ -189,7 +189,11 @@ export function parsePluginOptions(obj: unknown): PluginOptions { return defaultOptions; } const parsedOptions = Object.create(null); - for (const [key, value] of Object.entries(obj)) { + for (let [key, value] of Object.entries(obj)) { + if (typeof value === "string") { + // normalize string configs to be case insensitive + value = value.toLowerCase(); + } if (isCompilerFlag(key)) { parsedOptions[key] = value; } diff --git a/compiler/packages/babel-plugin-react-forget/src/Entrypoint/Program.ts b/compiler/packages/babel-plugin-react-forget/src/Entrypoint/Program.ts index 911d3e13b4..15aec82858 100644 --- a/compiler/packages/babel-plugin-react-forget/src/Entrypoint/Program.ts +++ b/compiler/packages/babel-plugin-react-forget/src/Entrypoint/Program.ts @@ -120,8 +120,8 @@ function handleError( } } if ( - pass.opts.panicThreshold === "ALL_ERRORS" || - (pass.opts.panicThreshold === "CRITICAL_ERRORS" && isCriticalError(err)) || + pass.opts.panicThreshold === "all_errors" || + (pass.opts.panicThreshold === "critical_errors" && isCriticalError(err)) || isConfigError(err) // Always throws regardless of panic threshold ) { throw err; diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/Logger-test.ts b/compiler/packages/babel-plugin-react-forget/src/__tests__/Logger-test.ts index dca82e3f78..9036ee5cbf 100644 --- a/compiler/packages/babel-plugin-react-forget/src/__tests__/Logger-test.ts +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/Logger-test.ts @@ -21,7 +21,7 @@ it("logs succesful compilation", () => { "function Component(props) { return
{props}
}", "test.js", "flow", - { logger, panicThreshold: "ALL_ERRORS" } as any + { logger, panicThreshold: "all_errors" } ); const [filename, event] = logs.at(0)!; @@ -48,7 +48,7 @@ it("logs failed compilation", () => { "function Component(props) { props.foo = 1; return
{props}
}", "test.js", "flow", - { logger, panicThreshold: "ALL_ERRORS" } as any + { logger, panicThreshold: "all_errors" } ); }).toThrow(); diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/repro-retain-source-when-bailout.expect.md b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/repro-retain-source-when-bailout.expect.md index 3a2ffa1f97..156c8f194f 100644 --- a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/repro-retain-source-when-bailout.expect.md +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/repro-retain-source-when-bailout.expect.md @@ -2,7 +2,7 @@ ## Input ```javascript -// @panicThreshold(NONE) +// @panicThreshold(none) import { useNoAlias } from "shared-runtime"; const cond = true; @@ -27,7 +27,7 @@ export const FIXTURE_ENTRYPOINT = { ## Code ```javascript -// @panicThreshold(NONE) +// @panicThreshold(none) import { useNoAlias } from "shared-runtime"; const cond = true; diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/repro-retain-source-when-bailout.js b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/repro-retain-source-when-bailout.js index 3863146e68..1a0b0e7f2e 100644 --- a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/repro-retain-source-when-bailout.js +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/repro-retain-source-when-bailout.js @@ -1,4 +1,4 @@ -// @panicThreshold(NONE) +// @panicThreshold(none) import { useNoAlias } from "shared-runtime"; const cond = true; diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-annotation-mode.expect.md b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-annotation-mode.expect.md index 46632b7260..c59df6682f 100644 --- a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-annotation-mode.expect.md +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-annotation-mode.expect.md @@ -2,7 +2,7 @@ ## Input ```javascript -// @gating @panicThreshold(NONE) @compilationMode(annotation) +// @gating @panicThreshold(none) @compilationMode(annotation) let someGlobal = "joe"; function Component() { @@ -21,7 +21,7 @@ export const FIXTURE_ENTRYPOINT = { ## Code ```javascript -// @gating @panicThreshold(NONE) @compilationMode(annotation) +// @gating @panicThreshold(none) @compilationMode(annotation) let someGlobal = "joe"; function Component() { diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-annotation-mode.js b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-annotation-mode.js index f8e162c208..167423170c 100644 --- a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-annotation-mode.js +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-annotation-mode.js @@ -1,4 +1,4 @@ -// @gating @panicThreshold(NONE) @compilationMode(annotation) +// @gating @panicThreshold(none) @compilationMode(annotation) let someGlobal = "joe"; function Component() { diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-infer-mode.expect.md b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-infer-mode.expect.md index 92f7fc0634..c3ab1a997e 100644 --- a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-infer-mode.expect.md +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-infer-mode.expect.md @@ -2,7 +2,7 @@ ## Input ```javascript -// @gating @panicThreshold(NONE) @compilationMode(infer) +// @gating @panicThreshold(none) @compilationMode(infer) let someGlobal = "joe"; function Component() { @@ -20,7 +20,7 @@ export const FIXTURE_ENTRYPOINT = { ## Code ```javascript -// @gating @panicThreshold(NONE) @compilationMode(infer) +// @gating @panicThreshold(none) @compilationMode(infer) let someGlobal = "joe"; function Component() { diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-infer-mode.js b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-infer-mode.js index a9c6d0afbd..02d56095be 100644 --- a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-infer-mode.js +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/should-bailout-without-compilation-infer-mode.js @@ -1,4 +1,4 @@ -// @gating @panicThreshold(NONE) @compilationMode(infer) +// @gating @panicThreshold(none) @compilationMode(infer) let someGlobal = "joe"; function Component() { diff --git a/compiler/packages/eslint-plugin-react-compiler/src/rules/ReactCompilerRule.ts b/compiler/packages/eslint-plugin-react-compiler/src/rules/ReactCompilerRule.ts index 728ed456c2..5d100e8864 100644 --- a/compiler/packages/eslint-plugin-react-compiler/src/rules/ReactCompilerRule.ts +++ b/compiler/packages/eslint-plugin-react-compiler/src/rules/ReactCompilerRule.ts @@ -61,7 +61,7 @@ function isReportableDiagnostic( const COMPILER_OPTIONS: Partial = { noEmit: true, compilationMode: "infer", - panicThreshold: "CRITICAL_ERRORS", + panicThreshold: "critical_errors", }; const rule: Rule.RuleModule = { diff --git a/compiler/packages/snap/src/compiler.ts b/compiler/packages/snap/src/compiler.ts index 3d881ba5fb..99602a494c 100644 --- a/compiler/packages/snap/src/compiler.ts +++ b/compiler/packages/snap/src/compiler.ts @@ -39,7 +39,7 @@ function makePluginOptions( let enableEmitHookGuards = null; let compilationMode: CompilationMode = "all"; let enableUseMemoCachePolyfill = false; - let panicThreshold: PanicThresholdOptions = "ALL_ERRORS"; + let panicThreshold: PanicThresholdOptions = "all_errors"; let hookPattern: string | null = null; // TODO(@mofeiZ) rewrite snap fixtures to @validatePreserveExistingMemo:false let validatePreserveExistingMemoizationGuarantees = false; @@ -93,8 +93,8 @@ function makePluginOptions( if (firstLine.includes("@enableUseMemoCachePolyfill")) { enableUseMemoCachePolyfill = true; } - if (firstLine.includes("@panicThreshold(NONE)")) { - panicThreshold = "NONE"; + if (firstLine.includes("@panicThreshold(none)")) { + panicThreshold = "none"; } let eslintSuppressionRules: Array | null = null;