File tree 3 files changed +75
-2
lines changed 3 files changed +75
-2
lines changed Original file line number Diff line number Diff line change @@ -471,6 +471,22 @@ function quux () {}
471
471
*/
472
472
function quux () {}
473
473
// Message: Invalid name: invalid default value syntax
474
+
475
+ /**
476
+ * @type {{message: string?}}
477
+ */
478
+ function quux (items ) {
479
+ }
480
+ // Settings: {"jsdoc":{"mode":"closure"}}
481
+ // Message: Syntax error in type: JsdocTypeNullable
482
+
483
+ /**
484
+ * @type {[message: string?]}
485
+ */
486
+ function quux (items ) {
487
+ }
488
+ // Settings: {"jsdoc":{"mode":"typescript"}}
489
+ // Message: Syntax error in type: JsdocTypeNullable
474
490
````
475
491
476
492
Original file line number Diff line number Diff line change @@ -143,18 +143,35 @@ export default iterateJsdoc(({
143
143
} ;
144
144
145
145
const validTypeParsing = function ( type ) {
146
+ let parsedTypes ;
146
147
try {
147
148
if ( mode === 'permissive' ) {
148
- tryParse ( type ) ;
149
+ parsedTypes = tryParse ( type ) ;
149
150
} else {
150
- parse ( type , mode ) ;
151
+ parsedTypes = parse ( type , mode ) ;
151
152
}
152
153
} catch {
153
154
report ( `Syntax error in type: ${ type } ` , null , tag ) ;
154
155
155
156
return false ;
156
157
}
157
158
159
+ if ( mode === 'closure' || mode === 'typescript' ) {
160
+ traverse ( parsedTypes , ( node ) => {
161
+ const {
162
+ type : typ ,
163
+ } = node ;
164
+
165
+ if (
166
+ ( typ === 'JsdocTypeObjectField' || typ === 'JsdocTypeKeyValue' ) &&
167
+ node . right . type === 'JsdocTypeNullable' &&
168
+ node . right . meta . position === 'suffix'
169
+ ) {
170
+ report ( `Syntax error in type: ${ node . right . type } ` , null , tag ) ;
171
+ }
172
+ } ) ;
173
+ }
174
+
158
175
return true ;
159
176
} ;
160
177
Original file line number Diff line number Diff line change @@ -1062,6 +1062,46 @@ export default {
1062
1062
} ,
1063
1063
] ,
1064
1064
} ,
1065
+ {
1066
+ code : `
1067
+ /**
1068
+ * @type {{message: string?}}
1069
+ */
1070
+ function quux (items) {
1071
+ }
1072
+ ` ,
1073
+ errors : [
1074
+ {
1075
+ line : 3 ,
1076
+ message : 'Syntax error in type: JsdocTypeNullable' ,
1077
+ } ,
1078
+ ] ,
1079
+ settings : {
1080
+ jsdoc : {
1081
+ mode : 'closure' ,
1082
+ } ,
1083
+ } ,
1084
+ } ,
1085
+ {
1086
+ code : `
1087
+ /**
1088
+ * @type {[message: string?]}
1089
+ */
1090
+ function quux (items) {
1091
+ }
1092
+ ` ,
1093
+ errors : [
1094
+ {
1095
+ line : 3 ,
1096
+ message : 'Syntax error in type: JsdocTypeNullable' ,
1097
+ } ,
1098
+ ] ,
1099
+ settings : {
1100
+ jsdoc : {
1101
+ mode : 'typescript' ,
1102
+ } ,
1103
+ } ,
1104
+ } ,
1065
1105
] ,
1066
1106
valid : [
1067
1107
{
You can’t perform that action at this time.
0 commit comments