diff --git a/compiler/forget/packages/snap/src/compiler-worker.ts b/compiler/forget/packages/snap/src/compiler-worker.ts index b70f784693..8ccaa8f460 100644 --- a/compiler/forget/packages/snap/src/compiler-worker.ts +++ b/compiler/forget/packages/snap/src/compiler-worker.ts @@ -94,6 +94,7 @@ export async function compile( let panicOnBailout = true; let memoizeJsxElements = true; let enableAssumeHooksFollowRulesOfReact = false; + let enableTreatHooksAsFunctions = false; if (firstLine.indexOf("@forgetDirective") !== -1) { enableOnlyOnUseForgetDirective = true; } @@ -124,6 +125,9 @@ export async function compile( if (firstLine.indexOf("@enableAssumeHooksFollowRulesOfReact true") !== -1) { enableAssumeHooksFollowRulesOfReact = true; } + if (firstLine.indexOf("@enableTreatHooksAsFunctions true") !== -1) { + enableTreatHooksAsFunctions = true; + } const language = parseLanguage(firstLine); @@ -144,6 +148,7 @@ export async function compile( enableAssumeHooksFollowRulesOfReact, inlineUseMemo: true, memoizeJsxElements, + enableTreatHooksAsFunctions, }, logger: null, gating, 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 new file mode 100644 index 0000000000..4ceab286cb --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/compiler/unknown-hooks-do-not-assert.expect.md @@ -0,0 +1,27 @@ + +## Input + +```javascript +// @enableTreatHooksAsFunctions true +// (enableAssumeHooksFollowRulesOfReact=false) +function Component(props) { + const x = useUnknownHook1(props); + const y = useUnknownHook2(x); + return y; +} + +``` + +## Code + +```javascript +// @enableTreatHooksAsFunctions true +// (enableAssumeHooksFollowRulesOfReact=false) +function Component(props) { + const x = useUnknownHook1(props); + const y = useUnknownHook2(x); + return y; +} + +``` + \ No newline at end of file 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 new file mode 100644 index 0000000000..161574a4b0 --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/compiler/unknown-hooks-do-not-assert.js @@ -0,0 +1,7 @@ +// @enableTreatHooksAsFunctions true +// (enableAssumeHooksFollowRulesOfReact=false) +function Component(props) { + const x = useUnknownHook1(props); + const y = useUnknownHook2(x); + return y; +} diff --git a/compiler/forget/src/__tests__/test-utils/generateTestsFromFixtures.ts b/compiler/forget/src/__tests__/test-utils/generateTestsFromFixtures.ts index d7c05a95d5..0edb20b0dd 100644 --- a/compiler/forget/src/__tests__/test-utils/generateTestsFromFixtures.ts +++ b/compiler/forget/src/__tests__/test-utils/generateTestsFromFixtures.ts @@ -103,6 +103,7 @@ export default function generateTestsFromFixtures( let panicOnBailout = true; let memoizeJsxElements = true; let enableAssumeHooksFollowRulesOfReact = false; + let enableTreatHooksAsFunctions = false; if (inputFile != null) { input = fs.readFileSync(inputFile, "utf8"); @@ -152,6 +153,9 @@ export default function generateTestsFromFixtures( ) { enableAssumeHooksFollowRulesOfReact = true; } + if (lines[0]!.indexOf("@enableTreatHooksAsFunctions true") !== -1) { + enableTreatHooksAsFunctions = true; + } } testCommand(basename, () => { @@ -162,6 +166,7 @@ export default function generateTestsFromFixtures( inlineUseMemo, memoizeJsxElements, enableAssumeHooksFollowRulesOfReact, + enableTreatHooksAsFunctions, }, logger: null, debug,