From a2aa032276a9546a7bc06d118ca7de98a5fae651 Mon Sep 17 00:00:00 2001 From: Lauren Tan Date: Fri, 3 Nov 2023 16:27:18 -0400 Subject: [PATCH] [eslint] Plugin should never throw This has caused issues for people when things like Babel cause issues. It's not actionable and it crashes eslint. Just like the Babel plugin, the eslint plugin should never throw. Instead, let's log the error so the data isn't lost. --- .../src/rules/ReactForgetDiagnostics.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/compiler/packages/eslint-plugin-react-forget/src/rules/ReactForgetDiagnostics.ts b/compiler/packages/eslint-plugin-react-forget/src/rules/ReactForgetDiagnostics.ts index a493da9e9a..d3b2bf8c0d 100644 --- a/compiler/packages/eslint-plugin-react-forget/src/rules/ReactForgetDiagnostics.ts +++ b/compiler/packages/eslint-plugin-react-forget/src/rules/ReactForgetDiagnostics.ts @@ -23,6 +23,8 @@ type CompilerErrorDetailWithLoc = Omit & { loc: BabelSourceLocation; }; +type UserProvidedLogger = (...args: unknown[]) => void; + function assertExhaustive(_: never, errorMsg: string): never { throw new Error(errorMsg); } @@ -77,6 +79,13 @@ const rule: Rule.RuleModule = { hasSuggestions: true, }, create(context: Rule.RuleContext) { + let logger: UserProvidedLogger | null = null; + if ( + context.options[0] != null && + typeof context.options[0] === "function" + ) { + logger = context.options[0]; + } // Compat with older versions of eslint const sourceCode = context.sourceCode?.text ?? context.getSourceCode().text; const filename = context.filename ?? context.getFilename(); @@ -164,8 +173,8 @@ const rule: Rule.RuleModule = { suggest, }); } - } else { - throw err; + } else if (logger != null) { + logger(err); } } }