[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;