From e56f1e5d52fcbf3caae43034872e0b3181871689 Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Mon, 17 Jan 2022 17:56:46 +0900 Subject: [PATCH] fix(eslint-plugin): [no-invalid-this] crash when used with eslint 8.7.0 (#4448) * fix(eslint-plugin): [no-invalid-this] crash when used with eslint 8.7.0 * revert eslint version --- .../src/rules/no-invalid-this.ts | 8 ++++---- .../eslint-plugin/typings/eslint-rules.d.ts | 20 +++++++++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-invalid-this.ts b/packages/eslint-plugin/src/rules/no-invalid-this.ts index 5884cc61dfa..0ea8692e64a 100644 --- a/packages/eslint-plugin/src/rules/no-invalid-this.ts +++ b/packages/eslint-plugin/src/rules/no-invalid-this.ts @@ -64,12 +64,12 @@ export default createRule({ ), ); // baseRule's work - rules.FunctionDeclaration(node); + rules.FunctionDeclaration?.(node); }, 'FunctionDeclaration:exit'(node: TSESTree.FunctionDeclaration): void { thisIsValidStack.pop(); // baseRule's work - rules['FunctionDeclaration:exit'](node); + rules['FunctionDeclaration:exit']?.(node); }, FunctionExpression(node: TSESTree.FunctionExpression): void { thisIsValidStack.push( @@ -79,12 +79,12 @@ export default createRule({ ), ); // baseRule's work - rules.FunctionExpression(node); + rules.FunctionExpression?.(node); }, 'FunctionExpression:exit'(node: TSESTree.FunctionExpression): void { thisIsValidStack.pop(); // baseRule's work - rules['FunctionExpression:exit'](node); + rules['FunctionExpression:exit']?.(node); }, ThisExpression(node: TSESTree.ThisExpression): void { const thisIsValidHere = thisIsValidStack[thisIsValidStack.length - 1]; diff --git a/packages/eslint-plugin/typings/eslint-rules.d.ts b/packages/eslint-plugin/typings/eslint-rules.d.ts index a279276e91b..fc2491d67c8 100644 --- a/packages/eslint-plugin/typings/eslint-rules.d.ts +++ b/packages/eslint-plugin/typings/eslint-rules.d.ts @@ -701,12 +701,20 @@ declare module 'eslint/lib/rules/no-invalid-this' { }?, ], { - Program(node: TSESTree.Program): void; - 'Program:exit'(node: TSESTree.Program): void; - FunctionDeclaration(node: TSESTree.FunctionDeclaration): void; - 'FunctionDeclaration:exit'(node: TSESTree.FunctionDeclaration): void; - FunctionExpression(node: TSESTree.FunctionExpression): void; - 'FunctionExpression:exit'(node: TSESTree.FunctionExpression): void; + // for ESLint < v8.7.0 + Program?: (node: TSESTree.Program) => void; + 'Program:exit'?: (node: TSESTree.Program) => void; + FunctionDeclaration?: (node: TSESTree.FunctionDeclaration) => void; + 'FunctionDeclaration:exit'?: (node: TSESTree.FunctionDeclaration) => void; + FunctionExpression?: (node: TSESTree.FunctionExpression) => void; + 'FunctionExpression:exit'?: (node: TSESTree.FunctionExpression) => void; + + // for ESLint >= v8.7.0 + // We don't use it and we don't have the CodePath types, so comment out it. + // onCodePathStart?: (codePath: unknown, node: TSESTree.Node) => void + // onCodePathEnd?: (codePath: unknown, node: TSESTree.Node) => void + + // Common ThisExpression(node: TSESTree.ThisExpression): void; } >;