eslint-plugin-jsdoc 39.3.5 → 39.3.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +273 -52
  2. package/dist/WarnSettings.js +0 -5
  3. package/dist/WarnSettings.js.map +1 -1
  4. package/dist/alignTransform.js +69 -61
  5. package/dist/alignTransform.js.map +1 -1
  6. package/dist/bin/generateRule.js +7 -26
  7. package/dist/bin/generateRule.js.map +1 -1
  8. package/dist/defaultTagOrder.js +30 -14
  9. package/dist/defaultTagOrder.js.map +1 -1
  10. package/dist/exportParser.js +34 -143
  11. package/dist/exportParser.js.map +1 -1
  12. package/dist/generateRule.js +7 -26
  13. package/dist/generateRule.js.map +1 -1
  14. package/dist/getDefaultTagStructureForMode.js +189 -93
  15. package/dist/getDefaultTagStructureForMode.js.map +1 -1
  16. package/dist/index.js +0 -51
  17. package/dist/index.js.map +1 -1
  18. package/dist/iterateJsdoc.js +44 -207
  19. package/dist/iterateJsdoc.js.map +1 -1
  20. package/dist/jsdocUtils.js +72 -221
  21. package/dist/jsdocUtils.js.map +1 -1
  22. package/dist/rules/checkAccess.js +0 -8
  23. package/dist/rules/checkAccess.js.map +1 -1
  24. package/dist/rules/checkAlignment.js +0 -8
  25. package/dist/rules/checkAlignment.js.map +1 -1
  26. package/dist/rules/checkExamples.js +25 -63
  27. package/dist/rules/checkExamples.js.map +1 -1
  28. package/dist/rules/checkIndentation.js +0 -7
  29. package/dist/rules/checkIndentation.js.map +1 -1
  30. package/dist/rules/checkLineAlignment.js +9 -30
  31. package/dist/rules/checkLineAlignment.js.map +1 -1
  32. package/dist/rules/checkParamNames.js +9 -47
  33. package/dist/rules/checkParamNames.js.map +1 -1
  34. package/dist/rules/checkPropertyNames.js +1 -18
  35. package/dist/rules/checkPropertyNames.js.map +1 -1
  36. package/dist/rules/checkSyntax.js +2 -5
  37. package/dist/rules/checkSyntax.js.map +1 -1
  38. package/dist/rules/checkTagNames.js +0 -18
  39. package/dist/rules/checkTagNames.js.map +1 -1
  40. package/dist/rules/checkTypes.js +17 -46
  41. package/dist/rules/checkTypes.js.map +1 -1
  42. package/dist/rules/checkValues.js +0 -18
  43. package/dist/rules/checkValues.js.map +1 -1
  44. package/dist/rules/emptyTags.js +6 -11
  45. package/dist/rules/emptyTags.js.map +1 -1
  46. package/dist/rules/implementsOnClasses.js +0 -6
  47. package/dist/rules/implementsOnClasses.js.map +1 -1
  48. package/dist/rules/matchDescription.js +0 -20
  49. package/dist/rules/matchDescription.js.map +1 -1
  50. package/dist/rules/matchName.js +2 -17
  51. package/dist/rules/matchName.js.map +1 -1
  52. package/dist/rules/multilineBlocks.js +10 -34
  53. package/dist/rules/multilineBlocks.js.map +1 -1
  54. package/dist/rules/newlineAfterDescription.js +0 -8
  55. package/dist/rules/newlineAfterDescription.js.map +1 -1
  56. package/dist/rules/noBadBlocks.js +2 -16
  57. package/dist/rules/noBadBlocks.js.map +1 -1
  58. package/dist/rules/noDefaults.js +0 -7
  59. package/dist/rules/noDefaults.js.map +1 -1
  60. package/dist/rules/noMissingSyntax.js +2 -16
  61. package/dist/rules/noMissingSyntax.js.map +1 -1
  62. package/dist/rules/noMultiAsterisks.js +2 -16
  63. package/dist/rules/noMultiAsterisks.js.map +1 -1
  64. package/dist/rules/noRestrictedSyntax.js +3 -9
  65. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  66. package/dist/rules/noTypes.js +0 -7
  67. package/dist/rules/noTypes.js.map +1 -1
  68. package/dist/rules/noUndefinedTypes.js +13 -34
  69. package/dist/rules/noUndefinedTypes.js.map +1 -1
  70. package/dist/rules/requireAsteriskPrefix.js +2 -26
  71. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  72. package/dist/rules/requireDescription.js +0 -17
  73. package/dist/rules/requireDescription.js.map +1 -1
  74. package/dist/rules/requireDescriptionCompleteSentence.js +13 -34
  75. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  76. package/dist/rules/requireExample.js +0 -9
  77. package/dist/rules/requireExample.js.map +1 -1
  78. package/dist/rules/requireFileOverview.js +0 -16
  79. package/dist/rules/requireFileOverview.js.map +1 -1
  80. package/dist/rules/requireHyphenBeforeParamDescription.js +2 -16
  81. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  82. package/dist/rules/requireJsdoc.js +13 -58
  83. package/dist/rules/requireJsdoc.js.map +1 -1
  84. package/dist/rules/requireParam.js +6 -53
  85. package/dist/rules/requireParam.js.map +1 -1
  86. package/dist/rules/requireParamDescription.js +0 -4
  87. package/dist/rules/requireParamDescription.js.map +1 -1
  88. package/dist/rules/requireParamName.js +0 -4
  89. package/dist/rules/requireParamName.js.map +1 -1
  90. package/dist/rules/requireParamType.js +0 -4
  91. package/dist/rules/requireParamType.js.map +1 -1
  92. package/dist/rules/requireProperty.js +0 -9
  93. package/dist/rules/requireProperty.js.map +1 -1
  94. package/dist/rules/requirePropertyDescription.js +0 -4
  95. package/dist/rules/requirePropertyDescription.js.map +1 -1
  96. package/dist/rules/requirePropertyName.js +0 -4
  97. package/dist/rules/requirePropertyName.js.map +1 -1
  98. package/dist/rules/requirePropertyType.js +0 -4
  99. package/dist/rules/requirePropertyType.js.map +1 -1
  100. package/dist/rules/requireReturns.js +13 -23
  101. package/dist/rules/requireReturns.js.map +1 -1
  102. package/dist/rules/requireReturnsCheck.js +12 -20
  103. package/dist/rules/requireReturnsCheck.js.map +1 -1
  104. package/dist/rules/requireReturnsDescription.js +0 -6
  105. package/dist/rules/requireReturnsDescription.js.map +1 -1
  106. package/dist/rules/requireReturnsType.js +0 -4
  107. package/dist/rules/requireReturnsType.js.map +1 -1
  108. package/dist/rules/requireThrows.js +6 -15
  109. package/dist/rules/requireThrows.js.map +1 -1
  110. package/dist/rules/requireYields.js +13 -29
  111. package/dist/rules/requireYields.js.map +1 -1
  112. package/dist/rules/requireYieldsCheck.js +8 -29
  113. package/dist/rules/requireYieldsCheck.js.map +1 -1
  114. package/dist/rules/sortTags.js +17 -30
  115. package/dist/rules/sortTags.js.map +1 -1
  116. package/dist/rules/tagLines.js +0 -26
  117. package/dist/rules/tagLines.js.map +1 -1
  118. package/dist/rules/validTypes.js +22 -53
  119. package/dist/rules/validTypes.js.map +1 -1
  120. package/dist/tagNames.js +7 -4
  121. package/dist/tagNames.js.map +1 -1
  122. package/dist/utils/hasReturnValue.js +22 -66
  123. package/dist/utils/hasReturnValue.js.map +1 -1
  124. package/package.json +16 -16
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.hasValueOrExecutorHasNonEmptyResolveValue = exports.hasReturnValue = void 0;
7
-
8
7
  /* eslint-disable jsdoc/no-undefined-types */
9
-
10
8
  /**
11
9
  * Checks if a node is a promise but has no resolve value or an empty value.
12
10
  * An `undefined` resolve does not count.
@@ -17,12 +15,12 @@ exports.hasValueOrExecutorHasNonEmptyResolveValue = exports.hasReturnValue = voi
17
15
  const isNewPromiseExpression = node => {
18
16
  return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' && node.callee.name === 'Promise';
19
17
  };
20
-
21
18
  const isVoidPromise = node => {
22
19
  var _node$typeParameters, _node$typeParameters$, _node$typeParameters$2;
23
-
24
20
  return (node === null || node === void 0 ? void 0 : (_node$typeParameters = node.typeParameters) === null || _node$typeParameters === void 0 ? void 0 : (_node$typeParameters$ = _node$typeParameters.params) === null || _node$typeParameters$ === void 0 ? void 0 : (_node$typeParameters$2 = _node$typeParameters$[0]) === null || _node$typeParameters$2 === void 0 ? void 0 : _node$typeParameters$2.type) === 'TSVoidKeyword';
25
21
  };
22
+ const undefinedKeywords = new Set(['TSVoidKeyword', 'TSUndefinedKeyword', 'TSNeverKeyword']);
23
+
26
24
  /**
27
25
  * @callback PromiseFilter
28
26
  * @param {object} node
@@ -37,37 +35,33 @@ const isVoidPromise = node => {
37
35
  * @returns {boolean|Node}
38
36
  */
39
37
  // eslint-disable-next-line complexity
40
-
41
-
42
38
  const hasReturnValue = (node, promFilter) => {
43
- var _node$returnType, _node$returnType$type;
44
-
45
39
  if (!node) {
46
40
  return false;
47
41
  }
48
-
49
42
  switch (node.type) {
43
+ case 'TSDeclareFunction':
50
44
  case 'TSFunctionType':
51
45
  case 'TSMethodSignature':
52
- return !['TSVoidKeyword', 'TSUndefinedKeyword'].includes(node === null || node === void 0 ? void 0 : (_node$returnType = node.returnType) === null || _node$returnType === void 0 ? void 0 : (_node$returnType$type = _node$returnType.typeAnnotation) === null || _node$returnType$type === void 0 ? void 0 : _node$returnType$type.type);
53
-
46
+ {
47
+ var _node$returnType, _node$returnType$type;
48
+ const type = node === null || node === void 0 ? void 0 : (_node$returnType = node.returnType) === null || _node$returnType === void 0 ? void 0 : (_node$returnType$type = _node$returnType.typeAnnotation) === null || _node$returnType$type === void 0 ? void 0 : _node$returnType$type.type;
49
+ return type && !undefinedKeywords.has(type);
50
+ }
54
51
  case 'MethodDefinition':
55
52
  return hasReturnValue(node.value, promFilter);
56
-
57
53
  case 'FunctionExpression':
58
54
  case 'FunctionDeclaration':
59
55
  case 'ArrowFunctionExpression':
60
56
  {
61
57
  return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || hasReturnValue(node.body, promFilter);
62
58
  }
63
-
64
59
  case 'BlockStatement':
65
60
  {
66
61
  return node.body.some(bodyNode => {
67
62
  return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, promFilter);
68
63
  });
69
64
  }
70
-
71
65
  case 'LabeledStatement':
72
66
  case 'WhileStatement':
73
67
  case 'DoWhileStatement':
@@ -78,17 +72,14 @@ const hasReturnValue = (node, promFilter) => {
78
72
  {
79
73
  return hasReturnValue(node.body, promFilter);
80
74
  }
81
-
82
75
  case 'IfStatement':
83
76
  {
84
77
  return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);
85
78
  }
86
-
87
79
  case 'TryStatement':
88
80
  {
89
81
  return hasReturnValue(node.block, promFilter) || hasReturnValue(node.handler && node.handler.body, promFilter) || hasReturnValue(node.finalizer, promFilter);
90
82
  }
91
-
92
83
  case 'SwitchStatement':
93
84
  {
94
85
  return node.cases.some(someCase => {
@@ -97,29 +88,26 @@ const hasReturnValue = (node, promFilter) => {
97
88
  });
98
89
  });
99
90
  }
100
-
101
91
  case 'ReturnStatement':
102
92
  {
103
93
  // void return does not count.
104
94
  if (node.argument === null) {
105
95
  return false;
106
96
  }
107
-
108
97
  if (promFilter && isNewPromiseExpression(node.argument)) {
109
98
  // Let caller decide how to filter, but this is, at the least,
110
99
  // a return of sorts and truthy
111
100
  return promFilter(node.argument);
112
101
  }
113
-
114
102
  return true;
115
103
  }
116
-
117
104
  default:
118
105
  {
119
106
  return false;
120
107
  }
121
108
  }
122
109
  };
110
+
123
111
  /**
124
112
  * Avoids further checking child nodes if a nested function shadows the
125
113
  * resolver, but otherwise, if name is used (by call or passed in as an
@@ -134,52 +122,45 @@ const hasReturnValue = (node, promFilter) => {
134
122
  * @returns {boolean}
135
123
  */
136
124
  // eslint-disable-next-line complexity
137
-
138
-
139
125
  exports.hasReturnValue = hasReturnValue;
140
-
141
126
  const hasNonEmptyResolverCall = (node, resolverName) => {
142
127
  if (!node) {
143
128
  return false;
144
- } // Arrow function without block
145
-
129
+ }
146
130
 
131
+ // Arrow function without block
147
132
  switch (node.type) {
148
133
  // istanbul ignore next -- In Babel?
149
134
  case 'OptionalCallExpression':
150
135
  case 'CallExpression':
151
- return node.callee.name === resolverName && ( // Implicit or explicit undefined
136
+ return node.callee.name === resolverName && (
137
+ // Implicit or explicit undefined
152
138
  node.arguments.length > 1 || node.arguments[0] !== undefined) || node.arguments.some(nde => {
153
139
  // Being passed in to another function (which might invoke it)
154
- return nde.type === 'Identifier' && nde.name === resolverName || // Handle nested items
140
+ return nde.type === 'Identifier' && nde.name === resolverName ||
141
+ // Handle nested items
155
142
  hasNonEmptyResolverCall(nde, resolverName);
156
143
  });
157
-
158
144
  case 'ChainExpression':
159
145
  case 'Decorator':
160
146
  case 'ExpressionStatement':
161
147
  return hasNonEmptyResolverCall(node.expression, resolverName);
162
-
163
148
  case 'ClassBody':
164
149
  case 'BlockStatement':
165
150
  return node.body.some(bodyNode => {
166
151
  return hasNonEmptyResolverCall(bodyNode, resolverName);
167
152
  });
168
-
169
153
  case 'FunctionExpression':
170
154
  case 'FunctionDeclaration':
171
155
  case 'ArrowFunctionExpression':
172
156
  {
173
157
  var _node$params$;
174
-
175
158
  // Shadowing
176
159
  if (((_node$params$ = node.params[0]) === null || _node$params$ === void 0 ? void 0 : _node$params$.name) === resolverName) {
177
160
  return false;
178
161
  }
179
-
180
162
  return hasNonEmptyResolverCall(node.body, resolverName);
181
163
  }
182
-
183
164
  case 'LabeledStatement':
184
165
  case 'WhileStatement':
185
166
  case 'DoWhileStatement':
@@ -190,18 +171,15 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
190
171
  {
191
172
  return hasNonEmptyResolverCall(node.body, resolverName);
192
173
  }
193
-
194
174
  case 'ConditionalExpression':
195
175
  case 'IfStatement':
196
176
  {
197
177
  return hasNonEmptyResolverCall(node.test, resolverName) || hasNonEmptyResolverCall(node.consequent, resolverName) || hasNonEmptyResolverCall(node.alternate, resolverName);
198
178
  }
199
-
200
179
  case 'TryStatement':
201
180
  {
202
181
  return hasNonEmptyResolverCall(node.block, resolverName) || hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) || hasNonEmptyResolverCall(node.finalizer, resolverName);
203
182
  }
204
-
205
183
  case 'SwitchStatement':
206
184
  {
207
185
  return node.cases.some(someCase => {
@@ -210,105 +188,90 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
210
188
  });
211
189
  });
212
190
  }
213
-
214
191
  case 'ArrayPattern':
215
192
  case 'ArrayExpression':
216
193
  return node.elements.some(element => {
217
194
  return hasNonEmptyResolverCall(element, resolverName);
218
195
  });
219
-
220
196
  case 'AssignmentPattern':
221
197
  return hasNonEmptyResolverCall(node.right, resolverName);
222
-
223
198
  case 'AssignmentExpression':
224
199
  case 'BinaryExpression':
225
200
  case 'LogicalExpression':
226
201
  {
227
202
  return hasNonEmptyResolverCall(node.left, resolverName) || hasNonEmptyResolverCall(node.right, resolverName);
228
203
  }
229
- // Comma
230
204
 
205
+ // Comma
231
206
  case 'SequenceExpression':
232
207
  case 'TemplateLiteral':
233
208
  return node.expressions.some(subExpression => {
234
209
  return hasNonEmptyResolverCall(subExpression, resolverName);
235
210
  });
236
-
237
211
  case 'ObjectPattern':
238
212
  case 'ObjectExpression':
239
213
  return node.properties.some(property => {
240
214
  return hasNonEmptyResolverCall(property, resolverName);
241
215
  });
242
216
  // istanbul ignore next -- In Babel?
243
-
244
217
  case 'ClassMethod':
245
218
  case 'MethodDefinition':
246
219
  return node.decorators && node.decorators.some(decorator => {
247
220
  return hasNonEmptyResolverCall(decorator, resolverName);
248
221
  }) || node.computed && hasNonEmptyResolverCall(node.key, resolverName) || hasNonEmptyResolverCall(node.value, resolverName);
249
- // istanbul ignore next -- In Babel?
250
222
 
223
+ // istanbul ignore next -- In Babel?
251
224
  case 'ObjectProperty':
252
225
  /* eslint-disable no-fallthrough */
253
226
  // istanbul ignore next -- In Babel?
254
-
255
- case 'PropertyDefinition': // istanbul ignore next -- In Babel?
256
-
227
+ case 'PropertyDefinition':
228
+ // istanbul ignore next -- In Babel?
257
229
  case 'ClassProperty':
258
230
  /* eslint-enable no-fallthrough */
259
-
260
231
  case 'Property':
261
232
  return node.computed && hasNonEmptyResolverCall(node.key, resolverName) || hasNonEmptyResolverCall(node.value, resolverName);
262
233
  // istanbul ignore next -- In Babel?
263
-
264
234
  case 'ObjectMethod':
265
235
  // istanbul ignore next -- In Babel?
266
236
  return node.computed && hasNonEmptyResolverCall(node.key, resolverName) || node.arguments.some(nde => {
267
237
  return hasNonEmptyResolverCall(nde, resolverName);
268
238
  });
269
-
270
239
  case 'ClassExpression':
271
240
  case 'ClassDeclaration':
272
241
  return hasNonEmptyResolverCall(node.body, resolverName);
273
-
274
242
  case 'AwaitExpression':
275
243
  case 'SpreadElement':
276
244
  case 'UnaryExpression':
277
245
  case 'YieldExpression':
278
246
  return hasNonEmptyResolverCall(node.argument, resolverName);
279
-
280
247
  case 'VariableDeclaration':
281
248
  {
282
249
  return node.declarations.some(nde => {
283
250
  return hasNonEmptyResolverCall(nde, resolverName);
284
251
  });
285
252
  }
286
-
287
253
  case 'VariableDeclarator':
288
254
  {
289
255
  return hasNonEmptyResolverCall(node.id, resolverName) || hasNonEmptyResolverCall(node.init, resolverName);
290
256
  }
291
-
292
257
  case 'TaggedTemplateExpression':
293
258
  return hasNonEmptyResolverCall(node.quasi, resolverName);
259
+
294
260
  // ?.
295
261
  // istanbul ignore next -- In Babel?
296
-
297
262
  case 'OptionalMemberExpression':
298
263
  case 'MemberExpression':
299
264
  return hasNonEmptyResolverCall(node.object, resolverName) || hasNonEmptyResolverCall(node.property, resolverName);
300
- // istanbul ignore next -- In Babel?
301
265
 
266
+ // istanbul ignore next -- In Babel?
302
267
  case 'Import':
303
268
  case 'ImportExpression':
304
269
  return hasNonEmptyResolverCall(node.source, resolverName);
305
-
306
270
  case 'ReturnStatement':
307
271
  {
308
272
  if (node.argument === null) {
309
273
  return false;
310
274
  }
311
-
312
275
  return hasNonEmptyResolverCall(node.argument, resolverName);
313
276
  }
314
277
 
@@ -319,11 +282,11 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
319
282
  case 'Super':
320
283
  // Exports not relevant in this context
321
284
  */
322
-
323
285
  default:
324
286
  return false;
325
287
  }
326
288
  };
289
+
327
290
  /**
328
291
  * Checks if a Promise executor has no resolve value or an empty value.
329
292
  * An `undefined` resolve does not count.
@@ -332,33 +295,26 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
332
295
  * @param {boolean} anyPromiseAsReturn
333
296
  * @returns {boolean}
334
297
  */
335
-
336
-
337
298
  const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {
338
299
  return hasReturnValue(node, prom => {
339
300
  if (anyPromiseAsReturn) {
340
301
  return true;
341
302
  }
342
-
343
303
  if (isVoidPromise(prom)) {
344
304
  return false;
345
305
  }
346
-
347
306
  const [{
348
307
  params,
349
308
  body
350
309
  } = {}] = prom.arguments;
351
-
352
310
  if (!(params !== null && params !== void 0 && params.length)) {
353
311
  return false;
354
312
  }
355
-
356
313
  const [{
357
314
  name: resolverName
358
315
  }] = params;
359
316
  return hasNonEmptyResolverCall(body, resolverName);
360
317
  });
361
318
  };
362
-
363
319
  exports.hasValueOrExecutorHasNonEmptyResolveValue = hasValueOrExecutorHasNonEmptyResolveValue;
364
320
  //# sourceMappingURL=hasReturnValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hasReturnValue.js","names":["isNewPromiseExpression","node","type","callee","name","isVoidPromise","typeParameters","params","hasReturnValue","promFilter","includes","returnType","typeAnnotation","value","expression","body","some","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","argument","hasNonEmptyResolverCall","resolverName","arguments","length","undefined","test","elements","element","right","left","expressions","subExpression","properties","property","decorators","decorator","computed","key","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","prom"],"sources":["../../src/utils/hasReturnValue.js"],"sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n/**\n * Checks if a node is a promise but has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst isNewPromiseExpression = (node) => {\n return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\n};\n\nconst isVoidPromise = (node) => {\n return node?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';\n};\n\n/**\n * @callback PromiseFilter\n * @param {object} node\n * @returns {boolean}\n */\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSFunctionType':\n case 'TSMethodSignature':\n return ![\n 'TSVoidKeyword',\n 'TSUndefinedKeyword',\n ].includes(node?.returnType?.typeAnnotation?.type);\n case 'MethodDefinition':\n return hasReturnValue(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n hasReturnValue(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, promFilter);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, promFilter) ||\n hasReturnValue(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(nde, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Avoids further checking child nodes if a nested function shadows the\n * resolver, but otherwise, if name is used (by call or passed in as an\n * argument to another function), will be considered as non-empty.\n *\n * This could check for redeclaration of the resolver, but as such is\n * unlikely, we avoid the performance cost of checking everywhere for\n * (re)declarations or assignments.\n *\n * @param {AST} node\n * @param {string} resolverName\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasNonEmptyResolverCall = (node, resolverName) => {\n if (!node) {\n return false;\n }\n\n // Arrow function without block\n switch (node.type) {\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.callee.name === resolverName && (\n\n // Implicit or explicit undefined\n node.arguments.length > 1 || node.arguments[0] !== undefined\n ) ||\n node.arguments.some((nde) => {\n // Being passed in to another function (which might invoke it)\n return nde.type === 'Identifier' && nde.name === resolverName ||\n\n // Handle nested items\n hasNonEmptyResolverCall(nde, resolverName);\n });\n case 'ChainExpression':\n case 'Decorator':\n case 'ExpressionStatement':\n return hasNonEmptyResolverCall(node.expression, resolverName);\n case 'ClassBody':\n case 'BlockStatement':\n return node.body.some((bodyNode) => {\n return hasNonEmptyResolverCall(bodyNode, resolverName);\n });\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n // Shadowing\n if (node.params[0]?.name === resolverName) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonEmptyResolverCall(node.test, resolverName) ||\n hasNonEmptyResolverCall(node.consequent, resolverName) ||\n hasNonEmptyResolverCall(node.alternate, resolverName);\n }\n\n case 'TryStatement': {\n return hasNonEmptyResolverCall(node.block, resolverName) ||\n hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||\n hasNonEmptyResolverCall(node.finalizer, resolverName);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonEmptyResolverCall(element, resolverName);\n });\n\n case 'AssignmentPattern':\n return hasNonEmptyResolverCall(node.right, resolverName);\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonEmptyResolverCall(node.left, resolverName) ||\n hasNonEmptyResolverCall(node.right, resolverName);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonEmptyResolverCall(subExpression, resolverName);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonEmptyResolverCall(property, resolverName);\n });\n // istanbul ignore next -- In Babel?\n case 'ClassMethod':\n case 'MethodDefinition':\n return node.decorators && node.decorators.some((decorator) => {\n return hasNonEmptyResolverCall(decorator, resolverName);\n }) ||\n node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n node.arguments.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n\n case 'ClassExpression':\n case 'ClassDeclaration':\n return hasNonEmptyResolverCall(node.body, resolverName);\n\n case 'AwaitExpression':\n case 'SpreadElement':\n case 'UnaryExpression':\n case 'YieldExpression':\n return hasNonEmptyResolverCall(node.argument, resolverName);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonEmptyResolverCall(node.id, resolverName) ||\n hasNonEmptyResolverCall(node.init, resolverName);\n }\n\n case 'TaggedTemplateExpression':\n return hasNonEmptyResolverCall(node.quasi, resolverName);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonEmptyResolverCall(node.object, resolverName) ||\n hasNonEmptyResolverCall(node.property, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonEmptyResolverCall(node.source, resolverName);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.argument, resolverName);\n }\n\n /*\n // Shouldn't need to parse literals/literal components, etc.\n\n case 'Identifier':\n case 'TemplateElement':\n case 'Super':\n // Exports not relevant in this context\n */\n default:\n return false;\n }\n};\n\n/**\n * Checks if a Promise executor has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @param {boolean} anyPromiseAsReturn\n * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {\n return hasReturnValue(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\n }\n\n if (isVoidPromise(prom)) {\n return false;\n }\n\n const [\n {\n params,\n body,\n } = {},\n ] = prom.arguments;\n\n if (!params?.length) {\n return false;\n }\n\n const [\n {\n name: resolverName,\n },\n ] = params;\n\n return hasNonEmptyResolverCall(body, resolverName);\n });\n};\n\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"hasReturnValue.js","names":["isNewPromiseExpression","node","type","callee","name","isVoidPromise","typeParameters","params","undefinedKeywords","Set","hasReturnValue","promFilter","returnType","typeAnnotation","has","value","expression","body","some","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","argument","hasNonEmptyResolverCall","resolverName","arguments","length","undefined","test","elements","element","right","left","expressions","subExpression","properties","property","decorators","decorator","computed","key","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","prom"],"sources":["../../src/utils/hasReturnValue.js"],"sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n/**\n * Checks if a node is a promise but has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst isNewPromiseExpression = (node) => {\n return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\n};\n\nconst isVoidPromise = (node) => {\n return node?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';\n};\n\nconst undefinedKeywords = new Set([\n 'TSVoidKeyword', 'TSUndefinedKeyword', 'TSNeverKeyword',\n]);\n\n/**\n * @callback PromiseFilter\n * @param {object} node\n * @returns {boolean}\n */\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n case 'MethodDefinition':\n return hasReturnValue(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n hasReturnValue(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, promFilter);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, promFilter) ||\n hasReturnValue(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(nde, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Avoids further checking child nodes if a nested function shadows the\n * resolver, but otherwise, if name is used (by call or passed in as an\n * argument to another function), will be considered as non-empty.\n *\n * This could check for redeclaration of the resolver, but as such is\n * unlikely, we avoid the performance cost of checking everywhere for\n * (re)declarations or assignments.\n *\n * @param {AST} node\n * @param {string} resolverName\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasNonEmptyResolverCall = (node, resolverName) => {\n if (!node) {\n return false;\n }\n\n // Arrow function without block\n switch (node.type) {\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.callee.name === resolverName && (\n\n // Implicit or explicit undefined\n node.arguments.length > 1 || node.arguments[0] !== undefined\n ) ||\n node.arguments.some((nde) => {\n // Being passed in to another function (which might invoke it)\n return nde.type === 'Identifier' && nde.name === resolverName ||\n\n // Handle nested items\n hasNonEmptyResolverCall(nde, resolverName);\n });\n case 'ChainExpression':\n case 'Decorator':\n case 'ExpressionStatement':\n return hasNonEmptyResolverCall(node.expression, resolverName);\n case 'ClassBody':\n case 'BlockStatement':\n return node.body.some((bodyNode) => {\n return hasNonEmptyResolverCall(bodyNode, resolverName);\n });\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n // Shadowing\n if (node.params[0]?.name === resolverName) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonEmptyResolverCall(node.test, resolverName) ||\n hasNonEmptyResolverCall(node.consequent, resolverName) ||\n hasNonEmptyResolverCall(node.alternate, resolverName);\n }\n\n case 'TryStatement': {\n return hasNonEmptyResolverCall(node.block, resolverName) ||\n hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||\n hasNonEmptyResolverCall(node.finalizer, resolverName);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonEmptyResolverCall(element, resolverName);\n });\n\n case 'AssignmentPattern':\n return hasNonEmptyResolverCall(node.right, resolverName);\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonEmptyResolverCall(node.left, resolverName) ||\n hasNonEmptyResolverCall(node.right, resolverName);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonEmptyResolverCall(subExpression, resolverName);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonEmptyResolverCall(property, resolverName);\n });\n // istanbul ignore next -- In Babel?\n case 'ClassMethod':\n case 'MethodDefinition':\n return node.decorators && node.decorators.some((decorator) => {\n return hasNonEmptyResolverCall(decorator, resolverName);\n }) ||\n node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n node.arguments.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n\n case 'ClassExpression':\n case 'ClassDeclaration':\n return hasNonEmptyResolverCall(node.body, resolverName);\n\n case 'AwaitExpression':\n case 'SpreadElement':\n case 'UnaryExpression':\n case 'YieldExpression':\n return hasNonEmptyResolverCall(node.argument, resolverName);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonEmptyResolverCall(node.id, resolverName) ||\n hasNonEmptyResolverCall(node.init, resolverName);\n }\n\n case 'TaggedTemplateExpression':\n return hasNonEmptyResolverCall(node.quasi, resolverName);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonEmptyResolverCall(node.object, resolverName) ||\n hasNonEmptyResolverCall(node.property, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonEmptyResolverCall(node.source, resolverName);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.argument, resolverName);\n }\n\n /*\n // Shouldn't need to parse literals/literal components, etc.\n\n case 'Identifier':\n case 'TemplateElement':\n case 'Super':\n // Exports not relevant in this context\n */\n default:\n return false;\n }\n};\n\n/**\n * Checks if a Promise executor has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @param {boolean} anyPromiseAsReturn\n * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {\n return hasReturnValue(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\n }\n\n if (isVoidPromise(prom)) {\n return false;\n }\n\n const [\n {\n params,\n body,\n } = {},\n ] = prom.arguments;\n\n if (!params?.length) {\n return false;\n }\n\n const [\n {\n name: resolverName,\n },\n ] = params;\n\n return hasNonEmptyResolverCall(body, resolverName);\n });\n};\n\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -5,47 +5,47 @@
5
5
  "url": "http://gajus.com"
6
6
  },
7
7
  "dependencies": {
8
- "@es-joy/jsdoccomment": "~0.31.0",
8
+ "@es-joy/jsdoccomment": "~0.32.0",
9
9
  "comment-parser": "1.3.1",
10
10
  "debug": "^4.3.4",
11
11
  "escape-string-regexp": "^4.0.0",
12
12
  "esquery": "^1.4.0",
13
- "semver": "^7.3.7",
13
+ "semver": "^7.3.8",
14
14
  "spdx-expression-parse": "^3.0.1"
15
15
  },
16
16
  "description": "JSDoc linting rules for ESLint.",
17
17
  "devDependencies": {
18
- "@babel/cli": "^7.17.10",
19
- "@babel/core": "^7.18.0",
20
- "@babel/eslint-parser": "^7.17.0",
21
- "@babel/node": "^7.17.10",
18
+ "@babel/cli": "^7.19.3",
19
+ "@babel/core": "^7.19.3",
20
+ "@babel/eslint-parser": "^7.19.1",
21
+ "@babel/node": "^7.19.1",
22
22
  "@babel/plugin-syntax-class-properties": "^7.12.13",
23
- "@babel/plugin-transform-flow-strip-types": "^7.17.12",
24
- "@babel/preset-env": "^7.18.0",
25
- "@babel/register": "^7.17.7",
23
+ "@babel/plugin-transform-flow-strip-types": "^7.19.0",
24
+ "@babel/preset-env": "^7.19.4",
25
+ "@babel/register": "^7.18.9",
26
26
  "@es-joy/jsdoc-eslint-parser": "^0.17.0",
27
27
  "@hkdobrev/run-if-changed": "^0.3.1",
28
- "@typescript-eslint/parser": "^5.26.0",
28
+ "@typescript-eslint/parser": "^5.40.1",
29
29
  "babel-plugin-add-module-exports": "^1.0.4",
30
30
  "babel-plugin-istanbul": "^6.1.1",
31
31
  "camelcase": "^6.3.0",
32
32
  "chai": "^4.3.6",
33
33
  "cross-env": "^7.0.3",
34
34
  "decamelize": "^5.0.1",
35
- "eslint": "^8.16.0",
35
+ "eslint": "^8.25.0",
36
36
  "eslint-config-canonical": "~33.0.1",
37
37
  "gitdown": "^3.1.5",
38
38
  "glob": "^8.0.3",
39
39
  "husky": "^8.0.1",
40
40
  "jsdoc-type-pratt-parser": "^3.1.0",
41
- "lint-staged": "^12.4.1",
41
+ "lint-staged": "^13.0.3",
42
42
  "lodash.defaultsdeep": "^4.6.1",
43
- "mocha": "^10.0.0",
43
+ "mocha": "^10.1.0",
44
44
  "nyc": "^15.1.0",
45
45
  "open-editor": "^3.0.0",
46
46
  "rimraf": "^3.0.2",
47
- "semantic-release": "^19.0.2",
48
- "typescript": "^4.6.4"
47
+ "semantic-release": "^19.0.5",
48
+ "typescript": "^4.8.4"
49
49
  },
50
50
  "engines": {
51
51
  "node": "^14 || ^16 || ^17 || ^18"
@@ -117,5 +117,5 @@
117
117
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
118
118
  "test-index": "npm run test-no-cov -- test/rules/index.js"
119
119
  },
120
- "version": "39.3.5"
120
+ "version": "39.3.12"
121
121
  }