From 0e31dbe0f1b548189caac545533c341e55ca53a9 Mon Sep 17 00:00:00 2001 From: oxyu8 Date: Thu, 20 Apr 2023 21:32:03 +0900 Subject: [PATCH 1/3] fix: [unified-signatures] no parameters function --- .../eslint-plugin/src/rules/unified-signatures.ts | 3 +++ .../tests/rules/unified-signatures.test.ts | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/packages/eslint-plugin/src/rules/unified-signatures.ts b/packages/eslint-plugin/src/rules/unified-signatures.ts index b387450801f..5fb841bc8bd 100644 --- a/packages/eslint-plugin/src/rules/unified-signatures.ts +++ b/packages/eslint-plugin/src/rules/unified-signatures.ts @@ -213,6 +213,9 @@ export default util.createRule({ b.typeParameters !== undefined ? b.typeParameters.params : undefined; if (ignoreDifferentlyNamedParameters) { + if (b.params.length === 0) { + return false; + } for (let i = 0; i < a.params.length; i += 1) { if ( a.params[i].type === b.params[i].type && diff --git a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts index 73f773dc42d..2de59aaa3b4 100644 --- a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts +++ b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts @@ -177,6 +177,21 @@ function f(v: number, u?: string): void {} }, { code: ` +function f(v: boolean): number; +function f(): string; + `, + options: [{ ignoreDifferentlyNamedParameters: true }], + }, + { + code: ` +function f(v: number, u?: string): void {} +function f(v: number): void; +function f(): string; + `, + options: [{ ignoreDifferentlyNamedParameters: true }], + }, + { + code: ` function f(a: boolean, ...c: number[]): void; function f(a: boolean, ...d: string[]): void; function f(a: boolean, ...c: (number | string)[]): void {} From 47286f78f21b421e4a0a51169f35c2eb5f08892f Mon Sep 17 00:00:00 2001 From: oxyu8 Date: Sat, 22 Apr 2023 22:10:49 +0900 Subject: [PATCH 2/3] change: [unified-signatures] check every b.params[i] --- packages/eslint-plugin/src/rules/unified-signatures.ts | 4 +--- .../eslint-plugin/tests/rules/unified-signatures.test.ts | 7 +++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/eslint-plugin/src/rules/unified-signatures.ts b/packages/eslint-plugin/src/rules/unified-signatures.ts index 5fb841bc8bd..8d8cda0e378 100644 --- a/packages/eslint-plugin/src/rules/unified-signatures.ts +++ b/packages/eslint-plugin/src/rules/unified-signatures.ts @@ -213,11 +213,9 @@ export default util.createRule({ b.typeParameters !== undefined ? b.typeParameters.params : undefined; if (ignoreDifferentlyNamedParameters) { - if (b.params.length === 0) { - return false; - } for (let i = 0; i < a.params.length; i += 1) { if ( + b.params[i] && a.params[i].type === b.params[i].type && getStaticParameterName(a.params[i]) !== getStaticParameterName(b.params[i]) diff --git a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts index 2de59aaa3b4..ce62f6c571c 100644 --- a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts +++ b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts @@ -184,6 +184,13 @@ function f(): string; }, { code: ` +function f(v: boolean, u: boolean): number; +function f(v: boolean): string; + `, + options: [{ ignoreDifferentlyNamedParameters: true }], + }, + { + code: ` function f(v: number, u?: string): void {} function f(v: number): void; function f(): string; From ad154ffd593942e887b3475773f7e722c2c78e46 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Mon, 24 Apr 2023 00:08:53 -0400 Subject: [PATCH 3/3] quick lil refactor --- 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 8d8cda0e378..3b5f2294762 100644 --- a/packages/eslint-plugin/src/rules/unified-signatures.ts +++ b/packages/eslint-plugin/src/rules/unified-signatures.ts @@ -213,9 +213,9 @@ export default util.createRule({ b.typeParameters !== undefined ? b.typeParameters.params : undefined; if (ignoreDifferentlyNamedParameters) { - for (let i = 0; i < a.params.length; i += 1) { + const commonParamsLength = Math.min(a.params.length, b.params.length); + for (let i = 0; i < commonParamsLength; i += 1) { if ( - b.params[i] && a.params[i].type === b.params[i].type && getStaticParameterName(a.params[i]) !== getStaticParameterName(b.params[i])