eslint-plugin-jsdoc 37.0.0 → 37.1.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 (78) hide show
  1. package/README.md +22 -0
  2. package/dist/alignTransform.js +3 -1
  3. package/dist/alignTransform.js.map +1 -1
  4. package/dist/bin/generateRule.js +2 -4
  5. package/dist/bin/generateRule.js.map +1 -1
  6. package/dist/exportParser.js +32 -18
  7. package/dist/exportParser.js.map +1 -1
  8. package/dist/generateRule.js +2 -4
  9. package/dist/generateRule.js.map +1 -1
  10. package/dist/iterateJsdoc.js +50 -40
  11. package/dist/iterateJsdoc.js.map +1 -1
  12. package/dist/jsdocUtils.js +36 -24
  13. package/dist/jsdocUtils.js.map +1 -1
  14. package/dist/rules/checkAccess.js.map +1 -1
  15. package/dist/rules/checkExamples.js +9 -6
  16. package/dist/rules/checkExamples.js.map +1 -1
  17. package/dist/rules/checkIndentation.js +4 -4
  18. package/dist/rules/checkIndentation.js.map +1 -1
  19. package/dist/rules/checkLineAlignment.js +6 -4
  20. package/dist/rules/checkLineAlignment.js.map +1 -1
  21. package/dist/rules/checkParamNames.js +17 -12
  22. package/dist/rules/checkParamNames.js.map +1 -1
  23. package/dist/rules/checkPropertyNames.js.map +1 -1
  24. package/dist/rules/checkTagNames.js +6 -6
  25. package/dist/rules/checkTagNames.js.map +1 -1
  26. package/dist/rules/checkTypes.js +10 -9
  27. package/dist/rules/checkTypes.js.map +1 -1
  28. package/dist/rules/checkValues.js.map +1 -1
  29. package/dist/rules/emptyTags.js +3 -2
  30. package/dist/rules/emptyTags.js.map +1 -1
  31. package/dist/rules/matchDescription.js +1 -1
  32. package/dist/rules/matchDescription.js.map +1 -1
  33. package/dist/rules/matchName.js +6 -4
  34. package/dist/rules/matchName.js.map +1 -1
  35. package/dist/rules/multilineBlocks.js +4 -2
  36. package/dist/rules/multilineBlocks.js.map +1 -1
  37. package/dist/rules/newlineAfterDescription.js +2 -4
  38. package/dist/rules/newlineAfterDescription.js.map +1 -1
  39. package/dist/rules/noBadBlocks.js +3 -3
  40. package/dist/rules/noBadBlocks.js.map +1 -1
  41. package/dist/rules/noDefaults.js +9 -6
  42. package/dist/rules/noDefaults.js.map +1 -1
  43. package/dist/rules/noMissingSyntax.js.map +1 -1
  44. package/dist/rules/noMultiAsterisks.js +1 -1
  45. package/dist/rules/noMultiAsterisks.js.map +1 -1
  46. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  47. package/dist/rules/noTypes.js +6 -3
  48. package/dist/rules/noTypes.js.map +1 -1
  49. package/dist/rules/noUndefinedTypes.js +14 -16
  50. package/dist/rules/noUndefinedTypes.js.map +1 -1
  51. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  52. package/dist/rules/requireDescription.js +10 -12
  53. package/dist/rules/requireDescription.js.map +1 -1
  54. package/dist/rules/requireDescriptionCompleteSentence.js +7 -8
  55. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  56. package/dist/rules/requireExample.js +7 -8
  57. package/dist/rules/requireExample.js.map +1 -1
  58. package/dist/rules/requireFileOverview.js.map +1 -1
  59. package/dist/rules/requireHyphenBeforeParamDescription.js +10 -7
  60. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  61. package/dist/rules/requireJsdoc.js +12 -9
  62. package/dist/rules/requireJsdoc.js.map +1 -1
  63. package/dist/rules/requireParam.js +35 -31
  64. package/dist/rules/requireParam.js.map +1 -1
  65. package/dist/rules/requireProperty.js +3 -3
  66. package/dist/rules/requireProperty.js.map +1 -1
  67. package/dist/rules/requireReturns.js +1 -1
  68. package/dist/rules/requireReturns.js.map +1 -1
  69. package/dist/rules/requireReturnsCheck.js.map +1 -1
  70. package/dist/rules/requireThrows.js +4 -5
  71. package/dist/rules/requireThrows.js.map +1 -1
  72. package/dist/rules/requireYields.js +2 -4
  73. package/dist/rules/requireYields.js.map +1 -1
  74. package/dist/rules/tagLines.js +11 -8
  75. package/dist/rules/tagLines.js.map +1 -1
  76. package/dist/rules/validTypes.js +15 -13
  77. package/dist/rules/validTypes.js.map +1 -1
  78. package/package.json +51 -48
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _lodash = _interopRequireDefault(require("lodash"));
9
-
10
8
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
11
9
 
12
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -27,7 +25,8 @@ const rootNamer = (desiredRoots, currentIndex) => {
27
25
  return [name, incremented, () => {
28
26
  return rootNamer(desiredRoots, idx);
29
27
  }];
30
- };
28
+ }; // eslint-disable-next-line complexity
29
+
31
30
 
32
31
  var _default = (0, _iterateJsdoc.default)(({
33
32
  jsdoc,
@@ -79,7 +78,7 @@ var _default = (0, _iterateJsdoc.default)(({
79
78
  const paramIndex = {};
80
79
 
81
80
  const hasParamIndex = cur => {
82
- return _lodash.default.has(paramIndex, utils.dropPathSegmentQuotes(String(cur)));
81
+ return utils.dropPathSegmentQuotes(String(cur)) in paramIndex;
83
82
  };
84
83
 
85
84
  const getParamIndex = cur => {
@@ -90,9 +89,9 @@ var _default = (0, _iterateJsdoc.default)(({
90
89
  paramIndex[utils.dropPathSegmentQuotes(String(cur))] = idx;
91
90
  };
92
91
 
93
- flattenedRoots.forEach((cur, idx) => {
92
+ for (const [idx, cur] of flattenedRoots.entries()) {
94
93
  setParamIndex(cur, idx);
95
- });
94
+ }
96
95
 
97
96
  const findExpectedIndex = (jsdocTags, indexAtFunctionParams) => {
98
97
  const remainingRoots = functionParameterNames.slice(indexAtFunctionParams || 0);
@@ -118,24 +117,27 @@ var _default = (0, _iterateJsdoc.default)(({
118
117
  return tag === preferredTagName;
119
118
  });
120
119
  let tagLineCount = 0;
121
- tags.forEach(({
120
+
121
+ for (const {
122
122
  source
123
- }) => {
124
- source.forEach(({
123
+ } of tags) {
124
+ for (const {
125
125
  tokens: {
126
126
  end
127
127
  }
128
- }) => {
128
+ } of source) {
129
129
  if (!end) {
130
130
  tagLineCount++;
131
131
  }
132
- });
133
- });
132
+ }
133
+ }
134
+
134
135
  return tagLineCount;
135
136
  };
136
137
 
137
138
  let [nextRootName, incremented, namer] = rootNamer([...unnamedRootBase], autoIncrementBase);
138
- functionParameterNames.forEach((functionParameterName, functionParameterIdx) => {
139
+
140
+ for (const [functionParameterIdx, functionParameterName] of functionParameterNames.entries()) {
139
141
  let inc;
140
142
 
141
143
  if (Array.isArray(functionParameterName)) {
@@ -148,7 +150,7 @@ var _default = (0, _iterateJsdoc.default)(({
148
150
  rootName = matchedJsdoc.name;
149
151
 
150
152
  if (matchedJsdoc.type && matchedJsdoc.type.search(checkTypesRegex) === -1) {
151
- return;
153
+ continue;
152
154
  }
153
155
  } else {
154
156
  rootName = nextRootName;
@@ -165,14 +167,14 @@ var _default = (0, _iterateJsdoc.default)(({
165
167
  const notCheckingNames = [];
166
168
 
167
169
  if (!enableRestElementFixer && hasRestElement) {
168
- return;
170
+ continue;
169
171
  }
170
172
 
171
173
  if (!checkDestructuredRoots) {
172
- return;
174
+ continue;
173
175
  }
174
176
 
175
- names.forEach((paramName, idx) => {
177
+ for (const [idx, paramName] of names.entries()) {
176
178
  // Add root if the root name is not in the docs (and is not already
177
179
  // in the tags to be fixed)
178
180
  if (!jsdocParameterNames.find(({
@@ -207,11 +209,11 @@ var _default = (0, _iterateJsdoc.default)(({
207
209
  }
208
210
 
209
211
  if (!checkDestructured) {
210
- return;
212
+ continue;
211
213
  }
212
214
 
213
215
  if (!checkRestProperty && rests[idx]) {
214
- return;
216
+ continue;
215
217
  }
216
218
 
217
219
  const fullParamName = `${rootName}.${paramName}`;
@@ -229,7 +231,7 @@ var _default = (0, _iterateJsdoc.default)(({
229
231
  if (notCheckingNames.find(name => {
230
232
  return fullParamName.startsWith(name);
231
233
  })) {
232
- return;
234
+ continue;
233
235
  }
234
236
 
235
237
  if (jsdocParameterNames && !jsdocParameterNames.find(({
@@ -244,8 +246,9 @@ var _default = (0, _iterateJsdoc.default)(({
244
246
  type: hasRestElement && !hasPropertyRest ? '{...any}' : undefined
245
247
  });
246
248
  }
247
- });
248
- return;
249
+ }
250
+
251
+ continue;
249
252
  }
250
253
 
251
254
  let funcParamName;
@@ -253,7 +256,7 @@ var _default = (0, _iterateJsdoc.default)(({
253
256
 
254
257
  if (typeof functionParameterName === 'object') {
255
258
  if (!enableRestElementFixer && functionParameterName.restElement) {
256
- return;
259
+ continue;
257
260
  }
258
261
 
259
262
  funcParamName = functionParameterName.name;
@@ -274,7 +277,7 @@ var _default = (0, _iterateJsdoc.default)(({
274
277
  type
275
278
  });
276
279
  }
277
- });
280
+ }
278
281
 
279
282
  const fix = ({
280
283
  functionParameterIdx,
@@ -316,9 +319,10 @@ var _default = (0, _iterateJsdoc.default)(({
316
319
  });
317
320
  const firstNumber = jsdoc.source[0].number;
318
321
  jsdoc.source.splice(sourceIndex, spliceCount, tokens);
319
- jsdoc.source.slice(sourceIndex).forEach((src, idx) => {
322
+
323
+ for (const [idx, src] of jsdoc.source.slice(sourceIndex).entries()) {
320
324
  src.number = firstNumber + sourceIndex + idx;
321
- });
325
+ }
322
326
  };
323
327
 
324
328
  const offset = jsdoc.source.findIndex(({
@@ -339,20 +343,20 @@ var _default = (0, _iterateJsdoc.default)(({
339
343
  };
340
344
 
341
345
  const fixer = () => {
342
- missingTags.forEach(missingTag => {
346
+ for (const missingTag of missingTags) {
343
347
  fix(missingTag);
344
- });
348
+ }
345
349
  };
346
350
 
347
351
  if (missingTags.length && jsdoc.source.length === 1) {
348
352
  utils.makeMultiline();
349
353
  }
350
354
 
351
- missingTags.forEach(({
355
+ for (const {
352
356
  functionParameterName
353
- }) => {
357
+ } of missingTags) {
354
358
  utils.reportJSDoc(`Missing JSDoc @${preferredTagName} "${functionParameterName}" declaration.`, null, enableFixer ? fixer : null);
355
- });
359
+ }
356
360
  }, {
357
361
  contextDefaults: true,
358
362
  meta: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/requireParam.js"],"names":["rootNamer","desiredRoots","currentIndex","name","idx","incremented","length","base","suffix","shift","jsdoc","utils","context","preferredTagName","getPreferredTagName","tagName","jsdocParameterNames","getJsdocTagsDeep","shallowJsdocParameterNames","filter","tag","includes","map","avoidDocs","hasTag","autoIncrementBase","checkRestProperty","checkDestructured","checkDestructuredRoots","checkTypesPattern","enableFixer","enableRootFixer","enableRestElementFixer","unnamedRootBase","useDefaultObjectProperties","options","checkTypesRegex","getRegexFromString","missingTags","functionParameterNames","getFunctionParameterNames","flattenedRoots","flattenRoots","names","paramIndex","hasParamIndex","cur","_","has","dropPathSegmentQuotes","String","getParamIndex","setParamIndex","forEach","findExpectedIndex","jsdocTags","indexAtFunctionParams","remainingRoots","slice","foundIndex","findIndex","newAdd","some","remainingRoot","Array","isArray","tags","tagLineCount","source","tokens","end","nextRootName","namer","functionParameterName","functionParameterIdx","inc","matchedJsdoc","rootName","type","search","hasRestElement","hasPropertyRest","rests","notCheckingNames","paramName","find","fpn","emptyParamIdx","push","remove","fullParamName","notCheckingName","paramType","comparePaths","undefined","startsWith","funcParamName","restElement","fix","createTokens","tagIndex","sourceIndex","spliceCount","number","delimiter","description","lineEnd","postDelimiter","postName","postTag","postType","start","splice","firstNumber","src","offset","expectedIdx","fixer","missingTag","makeMultiline","reportJSDoc","contextDefaults","meta","docs","url","fixable","schema","additionalProperties","properties","default","checkConstructors","checkGetters","checkSetters","contexts","items","anyOf","comment","exemptedBy"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\ntype T = [string, () => T];\nconst rootNamer = (desiredRoots: string[], currentIndex: number): T => {\n let name;\n let idx = currentIndex;\n const incremented = desiredRoots.length <= 1;\n if (incremented) {\n const base = desiredRoots[0];\n const suffix = idx++;\n name = `${base}${suffix}`;\n } else {\n name = desiredRoots.shift();\n }\n\n return [name, incremented, () => {\n return rootNamer(desiredRoots, idx);\n }];\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n utils,\n context,\n}) => {\n const preferredTagName = utils.getPreferredTagName({tagName: 'param'});\n if (!preferredTagName) {\n return;\n }\n const jsdocParameterNames = utils.getJsdocTagsDeep(preferredTagName);\n\n const shallowJsdocParameterNames = jsdocParameterNames.filter((tag) => {\n return !tag.name.includes('.');\n }).map((tag, idx) => {\n return {...tag,\n idx};\n });\n\n if (utils.avoidDocs()) {\n return;\n }\n\n // Param type is specified by type in @type\n if (utils.hasTag('type')) {\n return;\n }\n\n const {\n autoIncrementBase = 0,\n checkRestProperty = false,\n checkDestructured = true,\n checkDestructuredRoots = true,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = true,\n enableRootFixer = true,\n enableRestElementFixer = true,\n unnamedRootBase = ['root'],\n useDefaultObjectProperties = false,\n } = context.options[0] || {};\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const missingTags = [];\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n const flattenedRoots = utils.flattenRoots(functionParameterNames).names;\n\n const paramIndex = {};\n const hasParamIndex = (cur) => {\n return _.has(paramIndex, utils.dropPathSegmentQuotes(String(cur)));\n };\n const getParamIndex = (cur) => {\n return paramIndex[utils.dropPathSegmentQuotes(String(cur))];\n };\n const setParamIndex = (cur, idx) => {\n paramIndex[utils.dropPathSegmentQuotes(String(cur))] = idx;\n };\n flattenedRoots.forEach((cur, idx) => {\n setParamIndex(cur, idx);\n });\n\n const findExpectedIndex = (jsdocTags, indexAtFunctionParams) => {\n const remainingRoots = functionParameterNames.slice(indexAtFunctionParams || 0);\n const foundIndex = jsdocTags.findIndex(({name, newAdd}) => {\n return !newAdd && remainingRoots.some((remainingRoot) => {\n if (Array.isArray(remainingRoot)) {\n return remainingRoot[1].names.includes(name);\n }\n if (typeof remainingRoot === 'object') {\n return name === remainingRoot.name;\n }\n\n return name === remainingRoot;\n });\n });\n\n const tags = foundIndex > -1 ?\n jsdocTags.slice(0, foundIndex) :\n jsdocTags.filter(({tag}) => {\n return tag === preferredTagName;\n });\n\n let tagLineCount = 0;\n tags.forEach(({source}) => {\n source.forEach(({tokens: {end}}) => {\n if (!end) {\n tagLineCount++;\n }\n });\n });\n\n return tagLineCount;\n };\n\n let [nextRootName, incremented, namer] = rootNamer([...unnamedRootBase], autoIncrementBase);\n\n functionParameterNames.forEach((functionParameterName, functionParameterIdx) => {\n let inc;\n if (Array.isArray(functionParameterName)) {\n const matchedJsdoc = shallowJsdocParameterNames[functionParameterIdx] ||\n jsdocParameterNames[functionParameterIdx];\n\n let rootName;\n if (functionParameterName[0]) {\n rootName = functionParameterName[0];\n } else if (matchedJsdoc && matchedJsdoc.name) {\n rootName = matchedJsdoc.name;\n if (matchedJsdoc.type && matchedJsdoc.type.search(checkTypesRegex) === -1) {\n return;\n }\n } else {\n rootName = nextRootName;\n inc = incremented;\n [nextRootName, incremented, namer] = namer();\n }\n\n const {hasRestElement, hasPropertyRest, rests, names} = functionParameterName[1];\n const notCheckingNames = [];\n if (!enableRestElementFixer && hasRestElement) {\n return;\n }\n\n if (!checkDestructuredRoots) {\n return;\n }\n\n names.forEach((paramName, idx) => {\n // Add root if the root name is not in the docs (and is not already\n // in the tags to be fixed)\n if (!jsdocParameterNames.find(({name}) => {\n return name === rootName;\n }) && !missingTags.find(({functionParameterName: fpn}) => {\n return fpn === rootName;\n })) {\n const emptyParamIdx = jsdocParameterNames.findIndex(({name}) => {\n return !name;\n });\n\n if (emptyParamIdx > -1) {\n missingTags.push({\n functionParameterIdx: emptyParamIdx,\n functionParameterName: rootName,\n inc,\n remove: true,\n });\n } else {\n missingTags.push({\n functionParameterIdx: hasParamIndex(rootName) ?\n getParamIndex(rootName) :\n getParamIndex(paramName),\n functionParameterName: rootName,\n inc,\n });\n }\n }\n\n if (!checkDestructured) {\n return;\n }\n\n if (!checkRestProperty && rests[idx]) {\n return;\n }\n\n const fullParamName = `${rootName}.${paramName}`;\n\n const notCheckingName = jsdocParameterNames.find(({name, type: paramType}) => {\n return utils.comparePaths(name)(fullParamName) && paramType.search(checkTypesRegex) === -1 && paramType !== '';\n });\n\n if (notCheckingName !== undefined) {\n notCheckingNames.push(notCheckingName.name);\n }\n\n if (notCheckingNames.find((name) => {\n return fullParamName.startsWith(name);\n })) {\n return;\n }\n\n if (jsdocParameterNames && !jsdocParameterNames.find(({name}) => {\n return utils.comparePaths(name)(fullParamName);\n })) {\n missingTags.push({\n functionParameterIdx: getParamIndex(\n functionParameterName[0] ? fullParamName : paramName,\n ),\n functionParameterName: fullParamName,\n inc,\n type: hasRestElement && !hasPropertyRest ? '{...any}' : undefined,\n });\n }\n });\n\n return;\n }\n let funcParamName;\n let type;\n if (typeof functionParameterName === 'object') {\n if (!enableRestElementFixer && functionParameterName.restElement) {\n return;\n }\n funcParamName = functionParameterName.name;\n type = '{...any}';\n } else {\n funcParamName = functionParameterName;\n }\n\n if (jsdocParameterNames && !jsdocParameterNames.find(({name}) => {\n return name === funcParamName;\n })) {\n missingTags.push({\n functionParameterIdx: getParamIndex(funcParamName),\n functionParameterName: funcParamName,\n inc,\n type,\n });\n }\n });\n\n const fix = ({\n functionParameterIdx, functionParameterName, remove, inc, type,\n }) => {\n if (inc && !enableRootFixer) {\n return;\n }\n const createTokens = (tagIndex, sourceIndex, spliceCount) => {\n // console.log(sourceIndex, tagIndex, jsdoc.tags, jsdoc.source);\n const tokens = {\n number: sourceIndex + 1,\n tokens: {\n delimiter: '*',\n description: '',\n end: '',\n lineEnd: '',\n name: functionParameterName,\n newAdd: true,\n postDelimiter: ' ',\n postName: '',\n postTag: ' ',\n postType: type ? ' ' : '',\n start: jsdoc.source[sourceIndex].tokens.start,\n tag: `@${preferredTagName}`,\n type: type ?? '',\n },\n };\n jsdoc.tags.splice(tagIndex, spliceCount, {\n name: functionParameterName,\n newAdd: true,\n source: [tokens],\n tag: preferredTagName,\n type: type ?? '',\n });\n const firstNumber = jsdoc.source[0].number;\n jsdoc.source.splice(sourceIndex, spliceCount, tokens);\n jsdoc.source.slice(sourceIndex).forEach((src, idx) => {\n src.number = firstNumber + sourceIndex + idx;\n });\n };\n const offset = jsdoc.source.findIndex(({tokens: {tag, end}}) => {\n return tag || end;\n });\n if (remove) {\n createTokens(functionParameterIdx, offset + functionParameterIdx, 1);\n } else {\n const expectedIdx = findExpectedIndex(jsdoc.tags, functionParameterIdx);\n createTokens(expectedIdx, offset + expectedIdx, 0);\n }\n };\n\n const fixer = () => {\n missingTags.forEach((missingTag) => {\n fix(missingTag);\n });\n };\n\n if (missingTags.length && jsdoc.source.length === 1) {\n utils.makeMultiline();\n }\n missingTags.forEach(({functionParameterName}) => {\n utils.reportJSDoc(\n `Missing JSDoc @${preferredTagName} \"${functionParameterName}\" declaration.`,\n null,\n enableFixer ? fixer : null,\n );\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all function parameters are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n autoIncrementBase: {\n default: 0,\n type: 'integer',\n },\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkDestructured: {\n default: true,\n type: 'boolean',\n },\n checkDestructuredRoots: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n default: false,\n type: 'boolean',\n },\n checkRestProperty: {\n default: false,\n type: 'boolean',\n },\n checkSetters: {\n default: false,\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n type: 'boolean',\n },\n enableRestElementFixer: {\n type: 'boolean',\n },\n enableRootFixer: {\n type: 'boolean',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n unnamedRootBase: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireParam.js"}
1
+ {"version":3,"sources":["../../src/rules/requireParam.js"],"names":["rootNamer","desiredRoots","currentIndex","name","idx","incremented","length","base","suffix","shift","jsdoc","utils","context","preferredTagName","getPreferredTagName","tagName","jsdocParameterNames","getJsdocTagsDeep","shallowJsdocParameterNames","filter","tag","includes","map","avoidDocs","hasTag","autoIncrementBase","checkRestProperty","checkDestructured","checkDestructuredRoots","checkTypesPattern","enableFixer","enableRootFixer","enableRestElementFixer","unnamedRootBase","useDefaultObjectProperties","options","checkTypesRegex","getRegexFromString","missingTags","functionParameterNames","getFunctionParameterNames","flattenedRoots","flattenRoots","names","paramIndex","hasParamIndex","cur","dropPathSegmentQuotes","String","getParamIndex","setParamIndex","entries","findExpectedIndex","jsdocTags","indexAtFunctionParams","remainingRoots","slice","foundIndex","findIndex","newAdd","some","remainingRoot","Array","isArray","tags","tagLineCount","source","tokens","end","nextRootName","namer","functionParameterIdx","functionParameterName","inc","matchedJsdoc","rootName","type","search","hasRestElement","hasPropertyRest","rests","notCheckingNames","paramName","find","fpn","emptyParamIdx","push","remove","fullParamName","notCheckingName","paramType","comparePaths","undefined","startsWith","funcParamName","restElement","fix","createTokens","tagIndex","sourceIndex","spliceCount","number","delimiter","description","lineEnd","postDelimiter","postName","postTag","postType","start","splice","firstNumber","src","offset","expectedIdx","fixer","missingTag","makeMultiline","reportJSDoc","contextDefaults","meta","docs","url","fixable","schema","additionalProperties","properties","default","checkConstructors","checkGetters","checkSetters","contexts","items","anyOf","comment","exemptedBy"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\ntype T = [string, () => T];\nconst rootNamer = (desiredRoots: string[], currentIndex: number): T => {\n let name;\n let idx = currentIndex;\n const incremented = desiredRoots.length <= 1;\n if (incremented) {\n const base = desiredRoots[0];\n const suffix = idx++;\n name = `${base}${suffix}`;\n } else {\n name = desiredRoots.shift();\n }\n\n return [name, incremented, () => {\n return rootNamer(desiredRoots, idx);\n }];\n};\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n jsdoc,\n utils,\n context,\n}) => {\n const preferredTagName = utils.getPreferredTagName({tagName: 'param'});\n if (!preferredTagName) {\n return;\n }\n\n const jsdocParameterNames = utils.getJsdocTagsDeep(preferredTagName);\n\n const shallowJsdocParameterNames = jsdocParameterNames.filter((tag) => {\n return !tag.name.includes('.');\n }).map((tag, idx) => {\n return {...tag,\n idx};\n });\n\n if (utils.avoidDocs()) {\n return;\n }\n\n // Param type is specified by type in @type\n if (utils.hasTag('type')) {\n return;\n }\n\n const {\n autoIncrementBase = 0,\n checkRestProperty = false,\n checkDestructured = true,\n checkDestructuredRoots = true,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = true,\n enableRootFixer = true,\n enableRestElementFixer = true,\n unnamedRootBase = ['root'],\n useDefaultObjectProperties = false,\n } = context.options[0] || {};\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const missingTags = [];\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n const flattenedRoots = utils.flattenRoots(functionParameterNames).names;\n\n const paramIndex = {};\n const hasParamIndex = (cur) => {\n return utils.dropPathSegmentQuotes(String(cur)) in paramIndex;\n };\n\n const getParamIndex = (cur) => {\n return paramIndex[utils.dropPathSegmentQuotes(String(cur))];\n };\n\n const setParamIndex = (cur, idx) => {\n paramIndex[utils.dropPathSegmentQuotes(String(cur))] = idx;\n };\n\n for (const [idx, cur] of flattenedRoots.entries()) {\n setParamIndex(cur, idx);\n }\n\n const findExpectedIndex = (jsdocTags, indexAtFunctionParams) => {\n const remainingRoots = functionParameterNames.slice(indexAtFunctionParams || 0);\n const foundIndex = jsdocTags.findIndex(({name, newAdd}) => {\n return !newAdd && remainingRoots.some((remainingRoot) => {\n if (Array.isArray(remainingRoot)) {\n return remainingRoot[1].names.includes(name);\n }\n\n if (typeof remainingRoot === 'object') {\n return name === remainingRoot.name;\n }\n\n return name === remainingRoot;\n });\n });\n\n const tags = foundIndex > -1 ?\n jsdocTags.slice(0, foundIndex) :\n jsdocTags.filter(({tag}) => {\n return tag === preferredTagName;\n });\n\n let tagLineCount = 0;\n for (const {source} of tags) {\n for (const {tokens: {end}} of source) {\n if (!end) {\n tagLineCount++;\n }\n }\n }\n\n return tagLineCount;\n };\n\n let [nextRootName, incremented, namer] = rootNamer([...unnamedRootBase], autoIncrementBase);\n\n for (const [functionParameterIdx, functionParameterName] of functionParameterNames.entries()) {\n let inc;\n if (Array.isArray(functionParameterName)) {\n const matchedJsdoc = shallowJsdocParameterNames[functionParameterIdx] ||\n jsdocParameterNames[functionParameterIdx];\n\n let rootName;\n if (functionParameterName[0]) {\n rootName = functionParameterName[0];\n } else if (matchedJsdoc && matchedJsdoc.name) {\n rootName = matchedJsdoc.name;\n if (matchedJsdoc.type && matchedJsdoc.type.search(checkTypesRegex) === -1) {\n continue;\n }\n } else {\n rootName = nextRootName;\n inc = incremented;\n [nextRootName, incremented, namer] = namer();\n }\n\n const {hasRestElement, hasPropertyRest, rests, names} = functionParameterName[1];\n const notCheckingNames = [];\n if (!enableRestElementFixer && hasRestElement) {\n continue;\n }\n\n if (!checkDestructuredRoots) {\n continue;\n }\n\n for (const [idx, paramName] of names.entries()) {\n // Add root if the root name is not in the docs (and is not already\n // in the tags to be fixed)\n if (!jsdocParameterNames.find(({name}) => {\n return name === rootName;\n }) && !missingTags.find(({functionParameterName: fpn}) => {\n return fpn === rootName;\n })) {\n const emptyParamIdx = jsdocParameterNames.findIndex(({name}) => {\n return !name;\n });\n\n if (emptyParamIdx > -1) {\n missingTags.push({\n functionParameterIdx: emptyParamIdx,\n functionParameterName: rootName,\n inc,\n remove: true,\n });\n } else {\n missingTags.push({\n functionParameterIdx: hasParamIndex(rootName) ?\n getParamIndex(rootName) :\n getParamIndex(paramName),\n functionParameterName: rootName,\n inc,\n });\n }\n }\n\n if (!checkDestructured) {\n continue;\n }\n\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const fullParamName = `${rootName}.${paramName}`;\n\n const notCheckingName = jsdocParameterNames.find(({name, type: paramType}) => {\n return utils.comparePaths(name)(fullParamName) && paramType.search(checkTypesRegex) === -1 && paramType !== '';\n });\n\n if (notCheckingName !== undefined) {\n notCheckingNames.push(notCheckingName.name);\n }\n\n if (notCheckingNames.find((name) => {\n return fullParamName.startsWith(name);\n })) {\n continue;\n }\n\n if (jsdocParameterNames && !jsdocParameterNames.find(({name}) => {\n return utils.comparePaths(name)(fullParamName);\n })) {\n missingTags.push({\n functionParameterIdx: getParamIndex(\n functionParameterName[0] ? fullParamName : paramName,\n ),\n functionParameterName: fullParamName,\n inc,\n type: hasRestElement && !hasPropertyRest ? '{...any}' : undefined,\n });\n }\n }\n\n continue;\n }\n\n let funcParamName;\n let type;\n if (typeof functionParameterName === 'object') {\n if (!enableRestElementFixer && functionParameterName.restElement) {\n continue;\n }\n\n funcParamName = functionParameterName.name;\n type = '{...any}';\n } else {\n funcParamName = functionParameterName;\n }\n\n if (jsdocParameterNames && !jsdocParameterNames.find(({name}) => {\n return name === funcParamName;\n })) {\n missingTags.push({\n functionParameterIdx: getParamIndex(funcParamName),\n functionParameterName: funcParamName,\n inc,\n type,\n });\n }\n }\n\n const fix = ({\n functionParameterIdx, functionParameterName, remove, inc, type,\n }) => {\n if (inc && !enableRootFixer) {\n return;\n }\n\n const createTokens = (tagIndex, sourceIndex, spliceCount) => {\n // console.log(sourceIndex, tagIndex, jsdoc.tags, jsdoc.source);\n const tokens = {\n number: sourceIndex + 1,\n tokens: {\n delimiter: '*',\n description: '',\n end: '',\n lineEnd: '',\n name: functionParameterName,\n newAdd: true,\n postDelimiter: ' ',\n postName: '',\n postTag: ' ',\n postType: type ? ' ' : '',\n start: jsdoc.source[sourceIndex].tokens.start,\n tag: `@${preferredTagName}`,\n type: type ?? '',\n },\n };\n jsdoc.tags.splice(tagIndex, spliceCount, {\n name: functionParameterName,\n newAdd: true,\n source: [tokens],\n tag: preferredTagName,\n type: type ?? '',\n });\n const firstNumber = jsdoc.source[0].number;\n jsdoc.source.splice(sourceIndex, spliceCount, tokens);\n for (const [idx, src] of jsdoc.source.slice(sourceIndex).entries()) {\n src.number = firstNumber + sourceIndex + idx;\n }\n };\n\n const offset = jsdoc.source.findIndex(({tokens: {tag, end}}) => {\n return tag || end;\n });\n if (remove) {\n createTokens(functionParameterIdx, offset + functionParameterIdx, 1);\n } else {\n const expectedIdx = findExpectedIndex(jsdoc.tags, functionParameterIdx);\n createTokens(expectedIdx, offset + expectedIdx, 0);\n }\n };\n\n const fixer = () => {\n for (const missingTag of missingTags) {\n fix(missingTag);\n }\n };\n\n if (missingTags.length && jsdoc.source.length === 1) {\n utils.makeMultiline();\n }\n\n for (const {functionParameterName} of missingTags) {\n utils.reportJSDoc(\n `Missing JSDoc @${preferredTagName} \"${functionParameterName}\" declaration.`,\n null,\n enableFixer ? fixer : null,\n );\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all function parameters are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n autoIncrementBase: {\n default: 0,\n type: 'integer',\n },\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkDestructured: {\n default: true,\n type: 'boolean',\n },\n checkDestructuredRoots: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n default: false,\n type: 'boolean',\n },\n checkRestProperty: {\n default: false,\n type: 'boolean',\n },\n checkSetters: {\n default: false,\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n type: 'boolean',\n },\n enableRestElementFixer: {\n type: 'boolean',\n },\n enableRootFixer: {\n type: 'boolean',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n unnamedRootBase: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireParam.js"}
@@ -30,15 +30,15 @@ var _default = (0, _iterateJsdoc.default)(({
30
30
  return;
31
31
  }
32
32
 
33
- propertyAssociatedTags.forEach(propertyAssociatedTag => {
33
+ for (const propertyAssociatedTag of propertyAssociatedTags) {
34
34
  if (!['object', 'Object', 'PlainObject'].includes(propertyAssociatedTag.type)) {
35
- return;
35
+ continue;
36
36
  }
37
37
 
38
38
  utils.reportJSDoc(`Missing JSDoc @${targetTagName}.`, null, () => {
39
39
  utils.addTag(targetTagName);
40
40
  });
41
- });
41
+ }
42
42
  }, {
43
43
  iterateAllJsdocs: true,
44
44
  meta: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/requireProperty.js"],"names":["utils","propertyAssociatedTags","filterTags","tag","includes","length","targetTagName","getPreferredTagName","tagName","hasATag","forEach","propertyAssociatedTag","type","reportJSDoc","addTag","iterateAllJsdocs","meta","docs","description","url","fixable"],"mappings":";;;;;;;AAAA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA;AAD2B,CAAD,KAEtB;AACJ,QAAMC,sBAAsB,GAAGD,KAAK,CAACE,UAAN,CAAiB,CAAC;AAACC,IAAAA;AAAD,GAAD,KAAW;AACzD,WAAO,CAAC,SAAD,EAAY,WAAZ,EAAyBC,QAAzB,CAAkCD,GAAlC,CAAP;AACD,GAF8B,CAA/B;;AAGA,MAAI,CAACF,sBAAsB,CAACI,MAA5B,EAAoC;AAClC;AACD;;AACD,QAAMC,aAAa,GAAGN,KAAK,CAACO,mBAAN,CAA0B;AAACC,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAtB;;AAEA,MAAIR,KAAK,CAACS,OAAN,CAAc,CAACH,aAAD,CAAd,CAAJ,EAAoC;AAClC;AACD;;AAEDL,EAAAA,sBAAsB,CAACS,OAAvB,CAAgCC,qBAAD,IAA2B;AACxD,QAAI,CAAC,CAAC,QAAD,EAAW,QAAX,EAAqB,aAArB,EAAoCP,QAApC,CAA6CO,qBAAqB,CAACC,IAAnE,CAAL,EAA+E;AAC7E;AACD;;AACDZ,IAAAA,KAAK,CAACa,WAAN,CAAmB,kBAAiBP,aAAc,GAAlD,EAAsD,IAAtD,EAA4D,MAAM;AAChEN,MAAAA,KAAK,CAACc,MAAN,CAAaR,aAAb;AACD,KAFD;AAGD,GAPD;AAQD,CAvBc,EAuBZ;AACDS,EAAAA,gBAAgB,EAAE,IADjB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,sIADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,MALL;AAMJR,IAAAA,IAAI,EAAE;AANF;AAFL,CAvBY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n utils,\n}) => {\n const propertyAssociatedTags = utils.filterTags(({tag}) => {\n return ['typedef', 'namespace'].includes(tag);\n });\n if (!propertyAssociatedTags.length) {\n return;\n }\n const targetTagName = utils.getPreferredTagName({tagName: 'property'});\n\n if (utils.hasATag([targetTagName])) {\n return;\n }\n\n propertyAssociatedTags.forEach((propertyAssociatedTag) => {\n if (!['object', 'Object', 'PlainObject'].includes(propertyAssociatedTag.type)) {\n return;\n }\n utils.reportJSDoc(`Missing JSDoc @${targetTagName}.`, null, () => {\n utils.addTag(targetTagName);\n });\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires that all `@typedef` and `@namespace` tags have `@property` when their type is a plain `object`, `Object`, or `PlainObject`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-property',\n },\n fixable: 'code',\n type: 'suggestion',\n },\n});\n"],"file":"requireProperty.js"}
1
+ {"version":3,"sources":["../../src/rules/requireProperty.js"],"names":["utils","propertyAssociatedTags","filterTags","tag","includes","length","targetTagName","getPreferredTagName","tagName","hasATag","propertyAssociatedTag","type","reportJSDoc","addTag","iterateAllJsdocs","meta","docs","description","url","fixable"],"mappings":";;;;;;;AAAA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA;AAD2B,CAAD,KAEtB;AACJ,QAAMC,sBAAsB,GAAGD,KAAK,CAACE,UAAN,CAAiB,CAAC;AAACC,IAAAA;AAAD,GAAD,KAAW;AACzD,WAAO,CAAC,SAAD,EAAY,WAAZ,EAAyBC,QAAzB,CAAkCD,GAAlC,CAAP;AACD,GAF8B,CAA/B;;AAGA,MAAI,CAACF,sBAAsB,CAACI,MAA5B,EAAoC;AAClC;AACD;;AAED,QAAMC,aAAa,GAAGN,KAAK,CAACO,mBAAN,CAA0B;AAACC,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAtB;;AAEA,MAAIR,KAAK,CAACS,OAAN,CAAc,CAACH,aAAD,CAAd,CAAJ,EAAoC;AAClC;AACD;;AAED,OAAK,MAAMI,qBAAX,IAAoCT,sBAApC,EAA4D;AAC1D,QAAI,CAAC,CAAC,QAAD,EAAW,QAAX,EAAqB,aAArB,EAAoCG,QAApC,CAA6CM,qBAAqB,CAACC,IAAnE,CAAL,EAA+E;AAC7E;AACD;;AAEDX,IAAAA,KAAK,CAACY,WAAN,CAAmB,kBAAiBN,aAAc,GAAlD,EAAsD,IAAtD,EAA4D,MAAM;AAChEN,MAAAA,KAAK,CAACa,MAAN,CAAaP,aAAb;AACD,KAFD;AAGD;AACF,CAzBc,EAyBZ;AACDQ,EAAAA,gBAAgB,EAAE,IADjB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,sIADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,MALL;AAMJR,IAAAA,IAAI,EAAE;AANF;AAFL,CAzBY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n utils,\n}) => {\n const propertyAssociatedTags = utils.filterTags(({tag}) => {\n return ['typedef', 'namespace'].includes(tag);\n });\n if (!propertyAssociatedTags.length) {\n return;\n }\n\n const targetTagName = utils.getPreferredTagName({tagName: 'property'});\n\n if (utils.hasATag([targetTagName])) {\n return;\n }\n\n for (const propertyAssociatedTag of propertyAssociatedTags) {\n if (!['object', 'Object', 'PlainObject'].includes(propertyAssociatedTag.type)) {\n continue;\n }\n\n utils.reportJSDoc(`Missing JSDoc @${targetTagName}.`, null, () => {\n utils.addTag(targetTagName);\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires that all `@typedef` and `@namespace` tags have `@property` when their type is a plain `object`, `Object`, or `PlainObject`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-property',\n },\n fixable: 'code',\n type: 'suggestion',\n },\n});\n"],"file":"requireProperty.js"}
@@ -92,7 +92,7 @@ var _default = (0, _iterateJsdoc.default)(({
92
92
  contextDefaults: true,
93
93
  meta: {
94
94
  docs: {
95
- description: 'Requires returns are documented.',
95
+ description: 'Requires that returns are documented.',
96
96
  url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns'
97
97
  },
98
98
  schema: [{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/requireReturns.js"],"names":["canSkip","utils","hasATag","avoidDocs","report","context","forceRequireReturn","forceReturnsWithAsync","options","tagName","getPreferredTagName","tags","getTags","length","iteratingFunction","isIteratingFunction","tag","missingReturnTag","shouldReport","isVirtualFunction","isAsync","hasTag","hasValueOrExecutorHasNonEmptyResolveValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","checkConstructors","default","type","checkGetters","contexts","items","anyOf","comment","exemptedBy"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * We can skip checking for a return value, in case the documentation is inherited\n * or the method is either a constructor or an abstract method.\n *\n * In either of these cases the return value is optional or not defined.\n *\n * @param {*} utils\n * a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean}\n * true in case deep checking can be skipped; otherwise false.\n */\nconst canSkip = (utils) => {\n return utils.hasATag([\n // inheritdoc implies that all documentation is inherited\n // see https://jsdoc.app/tags-inheritdoc.html\n //\n // Abstract methods are by definition incomplete,\n // so it is not an error if it declares a return value but does not implement it.\n 'abstract',\n 'virtual',\n\n // Constructors do not have a return value by definition (https://jsdoc.app/tags-class.html)\n // So we can bail out here, too.\n 'class',\n 'constructor',\n\n // Return type is specified by type in @type\n 'type',\n\n // This seems to imply a class as well\n 'interface',\n ]) ||\n utils.avoidDocs();\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n context,\n}) => {\n const {\n forceRequireReturn = false,\n forceReturnsWithAsync = false,\n } = context.options[0] || {};\n\n // A preflight check. We do not need to run a deep check\n // in case the @returns comment is optional or undefined.\n if (canSkip(utils)) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'returns'});\n if (!tagName) {\n return;\n }\n const tags = utils.getTags(tagName);\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n }\n\n const iteratingFunction = utils.isIteratingFunction();\n\n // In case the code returns something, we expect a return value in JSDoc.\n const [tag] = tags;\n const missingReturnTag = typeof tag === 'undefined' || tag === null;\n\n const shouldReport = () => {\n if (!missingReturnTag) {\n return false;\n }\n\n if (forceRequireReturn && (\n iteratingFunction || utils.isVirtualFunction()\n )) {\n return true;\n }\n\n const isAsync = !iteratingFunction && utils.hasTag('async') ||\n iteratingFunction && utils.isAsync();\n\n if (forceReturnsWithAsync && isAsync) {\n return true;\n }\n\n return iteratingFunction && utils.hasValueOrExecutorHasNonEmptyResolveValue(\n forceReturnsWithAsync,\n );\n };\n\n if (shouldReport()) {\n report(`Missing JSDoc @${tagName} declaration.`);\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires returns are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: false,\n type: 'boolean',\n },\n checkGetters: {\n default: true,\n type: 'boolean',\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n forceRequireReturn: {\n default: false,\n type: 'boolean',\n },\n forceReturnsWithAsync: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireReturns.js"}
1
+ {"version":3,"sources":["../../src/rules/requireReturns.js"],"names":["canSkip","utils","hasATag","avoidDocs","report","context","forceRequireReturn","forceReturnsWithAsync","options","tagName","getPreferredTagName","tags","getTags","length","iteratingFunction","isIteratingFunction","tag","missingReturnTag","shouldReport","isVirtualFunction","isAsync","hasTag","hasValueOrExecutorHasNonEmptyResolveValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","checkConstructors","default","type","checkGetters","contexts","items","anyOf","comment","exemptedBy"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * We can skip checking for a return value, in case the documentation is inherited\n * or the method is either a constructor or an abstract method.\n *\n * In either of these cases the return value is optional or not defined.\n *\n * @param {*} utils\n * a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean}\n * true in case deep checking can be skipped; otherwise false.\n */\nconst canSkip = (utils) => {\n return utils.hasATag([\n // inheritdoc implies that all documentation is inherited\n // see https://jsdoc.app/tags-inheritdoc.html\n //\n // Abstract methods are by definition incomplete,\n // so it is not an error if it declares a return value but does not implement it.\n 'abstract',\n 'virtual',\n\n // Constructors do not have a return value by definition (https://jsdoc.app/tags-class.html)\n // So we can bail out here, too.\n 'class',\n 'constructor',\n\n // Return type is specified by type in @type\n 'type',\n\n // This seems to imply a class as well\n 'interface',\n ]) ||\n utils.avoidDocs();\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n context,\n}) => {\n const {\n forceRequireReturn = false,\n forceReturnsWithAsync = false,\n } = context.options[0] || {};\n\n // A preflight check. We do not need to run a deep check\n // in case the @returns comment is optional or undefined.\n if (canSkip(utils)) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'returns'});\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n }\n\n const iteratingFunction = utils.isIteratingFunction();\n\n // In case the code returns something, we expect a return value in JSDoc.\n const [tag] = tags;\n const missingReturnTag = typeof tag === 'undefined' || tag === null;\n\n const shouldReport = () => {\n if (!missingReturnTag) {\n return false;\n }\n\n if (forceRequireReturn && (\n iteratingFunction || utils.isVirtualFunction()\n )) {\n return true;\n }\n\n const isAsync = !iteratingFunction && utils.hasTag('async') ||\n iteratingFunction && utils.isAsync();\n\n if (forceReturnsWithAsync && isAsync) {\n return true;\n }\n\n return iteratingFunction && utils.hasValueOrExecutorHasNonEmptyResolveValue(\n forceReturnsWithAsync,\n );\n };\n\n if (shouldReport()) {\n report(`Missing JSDoc @${tagName} declaration.`);\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that returns are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: false,\n type: 'boolean',\n },\n checkGetters: {\n default: true,\n type: 'boolean',\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n forceRequireReturn: {\n default: false,\n type: 'boolean',\n },\n forceReturnsWithAsync: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireReturns.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/requireReturnsCheck.js"],"names":["canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","context","node","report","exemptAsync","exemptGenerators","reportMissingReturnForUndefinedTypes","options","isAsync","tagName","getPreferredTagName","tags","getTags","length","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","generator","meta","docs","description","url","schema","additionalProperties","properties","default","type"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,OAAO,GAAG,CAACC,KAAD,EAAQC,QAAR,KAAqB;AACnC,QAAMC,WAAW,GAAG,CAClB;AACA;AACA;AACA;AACA;AACA,YANkB,EAOlB,SAPkB,EASlB;AACA;AACA,SAXkB,EAYlB,aAZkB,EAalB,WAbkB,CAApB;;AAgBA,MAAID,QAAQ,CAACE,IAAT,KAAkB,SAAtB,EAAiC;AAC/B;AACAD,IAAAA,WAAW,CAACE,IAAZ,CAAiB,QAAjB;AACD;;AAED,SAAOJ,KAAK,CAACK,OAAN,CAAcH,WAAd,KACLF,KAAK,CAACM,aAAN,EADK,IAELN,KAAK,CAACO,WAAN,CAAkB,WAAlB,CAFK,IAGLN,QAAQ,CAACE,IAAT,KAAkB,SAAlB,IAA+BH,KAAK,CAACO,WAAN,CAAkB,QAAlB,CAHjC;AAID,CA1BD;;eA4Be,2BAAa,CAAC;AAC3BC,EAAAA,OAD2B;AAE3BC,EAAAA,IAF2B;AAG3BC,EAAAA,MAH2B;AAI3BT,EAAAA,QAJ2B;AAK3BD,EAAAA;AAL2B,CAAD,KAMtB;AACJ,QAAM;AACJW,IAAAA,WAAW,GAAG,IADV;AAEJC,IAAAA,gBAAgB,GAAGX,QAAQ,CAACE,IAAT,KAAkB,YAFjC;AAGJU,IAAAA,oCAAoC,GAAG;AAHnC,MAIFL,OAAO,CAACM,OAAR,CAAgB,CAAhB,KAAsB,EAJ1B;;AAMA,MAAIf,OAAO,CAACC,KAAD,EAAQC,QAAR,CAAX,EAA8B;AAC5B;AACD;;AAED,MAAIU,WAAW,IAAIX,KAAK,CAACe,OAAN,EAAnB,EAAoC;AAClC;AACD;;AAED,QAAMC,OAAO,GAAGhB,KAAK,CAACiB,mBAAN,CAA0B;AAACD,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAhB;;AACA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AACD,QAAME,IAAI,GAAGlB,KAAK,CAACmB,OAAN,CAAcH,OAAd,CAAb;;AAEA,MAAIE,IAAI,CAACE,MAAL,KAAgB,CAApB,EAAuB;AACrB;AACD;;AAED,MAAIF,IAAI,CAACE,MAAL,GAAc,CAAlB,EAAqB;AACnBV,IAAAA,MAAM,CAAE,wBAAuBM,OAAQ,eAAjC,CAAN;AAEA;AACD,GA7BG,CA+BJ;;;AACA,MAAI,CAACH,oCAAoC,IAAIb,KAAK,CAACqB,iBAAN,CAAwBH,IAAI,CAAC,CAAD,CAA5B,CAAzC,KAA8E,CAAClB,KAAK,CAACsB,yCAAN,CACjFX,WADiF,CAA/E,KAEE,CAACC,gBAAD,IAAqB,CAACH,IAAI,CAACc,SAF7B,CAAJ,EAE6C;AAC3Cb,IAAAA,MAAM,CAAE,UAASM,OAAQ,uEAAnB,CAAN;AACD;AACF,CA3Cc,EA2CZ;AACDQ,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,iGADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVnB,QAAAA,WAAW,EAAE;AACXoB,UAAAA,OAAO,EAAE,IADE;AAEXC,UAAAA,IAAI,EAAE;AAFK,SADH;AAKVpB,QAAAA,gBAAgB,EAAE;AAChBoB,UAAAA,IAAI,EAAE;AADU,SALR;AAQVnB,QAAAA,oCAAoC,EAAE;AACpCkB,UAAAA,OAAO,EAAE,KAD2B;AAEpCC,UAAAA,IAAI,EAAE;AAF8B;AAR5B,OAFd;AAeEA,MAAAA,IAAI,EAAE;AAfR,KADM,CALJ;AAwBJA,IAAAA,IAAI,EAAE;AAxBF;AADL,CA3CY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst canSkip = (utils, settings) => {\n const voidingTags = [\n // An abstract function is by definition incomplete\n // so it is perfectly fine if a return is documented but\n // not present within the function.\n // A subclass may inherit the doc and implement the\n // missing return.\n 'abstract',\n 'virtual',\n\n // A constructor function returns `this` by default, so may be `@returns`\n // tag indicating this but no explicit return\n 'class',\n 'constructor',\n 'interface',\n ];\n\n if (settings.mode === 'closure') {\n // Structural Interface in GCC terms, equivalent to @interface tag as far as this rule is concerned\n voidingTags.push('record');\n }\n\n return utils.hasATag(voidingTags) ||\n utils.isConstructor() ||\n utils.classHasTag('interface') ||\n settings.mode === 'closure' && utils.classHasTag('record');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n exemptAsync = true,\n exemptGenerators = settings.mode === 'typescript',\n reportMissingReturnForUndefinedTypes = false,\n } = context.options[0] || {};\n\n if (canSkip(utils, settings)) {\n return;\n }\n\n if (exemptAsync && utils.isAsync()) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'returns'});\n if (!tagName) {\n return;\n }\n const tags = utils.getTags(tagName);\n\n if (tags.length === 0) {\n return;\n }\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n\n return;\n }\n\n // In case a return value is declared in JSDoc, we also expect one in the code.\n if ((reportMissingReturnForUndefinedTypes || utils.hasDefinedTypeTag(tags[0])) && !utils.hasValueOrExecutorHasNonEmptyResolveValue(\n exemptAsync,\n ) && (!exemptGenerators || !node.generator)) {\n report(`JSDoc @${tagName} declaration present but return expression not available in function.`);\n }\n}, {\n meta: {\n docs: {\n description: 'Requires a return statement in function body if a `@returns` tag is specified in jsdoc comment.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns-check',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptAsync: {\n default: true,\n type: 'boolean',\n },\n exemptGenerators: {\n type: 'boolean',\n },\n reportMissingReturnForUndefinedTypes: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireReturnsCheck.js"}
1
+ {"version":3,"sources":["../../src/rules/requireReturnsCheck.js"],"names":["canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","context","node","report","exemptAsync","exemptGenerators","reportMissingReturnForUndefinedTypes","options","isAsync","tagName","getPreferredTagName","tags","getTags","length","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","generator","meta","docs","description","url","schema","additionalProperties","properties","default","type"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,OAAO,GAAG,CAACC,KAAD,EAAQC,QAAR,KAAqB;AACnC,QAAMC,WAAW,GAAG,CAClB;AACA;AACA;AACA;AACA;AACA,YANkB,EAOlB,SAPkB,EASlB;AACA;AACA,SAXkB,EAYlB,aAZkB,EAalB,WAbkB,CAApB;;AAgBA,MAAID,QAAQ,CAACE,IAAT,KAAkB,SAAtB,EAAiC;AAC/B;AACAD,IAAAA,WAAW,CAACE,IAAZ,CAAiB,QAAjB;AACD;;AAED,SAAOJ,KAAK,CAACK,OAAN,CAAcH,WAAd,KACLF,KAAK,CAACM,aAAN,EADK,IAELN,KAAK,CAACO,WAAN,CAAkB,WAAlB,CAFK,IAGLN,QAAQ,CAACE,IAAT,KAAkB,SAAlB,IAA+BH,KAAK,CAACO,WAAN,CAAkB,QAAlB,CAHjC;AAID,CA1BD;;eA4Be,2BAAa,CAAC;AAC3BC,EAAAA,OAD2B;AAE3BC,EAAAA,IAF2B;AAG3BC,EAAAA,MAH2B;AAI3BT,EAAAA,QAJ2B;AAK3BD,EAAAA;AAL2B,CAAD,KAMtB;AACJ,QAAM;AACJW,IAAAA,WAAW,GAAG,IADV;AAEJC,IAAAA,gBAAgB,GAAGX,QAAQ,CAACE,IAAT,KAAkB,YAFjC;AAGJU,IAAAA,oCAAoC,GAAG;AAHnC,MAIFL,OAAO,CAACM,OAAR,CAAgB,CAAhB,KAAsB,EAJ1B;;AAMA,MAAIf,OAAO,CAACC,KAAD,EAAQC,QAAR,CAAX,EAA8B;AAC5B;AACD;;AAED,MAAIU,WAAW,IAAIX,KAAK,CAACe,OAAN,EAAnB,EAAoC;AAClC;AACD;;AAED,QAAMC,OAAO,GAAGhB,KAAK,CAACiB,mBAAN,CAA0B;AAACD,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAhB;;AACA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AAED,QAAME,IAAI,GAAGlB,KAAK,CAACmB,OAAN,CAAcH,OAAd,CAAb;;AAEA,MAAIE,IAAI,CAACE,MAAL,KAAgB,CAApB,EAAuB;AACrB;AACD;;AAED,MAAIF,IAAI,CAACE,MAAL,GAAc,CAAlB,EAAqB;AACnBV,IAAAA,MAAM,CAAE,wBAAuBM,OAAQ,eAAjC,CAAN;AAEA;AACD,GA9BG,CAgCJ;;;AACA,MAAI,CAACH,oCAAoC,IAAIb,KAAK,CAACqB,iBAAN,CAAwBH,IAAI,CAAC,CAAD,CAA5B,CAAzC,KAA8E,CAAClB,KAAK,CAACsB,yCAAN,CACjFX,WADiF,CAA/E,KAEE,CAACC,gBAAD,IAAqB,CAACH,IAAI,CAACc,SAF7B,CAAJ,EAE6C;AAC3Cb,IAAAA,MAAM,CAAE,UAASM,OAAQ,uEAAnB,CAAN;AACD;AACF,CA5Cc,EA4CZ;AACDQ,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,iGADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVnB,QAAAA,WAAW,EAAE;AACXoB,UAAAA,OAAO,EAAE,IADE;AAEXC,UAAAA,IAAI,EAAE;AAFK,SADH;AAKVpB,QAAAA,gBAAgB,EAAE;AAChBoB,UAAAA,IAAI,EAAE;AADU,SALR;AAQVnB,QAAAA,oCAAoC,EAAE;AACpCkB,UAAAA,OAAO,EAAE,KAD2B;AAEpCC,UAAAA,IAAI,EAAE;AAF8B;AAR5B,OAFd;AAeEA,MAAAA,IAAI,EAAE;AAfR,KADM,CALJ;AAwBJA,IAAAA,IAAI,EAAE;AAxBF;AADL,CA5CY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst canSkip = (utils, settings) => {\n const voidingTags = [\n // An abstract function is by definition incomplete\n // so it is perfectly fine if a return is documented but\n // not present within the function.\n // A subclass may inherit the doc and implement the\n // missing return.\n 'abstract',\n 'virtual',\n\n // A constructor function returns `this` by default, so may be `@returns`\n // tag indicating this but no explicit return\n 'class',\n 'constructor',\n 'interface',\n ];\n\n if (settings.mode === 'closure') {\n // Structural Interface in GCC terms, equivalent to @interface tag as far as this rule is concerned\n voidingTags.push('record');\n }\n\n return utils.hasATag(voidingTags) ||\n utils.isConstructor() ||\n utils.classHasTag('interface') ||\n settings.mode === 'closure' && utils.classHasTag('record');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n exemptAsync = true,\n exemptGenerators = settings.mode === 'typescript',\n reportMissingReturnForUndefinedTypes = false,\n } = context.options[0] || {};\n\n if (canSkip(utils, settings)) {\n return;\n }\n\n if (exemptAsync && utils.isAsync()) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'returns'});\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n\n if (tags.length === 0) {\n return;\n }\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n\n return;\n }\n\n // In case a return value is declared in JSDoc, we also expect one in the code.\n if ((reportMissingReturnForUndefinedTypes || utils.hasDefinedTypeTag(tags[0])) && !utils.hasValueOrExecutorHasNonEmptyResolveValue(\n exemptAsync,\n ) && (!exemptGenerators || !node.generator)) {\n report(`JSDoc @${tagName} declaration present but return expression not available in function.`);\n }\n}, {\n meta: {\n docs: {\n description: 'Requires a return statement in function body if a `@returns` tag is specified in jsdoc comment.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns-check',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptAsync: {\n default: true,\n type: 'boolean',\n },\n exemptGenerators: {\n type: 'boolean',\n },\n reportMissingReturnForUndefinedTypes: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireReturnsCheck.js"}
@@ -13,10 +13,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
13
13
  * We can skip checking for a throws value, in case the documentation is inherited
14
14
  * or the method is either a constructor or an abstract method.
15
15
  *
16
- * @param {*} utils
17
- * a reference to the utils which are used to probe if a tag is present or not.
18
- * @returns {boolean}
19
- * true in case deep checking can be skipped; otherwise false.
16
+ * @param {*} utils a reference to the utils which are used to probe if a tag is present or not.
17
+ * @returns {boolean} true in case deep checking can be skipped; otherwise false.
20
18
  */
21
19
  const canSkip = utils => {
22
20
  return utils.hasATag([// inheritdoc implies that all documentation is inherited
@@ -67,7 +65,8 @@ var _default = (0, _iterateJsdoc.default)(({
67
65
  contextDefaults: true,
68
66
  meta: {
69
67
  docs: {
70
- url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns'
68
+ description: 'Requires that throw statements are documented.',
69
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-throws'
71
70
  },
72
71
  schema: [{
73
72
  additionalProperties: false,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/requireThrows.js"],"names":["canSkip","utils","hasATag","avoidDocs","report","tagName","getPreferredTagName","tags","getTags","iteratingFunction","isIteratingFunction","tag","missingThrowsTag","shouldReport","hasThrowValue","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","context","exemptedBy"],"mappings":";;;;;;;AAAA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,OAAO,GAAIC,KAAD,IAAW;AACzB,SAAOA,KAAK,CAACC,OAAN,CAAc,CACnB;AACA;AACA;AACA;AACA;AACA,YANmB,EAOnB,SAPmB,EASnB;AACA,QAVmB,CAAd,KAYLD,KAAK,CAACE,SAAN,EAZF;AAaD,CAdD;;eAgBe,2BAAa,CAAC;AAC3BC,EAAAA,MAD2B;AAE3BH,EAAAA;AAF2B,CAAD,KAGtB;AACJ;AACA;AACA,MAAID,OAAO,CAACC,KAAD,CAAX,EAAoB;AAClB;AACD;;AAED,QAAMI,OAAO,GAAGJ,KAAK,CAACK,mBAAN,CAA0B;AAACD,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAhB;;AACA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AAED,QAAME,IAAI,GAAGN,KAAK,CAACO,OAAN,CAAcH,OAAd,CAAb;AACA,QAAMI,iBAAiB,GAAGR,KAAK,CAACS,mBAAN,EAA1B,CAbI,CAeJ;;AACA,QAAM,CAACC,GAAD,IAAQJ,IAAd;AACA,QAAMK,gBAAgB,GAAG,OAAOD,GAAP,KAAe,WAAf,IAA8BA,GAAG,KAAK,IAA/D;;AAEA,QAAME,YAAY,GAAG,MAAM;AACzB,QAAI,CAACD,gBAAL,EAAuB;AACrB,aAAO,KAAP;AACD;;AAED,WAAOH,iBAAiB,IAAIR,KAAK,CAACa,aAAN,EAA5B;AACD,GAND;;AAQA,MAAID,YAAY,EAAhB,EAAoB;AAClBT,IAAAA,MAAM,CAAE,kBAAiBC,OAAQ,eAA3B,CAAN;AACD;AACF,CAjCc,EAiCZ;AACDU,EAAAA,eAAe,EAAE,IADhB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,GAAG,EAAE;AADD,KADF;AAIJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVC,QAAAA,QAAQ,EAAE;AACRC,UAAAA,KAAK,EAAE;AACLC,YAAAA,KAAK,EAAE,CACL;AACEC,cAAAA,IAAI,EAAE;AADR,aADK,EAIL;AACEL,cAAAA,oBAAoB,EAAE,KADxB;AAEEC,cAAAA,UAAU,EAAE;AACVK,gBAAAA,OAAO,EAAE;AACPD,kBAAAA,IAAI,EAAE;AADC,iBADC;AAIVE,gBAAAA,OAAO,EAAE;AACPF,kBAAAA,IAAI,EAAE;AADC;AAJC,eAFd;AAUEA,cAAAA,IAAI,EAAE;AAVR,aAJK;AADF,WADC;AAoBRA,UAAAA,IAAI,EAAE;AApBE,SADA;AAuBVG,QAAAA,UAAU,EAAE;AACVL,UAAAA,KAAK,EAAE;AACLE,YAAAA,IAAI,EAAE;AADD,WADG;AAIVA,UAAAA,IAAI,EAAE;AAJI;AAvBF,OAFd;AAgCEA,MAAAA,IAAI,EAAE;AAhCR,KADM,CAJJ;AAwCJA,IAAAA,IAAI,EAAE;AAxCF;AAFL,CAjCY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * We can skip checking for a throws value, in case the documentation is inherited\n * or the method is either a constructor or an abstract method.\n *\n * @param {*} utils\n * a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean}\n * true in case deep checking can be skipped; otherwise false.\n */\nconst canSkip = (utils) => {\n return utils.hasATag([\n // inheritdoc implies that all documentation is inherited\n // see https://jsdoc.app/tags-inheritdoc.html\n //\n // Abstract methods are by definition incomplete,\n // so it is not necessary to document that they throw an error.\n 'abstract',\n 'virtual',\n\n // The designated type can itself document `@throws`\n 'type',\n ]) ||\n utils.avoidDocs();\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n}) => {\n // A preflight check. We do not need to run a deep check for abstract\n // functions.\n if (canSkip(utils)) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'throws'});\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n const iteratingFunction = utils.isIteratingFunction();\n\n // In case the code returns something, we expect a return value in JSDoc.\n const [tag] = tags;\n const missingThrowsTag = typeof tag === 'undefined' || tag === null;\n\n const shouldReport = () => {\n if (!missingThrowsTag) {\n return false;\n }\n\n return iteratingFunction && utils.hasThrowValue();\n };\n\n if (shouldReport()) {\n report(`Missing JSDoc @${tagName} declaration.`);\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireThrows.js"}
1
+ {"version":3,"sources":["../../src/rules/requireThrows.js"],"names":["canSkip","utils","hasATag","avoidDocs","report","tagName","getPreferredTagName","tags","getTags","iteratingFunction","isIteratingFunction","tag","missingThrowsTag","shouldReport","hasThrowValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","context","exemptedBy"],"mappings":";;;;;;;AAAA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,OAAO,GAAIC,KAAD,IAAW;AACzB,SAAOA,KAAK,CAACC,OAAN,CAAc,CACnB;AACA;AACA;AACA;AACA;AACA,YANmB,EAOnB,SAPmB,EASnB;AACA,QAVmB,CAAd,KAYLD,KAAK,CAACE,SAAN,EAZF;AAaD,CAdD;;eAgBe,2BAAa,CAAC;AAC3BC,EAAAA,MAD2B;AAE3BH,EAAAA;AAF2B,CAAD,KAGtB;AACJ;AACA;AACA,MAAID,OAAO,CAACC,KAAD,CAAX,EAAoB;AAClB;AACD;;AAED,QAAMI,OAAO,GAAGJ,KAAK,CAACK,mBAAN,CAA0B;AAACD,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAhB;;AACA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AAED,QAAME,IAAI,GAAGN,KAAK,CAACO,OAAN,CAAcH,OAAd,CAAb;AACA,QAAMI,iBAAiB,GAAGR,KAAK,CAACS,mBAAN,EAA1B,CAbI,CAeJ;;AACA,QAAM,CAACC,GAAD,IAAQJ,IAAd;AACA,QAAMK,gBAAgB,GAAG,OAAOD,GAAP,KAAe,WAAf,IAA8BA,GAAG,KAAK,IAA/D;;AAEA,QAAME,YAAY,GAAG,MAAM;AACzB,QAAI,CAACD,gBAAL,EAAuB;AACrB,aAAO,KAAP;AACD;;AAED,WAAOH,iBAAiB,IAAIR,KAAK,CAACa,aAAN,EAA5B;AACD,GAND;;AAQA,MAAID,YAAY,EAAhB,EAAoB;AAClBT,IAAAA,MAAM,CAAE,kBAAiBC,OAAQ,eAA3B,CAAN;AACD;AACF,CAjCc,EAiCZ;AACDU,EAAAA,eAAe,EAAE,IADhB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,gDADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVC,QAAAA,QAAQ,EAAE;AACRC,UAAAA,KAAK,EAAE;AACLC,YAAAA,KAAK,EAAE,CACL;AACEC,cAAAA,IAAI,EAAE;AADR,aADK,EAIL;AACEL,cAAAA,oBAAoB,EAAE,KADxB;AAEEC,cAAAA,UAAU,EAAE;AACVK,gBAAAA,OAAO,EAAE;AACPD,kBAAAA,IAAI,EAAE;AADC,iBADC;AAIVE,gBAAAA,OAAO,EAAE;AACPF,kBAAAA,IAAI,EAAE;AADC;AAJC,eAFd;AAUEA,cAAAA,IAAI,EAAE;AAVR,aAJK;AADF,WADC;AAoBRA,UAAAA,IAAI,EAAE;AApBE,SADA;AAuBVG,QAAAA,UAAU,EAAE;AACVL,UAAAA,KAAK,EAAE;AACLE,YAAAA,IAAI,EAAE;AADD,WADG;AAIVA,UAAAA,IAAI,EAAE;AAJI;AAvBF,OAFd;AAgCEA,MAAAA,IAAI,EAAE;AAhCR,KADM,CALJ;AAyCJA,IAAAA,IAAI,EAAE;AAzCF;AAFL,CAjCY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * We can skip checking for a throws value, in case the documentation is inherited\n * or the method is either a constructor or an abstract method.\n *\n * @param {*} utils a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean} true in case deep checking can be skipped; otherwise false.\n */\nconst canSkip = (utils) => {\n return utils.hasATag([\n // inheritdoc implies that all documentation is inherited\n // see https://jsdoc.app/tags-inheritdoc.html\n //\n // Abstract methods are by definition incomplete,\n // so it is not necessary to document that they throw an error.\n 'abstract',\n 'virtual',\n\n // The designated type can itself document `@throws`\n 'type',\n ]) ||\n utils.avoidDocs();\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n}) => {\n // A preflight check. We do not need to run a deep check for abstract\n // functions.\n if (canSkip(utils)) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'throws'});\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n const iteratingFunction = utils.isIteratingFunction();\n\n // In case the code returns something, we expect a return value in JSDoc.\n const [tag] = tags;\n const missingThrowsTag = typeof tag === 'undefined' || tag === null;\n\n const shouldReport = () => {\n if (!missingThrowsTag) {\n return false;\n }\n\n return iteratingFunction && utils.hasThrowValue();\n };\n\n if (shouldReport()) {\n report(`Missing JSDoc @${tagName} declaration.`);\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that throw statements are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-throws',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireThrows.js"}
@@ -15,10 +15,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
15
15
  *
16
16
  * In either of these cases the yield value is optional or not defined.
17
17
  *
18
- * @param {*} utils
19
- * a reference to the utils which are used to probe if a tag is present or not.
20
- * @returns {boolean}
21
- * true in case deep checking can be skipped; otherwise false.
18
+ * @param {*} utils a reference to the utils which are used to probe if a tag is present or not.
19
+ * @returns {boolean} true in case deep checking can be skipped; otherwise false.
22
20
  */
23
21
  const canSkip = utils => {
24
22
  return utils.hasATag([// inheritdoc implies that all documentation is inherited
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/requireYields.js"],"names":["canSkip","utils","hasATag","avoidDocs","checkTagName","report","tagName","preferredTagName","getPreferredTagName","tags","getTags","length","tag","missingTag","context","next","nextWithGeneratorTag","forceRequireNext","forceRequireYields","withGeneratorTag","options","iteratingFunction","isIteratingFunction","preferredYieldTagName","missingYieldTag","shouldReportYields","hasTag","isGenerator","hasYieldValue","preferredNextTagName","missingNextTag","shouldReportNext","hasYieldReturnValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","exemptedBy","default"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * We can skip checking for a yield value, in case the documentation is inherited\n * or the method has a constructor or abstract tag.\n *\n * In either of these cases the yield value is optional or not defined.\n *\n * @param {*} utils\n * a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean}\n * true in case deep checking can be skipped; otherwise false.\n */\nconst canSkip = (utils) => {\n return utils.hasATag([\n // inheritdoc implies that all documentation is inherited\n // see https://jsdoc.app/tags-inheritdoc.html\n //\n // Abstract methods are by definition incomplete,\n // so it is not an error if it declares a yield value but does not implement it.\n 'abstract',\n 'virtual',\n\n // Constructors do not have a yield value\n // so we can bail out here, too.\n 'class',\n 'constructor',\n\n // Yield (and any `next`) type is specified accompanying the targeted\n // @type\n 'type',\n\n // This seems to imply a class as well\n 'interface',\n ]) ||\n utils.avoidDocs();\n};\n\nconst checkTagName = (utils, report, tagName) => {\n const preferredTagName = utils.getPreferredTagName({tagName});\n if (!preferredTagName) {\n return [];\n }\n\n const tags = utils.getTags(preferredTagName);\n\n if (tags.length > 1) {\n report(`Found more than one @${preferredTagName} declaration.`);\n }\n\n // In case the code yields something, we expect a yields value in JSDoc.\n const [tag] = tags;\n const missingTag = typeof tag === 'undefined' || tag === null;\n\n return [preferredTagName, missingTag];\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n context,\n}) => {\n const {\n next = false,\n nextWithGeneratorTag = false,\n forceRequireNext = false,\n forceRequireYields = false,\n withGeneratorTag = true,\n } = context.options[0] || {};\n\n // A preflight check. We do not need to run a deep check\n // in case the @yield comment is optional or undefined.\n if (canSkip(utils)) {\n return;\n }\n\n const iteratingFunction = utils.isIteratingFunction();\n\n const [preferredYieldTagName, missingYieldTag] = checkTagName(\n utils, report, 'yields',\n );\n if (preferredYieldTagName) {\n const shouldReportYields = () => {\n if (!missingYieldTag) {\n return false;\n }\n\n if (\n withGeneratorTag && utils.hasTag('generator') ||\n forceRequireYields && iteratingFunction && utils.isGenerator()\n ) {\n return true;\n }\n\n return iteratingFunction && utils.isGenerator() && utils.hasYieldValue();\n };\n\n if (shouldReportYields()) {\n report(`Missing JSDoc @${preferredYieldTagName} declaration.`);\n }\n }\n\n if (next || nextWithGeneratorTag || forceRequireNext) {\n const [preferredNextTagName, missingNextTag] = checkTagName(\n utils, report, 'next',\n );\n if (!preferredNextTagName) {\n return;\n }\n\n const shouldReportNext = () => {\n if (!missingNextTag) {\n return false;\n }\n\n if (\n nextWithGeneratorTag && utils.hasTag('generator')) {\n return true;\n }\n\n if (\n !next && !forceRequireNext ||\n !iteratingFunction ||\n !utils.isGenerator()\n ) {\n return false;\n }\n\n return forceRequireNext || utils.hasYieldReturnValue();\n };\n\n if (shouldReportNext()) {\n report(`Missing JSDoc @${preferredNextTagName} declaration.`);\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires yields are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-yields',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n forceRequireNext: {\n default: false,\n type: 'boolean',\n },\n forceRequireYields: {\n default: false,\n type: 'boolean',\n },\n next: {\n default: false,\n type: 'boolean',\n },\n nextWithGeneratorTag: {\n default: false,\n type: 'boolean',\n },\n withGeneratorTag: {\n default: true,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireYields.js"}
1
+ {"version":3,"sources":["../../src/rules/requireYields.js"],"names":["canSkip","utils","hasATag","avoidDocs","checkTagName","report","tagName","preferredTagName","getPreferredTagName","tags","getTags","length","tag","missingTag","context","next","nextWithGeneratorTag","forceRequireNext","forceRequireYields","withGeneratorTag","options","iteratingFunction","isIteratingFunction","preferredYieldTagName","missingYieldTag","shouldReportYields","hasTag","isGenerator","hasYieldValue","preferredNextTagName","missingNextTag","shouldReportNext","hasYieldReturnValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","exemptedBy","default"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * We can skip checking for a yield value, in case the documentation is inherited\n * or the method has a constructor or abstract tag.\n *\n * In either of these cases the yield value is optional or not defined.\n *\n * @param {*} utils a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean} true in case deep checking can be skipped; otherwise false.\n */\nconst canSkip = (utils) => {\n return utils.hasATag([\n // inheritdoc implies that all documentation is inherited\n // see https://jsdoc.app/tags-inheritdoc.html\n //\n // Abstract methods are by definition incomplete,\n // so it is not an error if it declares a yield value but does not implement it.\n 'abstract',\n 'virtual',\n\n // Constructors do not have a yield value\n // so we can bail out here, too.\n 'class',\n 'constructor',\n\n // Yield (and any `next`) type is specified accompanying the targeted\n // @type\n 'type',\n\n // This seems to imply a class as well\n 'interface',\n ]) ||\n utils.avoidDocs();\n};\n\nconst checkTagName = (utils, report, tagName) => {\n const preferredTagName = utils.getPreferredTagName({tagName});\n if (!preferredTagName) {\n return [];\n }\n\n const tags = utils.getTags(preferredTagName);\n\n if (tags.length > 1) {\n report(`Found more than one @${preferredTagName} declaration.`);\n }\n\n // In case the code yields something, we expect a yields value in JSDoc.\n const [tag] = tags;\n const missingTag = typeof tag === 'undefined' || tag === null;\n\n return [preferredTagName, missingTag];\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n context,\n}) => {\n const {\n next = false,\n nextWithGeneratorTag = false,\n forceRequireNext = false,\n forceRequireYields = false,\n withGeneratorTag = true,\n } = context.options[0] || {};\n\n // A preflight check. We do not need to run a deep check\n // in case the @yield comment is optional or undefined.\n if (canSkip(utils)) {\n return;\n }\n\n const iteratingFunction = utils.isIteratingFunction();\n\n const [preferredYieldTagName, missingYieldTag] = checkTagName(\n utils, report, 'yields',\n );\n if (preferredYieldTagName) {\n const shouldReportYields = () => {\n if (!missingYieldTag) {\n return false;\n }\n\n if (\n withGeneratorTag && utils.hasTag('generator') ||\n forceRequireYields && iteratingFunction && utils.isGenerator()\n ) {\n return true;\n }\n\n return iteratingFunction && utils.isGenerator() && utils.hasYieldValue();\n };\n\n if (shouldReportYields()) {\n report(`Missing JSDoc @${preferredYieldTagName} declaration.`);\n }\n }\n\n if (next || nextWithGeneratorTag || forceRequireNext) {\n const [preferredNextTagName, missingNextTag] = checkTagName(\n utils, report, 'next',\n );\n if (!preferredNextTagName) {\n return;\n }\n\n const shouldReportNext = () => {\n if (!missingNextTag) {\n return false;\n }\n\n if (\n nextWithGeneratorTag && utils.hasTag('generator')) {\n return true;\n }\n\n if (\n !next && !forceRequireNext ||\n !iteratingFunction ||\n !utils.isGenerator()\n ) {\n return false;\n }\n\n return forceRequireNext || utils.hasYieldReturnValue();\n };\n\n if (shouldReportNext()) {\n report(`Missing JSDoc @${preferredNextTagName} declaration.`);\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires yields are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-yields',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n forceRequireNext: {\n default: false,\n type: 'boolean',\n },\n forceRequireYields: {\n default: false,\n type: 'boolean',\n },\n next: {\n default: false,\n type: 'boolean',\n },\n nextWithGeneratorTag: {\n default: false,\n type: 'boolean',\n },\n withGeneratorTag: {\n default: true,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireYields.js"}
@@ -22,7 +22,8 @@ var _default = (0, _iterateJsdoc.default)(({
22
22
  jsdoc.tags.some((tg, tagIdx) => {
23
23
  let lastTag;
24
24
  let reportIndex = null;
25
- tg.source.forEach(({
25
+
26
+ for (const [idx, {
26
27
  tokens: {
27
28
  tag,
28
29
  name,
@@ -30,7 +31,7 @@ var _default = (0, _iterateJsdoc.default)(({
30
31
  description,
31
32
  end
32
33
  }
33
- }, idx) => {
34
+ }] of tg.source.entries()) {
34
35
  var _tags$lastTag$slice, _tags$lastTag$slice2;
35
36
 
36
37
  // May be text after a line break within a tag description
@@ -39,16 +40,16 @@ var _default = (0, _iterateJsdoc.default)(({
39
40
  }
40
41
 
41
42
  if (lastTag && ['any', 'always'].includes((_tags$lastTag$slice = tags[lastTag.slice(1)]) === null || _tags$lastTag$slice === void 0 ? void 0 : _tags$lastTag$slice.lines)) {
42
- return;
43
+ continue;
43
44
  }
44
45
 
45
46
  if (!tag && !name && !type && !description && !end && (alwaysNever === 'never' || lastTag && ((_tags$lastTag$slice2 = tags[lastTag.slice(1)]) === null || _tags$lastTag$slice2 === void 0 ? void 0 : _tags$lastTag$slice2.lines) === 'never')) {
46
47
  reportIndex = idx;
47
- return;
48
+ continue;
48
49
  }
49
50
 
50
51
  lastTag = tag;
51
- });
52
+ }
52
53
 
53
54
  if (reportIndex !== null) {
54
55
  const fixer = () => {
@@ -67,7 +68,8 @@ var _default = (0, _iterateJsdoc.default)(({
67
68
  const lines = [];
68
69
  let currentTag;
69
70
  let tagSourceIdx = 0;
70
- tg.source.forEach(({
71
+
72
+ for (const [idx, {
71
73
  number,
72
74
  tokens: {
73
75
  tag,
@@ -76,7 +78,7 @@ var _default = (0, _iterateJsdoc.default)(({
76
78
  description,
77
79
  end
78
80
  }
79
- }, idx) => {
81
+ }] of tg.source.entries()) {
80
82
  if (description) {
81
83
  lines.splice(0, lines.length);
82
84
  tagSourceIdx = idx;
@@ -92,7 +94,8 @@ var _default = (0, _iterateJsdoc.default)(({
92
94
  number
93
95
  });
94
96
  }
95
- });
97
+ }
98
+
96
99
  const currentTg = currentTag && tags[currentTag.slice(1)];
97
100
  const tagCount = currentTg === null || currentTg === void 0 ? void 0 : currentTg.count;
98
101
  const defaultAlways = alwaysNever === 'always' && (currentTg === null || currentTg === void 0 ? void 0 : currentTg.lines) !== 'never' && (currentTg === null || currentTg === void 0 ? void 0 : currentTg.lines) !== 'any' && lines.length < count;