8000 fix(eslint-plugin): [typedef] support default value for parameter (#785) · ajmacd/typescript-eslint@84916e6 · GitHub
[go: up one dir, main page]

Skip to content

Commit 84916e6

Browse files
octogonzbradzacher
authored andcommitted
fix(eslint-plugin): [typedef] support default value for parameter (typescript-eslint#785)
1 parent 73f8c79 commit 84916e6

File tree

2 files changed

+59
-6
lines changed

2 files changed

+59
-6
lines changed

packages/eslint-plugin/src/rules/typedef.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,21 @@ export default util.createRule<[Options], MessageIds>({
6969

7070
function checkParameters(params: TSESTree.Parameter[]) {
7171
for (const param of params) {
72-
if (
73-
param.type !== AST_NODE_TYPES.TSPara 10000 meterProperty &&
74-
!param.typeAnnotation
75-
) {
72+
let annotationNode: TSESTree.Node | undefined;
73+
74+
switch (param.type) {
75+
case AST_NODE_TYPES.AssignmentPattern:
76+
annotationNode = param.left;
77+
break;
78+
case AST_NODE_TYPES.TSParameterProperty:
79+
annotationNode = param.parameter;
80+
break;
81+
default:
82+
annotationNode = param;
83+
break;
84+
}
85+
86+
if (annotationNode !== undefined && !annotationNode.typeAnnotation) {
7687
report(param, getNodeName(param));
7788
}
7889
}

packages/eslint-plugin/tests/rules/typedef.test.ts

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,21 @@ ruleTester.run('typedef', rule, {
101101
},
102102
],
103103
},
104-
// Parameters
104+
// Function parameters
105105
`function receivesNumber(a: number): void { }`,
106106
`function receivesStrings(a: string, b: string): void { }`,
107107
`function receivesNumber([a]: [number]): void { }`,
108108
`function receivesNumbers([a, b]: number[]): void { }`,
109109
`function receivesString({ a }: { a: string }): void { }`,
110110
`function receivesStrings({ a, b }: { [i: string ]: string }): void { }`,
111+
`function receivesNumber(a: number = 123): void { }`,
112+
// Method parameters
113+
`class Test {
114+
public method(x: number): number { return x; }
115+
}`,
116+
`class Test {
117+
public method(x: number = 123): number { return x; }
118+
}`,
111119
// Property declarations
112120
`type Test = {
113121
member: number;
@@ -291,7 +299,7 @@ ruleTester.run('typedef', rule, {
291299
},
292300
],
293301
},
294-
// Parameters
302+
// Function parameters
295303
{
296304
code: `function receivesNumber(a): void { }`,
297305
errors: [
@@ -350,6 +358,40 @@ ruleTester.run('typedef', rule, {
350358
},
351359
],
352360
},
361+
// Method parameters
362+
{
363+
code: `class Test {
364+
public method(x): number { return x; }
365+
}`,
366+
errors: [
367+
{
368+
column: 23,
369+
messageId: 'expectedTypedefNamed',
370+
},
371+
],
372+
},
373+
{
374+
code: `class Test {
375+
public method(x = 123): number { return x; }
376+
}`,
377+
errors: [
378+
{
379+
column: 23,
380+
messageId: 'expectedTypedef',
381+
},
382+
],
383+
},
384+
{
385+
code: `class Test {
386+
public constructor(public x) { }
387+
}`,
388+
errors: [
389+
{
390+
column: 28,
391+
messageId: 'expectedTypedef',
392+
},
393+
],
394+
},
353395
// Property declarations
354396
{
355397
code: `type Test = {

0 commit comments

Comments
 (0)
0