@samitouri / QOS-React-2 / commits / 7caa18c4b9

[playground] Parse pragma in playground

Sathya Gunasekaran committed Jun 23, 2023 at 14:36 UTC 7caa18c4b937c0c24a3199ee08ffc61a520bb247
1 file changed +43 -2
compiler/forget/apps/playground/components/Editor/index.tsx
+43 -2
@@ -119,14 +119,55 @@ function compile(source: string): CompilerOutput {
119 }
120 };
121 try {
122 + // Extract the first line to quickly check for custom test directives
123 + const firstLine = source.substring(0, source.indexOf("\n"));
124 +
125 + let memoizeJsxElements = true;
126 + let enableAssumeHooksFollowRulesOfReact = true;
127 + let enableTreatHooksAsFunctions = true;
128 + let disableAllMemoization = false;
129 + let validateRefAccessDuringRender = true;
130 + let enableEmitFreeze = null;
131 + let enableOptimizeFunctionExpressions = false;
132 + if (firstLine.includes("@memoizeJsxElements false")) {
133 + memoizeJsxElements = false;
134 + }
135 + if (firstLine.includes("@enableAssumeHooksFollowRulesOfReact true")) {
136 + enableAssumeHooksFollowRulesOfReact = true;
137 + }
138 + if (firstLine.includes("@enableTreatHooksAsFunctions false")) {
139 + enableTreatHooksAsFunctions = false;
140 + }
141 + if (firstLine.includes("@disableAllMemoization true")) {
142 + disableAllMemoization = true;
143 + }
144 + if (firstLine.includes("@validateRefAccessDuringRender false")) {
145 + validateRefAccessDuringRender = false;
146 + }
147 + if (firstLine.includes("@enableOptimizeFunctionExpressions")) {
148 + enableOptimizeFunctionExpressions = true;
149 + }
150 + if (firstLine.includes("@enableEmitFreeze")) {
151 + enableEmitFreeze = {
152 + source: "react-forget-runtime",
153 + importSpecifierName: "makeReadOnly",
154 + };
155 + }
156 +
157 for (const fn of parseFunctions(source)) {
158 for (const result of run(fn, {
159 customHooks: new Map([...COMMON_HOOKS]),
125 - enableAssumeHooksFollowRulesOfReact: true,
160 + enableAssumeHooksFollowRulesOfReact,
161 enableFunctionCallSignatureOptimizations: true,
162 + disableAllMemoization,
163 + enableTreatHooksAsFunctions,
164 inlineUseMemo: true,
128 - memoizeJsxElements: true,
165 + memoizeJsxElements,
166 validateHooksUsage: true,
167 + validateRefAccessDuringRender,
168 + validateFrozenLambdas: true,
169 + enableEmitFreeze,
170 + enableOptimizeFunctionExpressions,
171 assertValidMutableRanges: true,
172 })) {
173 const fnName = fn.node.id?.name ?? null;