eslint-plugin-jsdoc 43.1.1 → 44.0.0

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 (109) hide show
  1. package/README.md +58 -24393
  2. package/dist/WarnSettings.js.map +1 -1
  3. package/dist/alignTransform.js.map +1 -1
  4. package/dist/bin/generateRule.js.map +1 -1
  5. package/dist/exportParser.js.map +1 -1
  6. package/dist/generateRule.js.map +1 -1
  7. package/dist/iterateJsdoc.js +2 -2
  8. package/dist/iterateJsdoc.js.map +1 -1
  9. package/dist/jsdocUtils.js.map +1 -1
  10. package/dist/rules/checkAccess.js.map +1 -1
  11. package/dist/rules/checkExamples.js.map +1 -1
  12. package/dist/rules/checkLineAlignment.js.map +1 -1
  13. package/dist/rules/checkParamNames.js.map +1 -1
  14. package/dist/rules/checkPropertyNames.js.map +1 -1
  15. package/dist/rules/checkTagNames.js.map +1 -1
  16. package/dist/rules/checkTypes.js.map +1 -1
  17. package/dist/rules/checkValues.js.map +1 -1
  18. package/dist/rules/emptyTags.js.map +1 -1
  19. package/dist/rules/implementsOnClasses.js.map +1 -1
  20. package/dist/rules/informativeDocs.js.map +1 -1
  21. package/dist/rules/matchDescription.js.map +1 -1
  22. package/dist/rules/matchName.js.map +1 -1
  23. package/dist/rules/multilineBlocks.js.map +1 -1
  24. package/dist/rules/noBadBlocks.js.map +1 -1
  25. package/dist/rules/noBlankBlockDescriptions.js.map +1 -1
  26. package/dist/rules/noBlankBlocks.js.map +1 -1
  27. package/dist/rules/noDefaults.js.map +1 -1
  28. package/dist/rules/noMultiAsterisks.js.map +1 -1
  29. package/dist/rules/noTypes.js.map +1 -1
  30. package/dist/rules/noUndefinedTypes.js.map +1 -1
  31. package/dist/rules/requireDescription.js.map +1 -1
  32. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  33. package/dist/rules/requireExample.js.map +1 -1
  34. package/dist/rules/requireFileOverview.js.map +1 -1
  35. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  36. package/dist/rules/requireJsdoc.js.map +1 -1
  37. package/dist/rules/requireParam.js.map +1 -1
  38. package/dist/rules/requireParamDescription.js.map +1 -1
  39. package/dist/rules/requireParamName.js.map +1 -1
  40. package/dist/rules/requireParamType.js.map +1 -1
  41. package/dist/rules/requirePropertyDescription.js.map +1 -1
  42. package/dist/rules/requirePropertyName.js.map +1 -1
  43. package/dist/rules/requirePropertyType.js.map +1 -1
  44. package/dist/rules/requireReturns.js.map +1 -1
  45. package/dist/rules/requireReturnsCheck.js.map +1 -1
  46. package/dist/rules/requireReturnsDescription.js.map +1 -1
  47. package/dist/rules/requireThrows.js.map +1 -1
  48. package/dist/rules/requireYields.js.map +1 -1
  49. package/dist/rules/requireYieldsCheck.js.map +1 -1
  50. package/dist/rules/sortTags.js.map +1 -1
  51. package/dist/rules/tagLines.js.map +1 -1
  52. package/dist/rules/textEscaping.js.map +1 -1
  53. package/dist/rules/validTypes.js.map +1 -1
  54. package/dist/utils/hasReturnValue.js.map +1 -1
  55. package/docs/advanced.md +102 -0
  56. package/docs/rules/check-access.md +193 -0
  57. package/docs/rules/check-alignment.md +169 -0
  58. package/docs/rules/check-examples.md +784 -0
  59. package/docs/rules/check-indentation.md +296 -0
  60. package/docs/rules/check-line-alignment.md +995 -0
  61. package/docs/rules/check-param-names.md +1035 -0
  62. package/docs/rules/check-property-names.md +244 -0
  63. package/docs/rules/check-syntax.md +80 -0
  64. package/docs/rules/check-tag-names.md +1117 -0
  65. package/docs/rules/check-types.md +1198 -0
  66. package/docs/rules/check-values.md +409 -0
  67. package/docs/rules/empty-tags.md +220 -0
  68. package/docs/rules/implements-on-classes.md +219 -0
  69. package/docs/rules/informative-docs.md +400 -0
  70. package/docs/rules/match-description.md +979 -0
  71. package/docs/rules/match-name.md +243 -0
  72. package/docs/rules/multiline-blocks.md +398 -0
  73. package/docs/rules/no-bad-blocks.md +174 -0
  74. package/docs/rules/no-blank-block-descriptions.md +91 -0
  75. package/docs/rules/no-blank-blocks.md +98 -0
  76. package/docs/rules/no-defaults.md +207 -0
  77. package/docs/rules/no-missing-syntax.md +269 -0
  78. package/docs/rules/no-multi-asterisks.md +278 -0
  79. package/docs/rules/no-restricted-syntax.md +377 -0
  80. package/docs/rules/no-types.md +168 -0
  81. package/docs/rules/no-undefined-types.md +731 -0
  82. package/docs/rules/require-asterisk-prefix.md +297 -0
  83. package/docs/rules/require-description-complete-sentence.md +584 -0
  84. package/docs/rules/require-description.md +820 -0
  85. package/docs/rules/require-example.md +390 -0
  86. package/docs/rules/require-file-overview.md +317 -0
  87. package/docs/rules/require-hyphen-before-param-description.md +258 -0
  88. package/docs/rules/require-jsdoc.md +1837 -0
  89. package/docs/rules/require-param-description.md +1816 -0
  90. package/docs/rules/require-param-name.md +238 -0
  91. package/docs/rules/require-param-type.md +163 -0
  92. package/docs/rules/require-param.md +227 -0
  93. package/docs/rules/require-property-description.md +128 -0
  94. package/docs/rules/require-property-name.md +88 -0
  95. package/docs/rules/require-property-type.md +79 -0
  96. package/docs/rules/require-property.md +79 -0
  97. package/docs/rules/require-returns-check.md +1164 -0
  98. package/docs/rules/require-returns-description.md +1053 -0
  99. package/docs/rules/require-returns-type.md +181 -0
  100. package/docs/rules/require-returns.md +144 -0
  101. package/docs/rules/require-throws.md +326 -0
  102. package/docs/rules/require-yields-check.md +823 -0
  103. package/docs/rules/require-yields.md +544 -0
  104. package/docs/rules/sort-tags.md +635 -0
  105. package/docs/rules/tag-lines.md +551 -0
  106. package/docs/rules/text-escaping.md +177 -0
  107. package/docs/rules/valid-types.md +834 -0
  108. package/docs/settings.md +355 -0
  109. package/package.json +15 -15
@@ -0,0 +1,1164 @@
1
+ <a name="user-content-require-returns"></a>
2
+ <a name="require-returns"></a>
3
+ # <code>require-returns</code>
4
+
5
+ * [Options](#user-content-require-returns-options)
6
+ * [Context and settings](#user-content-require-returns-context-and-settings)
7
+ * [Failing examples](#user-content-require-returns-failing-examples)
8
+ * [Passing examples](#user-content-require-returns-passing-examples)
9
+
10
+
11
+ Requires that return statements are documented.
12
+
13
+ Will also report if multiple `@returns` tags are present.
14
+
15
+ <a name="user-content-require-returns-options"></a>
16
+ <a name="require-returns-options"></a>
17
+ ## Options
18
+
19
+ - `checkConstructors` - A value indicating whether `constructor`s should
20
+ be checked for `@returns` tags. Defaults to `false`.
21
+ - `checkGetters` - Boolean to determine whether getter methods should
22
+ be checked for `@returns` tags. Defaults to `true`.
23
+ - `exemptedBy` - Array of tags (e.g., `['type']`) whose presence on the
24
+ document block avoids the need for a `@returns`. Defaults to an array
25
+ with `inheritdoc`. If you set this array, it will overwrite the default,
26
+ so be sure to add back `inheritdoc` if you wish its presence to cause
27
+ exemption of the rule.
28
+ - `forceRequireReturn` - Set to `true` to always insist on
29
+ `@returns` documentation regardless of implicit or explicit `return`'s
30
+ in the function. May be desired to flag that a project is aware of an
31
+ `undefined`/`void` return. Defaults to `false`.
32
+ - `forceReturnsWithAsync` - By default `async` functions that do not explicitly
33
+ return a value pass this rule as an `async` function will always return a
34
+ `Promise`, even if the `Promise` resolves to void. You can force all
35
+ `async` functions (including ones with an explicit `Promise` but no
36
+ detected non-`undefined` `resolve` value) to require `@return`
37
+ documentation by setting `forceReturnsWithAsync` to `true` on the options
38
+ object. This may be useful for flagging that there has been consideration
39
+ of return type. Defaults to `false`.
40
+ - `contexts` - Set this to an array of strings representing the AST context
41
+ (or an object with `context` and `comment` properties) where you wish
42
+ the rule to be applied.
43
+ Overrides the default contexts (see below). Set to `"any"` if you want
44
+ the rule to apply to any jsdoc block throughout your files (as is necessary
45
+ for finding function blocks not attached to a function declaration or
46
+ expression, i.e., `@callback` or `@function` (or its aliases `@func` or
47
+ `@method`) (including those associated with an `@interface`). This
48
+ rule will only apply on non-default contexts when there is such a tag
49
+ present and the `forceRequireReturn` option is set or if the
50
+ `forceReturnsWithAsync` option is set with a present `@async` tag
51
+ (since we are not checking against the actual `return` values in these
52
+ cases).
53
+
54
+ <a name="user-content-require-returns-context-and-settings"></a>
55
+ <a name="require-returns-context-and-settings"></a>
56
+ ## Context and settings
57
+
58
+ | | |
59
+ | -------- | ------- |
60
+ | Context | `ArrowFunctionExpression`, `FunctionDeclaration`, `FunctionExpression`; others when `contexts` option enabled |
61
+ | Tags | `returns` |
62
+ | Aliases | `return` |
63
+ |Recommended|true|
64
+ | Options | `checkConstructors`, `checkGetters`, `contexts`, `exemptedBy`, `forceRequireReturn`, `forceReturnsWithAsync` |
65
+ | Settings | `ignoreReplacesDocs`, `overrideReplacesDocs`, `augmentsExtendsReplacesDocs`, `implementsReplacesDocs` |
66
+
67
+ <a name="user-content-require-returns-failing-examples"></a>
68
+ <a name="require-returns-failing-examples"></a>
69
+ ## Failing examples
70
+
71
+ The following patterns are considered problems:
72
+
73
+ ````js
74
+ /**
75
+ *
76
+ */
77
+ function quux (foo) {
78
+
79
+ return foo;
80
+ }
81
+ // Message: Missing JSDoc @returns declaration.
82
+
83
+ /**
84
+ *
85
+ */
86
+ const foo = () => ({
87
+ bar: 'baz'
88
+ })
89
+ // Message: Missing JSDoc @returns declaration.
90
+
91
+ /**
92
+ *
93
+ */
94
+ const foo = bar=>({ bar })
95
+ // Message: Missing JSDoc @returns declaration.
96
+
97
+ /**
98
+ *
99
+ */
100
+ const foo = bar => bar.baz()
101
+ // Message: Missing JSDoc @returns declaration.
102
+
103
+ /**
104
+ *
105
+ */
106
+ function quux (foo) {
107
+
108
+ return foo;
109
+ }
110
+ // Settings: {"jsdoc":{"tagNamePreference":{"returns":"return"}}}
111
+ // Message: Missing JSDoc @return declaration.
112
+
113
+ /**
114
+ *
115
+ */
116
+ async function quux() {
117
+ }
118
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
119
+ // Message: Missing JSDoc @returns declaration.
120
+
121
+ /**
122
+ *
123
+ */
124
+ const quux = async function () {}
125
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
126
+ // Message: Missing JSDoc @returns declaration.
127
+
128
+ /**
129
+ *
130
+ */
131
+ const quux = async () => {}
132
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
133
+ // Message: Missing JSDoc @returns declaration.
134
+
135
+ /**
136
+ *
137
+ */
138
+ async function quux () {}
139
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
140
+ // Message: Missing JSDoc @returns declaration.
141
+
142
+ /**
143
+ *
144
+ */
145
+ function quux () {
146
+ }
147
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
148
+ // Message: Missing JSDoc @returns declaration.
149
+
150
+ /**
151
+ *
152
+ */
153
+ function quux () {
154
+ }
155
+ // "jsdoc/require-returns": ["error"|"warn", {"contexts":["any"],"forceRequireReturn":true}]
156
+ // Message: Missing JSDoc @returns declaration.
157
+
158
+ /**
159
+ * @function
160
+ */
161
+ // "jsdoc/require-returns": ["error"|"warn", {"contexts":["any"],"forceRequireReturn":true}]
162
+ // Message: Missing JSDoc @returns declaration.
163
+
164
+ /**
165
+ * @callback
166
+ */
167
+ // "jsdoc/require-returns": ["error"|"warn", {"contexts":["any"],"forceRequireReturn":true}]
168
+ // Message: Missing JSDoc @returns declaration.
169
+
170
+ const language = {
171
+ /**
172
+ * @param {string} name
173
+ */
174
+ get name() {
175
+ return this._name;
176
+ }
177
+ }
178
+ // Message: Missing JSDoc @returns declaration.
179
+
180
+ /**
181
+ *
182
+ */
183
+ async function quux () {
184
+ }
185
+ // "jsdoc/require-returns": ["error"|"warn", {"forceReturnsWithAsync":true}]
186
+ // Message: Missing JSDoc @returns declaration.
187
+
188
+ /**
189
+ * @function
190
+ * @async
191
+ */
192
+ // "jsdoc/require-returns": ["error"|"warn", {"contexts":["any"],"forceReturnsWithAsync":true}]
193
+ // Message: Missing JSDoc @returns declaration.
194
+
195
+ /**
196
+ * @callback
197
+ * @async
198
+ */
199
+ // "jsdoc/require-returns": ["error"|"warn", {"contexts":["any"],"forceReturnsWithAsync":true}]
200
+ // Message: Missing JSDoc @returns declaration.
201
+
202
+ /**
203
+ * @returns {undefined}
204
+ * @returns {void}
205
+ */
206
+ function quux (foo) {
207
+
208
+ return foo;
209
+ }
210
+ // Message: Found more than one @returns declaration.
211
+
212
+ /**
213
+ * @returns
214
+ */
215
+ function quux () {
216
+
217
+ }
218
+ // Settings: {"jsdoc":{"tagNamePreference":{"returns":false}}}
219
+ // Message: Unexpected tag `@returns`
220
+
221
+ /**
222
+ * @param foo
223
+ */
224
+ function quux (foo) {
225
+ return 'bar';
226
+ }
227
+ // "jsdoc/require-returns": ["error"|"warn", {"exemptedBy":["notPresent"]}]
228
+ // Message: Missing JSDoc @returns declaration.
229
+
230
+ /**
231
+ * @param {array} a
232
+ */
233
+ async function foo(a) {
234
+ return;
235
+ }
236
+ // "jsdoc/require-returns": ["error"|"warn", {"forceReturnsWithAsync":true}]
237
+ // Message: Missing JSDoc @returns declaration.
238
+
239
+ /**
240
+ * @param {array} a
241
+ */
242
+ async function foo(a) {
243
+ return Promise.all(a);
244
+ }
245
+ // "jsdoc/require-returns": ["error"|"warn", {"forceReturnsWithAsync":true}]
246
+ // Message: Missing JSDoc @returns declaration.
247
+
248
+ class foo {
249
+ /** gets bar */
250
+ get bar() {
251
+ return 0;
252
+ }
253
+ }
254
+ // "jsdoc/require-returns": ["error"|"warn", {"checkGetters":true}]
255
+ // Message: Missing JSDoc @returns declaration.
256
+
257
+ class TestClass {
258
+ /**
259
+ *
260
+ */
261
+ constructor() {
262
+ return new Map();
263
+ }
264
+ }
265
+ // "jsdoc/require-returns": ["error"|"warn", {"checkConstructors":true}]
266
+ // Message: Missing JSDoc @returns declaration.
267
+
268
+ class TestClass {
269
+ /**
270
+ *
271
+ */
272
+ get Test() {
273
+ return 0;
274
+ }
275
+ }
276
+ // "jsdoc/require-returns": ["error"|"warn", {"checkGetters":true}]
277
+ // Message: Missing JSDoc @returns declaration.
278
+
279
+ class quux {
280
+ /**
281
+ *
282
+ */
283
+ quux () {
284
+ }
285
+ }
286
+ // "jsdoc/require-returns": ["error"|"warn", {"contexts":["any"],"forceRequireReturn":true}]
287
+ // Message: Missing JSDoc @returns declaration.
288
+
289
+ /**
290
+ *
291
+ */
292
+ function quux (foo) {
293
+
294
+ return new Promise(function (resolve, reject) {
295
+ resolve(foo);
296
+ });
297
+ }
298
+ // Message: Missing JSDoc @returns declaration.
299
+
300
+ /**
301
+ *
302
+ */
303
+ function quux (foo) {
304
+
305
+ return new Promise(function (resolve, reject) {
306
+ setTimeout(() => {
307
+ resolve(true);
308
+ });
309
+ });
310
+ }
311
+ // Message: Missing JSDoc @returns declaration.
312
+
313
+ /**
314
+ *
315
+ */
316
+ function quux (foo) {
317
+
318
+ return new Promise(function (resolve, reject) {
319
+ foo(resolve);
320
+ });
321
+ }
322
+ // Message: Missing JSDoc @returns declaration.
323
+
324
+ /**
325
+ *
326
+ */
327
+ function quux () {
328
+ return new Promise((resolve, reject) => {
329
+ while(true) {
330
+ resolve(true);
331
+ }
332
+ });
333
+ }
334
+ // Message: Missing JSDoc @returns declaration.
335
+
336
+ /**
337
+ *
338
+ */
339
+ function quux () {
340
+ return new Promise((resolve, reject) => {
341
+ do {
342
+ resolve(true);
343
+ }
344
+ while(true)
345
+ });
346
+ }
347
+ // Message: Missing JSDoc @returns declaration.
348
+
349
+ /**
350
+ *
351
+ */
352
+ function quux () {
353
+ return new Promise((resolve, reject) => {
354
+ if (true) {
355
+ resolve(true);
356
+ }
357
+ return;
358
+ });
359
+ }
360
+ // Message: Missing JSDoc @returns declaration.
361
+
362
+ /**
363
+ *
364
+ */
365
+ function quux () {
366
+ return new Promise((resolve, reject) => {
367
+ if (true) {
368
+ resolve(true);
369
+ }
370
+ });
371
+ }
372
+ // Message: Missing JSDoc @returns declaration.
373
+
374
+ /**
375
+ *
376
+ */
377
+ function quux () {
378
+ var a = {};
379
+ return new Promise((resolve, reject) => {
380
+ with (a) {
381
+ resolve(true);
382
+ }
383
+ });
384
+ }
385
+ // Message: Missing JSDoc @returns declaration.
386
+
387
+ /**
388
+ *
389
+ */
390
+ function quux () {
391
+ var a = {};
392
+ return new Promise((resolve, reject) => {
393
+ try {
394
+ resolve(true);
395
+ } catch (err) {}
396
+ });
397
+ }
398
+ // Message: Missing JSDoc @returns declaration.
399
+
400
+ /**
401
+ *
402
+ */
403
+ function quux () {
404
+ var a = {};
405
+ return new Promise((resolve, reject) => {
406
+ try {
407
+ } catch (err) {
408
+ resolve(true);
409
+ }
410
+ });
411
+ }
412
+ // Message: Missing JSDoc @returns declaration.
413
+
414
+ /**
415
+ *
416
+ */
417
+ function quux () {
418
+ var a = {};
419
+ return new Promise((resolve, reject) => {
420
+ try {
421
+ } catch (err) {
422
+ } finally {
423
+ resolve(true);
424
+ }
425
+ });
426
+ }
427
+ // Message: Missing JSDoc @returns declaration.
428
+
429
+ /**
430
+ *
431
+ */
432
+ function quux () {
433
+ var a = {};
434
+ return new Promise((resolve, reject) => {
435
+ switch (a) {
436
+ case 'abc':
437
+ resolve(true);
438
+ }
439
+ });
440
+ }
441
+ // Message: Missing JSDoc @returns declaration.
442
+
443
+ /**
444
+ *
445
+ */
446
+ function quux () {
447
+ return new Promise((resolve, reject) => {
448
+ if (true) {
449
+ resolve();
450
+ } else {
451
+ resolve(true);
452
+ }
453
+ });
454
+ }
455
+ // Message: Missing JSDoc @returns declaration.
456
+
457
+ /**
458
+ *
459
+ */
460
+ function quux () {
461
+ return new Promise((resolve, reject) => {
462
+ for (let i = 0; i < 5 ; i++) {
463
+ resolve(true);
464
+ }
465
+ });
466
+ }
467
+ // Message: Missing JSDoc @returns declaration.
468
+
469
+ /**
470
+ *
471
+ */
472
+ function quux () {
473
+ return new Promise((resolve, reject) => {
474
+ for (const i of obj) {
475
+ resolve(true);
476
+ }
477
+ });
478
+ }
479
+ // Message: Missing JSDoc @returns declaration.
480
+
481
+ /**
482
+ *
483
+ */
484
+ function quux () {
485
+ return new Promise((resolve, reject) => {
486
+ for (const i in obj) {
487
+ resolve(true);
488
+ }
489
+ });
490
+ }
491
+ // Message: Missing JSDoc @returns declaration.
492
+
493
+ /**
494
+ *
495
+ */
496
+ function quux () {
497
+ return new Promise((resolve, reject) => {
498
+ if (true) {
499
+ return;
500
+ } else {
501
+ resolve(true);
502
+ }
503
+ });
504
+ }
505
+ // Message: Missing JSDoc @returns declaration.
506
+
507
+ /**
508
+ *
509
+ */
510
+ function quux () {
511
+ return new Promise((resolve, reject) => {
512
+ function a () {
513
+ resolve(true);
514
+ }
515
+ a();
516
+ });
517
+ }
518
+ // Message: Missing JSDoc @returns declaration.
519
+
520
+ /**
521
+ *
522
+ */
523
+ function quux () {
524
+ return new Promise();
525
+ }
526
+ // "jsdoc/require-returns": ["error"|"warn", {"forceReturnsWithAsync":true}]
527
+ // Message: Missing JSDoc @returns declaration.
528
+
529
+ /**
530
+ *
531
+ */
532
+ async function quux () {
533
+ return new Promise();
534
+ }
535
+ // "jsdoc/require-returns": ["error"|"warn", {"forceReturnsWithAsync":true}]
536
+ // Message: Missing JSDoc @returns declaration.
537
+
538
+ /**
539
+ *
540
+ */
541
+ async function quux () {
542
+ return new Promise((resolve, reject) => {});
543
+ }
544
+ // "jsdoc/require-returns": ["error"|"warn", {"forceReturnsWithAsync":true}]
545
+ // Message: Missing JSDoc @returns declaration.
546
+
547
+ export class A {
548
+ /**
549
+ * Description.
550
+ */
551
+ public f(): string {
552
+ return "";
553
+ }
554
+ }
555
+
556
+ export interface B {
557
+ /**
558
+ * Description.
559
+ */
560
+ f(): string;
561
+
562
+ /**
563
+ * Description.
564
+ */
565
+ g: () => string;
566
+
567
+ /**
568
+ * Description.
569
+ */
570
+ h(): void;
571
+
572
+ /**
573
+ * Description.
574
+ */
575
+ i: () => void;
576
+ }
577
+
578
+ /**
579
+ * Description.
580
+ */
581
+ export function f(): string {
582
+ return "";
583
+ }
584
+ // "jsdoc/require-returns": ["error"|"warn", {"contexts":[":not(BlockStatement) > FunctionDeclaration","MethodDefinition","TSMethodSignature","TSPropertySignature > TSTypeAnnotation > TSFunctionType"]}]
585
+ // Message: Missing JSDoc @returns declaration.
586
+
587
+ /**
588
+ * @param ms time in millis
589
+ */
590
+ export const sleep = (ms: number) =>
591
+ new Promise<string>((res) => setTimeout(res, ms));
592
+ // Message: Missing JSDoc @returns declaration.
593
+
594
+ /**
595
+ * @param ms time in millis
596
+ */
597
+ export const sleep = (ms: number) => {
598
+ return new Promise<string>((res) => setTimeout(res, ms));
599
+ };
600
+ // Message: Missing JSDoc @returns declaration.
601
+
602
+ /**
603
+ * Reads a test fixture.
604
+ */
605
+ export function readFixture(path: string): Promise<Buffer>;
606
+ // Message: Missing JSDoc @returns declaration.
607
+
608
+ /**
609
+ * Reads a test fixture.
610
+ */
611
+ export function readFixture(path: string): void;
612
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
613
+ // Message: Missing JSDoc @returns declaration.
614
+
615
+ /**
616
+ * Reads a test fixture.
617
+ */
618
+ export function readFixture(path: string);
619
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
620
+ // Message: Missing JSDoc @returns declaration.
621
+
622
+ /**
623
+ * @param {array} a
624
+ */
625
+ async function foo(a) {
626
+ return Promise.all(a);
627
+ }
628
+ // Message: Missing JSDoc @returns declaration.
629
+
630
+ /**
631
+ * Description.
632
+ */
633
+ export default async function demo() {
634
+ return true;
635
+ }
636
+ // Message: Missing JSDoc @returns declaration.
637
+ ````
638
+
639
+
640
+
641
+ <a name="user-content-require-returns-passing-examples"></a>
642
+ <a name="require-returns-passing-examples"></a>
643
+ ## Passing examples
644
+
645
+ The following patterns are not considered problems:
646
+
647
+ ````js
648
+ /**
649
+ * @returns Foo.
650
+ */
651
+ function quux () {
652
+
653
+ return foo;
654
+ }
655
+
656
+ /**
657
+ * @returns Foo.
658
+ */
659
+ function quux () {
660
+
661
+ return foo;
662
+ }
663
+ // "jsdoc/require-returns": ["error"|"warn", {"contexts":["any"]}]
664
+
665
+ /**
666
+ *
667
+ */
668
+ function quux () {
669
+ }
670
+
671
+ /**
672
+ *
673
+ */
674
+ function quux (bar) {
675
+ bar.filter(baz => {
676
+ return baz.corge();
677
+ })
678
+ }
679
+
680
+ /**
681
+ * @returns Array
682
+ */
683
+ function quux (bar) {
684
+ return bar.filter(baz => {
685
+ return baz.corge();
686
+ })
687
+ }
688
+
689
+ /**
690
+ * @returns Array
691
+ */
692
+ const quux = (bar) => bar.filter(({ corge }) => corge())
693
+
694
+ /**
695
+ * @inheritdoc
696
+ */
697
+ function quux (foo) {
698
+ }
699
+
700
+ /**
701
+ * @override
702
+ */
703
+ function quux (foo) {
704
+ }
705
+
706
+ /**
707
+ * @constructor
708
+ */
709
+ function quux (foo) {
710
+ return true;
711
+ }
712
+
713
+ /**
714
+ * @implements
715
+ */
716
+ function quux (foo) {
717
+ return true;
718
+ }
719
+
720
+ /**
721
+ * @override
722
+ */
723
+ function quux (foo) {
724
+
725
+ return foo;
726
+ }
727
+
728
+ /**
729
+ * @class
730
+ */
731
+ function quux (foo) {
732
+ return true;
733
+ }
734
+
735
+ /**
736
+ * @constructor
737
+ */
738
+ function quux (foo) {
739
+
740
+ }
741
+
742
+ /**
743
+ * @returns {object}
744
+ */
745
+ function quux () {
746
+
747
+ return {a: foo};
748
+ }
749
+
750
+ /**
751
+ * @returns {object}
752
+ */
753
+ const quux = () => ({a: foo});
754
+
755
+ /**
756
+ * @returns {object}
757
+ */
758
+ const quux = () => {
759
+ return {a: foo}
760
+ };
761
+
762
+ /**
763
+ * @returns {void}
764
+ */
765
+ function quux () {
766
+ }
767
+
768
+ /**
769
+ * @returns {void}
770
+ */
771
+ const quux = () => {
772
+
773
+ }
774
+
775
+ /**
776
+ * @returns {undefined}
777
+ */
778
+ function quux () {
779
+ }
780
+
781
+ /**
782
+ * @returns {undefined}
783
+ */
784
+ const quux = () => {
785
+
786
+ }
787
+
788
+ /**
789
+ *
790
+ */
791
+ function quux () {
792
+ }
793
+
794
+ /**
795
+ *
796
+ */
797
+ const quux = () => {
798
+
799
+ }
800
+
801
+ class Foo {
802
+ /**
803
+ *
804
+ */
805
+ constructor () {
806
+ }
807
+ }
808
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
809
+
810
+ const language = {
811
+ /**
812
+ * @param {string} name
813
+ */
814
+ set name(name) {
815
+ this._name = name;
816
+ }
817
+ }
818
+
819
+ /**
820
+ * @returns {void}
821
+ */
822
+ function quux () {
823
+ }
824
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
825
+
826
+ /**
827
+ * @returns {void}
828
+ */
829
+ function quux () {
830
+ return undefined;
831
+ }
832
+
833
+ /**
834
+ * @returns {void}
835
+ */
836
+ function quux () {
837
+ return undefined;
838
+ }
839
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
840
+
841
+ /**
842
+ * @returns {void}
843
+ */
844
+ function quux () {
845
+ return;
846
+ }
847
+
848
+ /**
849
+ * @returns {void}
850
+ */
851
+ function quux () {
852
+ }
853
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
854
+
855
+ /**
856
+ * @returns {void}
857
+ */
858
+ function quux () {
859
+ return;
860
+ }
861
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
862
+
863
+ /** @type {RequestHandler} */
864
+ function quux (req, res , next) {
865
+ return;
866
+ }
867
+
868
+ /**
869
+ * @returns {Promise}
870
+ */
871
+ async function quux () {
872
+ }
873
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
874
+
875
+ /**
876
+ * @returns {Promise}
877
+ */
878
+ async function quux () {
879
+ }
880
+ // "jsdoc/require-returns": ["error"|"warn", {"forceReturnsWithAsync":true}]
881
+
882
+ /**
883
+ *
884
+ */
885
+ async function quux () {}
886
+
887
+ /**
888
+ *
889
+ */
890
+ const quux = async function () {}
891
+
892
+ /**
893
+ *
894
+ */
895
+ const quux = async () => {}
896
+
897
+ /** foo class */
898
+ class foo {
899
+ /** foo constructor */
900
+ constructor () {
901
+ // =>
902
+ this.bar = true;
903
+ }
904
+ }
905
+
906
+ export default foo;
907
+
908
+ /**
909
+ *
910
+ */
911
+ function quux () {
912
+ }
913
+ // "jsdoc/require-returns": ["error"|"warn", {"forceReturnsWithAsync":true}]
914
+
915
+ /**
916
+ * @type {MyCallback}
917
+ */
918
+ function quux () {
919
+
920
+ }
921
+ // "jsdoc/require-returns": ["error"|"warn", {"exemptedBy":["type"]}]
922
+
923
+ /**
924
+ * @param {array} a
925
+ */
926
+ async function foo(a) {
927
+ return;
928
+ }
929
+
930
+ /**
931
+ *
932
+ */
933
+ // "jsdoc/require-returns": ["error"|"warn", {"contexts":["any"]}]
934
+
935
+ /**
936
+ * @async
937
+ */
938
+ // "jsdoc/require-returns": ["error"|"warn", {"contexts":["any"]}]
939
+
940
+ /**
941
+ * @function
942
+ */
943
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
944
+
945
+ /**
946
+ * @callback
947
+ */
948
+ // "jsdoc/require-returns": ["error"|"warn", {"forceRequireReturn":true}]
949
+
950
+ /**
951
+ * @function
952
+ * @async
953
+ */
954
+ // "jsdoc/require-returns": ["error"|"warn", {"forceReturnsWithAsync":true}]
955
+
956
+ /**
957
+ * @callback
958
+ * @async
959
+ */
960
+ // "jsdoc/require-returns": ["error"|"warn", {"forceReturnsWithAsync":true}]
961
+
962
+ /**
963
+ * @function
964
+ */
965
+ // "jsdoc/require-returns": ["error"|"warn", {"contexts":["any"],"forceReturnsWithAsync":true}]
966
+
967
+ /**
968
+ * @callback
969
+ */
970
+ // "jsdoc/require-returns": ["error"|"warn", {"contexts":["any"],"forceReturnsWithAsync":true}]
971
+
972
+ class foo {
973
+ get bar() {
974
+ return 0;
975
+ }
976
+ }
977
+ // "jsdoc/require-returns": ["error"|"warn", {"checkGetters":false}]
978
+
979
+ class foo {
980
+ /** @returns zero */
981
+ get bar() {
982
+ return 0;
983
+ }
984
+ }
985
+ // "jsdoc/require-returns": ["error"|"warn", {"checkGetters":true}]
986
+
987
+ class foo {
988
+ /** @returns zero */
989
+ get bar() {
990
+ return 0;
991
+ }
992
+ }
993
+ // "jsdoc/require-returns": ["error"|"warn", {"checkGetters":false}]
994
+
995
+ class TestClass {
996
+ /**
997
+ *
998
+ */
999
+ constructor() { }
1000
+ }
1001
+
1002
+ class TestClass {
1003
+ /**
1004
+ * @returns A map.
1005
+ */
1006
+ constructor() {
1007
+ return new Map();
1008
+ }
1009
+ }
1010
+
1011
+ class TestClass {
1012
+ /**
1013
+ *
1014
+ */
1015
+ constructor() { }
1016
+ }
1017
+ // "jsdoc/require-returns": ["error"|"warn", {"checkConstructors":false}]
1018
+
1019
+ class TestClass {
1020
+ /**
1021
+ *
1022
+ */
1023
+ get Test() { }
1024
+ }
1025
+
1026
+ class TestClass {
1027
+ /**
1028
+ * @returns A number.
1029
+ */
1030
+ get Test() {
1031
+ return 0;
1032
+ }
1033
+ }
1034
+
1035
+ class TestClass {
1036
+ /**
1037
+ *
1038
+ */
1039
+ get Test() {
1040
+ return 0;
1041
+ }
1042
+ }
1043
+ // "jsdoc/require-returns": ["error"|"warn", {"checkGetters":false}]
1044
+
1045
+ /**
1046
+ *
1047
+ */
1048
+ function quux (foo) {
1049
+
1050
+ return new Promise(function (resolve, reject) {
1051
+ resolve();
1052
+ });
1053
+ }
1054
+
1055
+ /**
1056
+ *
1057
+ */
1058
+ function quux (foo) {
1059
+
1060
+ return new Promise(function (resolve, reject) {
1061
+ setTimeout(() => {
1062
+ resolve();
1063
+ });
1064
+ });
1065
+ }
1066
+
1067
+ /**
1068
+ *
1069
+ */
1070
+ function quux (foo) {
1071
+
1072
+ return new Promise(function (resolve, reject) {
1073
+ foo();
1074
+ });
1075
+ }
1076
+
1077
+ /**
1078
+ *
1079
+ */
1080
+ function quux (foo) {
1081
+
1082
+ return new Promise(function (resolve, reject) {
1083
+ abc((resolve) => {
1084
+ resolve(true);
1085
+ });
1086
+ });
1087
+ }
1088
+
1089
+ /**
1090
+ *
1091
+ */
1092
+ function quux (foo) {
1093
+
1094
+ return new Promise(function (resolve, reject) {
1095
+ abc(function (resolve) {
1096
+ resolve(true);
1097
+ });
1098
+ });
1099
+ }
1100
+
1101
+ /**
1102
+ *
1103
+ */
1104
+ function quux () {
1105
+ return new Promise((resolve, reject) => {
1106
+ if (true) {
1107
+ resolve();
1108
+ }
1109
+ });
1110
+ return;
1111
+ }
1112
+
1113
+ /**
1114
+ *
1115
+ */
1116
+ function quux () {
1117
+ return new Promise();
1118
+ }
1119
+
1120
+ /**
1121
+ * Description.
1122
+ */
1123
+ async function foo() {
1124
+ return new Promise(resolve => resolve());
1125
+ }
1126
+
1127
+ /**
1128
+ * @param ms time in millis
1129
+ */
1130
+ export const sleep = (ms: number) =>
1131
+ new Promise<void>((res) => setTimeout(res, ms));
1132
+
1133
+ /**
1134
+ * @param ms time in millis
1135
+ */
1136
+ export const sleep = (ms: number) => {
1137
+ return new Promise<void>((res) => setTimeout(res, ms));
1138
+ };
1139
+
1140
+ /**
1141
+ * Reads a test fixture.
1142
+ *
1143
+ * @returns The file contents as buffer.
1144
+ */
1145
+ export function readFixture(path: string): Promise<Buffer>;
1146
+
1147
+ /**
1148
+ * Reads a test fixture.
1149
+ *
1150
+ * @returns {void}.
1151
+ */
1152
+ export function readFixture(path: string): void;
1153
+
1154
+ /**
1155
+ * Reads a test fixture.
1156
+ */
1157
+ export function readFixture(path: string): void;
1158
+
1159
+ /**
1160
+ * Reads a test fixture.
1161
+ */
1162
+ export function readFixture(path: string);
1163
+ ````
1164
+