1
1
import iterateJsdoc from '../iterateJsdoc' ;
2
2
3
- const validateParameterNames = ( targetTagName : string , functionParameterNames : Array < string > , jsdoc, report) => {
3
+ const validateParameterNames = ( targetTagName : string , functionParameterNames : Array < string > , jsdoc, jsdocNode, utils, report) => {
4
4
if ( ! jsdoc || ! jsdoc . tags ) {
5
5
return false ;
6
6
}
7
7
8
- const paramTags = jsdoc.tags.filter((tag) => {
8
+ const paramTags = Object.entries( jsdoc.tags) .filter(([, tag] ) => {
9
9
return tag . tag === targetTagName && ! tag . name . includes ( '.' ) ;
10
10
} );
11
11
12
- return paramTags.some((tag, index) => {
13
- const dupeTag = paramTags . find ( ( tg , idx ) => {
12
+ return paramTags.some(([, tag], index) => {
13
+ let tagsIndex ;
14
+ const dupeTagInfo = paramTags . find ( ( [ tgsIndex , tg ] , idx ) => {
15
+ tagsIndex = tgsIndex ;
16
+
14
17
return tg . name === tag . name && idx !== index ;
15
18
} ) ;
16
- if ( dupeTag ) {
17
- report ( `Duplicate @${ targetTagName } "${ tag . name } "` , null , dupeTag ) ;
19
+ if ( dupeTagInfo ) {
20
+ utils . reportJSDoc ( `Duplicate @${ targetTagName } "${ tag . name } "` , dupeTagInfo [ 1 ] , ( ) => {
21
+ jsdoc . tags . splice ( tagsIndex , 1 ) ;
22
+ } ) ;
18
23
19
24
return true ;
20
25
}
@@ -36,7 +41,7 @@ const validateParameterNames = (targetTagName : string, functionParameterNames :
36
41
37
42
if (functionParameterName !== tag.name) {
38
43
const expectedNames = functionParameterNames . join ( ', ' ) ;
39
- const actualNames = paramTags . map ( ( { name} ) => {
44
+ const actualNames = paramTags . map ( ( [ , { name} ] ) => {
40
45
return name ;
41
46
} ) . join ( ', ' ) ;
42
47
@@ -92,6 +97,7 @@ const validateParameterNamesDeep = (targetTagName : string, jsdocParameterNames
92
97
93
98
export default iterateJsdoc(({
94
99
jsdoc ,
100
+ jsdocNode ,
95
101
report ,
96
102
utils
97
103
} ) => {
@@ -101,7 +107,7 @@ export default iterateJsdoc(({
101
107
return;
102
108
}
103
109
const targetTagName = utils . getPreferredTagName ( { tagName : 'param' } ) ;
104
- const isError = validateParameterNames ( targetTagName , functionParameterNames , jsdoc , report ) ;
110
+ const isError = validateParameterNames ( targetTagName , functionParameterNames , jsdoc , jsdocNode , utils , report ) ;
105
111
106
112
if ( isError ) {
107
113
return;
@@ -110,6 +116,7 @@ export default iterateJsdoc(({
110
116
validateParameterNamesDeep ( targetTagName , jsdocParameterNamesDeep , jsdoc , report ) ;
111
117
} , {
112
118
meta : {
119
+ fixable : 'code' ,
113
120
type : 'suggestion'
114
121
}
115
122
} );
0 commit comments