Skip to content

Commit a9b6a77

Browse files
authored
Improve destructured @param tag matching (#1428)
1 parent d222dd8 commit a9b6a77

11 files changed

+55
-162
lines changed

internal/parser/reparser.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -527,19 +527,25 @@ func (p *Parser) makeQuestionIfOptional(parameter *ast.JSDocParameterTag) *ast.N
527527
return questionToken
528528
}
529529

530-
func findMatchingParameter(fun *ast.Node, tag *ast.JSDocParameterTag, jsDoc *ast.Node) (*ast.ParameterDeclaration, bool) {
531-
tagIndex := core.FindIndex(jsDoc.AsJSDoc().Tags.Nodes, func(n *ast.Node) bool {
532-
return n.Kind == ast.KindJSDocParameterTag && n.AsJSDocParameterOrPropertyTag() == tag
533-
})
530+
func findMatchingParameter(fun *ast.Node, parameterTag *ast.JSDocParameterTag, jsDoc *ast.Node) (*ast.ParameterDeclaration, bool) {
531+
tagIndex := -1
532+
paramCount := -1
533+
for _, tag := range jsDoc.AsJSDoc().Tags.Nodes {
534+
if tag.Kind == ast.KindJSDocParameterTag {
535+
paramCount++
536+
if tag.AsJSDocParameterOrPropertyTag() == parameterTag {
537+
tagIndex = paramCount
538+
break
539+
}
540+
}
541+
}
534542
for parameterIndex, parameter := range fun.Parameters() {
535543
if parameter.Name().Kind == ast.KindIdentifier {
536-
if tag.Name().Kind == ast.KindIdentifier && parameter.Name().Text() == tag.Name().Text() {
537-
return parameter.AsParameterDeclaration(), true
538-
}
539-
} else {
540-
if parameterIndex == tagIndex {
544+
if parameterTag.Name().Kind == ast.KindIdentifier && parameter.Name().Text() == parameterTag.Name().Text() {
541545
return parameter.AsParameterDeclaration(), true
542546
}
547+
} else if parameterIndex == tagIndex {
548+
return parameter.AsParameterDeclaration(), true
543549
}
544550
}
545551
return nil, false

testdata/baselines/reference/submodule/conformance/jsDeclarationsOptionalTypeLiteralProps1.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ function foo({ a, b, c }) {
4444
* @returns {number}
4545
*/
4646
declare function foo({ a, b, c }: {
47-
a: any;
48-
b: any;
49-
c: any;
47+
a: number;
48+
b?: number;
49+
c?: number;
5050
}): number;

testdata/baselines/reference/submodule/conformance/jsDeclarationsOptionalTypeLiteralProps1.js.diff

Lines changed: 0 additions & 13 deletions
This file was deleted.

testdata/baselines/reference/submodule/conformance/jsDeclarationsOptionalTypeLiteralProps1.types

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@
1212
* @returns {number}
1313
*/
1414
function foo({ a, b, c }) {
15-
>foo : ({ a, b, c }: { a: any; b: any; c: any; }) => number
16-
>a : any
17-
>b : any
18-
>c : any
15+
>foo : ({ a, b, c }: { a: number; b?: number; c?: number; }) => number
16+
>a : number
17+
>b : number
18+
>c : number
1919

2020
return a + b + c;
21-
>a + b + c : any
22-
>a + b : any
23-
>a : any
24-
>b : any
25-
>c : any
21+
>a + b + c : number
22+
>a + b : number
23+
>a : number
24+
>b : number
25+
>c : number
2626
}
2727

testdata/baselines/reference/submodule/conformance/jsDeclarationsOptionalTypeLiteralProps2.errors.txt

Lines changed: 0 additions & 26 deletions
This file was deleted.

testdata/baselines/reference/submodule/conformance/jsDeclarationsOptionalTypeLiteralProps2.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ function foo({ a, b, c }) {
4444
* @returns {number}
4545
*/
4646
declare function foo({ a, b, c }: {
47-
a: any;
48-
b: any;
49-
c: any;
47+
a: number;
48+
b?: number;
49+
c?: number;
5050
}): number;

testdata/baselines/reference/submodule/conformance/jsDeclarationsOptionalTypeLiteralProps2.js.diff

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,12 @@
88
/**
99
* foo
1010
*
11-
@@= skipped -28, +27 lines =@@
12-
* @returns {number}
11+
@@= skipped -29, +28 lines =@@
1312
*/
1413
declare function foo({ a, b, c }: {
15-
- a: number;
14+
a: number;
1615
- b?: number | undefined;
1716
- c?: number | undefined;
18-
+ a: any;
19-
+ b: any;
20-
+ c: any;
17+
+ b?: number;
18+
+ c?: number;
2119
}): number;

testdata/baselines/reference/submodule/conformance/jsDeclarationsOptionalTypeLiteralProps2.types

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,22 @@
1212
* @returns {number}
1313
*/
1414
function foo({ a, b, c }) {
15-
>foo : ({ a, b, c }: { a: any; b: any; c: any; }) => number
16-
>a : any
17-
>b : any
18-
>c : any
15+
>foo : ({ a, b, c }: { a: number; b?: number | undefined; c?: number | undefined; }) => number
16+
>a : number
17+
>b : number | undefined
18+
>c : number | undefined
1919

2020
return a + (b ?? 0) + (c ?? 0);
21-
>a + (b ?? 0) + (c ?? 0) : any
22-
>a + (b ?? 0) : any
23-
>a : any
24-
>(b ?? 0) : any
25-
>b ?? 0 : any
26-
>b : any
21+
>a + (b ?? 0) + (c ?? 0) : number
22+
>a + (b ?? 0) : number
23+
>a : number
24+
>(b ?? 0) : number
25+
>b ?? 0 : number
26+
>b : number | undefined
2727
>0 : 0
28-
>(c ?? 0) : any
29-
>c ?? 0 : any
30-
>c : any
28+
>(c ?? 0) : number
29+
>c ?? 0 : number
30+
>c : number | undefined
3131
>0 : 0
3232
}
3333

testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsOptionalTypeLiteralProps1.types.diff

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,7 @@
55
*/
66
function foo({ a, b, c }) {
77
->foo : ({ a, b, c }: { a: number; b?: number; c?: number;}) => number
8-
->a : number
9-
->b : number
10-
->c : number
11-
+>foo : ({ a, b, c }: { a: any; b: any; c: any; }) => number
12-
+>a : any
13-
+>b : any
14-
+>c : any
15-
16-
return a + b + c;
17-
->a + b + c : number
18-
->a + b : number
19-
->a : number
20-
->b : number
21-
->c : number
22-
+>a + b + c : any
23-
+>a + b : any
24-
+>a : any
25-
+>b : any
26-
+>c : any
27-
}
8+
+>foo : ({ a, b, c }: { a: number; b?: number; c?: number; }) => number
9+
>a : number
10+
>b : number
11+
>c : number

testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsOptionalTypeLiteralProps2.errors.txt.diff

Lines changed: 0 additions & 30 deletions
This file was deleted.

0 commit comments

Comments
 (0)