From 634960f5f19b639701fe85eca354fb86f78c216e Mon Sep 17 00:00:00 2001 From: Hasegawa-Yukihiro Date: Thu, 6 Feb 2025 23:50:52 +0900 Subject: [PATCH 1/6] fix: support private methods --- .../eslint-plugin/src/rules/unified-signatures.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/unified-signatures.ts b/packages/eslint-plugin/src/rules/unified-signatures.ts index 9c255b6f9f50..5db9012cfbe0 100644 --- a/packages/eslint-plugin/src/rules/unified-signatures.ts +++ b/packages/eslint-plugin/src/rules/unified-signatures.ts @@ -616,7 +616,11 @@ function getOverloadInfo(node: OverloadNode): string { default: { const { key } = node as MethodDefinition; - return isIdentifier(key) ? key.name : (key as TSESTree.Literal).raw; + if (isIdentifier(key) || isPrivateIdentifier(key)) { + return key.name; + } + + return (key as TSESTree.Literal).raw; } } } @@ -634,3 +638,9 @@ function getStaticParameterName(param: TSESTree.Node): string | undefined { function isIdentifier(node: TSESTree.Node): node is TSESTree.Identifier { return node.type === AST_NODE_TYPES.Identifier; } + +function isPrivateIdentifier( + node: TSESTree.Node, +): node is TSESTree.PrivateIdentifier { + return node.type === AST_NODE_TYPES.PrivateIdentifier; +} From 08e1c24e6ba1464ccf6fb7ee62763d1228bcb855 Mon Sep 17 00:00:00 2001 From: Hasegawa-Yukihiro Date: Thu, 6 Feb 2025 23:51:02 +0900 Subject: [PATCH 2/6] test: add test --- .../eslint-plugin/tests/rules/unified-signatures.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts index 0e5ee9219ce7..3e1860169400 100644 --- a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts +++ b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts @@ -31,6 +31,11 @@ class C { a(a?: number, b?: number): void {} } `, + ` +declare class Example { + static #privateMethod1(a: number): void; + static #privateMethod2(a: number, b?: string): void; +}`, // No error for arity difference greater than 1. ` interface I { From 2b7c1b9f92d594bf2098a16bc7d22c649af17131 Mon Sep 17 00:00:00 2001 From: Hasegawa-Yukihiro Date: Fri, 7 Feb 2025 18:52:47 +0900 Subject: [PATCH 3/6] fix: fix lint --- packages/eslint-plugin/tests/rules/unified-signatures.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts index 3e1860169400..fe150b5765fe 100644 --- a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts +++ b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts @@ -35,7 +35,8 @@ class C { declare class Example { static #privateMethod1(a: number): void; static #privateMethod2(a: number, b?: string): void; -}`, +} + `, // No error for arity difference greater than 1. ` interface I { From d31b1077fcf6d359c198ca20b9cbcaad22c35343 Mon Sep 17 00:00:00 2001 From: Hasegawa-Yukihiro Date: Sun, 9 Feb 2025 14:08:30 +0900 Subject: [PATCH 4/6] test: update test --- .../tests/rules/unified-signatures.test.ts | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts index fe150b5765fe..23a7bb513038 100644 --- a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts +++ b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts @@ -33,8 +33,8 @@ class C { `, ` declare class Example { - static #privateMethod1(a: number): void; - static #privateMethod2(a: number, b?: string): void; + #privateMethod1(a: number): void; + #privateMethod2(a: number, b?: string): void; } `, // No error for arity difference greater than 1. @@ -498,6 +498,25 @@ type T = { }, ], }, + { + code: ` +declare class Example { + #privateMethod(a: number): void; + #privateMethod(a: number, b?: string): void; +} + `, + errors: [ + { + column: 29, + data: { + failureStringStart: + 'These overloads can be combined into one signature', + }, + line: 4, + messageId: 'omittingSingleParameter', + }, + ], + }, { // Works for constructor. code: ` From bf38dd1ead7b1cae133f78cf13d8c27236bf9eaa Mon Sep 17 00:00:00 2001 From: Hasegawa-Yukihiro Date: Sun, 9 Feb 2025 14:25:23 +0900 Subject: [PATCH 5/6] fix: allow same name for private and non-private methods --- packages/eslint-plugin/src/rules/unified-signatures.ts | 8 ++++++-- .../eslint-plugin/tests/rules/unified-signatures.test.ts | 6 ++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/unified-signatures.ts b/packages/eslint-plugin/src/rules/unified-signatures.ts index 5db9012cfbe0..a6dd34c0c4e6 100644 --- a/packages/eslint-plugin/src/rules/unified-signatures.ts +++ b/packages/eslint-plugin/src/rules/unified-signatures.ts @@ -616,8 +616,12 @@ function getOverloadInfo(node: OverloadNode): string { default: { const { key } = node as MethodDefinition; - if (isIdentifier(key) || isPrivateIdentifier(key)) { - return key.name; + if (isPrivateIdentifier(key)) { + return `privateId_${key.name}`; + } + + if (isIdentifier(key)) { + return `id_${key.name}`; } return (key as TSESTree.Literal).raw; diff --git a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts index 23a7bb513038..ffef649b78ea 100644 --- a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts +++ b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts @@ -32,6 +32,12 @@ class C { } `, ` +declare class Example { + privateMethod(a: number): void; + #privateMethod(a: number, b?: string): void; +} + `, + ` declare class Example { #privateMethod1(a: number): void; #privateMethod2(a: number, b?: string): void; From 15f802f2b0f27ea269e77f2aa87b5139980ea32d Mon Sep 17 00:00:00 2001 From: Hasegawa-Yukihiro Date: Sat, 1 Mar 2025 09:34:49 +0900 Subject: [PATCH 6/6] fix: update prefix --- packages/eslint-plugin/src/rules/unified-signatures.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/unified-signatures.ts b/packages/eslint-plugin/src/rules/unified-signatures.ts index 7055a2c65fa6..5ccc53c38da3 100644 --- a/packages/eslint-plugin/src/rules/unified-signatures.ts +++ b/packages/eslint-plugin/src/rules/unified-signatures.ts @@ -621,11 +621,11 @@ function getOverloadInfo(node: OverloadNode): string { const { key } = node as MethodDefinition; if (isPrivateIdentifier(key)) { - return `privateId_${key.name}`; + return `private_identifier_${key.name}`; } if (isIdentifier(key)) { - return `id_${key.name}`; + return `identifier_${key.name}`; } return (key as TSESTree.Literal).raw;