From 80b79773a97af52c81834aa91592f7ff4bc05f3d Mon Sep 17 00:00:00 2001 From: Ronen Amiel Date: Mon, 17 Feb 2025 23:32:39 +0200 Subject: [PATCH 1/2] check private variables for being deprecated --- .../eslint-plugin/src/rules/no-deprecated.ts | 2 ++ .../tests/rules/no-deprecated.test.ts | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/packages/eslint-plugin/src/rules/no-deprecated.ts b/packages/eslint-plugin/src/rules/no-deprecated.ts index 8833c05b4c82..aca03f347821 100644 --- a/packages/eslint-plugin/src/rules/no-deprecated.ts +++ b/packages/eslint-plugin/src/rules/no-deprecated.ts @@ -17,6 +17,7 @@ import { type IdentifierLike = | TSESTree.Identifier | TSESTree.JSXIdentifier + | TSESTree.PrivateIdentifier | TSESTree.Super; type MessageIds = 'deprecated' | 'deprecatedWithReason'; @@ -400,6 +401,7 @@ export default createRule({ checkIdentifier(node); } }, + PrivateIdentifier: checkIdentifier, Super: checkIdentifier, }; }, diff --git a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts index 1d5745fe0b56..6dfa2fb68ca6 100644 --- a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts +++ b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts @@ -363,6 +363,15 @@ exists('/foo'); declare const test: string; const bar = { test }; `, + ` + class A { + #b = () => {}; + + c() { + this.#b(); + } + } + `, ], invalid: [ { @@ -2862,5 +2871,27 @@ class B extends A { }, ], }, + { + code: ` + class A { + /** @deprecated */ + #b = () => {}; + + c() { + this.#b(); + } + } + `, + errors: [ + { + column: 18, + data: { name: 'b' }, + endColumn: 20, + endLine: 7, + line: 7, + messageId: 'deprecated', + }, + ], + }, ], }); From d75a9db8a321cea31d2238d22266583edd04afb4 Mon Sep 17 00:00:00 2001 From: Ronen Amiel Date: Mon, 17 Feb 2025 23:38:41 +0200 Subject: [PATCH 2/2] report the node name correctly --- packages/eslint-plugin/src/rules/no-deprecated.ts | 14 +++++++++++++- .../tests/rules/no-deprecated.test.ts | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-deprecated.ts b/packages/eslint-plugin/src/rules/no-deprecated.ts index aca03f347821..94d7a5ed7262 100644 --- a/packages/eslint-plugin/src/rules/no-deprecated.ts +++ b/packages/eslint-plugin/src/rules/no-deprecated.ts @@ -378,7 +378,7 @@ export default createRule({ return; } - const name = node.type === AST_NODE_TYPES.Super ? 'super' : node.name; + const name = getReportedNodeName(node); context.report({ ...(reason @@ -406,3 +406,15 @@ export default createRule({ }; }, }); + +function getReportedNodeName(node: IdentifierLike): string { + if (node.type === AST_NODE_TYPES.Super) { + return 'super'; + } + + if (node.type === AST_NODE_TYPES.PrivateIdentifier) { + return `#${node.name}`; + } + + return node.name; +} diff --git a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts index 6dfa2fb68ca6..6469c0fe5c23 100644 --- a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts +++ b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts @@ -2885,7 +2885,7 @@ class B extends A { errors: [ { column: 18, - data: { name: 'b' }, + data: { name: '#b' }, endColumn: 20, endLine: 7, line: 7,