From 3e296c911f1b03805d3538a3736f7316304e740b Mon Sep 17 00:00:00 2001 From: auvred Date: Fri, 1 Nov 2024 10:50:33 +0300 Subject: [PATCH] fix(eslint-plugin): [no-deprecated] report when exported class implements/extends deprecated entity --- .../eslint-plugin/src/rules/no-deprecated.ts | 2 +- .../tests/rules/no-deprecated.test.ts | 93 +++++++++++++++++++ 2 files changed, 94 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/no-deprecated.ts b/packages/eslint-plugin/src/rules/no-deprecated.ts index d8e7ebc0105e..e18224cd8969 100644 --- a/packages/eslint-plugin/src/rules/no-deprecated.ts +++ b/packages/eslint-plugin/src/rules/no-deprecated.ts @@ -135,7 +135,7 @@ export default createRule({ case AST_NODE_TYPES.ArrowFunctionExpression: case AST_NODE_TYPES.BlockStatement: - case AST_NODE_TYPES.ClassBody: + case AST_NODE_TYPES.ClassDeclaration: case AST_NODE_TYPES.TSInterfaceDeclaration: case AST_NODE_TYPES.FunctionDeclaration: case AST_NODE_TYPES.FunctionExpression: diff --git a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts index 46af24bf1c98..5d104fbbd3be 100644 --- a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts +++ b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts @@ -2354,5 +2354,98 @@ ruleTester.run('no-deprecated', rule, { }, }, }, + { + code: ` + /** @deprecated */ + interface Foo {} + + class Bar implements Foo {} + `, + errors: [ + { + column: 30, + data: { name: 'Foo' }, + endColumn: 33, + endLine: 5, + line: 5, + messageId: 'deprecated', + }, + ], + }, + { + code: ` + /** @deprecated */ + interface Foo {} + + export class Bar implements Foo {} + `, + errors: [ + { + column: 37, + data: { name: 'Foo' }, + endColumn: 40, + endLine: 5, + line: 5, + messageId: 'deprecated', + }, + ], + }, + { + code: ` + /** @deprecated */ + interface Foo {} + + interface Baz {} + + export class Bar implements Baz, Foo {} + `, + errors: [ + { + column: 42, + data: { name: 'Foo' }, + endColumn: 45, + endLine: 7, + line: 7, + messageId: 'deprecated', + }, + ], + }, + { + code: ` + /** @deprecated */ + class Foo {} + + export class Bar extends Foo {} + `, + errors: [ + { + column: 34, + data: { name: 'Foo' }, + endColumn: 37, + endLine: 5, + line: 5, + messageId: 'deprecated', + }, + ], + }, + { + code: ` + /** @deprecated */ + declare function decorator(constructor: Function); + + @decorator + export class Foo {} + `, + errors: [ + { + column: 10, + data: { name: 'decorator' }, + endColumn: 19, + endLine: 5, + line: 5, + messageId: 'deprecated', + }, + ], + }, ], });