diff --git a/compiler/forget/packages/snap/src/compiler-worker.ts b/compiler/forget/packages/snap/src/compiler-worker.ts index 8ccaa8f460..426ae1d136 100644 --- a/compiler/forget/packages/snap/src/compiler-worker.ts +++ b/compiler/forget/packages/snap/src/compiler-worker.ts @@ -94,7 +94,7 @@ export async function compile( let panicOnBailout = true; let memoizeJsxElements = true; let enableAssumeHooksFollowRulesOfReact = false; - let enableTreatHooksAsFunctions = false; + let enableTreatHooksAsFunctions = true; if (firstLine.indexOf("@forgetDirective") !== -1) { enableOnlyOnUseForgetDirective = true; } @@ -125,8 +125,8 @@ export async function compile( if (firstLine.indexOf("@enableAssumeHooksFollowRulesOfReact true") !== -1) { enableAssumeHooksFollowRulesOfReact = true; } - if (firstLine.indexOf("@enableTreatHooksAsFunctions true") !== -1) { - enableTreatHooksAsFunctions = true; + if (firstLine.indexOf("@enableTreatHooksAsFunctions false") !== -1) { + enableTreatHooksAsFunctions = false; } const language = parseLanguage(firstLine); diff --git a/compiler/forget/src/HIR/Environment.ts b/compiler/forget/src/HIR/Environment.ts index 1a78bde8d0..a37aef54f5 100644 --- a/compiler/forget/src/HIR/Environment.ts +++ b/compiler/forget/src/HIR/Environment.ts @@ -99,7 +99,7 @@ export type EnvironmentConfig = Partial<{ * Enabling this may change inference to have a higher confidence level * and create more bailouts (e.g. for mutable effects to immutable values). * - * Defaults to false + * Defaults to true */ enableTreatHooksAsFunctions: boolean; }>; @@ -149,7 +149,7 @@ export class Environment { this.enableAssumeHooksFollowRulesOfReact = config?.enableAssumeHooksFollowRulesOfReact ?? false; this.enableTreatHooksAsFunctions = - config?.enableTreatHooksAsFunctions ?? false; + config?.enableTreatHooksAsFunctions ?? true; this.#contextIdentifiers = contextIdentifiers; } diff --git a/compiler/forget/src/__tests__/fixtures/compiler/unknown-hooks-do-not-assert.expect.md b/compiler/forget/src/__tests__/fixtures/compiler/unknown-hooks-do-not-assert.expect.md index 4ceab286cb..ecfb83f795 100644 --- a/compiler/forget/src/__tests__/fixtures/compiler/unknown-hooks-do-not-assert.expect.md +++ b/compiler/forget/src/__tests__/fixtures/compiler/unknown-hooks-do-not-assert.expect.md @@ -2,8 +2,12 @@ ## Input ```javascript -// @enableTreatHooksAsFunctions true -// (enableAssumeHooksFollowRulesOfReact=false) +// Forget currently bails out when it detects a potential mutation (Effect.Mutate) +// to an immutable value. This should not apply to unknown / untyped hooks. + +// Default feature flags: +// enableAssumeHooksFollowRulesOfReact=false +// enableTreatHooksAsFunctions=true function Component(props) { const x = useUnknownHook1(props); const y = useUnknownHook2(x); @@ -15,8 +19,12 @@ function Component(props) { ## Code ```javascript -// @enableTreatHooksAsFunctions true -// (enableAssumeHooksFollowRulesOfReact=false) +// Forget currently bails out when it detects a potential mutation (Effect.Mutate) +// to an immutable value. This should not apply to unknown / untyped hooks. + +// Default feature flags: +// enableAssumeHooksFollowRulesOfReact=false +// enableTreatHooksAsFunctions=true function Component(props) { const x = useUnknownHook1(props); const y = useUnknownHook2(x); diff --git a/compiler/forget/src/__tests__/fixtures/compiler/unknown-hooks-do-not-assert.js b/compiler/forget/src/__tests__/fixtures/compiler/unknown-hooks-do-not-assert.js index 161574a4b0..42b9d15beb 100644 --- a/compiler/forget/src/__tests__/fixtures/compiler/unknown-hooks-do-not-assert.js +++ b/compiler/forget/src/__tests__/fixtures/compiler/unknown-hooks-do-not-assert.js @@ -1,5 +1,9 @@ -// @enableTreatHooksAsFunctions true -// (enableAssumeHooksFollowRulesOfReact=false) +// Forget currently bails out when it detects a potential mutation (Effect.Mutate) +// to an immutable value. This should not apply to unknown / untyped hooks. + +// Default feature flags: +// enableAssumeHooksFollowRulesOfReact=false +// enableTreatHooksAsFunctions=true function Component(props) { const x = useUnknownHook1(props); const y = useUnknownHook2(x); diff --git a/compiler/forget/src/__tests__/test-utils/generateTestsFromFixtures.ts b/compiler/forget/src/__tests__/test-utils/generateTestsFromFixtures.ts index 0edb20b0dd..0e1e461c53 100644 --- a/compiler/forget/src/__tests__/test-utils/generateTestsFromFixtures.ts +++ b/compiler/forget/src/__tests__/test-utils/generateTestsFromFixtures.ts @@ -103,7 +103,7 @@ export default function generateTestsFromFixtures( let panicOnBailout = true; let memoizeJsxElements = true; let enableAssumeHooksFollowRulesOfReact = false; - let enableTreatHooksAsFunctions = false; + let enableTreatHooksAsFunctions = true; if (inputFile != null) { input = fs.readFileSync(inputFile, "utf8"); @@ -153,8 +153,8 @@ export default function generateTestsFromFixtures( ) { enableAssumeHooksFollowRulesOfReact = true; } - if (lines[0]!.indexOf("@enableTreatHooksAsFunctions true") !== -1) { - enableTreatHooksAsFunctions = true; + if (lines[0]!.indexOf("@enableTreatHooksAsFunctions false") !== -1) { + enableTreatHooksAsFunctions = false; } }