Allow module level "use no forget"

Currently we only allow adding the directive to function bodies, but there may 
be cases where we want to always opt out an entire module from being compiled by 
Forget
This commit is contained in:
Lauren Tan
2024-02-15 17:44:44 -05:00
parent 21c5631570
commit 5142affc26
4 changed files with 43 additions and 0 deletions
@@ -188,6 +188,11 @@ export function compileProgram(
program: NodePath<t.Program>,
pass: CompilerPass
): void {
// Top level "use no forget", skip this file entirely
if (findUseNoForgetDirective(program.node.directives) != null) {
return;
}
const options = parsePluginOptions(pass.opts);
const environment = parseEnvironmentConfig(pass.opts.environment ?? {});
@@ -0,0 +1,29 @@
## Input
```javascript
"use no forget";
export default function foo(x, y) {
if (x) {
return foo(false, y);
}
return [y * 10];
}
```
## Code
```javascript
"use no forget";
export default function foo(x, y) {
if (x) {
return foo(false, y);
}
return [y * 10];
}
```
@@ -0,0 +1,8 @@
"use no forget";
export default function foo(x, y) {
if (x) {
return foo(false, y);
}
return [y * 10];
}
@@ -384,6 +384,7 @@ const skipFilter = new Set([
"useMemo-named-function",
"useMemo-return-empty",
"useMemo-simple",
"use-no-forget-module-level",
// defines multiple functions
"alias-while",
"babel-existing-react-import",