36
comments: (t.CommentBlock | t.CommentLine)[];
37
};
38
39
-function hasAnyUseForgetDirectives(directives: t.Directive[]): boolean {
39
+function findUseForgetDirective(directives: t.Directive[]): t.Directive | null {
40
for (const directive of directives) {
41
if (directive.value.value === "use forget") {
42
- return true;
42
+ return directive;
43
}
44
}
45
- return false;
45
+ return null;
46
}
47
48
-function hasAnyUseNoForgetDirectives(directives: t.Directive[]): boolean {
48
+function findUseNoForgetDirective(
49
+ directives: t.Directive[]
50
+): t.Directive | null {
51
for (const directive of directives) {
52
if (directive.value.value === "use no forget") {
51
- return true;
53
+ return directive;
54
}
55
}
54
- return false;
56
+ return null;
57
}
58
59
function isCriticalError(err: unknown): boolean {
364
}
365
if (fn.node.body.type === "BlockStatement") {
366
// Opt-outs disable compilation regardless of mode
365
- if (hasAnyUseNoForgetDirectives(fn.node.body.directives)) {
367
+ const useNoForget = findUseNoForgetDirective(fn.node.body.directives);
368
+ if (useNoForget != null) {
369
+ pass.opts.logger?.logEvent(pass.filename, {
370
+ kind: "CompileError",
371
+ fnLoc: fn.node.body.loc ?? null,
372
+ detail: {
373
+ severity: ErrorSeverity.Todo,
374
+ reason: 'Skipped due to "use no forget" directive.',
375
+ loc: useNoForget.loc ?? null,
376
+ suggestions: null,
377
+ },
378
+ });
379
return false;
380
}
381
// Otherwise opt-ins enable compilation regardless of mode
369
- if (hasAnyUseForgetDirectives(fn.node.body.directives)) {
382
+ if (findUseForgetDirective(fn.node.body.directives) != null) {
383
return true;
384
}
385
}