Skip to content

Commit 5d503b9

Browse files
authored
fix(eslint-plugin): [unified-signatures] handle getter-setter (#10818)
* fix(eslint-plugin): [unified-signatures] handle getter-setter * apply reviews * apply reviews * Update unified-signatures.ts
1 parent 662e62b commit 5d503b9

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

packages/eslint-plugin/src/rules/unified-signatures.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -558,12 +558,12 @@ export default createRule<Options, MessageIds>({
558558

559559
// collect overloads
560560
MethodDefinition(node): void {
561-
if (!node.value.body) {
561+
if (!node.value.body && !isGetterOrSetter(node)) {
562562
addOverload(node);
563563
}
564564
},
565565
TSAbstractMethodDefinition(node): void {
566-
if (!node.value.body) {
566+
if (!node.value.body && !isGetterOrSetter(node)) {
567567
addOverload(node);
568568
}
569569
},
@@ -573,7 +573,11 @@ export default createRule<Options, MessageIds>({
573573
const exportingNode = getExportingNode(node);
574574
addOverload(node, node.id?.name ?? exportingNode?.type, exportingNode);
575575
},
576-
TSMethodSignature: addOverload,
576+
TSMethodSignature(node): void {
577+
if (!isGetterOrSetter(node)) {
578+
addOverload(node);
579+
}
580+
},
577581

578582
// validate scopes
579583
'ClassDeclaration:exit': checkScope,
@@ -634,3 +638,12 @@ function getStaticParameterName(param: TSESTree.Node): string | undefined {
634638
function isIdentifier(node: TSESTree.Node): node is TSESTree.Identifier {
635639
return node.type === AST_NODE_TYPES.Identifier;
636640
}
641+
642+
function isGetterOrSetter(
643+
node:
644+
| TSESTree.MethodDefinition
645+
| TSESTree.TSAbstractMethodDefinition
646+
| TSESTree.TSMethodSignature,
647+
): boolean {
648+
return node.kind === 'get' || node.kind === 'set';
649+
}

packages/eslint-plugin/tests/rules/unified-signatures.test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,24 @@ function rest(...xs: number[]): Promise<number[]>;
158158
function rest(xs: number[], y: string): Promise<string>;
159159
async function rest(...args: any[], y?: string): Promise<number[] | string> {
160160
return y || args;
161+
}
162+
`,
163+
`
164+
declare class Foo {
165+
get bar();
166+
set bar(x: number);
167+
}
168+
`,
169+
`
170+
interface Foo {
171+
get bar();
172+
set bar(x: number);
173+
}
174+
`,
175+
`
176+
abstract class Foo {
177+
abstract get bar();
178+
abstract set bar(a: unknown);
161179
}
162180
`,
163181
{

0 commit comments

Comments
 (0)