eslint-plugin-jsdoc 39.3.5 → 39.3.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +273 -52
  2. package/dist/WarnSettings.js +0 -5
  3. package/dist/WarnSettings.js.map +1 -1
  4. package/dist/alignTransform.js +69 -61
  5. package/dist/alignTransform.js.map +1 -1
  6. package/dist/bin/generateRule.js +7 -26
  7. package/dist/bin/generateRule.js.map +1 -1
  8. package/dist/defaultTagOrder.js +30 -14
  9. package/dist/defaultTagOrder.js.map +1 -1
  10. package/dist/exportParser.js +34 -143
  11. package/dist/exportParser.js.map +1 -1
  12. package/dist/generateRule.js +7 -26
  13. package/dist/generateRule.js.map +1 -1
  14. package/dist/getDefaultTagStructureForMode.js +189 -93
  15. package/dist/getDefaultTagStructureForMode.js.map +1 -1
  16. package/dist/index.js +0 -51
  17. package/dist/index.js.map +1 -1
  18. package/dist/iterateJsdoc.js +44 -207
  19. package/dist/iterateJsdoc.js.map +1 -1
  20. package/dist/jsdocUtils.js +72 -221
  21. package/dist/jsdocUtils.js.map +1 -1
  22. package/dist/rules/checkAccess.js +0 -8
  23. package/dist/rules/checkAccess.js.map +1 -1
  24. package/dist/rules/checkAlignment.js +0 -8
  25. package/dist/rules/checkAlignment.js.map +1 -1
  26. package/dist/rules/checkExamples.js +25 -63
  27. package/dist/rules/checkExamples.js.map +1 -1
  28. package/dist/rules/checkIndentation.js +0 -7
  29. package/dist/rules/checkIndentation.js.map +1 -1
  30. package/dist/rules/checkLineAlignment.js +9 -30
  31. package/dist/rules/checkLineAlignment.js.map +1 -1
  32. package/dist/rules/checkParamNames.js +9 -47
  33. package/dist/rules/checkParamNames.js.map +1 -1
  34. package/dist/rules/checkPropertyNames.js +1 -18
  35. package/dist/rules/checkPropertyNames.js.map +1 -1
  36. package/dist/rules/checkSyntax.js +2 -5
  37. package/dist/rules/checkSyntax.js.map +1 -1
  38. package/dist/rules/checkTagNames.js +0 -18
  39. package/dist/rules/checkTagNames.js.map +1 -1
  40. package/dist/rules/checkTypes.js +17 -46
  41. package/dist/rules/checkTypes.js.map +1 -1
  42. package/dist/rules/checkValues.js +0 -18
  43. package/dist/rules/checkValues.js.map +1 -1
  44. package/dist/rules/emptyTags.js +6 -11
  45. package/dist/rules/emptyTags.js.map +1 -1
  46. package/dist/rules/implementsOnClasses.js +0 -6
  47. package/dist/rules/implementsOnClasses.js.map +1 -1
  48. package/dist/rules/matchDescription.js +0 -20
  49. package/dist/rules/matchDescription.js.map +1 -1
  50. package/dist/rules/matchName.js +2 -17
  51. package/dist/rules/matchName.js.map +1 -1
  52. package/dist/rules/multilineBlocks.js +10 -34
  53. package/dist/rules/multilineBlocks.js.map +1 -1
  54. package/dist/rules/newlineAfterDescription.js +0 -8
  55. package/dist/rules/newlineAfterDescription.js.map +1 -1
  56. package/dist/rules/noBadBlocks.js +2 -16
  57. package/dist/rules/noBadBlocks.js.map +1 -1
  58. package/dist/rules/noDefaults.js +0 -7
  59. package/dist/rules/noDefaults.js.map +1 -1
  60. package/dist/rules/noMissingSyntax.js +2 -16
  61. package/dist/rules/noMissingSyntax.js.map +1 -1
  62. package/dist/rules/noMultiAsterisks.js +2 -16
  63. package/dist/rules/noMultiAsterisks.js.map +1 -1
  64. package/dist/rules/noRestrictedSyntax.js +3 -9
  65. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  66. package/dist/rules/noTypes.js +0 -7
  67. package/dist/rules/noTypes.js.map +1 -1
  68. package/dist/rules/noUndefinedTypes.js +13 -34
  69. package/dist/rules/noUndefinedTypes.js.map +1 -1
  70. package/dist/rules/requireAsteriskPrefix.js +2 -26
  71. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  72. package/dist/rules/requireDescription.js +0 -17
  73. package/dist/rules/requireDescription.js.map +1 -1
  74. package/dist/rules/requireDescriptionCompleteSentence.js +13 -34
  75. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  76. package/dist/rules/requireExample.js +0 -9
  77. package/dist/rules/requireExample.js.map +1 -1
  78. package/dist/rules/requireFileOverview.js +0 -16
  79. package/dist/rules/requireFileOverview.js.map +1 -1
  80. package/dist/rules/requireHyphenBeforeParamDescription.js +2 -16
  81. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  82. package/dist/rules/requireJsdoc.js +13 -58
  83. package/dist/rules/requireJsdoc.js.map +1 -1
  84. package/dist/rules/requireParam.js +6 -53
  85. package/dist/rules/requireParam.js.map +1 -1
  86. package/dist/rules/requireParamDescription.js +0 -4
  87. package/dist/rules/requireParamDescription.js.map +1 -1
  88. package/dist/rules/requireParamName.js +0 -4
  89. package/dist/rules/requireParamName.js.map +1 -1
  90. package/dist/rules/requireParamType.js +0 -4
  91. package/dist/rules/requireParamType.js.map +1 -1
  92. package/dist/rules/requireProperty.js +0 -9
  93. package/dist/rules/requireProperty.js.map +1 -1
  94. package/dist/rules/requirePropertyDescription.js +0 -4
  95. package/dist/rules/requirePropertyDescription.js.map +1 -1
  96. package/dist/rules/requirePropertyName.js +0 -4
  97. package/dist/rules/requirePropertyName.js.map +1 -1
  98. package/dist/rules/requirePropertyType.js +0 -4
  99. package/dist/rules/requirePropertyType.js.map +1 -1
  100. package/dist/rules/requireReturns.js +13 -23
  101. package/dist/rules/requireReturns.js.map +1 -1
  102. package/dist/rules/requireReturnsCheck.js +12 -20
  103. package/dist/rules/requireReturnsCheck.js.map +1 -1
  104. package/dist/rules/requireReturnsDescription.js +0 -6
  105. package/dist/rules/requireReturnsDescription.js.map +1 -1
  106. package/dist/rules/requireReturnsType.js +0 -4
  107. package/dist/rules/requireReturnsType.js.map +1 -1
  108. package/dist/rules/requireThrows.js +6 -15
  109. package/dist/rules/requireThrows.js.map +1 -1
  110. package/dist/rules/requireYields.js +13 -29
  111. package/dist/rules/requireYields.js.map +1 -1
  112. package/dist/rules/requireYieldsCheck.js +8 -29
  113. package/dist/rules/requireYieldsCheck.js.map +1 -1
  114. package/dist/rules/sortTags.js +17 -30
  115. package/dist/rules/sortTags.js.map +1 -1
  116. package/dist/rules/tagLines.js +0 -26
  117. package/dist/rules/tagLines.js.map +1 -1
  118. package/dist/rules/validTypes.js +22 -53
  119. package/dist/rules/validTypes.js.map +1 -1
  120. package/dist/tagNames.js +7 -4
  121. package/dist/tagNames.js.map +1 -1
  122. package/dist/utils/hasReturnValue.js +22 -66
  123. package/dist/utils/hasReturnValue.js.map +1 -1
  124. package/package.json +16 -16
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  var _default = (0, _iterateJsdoc.default)(({
13
10
  context,
14
11
  jsdoc,
@@ -34,28 +31,24 @@ var _default = (0, _iterateJsdoc.default)(({
34
31
  tag
35
32
  } = tokens;
36
33
  const sourceLength = jsdoc.source.length;
37
-
38
34
  const isInvalidSingleLine = tagName => {
39
35
  return noSingleLineBlocks && (!tagName || !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));
40
36
  };
41
-
42
37
  if (sourceLength === 1) {
43
38
  if (!isInvalidSingleLine(tag.slice(1))) {
44
39
  return;
45
40
  }
46
-
47
41
  const fixer = () => {
48
42
  utils.makeMultiline();
49
43
  };
50
-
51
44
  utils.reportJSDoc('Single line blocks are not permitted by your configuration.', null, fixer, true);
52
45
  return;
53
46
  }
54
-
55
47
  const lineChecks = () => {
56
48
  if (noZeroLineText && (tag || description)) {
57
49
  const fixer = () => {
58
- const line = { ...tokens
50
+ const line = {
51
+ ...tokens
59
52
  };
60
53
  utils.emptyTokens(tokens);
61
54
  const {
@@ -64,53 +57,47 @@ var _default = (0, _iterateJsdoc.default)(({
64
57
  start
65
58
  }
66
59
  } = jsdoc.source[1];
67
- utils.addLine(1, { ...line,
60
+ utils.addLine(1, {
61
+ ...line,
68
62
  delimiter,
69
63
  start
70
64
  });
71
65
  };
72
-
73
66
  utils.reportJSDoc('Should have no text on the "0th" line (after the `/**`).', null, fixer);
74
67
  return;
75
68
  }
76
-
77
69
  const finalLine = jsdoc.source[jsdoc.source.length - 1];
78
70
  const finalLineTokens = finalLine.tokens;
79
-
80
71
  if (noFinalLineText && finalLineTokens.description.trim()) {
81
72
  const fixer = () => {
82
- const line = { ...finalLineTokens
73
+ const line = {
74
+ ...finalLineTokens
83
75
  };
84
76
  line.description = line.description.trimEnd();
85
77
  const {
86
78
  delimiter
87
79
  } = line;
88
-
89
80
  for (const prop of ['delimiter', 'postDelimiter', 'tag', 'type', 'lineEnd', 'postType', 'postTag', 'name', 'postName', 'description']) {
90
81
  finalLineTokens[prop] = '';
91
82
  }
92
-
93
- utils.addLine(jsdoc.source.length - 1, { ...line,
83
+ utils.addLine(jsdoc.source.length - 1, {
84
+ ...line,
94
85
  delimiter,
95
86
  end: ''
96
87
  });
97
88
  };
98
-
99
89
  utils.reportJSDoc('Should have no text on the final line (before the `*/`).', null, fixer);
100
90
  }
101
91
  };
102
-
103
92
  if (noMultilineBlocks) {
104
93
  if (jsdoc.tags.length && (multilineTags.includes('*') || utils.hasATag(multilineTags))) {
105
94
  lineChecks();
106
95
  return;
107
96
  }
108
-
109
97
  if (jsdoc.description.length >= minimumLengthForMultiline) {
110
98
  lineChecks();
111
99
  return;
112
100
  }
113
-
114
101
  if (noSingleLineBlocks && (!jsdoc.tags.length || !utils.filterTags(({
115
102
  tag: tg
116
103
  }) => {
@@ -119,7 +106,6 @@ var _default = (0, _iterateJsdoc.default)(({
119
106
  utils.reportJSDoc('Multiline jsdoc blocks are prohibited by ' + 'your configuration but fixing would result in a single ' + 'line block which you have prohibited with `noSingleLineBlocks`.');
120
107
  return;
121
108
  }
122
-
123
109
  if (jsdoc.tags.length > 1) {
124
110
  if (!allowMultipleTags) {
125
111
  utils.reportJSDoc('Multiline jsdoc blocks are prohibited by ' + 'your configuration but the block has multiple tags.');
@@ -150,34 +136,27 @@ var _default = (0, _iterateJsdoc.default)(({
150
136
  if (typ) {
151
137
  obj.type = typ;
152
138
  }
153
-
154
139
  if (tg && typ && nme) {
155
140
  obj.postType = postType;
156
141
  }
157
-
158
142
  if (nme) {
159
143
  obj.name += nme;
160
144
  }
161
-
162
145
  if (nme && desc) {
163
146
  obj.postName = postName;
164
147
  }
165
-
166
148
  obj.description += desc;
167
149
  const nameOrDescription = obj.description || obj.name;
168
-
169
150
  if (nameOrDescription && nameOrDescription.slice(-1) !== ' ') {
170
151
  obj.description += ' ';
171
152
  }
153
+ obj.lineEnd = lineEnd;
172
154
 
173
- obj.lineEnd = lineEnd; // Already filtered for multiple tags
174
-
155
+ // Already filtered for multiple tags
175
156
  obj.tag += tg;
176
-
177
157
  if (tg) {
178
158
  obj.postTag = postTag || ' ';
179
159
  }
180
-
181
160
  return obj;
182
161
  }, utils.seedTokens({
183
162
  delimiter: '/**',
@@ -186,12 +165,10 @@ var _default = (0, _iterateJsdoc.default)(({
186
165
  }))
187
166
  }];
188
167
  };
189
-
190
168
  utils.reportJSDoc('Multiline jsdoc blocks are prohibited by ' + 'your configuration.', null, fixer);
191
169
  return;
192
170
  }
193
171
  }
194
-
195
172
  lineChecks();
196
173
  }, {
197
174
  iterateAllJsdocs: true,
@@ -245,7 +222,6 @@ var _default = (0, _iterateJsdoc.default)(({
245
222
  type: 'suggestion'
246
223
  }
247
224
  });
248
-
249
225
  exports.default = _default;
250
226
  module.exports = exports.default;
251
227
  //# sourceMappingURL=multilineBlocks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"multilineBlocks.js","names":["iterateJsdoc","context","jsdoc","utils","allowMultipleTags","noFinalLineText","noZeroLineText","noSingleLineBlocks","singleLineTags","noMultilineBlocks","minimumLengthForMultiline","Number","POSITIVE_INFINITY","multilineTags","options","source","tokens","description","tag","sourceLength","length","isInvalidSingleLine","tagName","includes","slice","fixer","makeMultiline","reportJSDoc","lineChecks","line","emptyTokens","delimiter","start","addLine","finalLine","finalLineTokens","trim","trimEnd","prop","end","tags","hasATag","filterTags","tg","number","reduce","obj","desc","type","typ","name","nme","lineEnd","postType","postName","postTag","nameOrDescription","seedTokens","postDelimiter","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperies","properties","anyOf","enum","items"],"sources":["../../src/rules/multilineBlocks.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n allowMultipleTags = true,\n noFinalLineText = true,\n noZeroLineText = true,\n noSingleLineBlocks = false,\n singleLineTags = [\n 'lends', 'type',\n ],\n noMultilineBlocks = false,\n minimumLengthForMultiline = Number.POSITIVE_INFINITY,\n multilineTags = [\n '*',\n ],\n } = context.options[0] || {};\n\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n description,\n tag,\n } = tokens;\n const sourceLength = jsdoc.source.length;\n\n const isInvalidSingleLine = (tagName) => {\n return noSingleLineBlocks &&\n (!tagName ||\n !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));\n };\n\n if (sourceLength === 1) {\n if (!isInvalidSingleLine(tag.slice(1))) {\n return;\n }\n\n const fixer = () => {\n utils.makeMultiline();\n };\n\n utils.reportJSDoc(\n 'Single line blocks are not permitted by your configuration.',\n null,\n fixer,\n true,\n );\n\n return;\n }\n\n const lineChecks = () => {\n if (\n noZeroLineText &&\n (tag || description)\n ) {\n const fixer = () => {\n const line = {\n ...tokens,\n };\n utils.emptyTokens(tokens);\n const {\n tokens: {\n delimiter,\n start,\n },\n } = jsdoc.source[1];\n utils.addLine(1, {\n ...line,\n delimiter,\n start,\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the \"0th\" line (after the `/**`).',\n null,\n fixer,\n );\n\n return;\n }\n\n const finalLine = jsdoc.source[jsdoc.source.length - 1];\n const finalLineTokens = finalLine.tokens;\n if (\n noFinalLineText &&\n finalLineTokens.description.trim()\n ) {\n const fixer = () => {\n const line = {\n ...finalLineTokens,\n };\n line.description = line.description.trimEnd();\n\n const {\n delimiter,\n } = line;\n\n for (const prop of [\n 'delimiter',\n 'postDelimiter',\n 'tag',\n 'type',\n 'lineEnd',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n ]) {\n finalLineTokens[prop] = '';\n }\n\n utils.addLine(jsdoc.source.length - 1, {\n ...line,\n delimiter,\n end: '',\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the final line (before the `*/`).',\n null,\n fixer,\n );\n }\n };\n\n if (noMultilineBlocks) {\n if (\n jsdoc.tags.length &&\n (multilineTags.includes('*') || utils.hasATag(multilineTags))\n ) {\n lineChecks();\n\n return;\n }\n\n if (jsdoc.description.length >= minimumLengthForMultiline) {\n lineChecks();\n\n return;\n }\n\n if (\n noSingleLineBlocks &&\n (!jsdoc.tags.length ||\n !utils.filterTags(({\n tag: tg,\n }) => {\n return !isInvalidSingleLine(tg);\n }).length)\n ) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but fixing would result in a single ' +\n 'line block which you have prohibited with `noSingleLineBlocks`.',\n );\n\n return;\n }\n\n if (jsdoc.tags.length > 1) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has multiple tags.',\n );\n\n return;\n }\n } else if (jsdoc.tags.length === 1 && jsdoc.description.trim()) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has a description with a tag.',\n );\n\n return;\n }\n } else {\n const fixer = () => {\n jsdoc.source = [\n {\n number: 1,\n source: '',\n tokens: jsdoc.source.reduce((obj, {\n tokens: {\n description: desc,\n tag: tg,\n type: typ,\n name: nme,\n lineEnd,\n postType,\n postName,\n postTag,\n },\n }) => {\n if (typ) {\n obj.type = typ;\n }\n\n if (tg && typ && nme) {\n obj.postType = postType;\n }\n\n if (nme) {\n obj.name += nme;\n }\n\n if (nme && desc) {\n obj.postName = postName;\n }\n\n obj.description += desc;\n\n const nameOrDescription = obj.description || obj.name;\n if (\n nameOrDescription && nameOrDescription.slice(-1) !== ' '\n ) {\n obj.description += ' ';\n }\n\n obj.lineEnd = lineEnd;\n\n // Already filtered for multiple tags\n obj.tag += tg;\n if (tg) {\n obj.postTag = postTag || ' ';\n }\n\n return obj;\n }, utils.seedTokens({\n delimiter: '/**',\n end: '*/',\n postDelimiter: ' ',\n })),\n },\n ];\n };\n\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration.',\n null,\n fixer,\n );\n\n return;\n }\n }\n\n lineChecks();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-multiline-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowMultipleTags: {\n type: 'boolean',\n },\n minimumLengthForMultiline: {\n type: 'integer',\n },\n multilineTags: {\n anyOf: [\n {\n enum: [\n '*',\n ],\n type: 'string',\n }, {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n noFinalLineText: {\n type: 'boolean',\n },\n noMultilineBlocks: {\n type: 'boolean',\n },\n noSingleLineBlocks: {\n type: 'boolean',\n },\n noZeroLineText: {\n type: 'boolean',\n },\n singleLineTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"multilineBlocks.js","names":["iterateJsdoc","context","jsdoc","utils","allowMultipleTags","noFinalLineText","noZeroLineText","noSingleLineBlocks","singleLineTags","noMultilineBlocks","minimumLengthForMultiline","Number","POSITIVE_INFINITY","multilineTags","options","source","tokens","description","tag","sourceLength","length","isInvalidSingleLine","tagName","includes","slice","fixer","makeMultiline","reportJSDoc","lineChecks","line","emptyTokens","delimiter","start","addLine","finalLine","finalLineTokens","trim","trimEnd","prop","end","tags","hasATag","filterTags","tg","number","reduce","obj","desc","type","typ","name","nme","lineEnd","postType","postName","postTag","nameOrDescription","seedTokens","postDelimiter","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperies","properties","anyOf","enum","items"],"sources":["../../src/rules/multilineBlocks.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n allowMultipleTags = true,\n noFinalLineText = true,\n noZeroLineText = true,\n noSingleLineBlocks = false,\n singleLineTags = [\n 'lends', 'type',\n ],\n noMultilineBlocks = false,\n minimumLengthForMultiline = Number.POSITIVE_INFINITY,\n multilineTags = [\n '*',\n ],\n } = context.options[0] || {};\n\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n description,\n tag,\n } = tokens;\n const sourceLength = jsdoc.source.length;\n\n const isInvalidSingleLine = (tagName) => {\n return noSingleLineBlocks &&\n (!tagName ||\n !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));\n };\n\n if (sourceLength === 1) {\n if (!isInvalidSingleLine(tag.slice(1))) {\n return;\n }\n\n const fixer = () => {\n utils.makeMultiline();\n };\n\n utils.reportJSDoc(\n 'Single line blocks are not permitted by your configuration.',\n null,\n fixer,\n true,\n );\n\n return;\n }\n\n const lineChecks = () => {\n if (\n noZeroLineText &&\n (tag || description)\n ) {\n const fixer = () => {\n const line = {\n ...tokens,\n };\n utils.emptyTokens(tokens);\n const {\n tokens: {\n delimiter,\n start,\n },\n } = jsdoc.source[1];\n utils.addLine(1, {\n ...line,\n delimiter,\n start,\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the \"0th\" line (after the `/**`).',\n null,\n fixer,\n );\n\n return;\n }\n\n const finalLine = jsdoc.source[jsdoc.source.length - 1];\n const finalLineTokens = finalLine.tokens;\n if (\n noFinalLineText &&\n finalLineTokens.description.trim()\n ) {\n const fixer = () => {\n const line = {\n ...finalLineTokens,\n };\n line.description = line.description.trimEnd();\n\n const {\n delimiter,\n } = line;\n\n for (const prop of [\n 'delimiter',\n 'postDelimiter',\n 'tag',\n 'type',\n 'lineEnd',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n ]) {\n finalLineTokens[prop] = '';\n }\n\n utils.addLine(jsdoc.source.length - 1, {\n ...line,\n delimiter,\n end: '',\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the final line (before the `*/`).',\n null,\n fixer,\n );\n }\n };\n\n if (noMultilineBlocks) {\n if (\n jsdoc.tags.length &&\n (multilineTags.includes('*') || utils.hasATag(multilineTags))\n ) {\n lineChecks();\n\n return;\n }\n\n if (jsdoc.description.length >= minimumLengthForMultiline) {\n lineChecks();\n\n return;\n }\n\n if (\n noSingleLineBlocks &&\n (!jsdoc.tags.length ||\n !utils.filterTags(({\n tag: tg,\n }) => {\n return !isInvalidSingleLine(tg);\n }).length)\n ) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but fixing would result in a single ' +\n 'line block which you have prohibited with `noSingleLineBlocks`.',\n );\n\n return;\n }\n\n if (jsdoc.tags.length > 1) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has multiple tags.',\n );\n\n return;\n }\n } else if (jsdoc.tags.length === 1 && jsdoc.description.trim()) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has a description with a tag.',\n );\n\n return;\n }\n } else {\n const fixer = () => {\n jsdoc.source = [\n {\n number: 1,\n source: '',\n tokens: jsdoc.source.reduce((obj, {\n tokens: {\n description: desc,\n tag: tg,\n type: typ,\n name: nme,\n lineEnd,\n postType,\n postName,\n postTag,\n },\n }) => {\n if (typ) {\n obj.type = typ;\n }\n\n if (tg && typ && nme) {\n obj.postType = postType;\n }\n\n if (nme) {\n obj.name += nme;\n }\n\n if (nme && desc) {\n obj.postName = postName;\n }\n\n obj.description += desc;\n\n const nameOrDescription = obj.description || obj.name;\n if (\n nameOrDescription && nameOrDescription.slice(-1) !== ' '\n ) {\n obj.description += ' ';\n }\n\n obj.lineEnd = lineEnd;\n\n // Already filtered for multiple tags\n obj.tag += tg;\n if (tg) {\n obj.postTag = postTag || ' ';\n }\n\n return obj;\n }, utils.seedTokens({\n delimiter: '/**',\n end: '*/',\n postDelimiter: ' ',\n })),\n },\n ];\n };\n\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration.',\n null,\n fixer,\n );\n\n return;\n }\n }\n\n lineChecks();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-multiline-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowMultipleTags: {\n type: 'boolean',\n },\n minimumLengthForMultiline: {\n type: 'integer',\n },\n multilineTags: {\n anyOf: [\n {\n enum: [\n '*',\n ],\n type: 'string',\n }, {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n noFinalLineText: {\n type: 'boolean',\n },\n noMultilineBlocks: {\n type: 'boolean',\n },\n noSingleLineBlocks: {\n type: 'boolean',\n },\n noZeroLineText: {\n type: 'boolean',\n },\n singleLineTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  var _default = (0, _iterateJsdoc.default)(({
13
10
  jsdoc,
14
11
  report,
@@ -19,23 +16,19 @@ var _default = (0, _iterateJsdoc.default)(({
19
16
  utils
20
17
  }) => {
21
18
  let always;
22
-
23
19
  if (!jsdoc.description.trim() || !jsdoc.tags.length) {
24
20
  return;
25
21
  }
26
-
27
22
  if (0 in context.options) {
28
23
  always = context.options[0] === 'always';
29
24
  } else {
30
25
  always = true;
31
26
  }
32
-
33
27
  const {
34
28
  description,
35
29
  lastDescriptionLine
36
30
  } = utils.getDescription();
37
31
  const descriptionEndsWithANewline = /\n\r?$/u.test(description);
38
-
39
32
  if (always) {
40
33
  if (!descriptionEndsWithANewline) {
41
34
  const sourceLines = sourceCode.getText(jsdocNode).split('\n');
@@ -73,7 +66,6 @@ var _default = (0, _iterateJsdoc.default)(({
73
66
  type: 'layout'
74
67
  }
75
68
  });
76
-
77
69
  exports.default = _default;
78
70
  module.exports = exports.default;
79
71
  //# sourceMappingURL=newlineAfterDescription.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"newlineAfterDescription.js","names":["iterateJsdoc","jsdoc","report","context","jsdocNode","sourceCode","indent","utils","always","description","trim","tags","length","options","lastDescriptionLine","getDescription","descriptionEndsWithANewline","test","sourceLines","getText","split","fixer","injectedLine","endsWith","splice","replaceText","join","line","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type"],"sources":["../../src/rules/newlineAfterDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n jsdocNode,\n sourceCode,\n indent,\n utils,\n}) => {\n let always;\n\n if (!jsdoc.description.trim() || !jsdoc.tags.length) {\n return;\n }\n\n if (0 in context.options) {\n always = context.options[0] === 'always';\n } else {\n always = true;\n }\n\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n const descriptionEndsWithANewline = (/\\n\\r?$/u).test(description);\n\n if (always) {\n if (!descriptionEndsWithANewline) {\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n');\n\n report('There must be a newline after the description of the JSDoc block.', (fixer) => {\n // Add the new line\n const injectedLine = `${indent} *` +\n (sourceLines[lastDescriptionLine].endsWith('\\r') ? '\\r' : '');\n sourceLines.splice(lastDescriptionLine + 1, 0, injectedLine);\n\n return fixer.replaceText(jsdocNode, sourceLines.join('\\n'));\n }, {\n line: lastDescriptionLine,\n });\n }\n } else if (descriptionEndsWithANewline) {\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n');\n report('There must be no newline after the description of the JSDoc block.', (fixer) => {\n // Remove the extra line\n sourceLines.splice(lastDescriptionLine, 1);\n\n return fixer.replaceText(jsdocNode, sourceLines.join('\\n'));\n }, {\n line: lastDescriptionLine,\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces a consistent padding of the block description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-newline-after-description',\n },\n fixable: 'whitespace',\n schema: [\n {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":";;;;;;;AAAA;;;;eAEe,IAAAA,qBAAA,EAAa,CAAC;EAC3BC,KAD2B;EAE3BC,MAF2B;EAG3BC,OAH2B;EAI3BC,SAJ2B;EAK3BC,UAL2B;EAM3BC,MAN2B;EAO3BC;AAP2B,CAAD,KAQtB;EACJ,IAAIC,MAAJ;;EAEA,IAAI,CAACP,KAAK,CAACQ,WAAN,CAAkBC,IAAlB,EAAD,IAA6B,CAACT,KAAK,CAACU,IAAN,CAAWC,MAA7C,EAAqD;IACnD;EACD;;EAED,IAAI,KAAKT,OAAO,CAACU,OAAjB,EAA0B;IACxBL,MAAM,GAAGL,OAAO,CAACU,OAAR,CAAgB,CAAhB,MAAuB,QAAhC;EACD,CAFD,MAEO;IACLL,MAAM,GAAG,IAAT;EACD;;EAED,MAAM;IACJC,WADI;IAEJK;EAFI,IAGFP,KAAK,CAACQ,cAAN,EAHJ;EAIA,MAAMC,2BAA2B,GAAI,SAAD,CAAYC,IAAZ,CAAiBR,WAAjB,CAApC;;EAEA,IAAID,MAAJ,EAAY;IACV,IAAI,CAACQ,2BAAL,EAAkC;MAChC,MAAME,WAAW,GAAGb,UAAU,CAACc,OAAX,CAAmBf,SAAnB,EAA8BgB,KAA9B,CAAoC,IAApC,CAApB;MAEAlB,MAAM,CAAC,mEAAD,EAAuEmB,KAAD,IAAW;QACrF;QACA,MAAMC,YAAY,GAAI,GAAEhB,MAAO,IAAV,IAClBY,WAAW,CAACJ,mBAAD,CAAX,CAAiCS,QAAjC,CAA0C,IAA1C,IAAkD,IAAlD,GAAyD,EADvC,CAArB;QAEAL,WAAW,CAACM,MAAZ,CAAmBV,mBAAmB,GAAG,CAAzC,EAA4C,CAA5C,EAA+CQ,YAA/C;QAEA,OAAOD,KAAK,CAACI,WAAN,CAAkBrB,SAAlB,EAA6Bc,WAAW,CAACQ,IAAZ,CAAiB,IAAjB,CAA7B,CAAP;MACD,CAPK,EAOH;QACDC,IAAI,EAAEb;MADL,CAPG,CAAN;IAUD;EACF,CAfD,MAeO,IAAIE,2BAAJ,EAAiC;IACtC,MAAME,WAAW,GAAGb,UAAU,CAACc,OAAX,CAAmBf,SAAnB,EAA8BgB,KAA9B,CAAoC,IAApC,CAApB;IACAlB,MAAM,CAAC,oEAAD,EAAwEmB,KAAD,IAAW;MACtF;MACAH,WAAW,CAACM,MAAZ,CAAmBV,mBAAnB,EAAwC,CAAxC;MAEA,OAAOO,KAAK,CAACI,WAAN,CAAkBrB,SAAlB,EAA6Bc,WAAW,CAACQ,IAAZ,CAAiB,IAAjB,CAA7B,CAAP;IACD,CALK,EAKH;MACDC,IAAI,EAAEb;IADL,CALG,CAAN;EAQD;AACF,CArDc,EAqDZ;EACDc,gBAAgB,EAAE,IADjB;EAEDC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJrB,WAAW,EAAE,yDADT;MAEJsB,GAAG,EAAE;IAFD,CADF;IAKJC,OAAO,EAAE,YALL;IAMJC,MAAM,EAAE,CACN;MACEC,IAAI,EAAE,CACJ,QADI,EACM,OADN,CADR;MAIEC,IAAI,EAAE;IAJR,CADM,CANJ;IAcJA,IAAI,EAAE;EAdF;AAFL,CArDY,C"}
1
+ {"version":3,"file":"newlineAfterDescription.js","names":["iterateJsdoc","jsdoc","report","context","jsdocNode","sourceCode","indent","utils","always","description","trim","tags","length","options","lastDescriptionLine","getDescription","descriptionEndsWithANewline","test","sourceLines","getText","split","fixer","injectedLine","endsWith","splice","replaceText","join","line","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type"],"sources":["../../src/rules/newlineAfterDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n jsdocNode,\n sourceCode,\n indent,\n utils,\n}) => {\n let always;\n\n if (!jsdoc.description.trim() || !jsdoc.tags.length) {\n return;\n }\n\n if (0 in context.options) {\n always = context.options[0] === 'always';\n } else {\n always = true;\n }\n\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n const descriptionEndsWithANewline = (/\\n\\r?$/u).test(description);\n\n if (always) {\n if (!descriptionEndsWithANewline) {\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n');\n\n report('There must be a newline after the description of the JSDoc block.', (fixer) => {\n // Add the new line\n const injectedLine = `${indent} *` +\n (sourceLines[lastDescriptionLine].endsWith('\\r') ? '\\r' : '');\n sourceLines.splice(lastDescriptionLine + 1, 0, injectedLine);\n\n return fixer.replaceText(jsdocNode, sourceLines.join('\\n'));\n }, {\n line: lastDescriptionLine,\n });\n }\n } else if (descriptionEndsWithANewline) {\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n');\n report('There must be no newline after the description of the JSDoc block.', (fixer) => {\n // Remove the extra line\n sourceLines.splice(lastDescriptionLine, 1);\n\n return fixer.replaceText(jsdocNode, sourceLines.join('\\n'));\n }, {\n line: lastDescriptionLine,\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces a consistent padding of the block description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-newline-after-description',\n },\n fixable: 'whitespace',\n schema: [\n {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":";;;;;;AAAA;AAA2C;AAAA,eAE5B,IAAAA,qBAAY,EAAC,CAAC;EAC3BC,KAAK;EACLC,MAAM;EACNC,OAAO;EACPC,SAAS;EACTC,UAAU;EACVC,MAAM;EACNC;AACF,CAAC,KAAK;EACJ,IAAIC,MAAM;EAEV,IAAI,CAACP,KAAK,CAACQ,WAAW,CAACC,IAAI,EAAE,IAAI,CAACT,KAAK,CAACU,IAAI,CAACC,MAAM,EAAE;IACnD;EACF;EAEA,IAAI,CAAC,IAAIT,OAAO,CAACU,OAAO,EAAE;IACxBL,MAAM,GAAGL,OAAO,CAACU,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ;EAC1C,CAAC,MAAM;IACLL,MAAM,GAAG,IAAI;EACf;EAEA,MAAM;IACJC,WAAW;IACXK;EACF,CAAC,GAAGP,KAAK,CAACQ,cAAc,EAAE;EAC1B,MAAMC,2BAA2B,GAAI,SAAS,CAAEC,IAAI,CAACR,WAAW,CAAC;EAEjE,IAAID,MAAM,EAAE;IACV,IAAI,CAACQ,2BAA2B,EAAE;MAChC,MAAME,WAAW,GAAGb,UAAU,CAACc,OAAO,CAACf,SAAS,CAAC,CAACgB,KAAK,CAAC,IAAI,CAAC;MAE7DlB,MAAM,CAAC,mEAAmE,EAAGmB,KAAK,IAAK;QACrF;QACA,MAAMC,YAAY,GAAI,GAAEhB,MAAO,IAAG,IAC/BY,WAAW,CAACJ,mBAAmB,CAAC,CAACS,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/DL,WAAW,CAACM,MAAM,CAACV,mBAAmB,GAAG,CAAC,EAAE,CAAC,EAAEQ,YAAY,CAAC;QAE5D,OAAOD,KAAK,CAACI,WAAW,CAACrB,SAAS,EAAEc,WAAW,CAACQ,IAAI,CAAC,IAAI,CAAC,CAAC;MAC7D,CAAC,EAAE;QACDC,IAAI,EAAEb;MACR,CAAC,CAAC;IACJ;EACF,CAAC,MAAM,IAAIE,2BAA2B,EAAE;IACtC,MAAME,WAAW,GAAGb,UAAU,CAACc,OAAO,CAACf,SAAS,CAAC,CAACgB,KAAK,CAAC,IAAI,CAAC;IAC7DlB,MAAM,CAAC,oEAAoE,EAAGmB,KAAK,IAAK;MACtF;MACAH,WAAW,CAACM,MAAM,CAACV,mBAAmB,EAAE,CAAC,CAAC;MAE1C,OAAOO,KAAK,CAACI,WAAW,CAACrB,SAAS,EAAEc,WAAW,CAACQ,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC,EAAE;MACDC,IAAI,EAAEb;IACR,CAAC,CAAC;EACJ;AACF,CAAC,EAAE;EACDc,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJrB,WAAW,EAAE,yDAAyD;MACtEsB,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,YAAY;IACrBC,MAAM,EAAE,CACN;MACEC,IAAI,EAAE,CACJ,QAAQ,EAAE,OAAO,CAClB;MACDC,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA;AAAA"}
@@ -4,18 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _commentParser = require("comment-parser");
9
-
10
8
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  // Neither a single nor 3+ asterisks are valid jsdoc per
15
11
  // https://jsdoc.app/about-getting-started.html#adding-documentation-comments-to-your-code
16
12
  const commentRegexp = /^\/\*(?!\*)/u;
17
13
  const extraAsteriskCommentRegexp = /^\/\*{3,}/u;
18
-
19
14
  var _default = (0, _iterateJsdoc.default)(({
20
15
  context,
21
16
  sourceCode,
@@ -30,24 +25,18 @@ var _default = (0, _iterateJsdoc.default)(({
30
25
  const nonJsdocNodes = allComments.filter(comment => {
31
26
  const commentText = sourceCode.getText(comment);
32
27
  let sliceIndex = 2;
33
-
34
28
  if (!commentRegexp.test(commentText)) {
35
29
  var _extraAsteriskComment;
36
-
37
30
  const multiline = (_extraAsteriskComment = extraAsteriskCommentRegexp.exec(commentText)) === null || _extraAsteriskComment === void 0 ? void 0 : _extraAsteriskComment[0];
38
-
39
31
  if (!multiline) {
40
32
  return false;
41
33
  }
42
-
43
34
  sliceIndex = multiline.length;
44
35
  extraAsterisks = true;
45
-
46
36
  if (preventAllMultiAsteriskBlocks) {
47
37
  return true;
48
38
  }
49
39
  }
50
-
51
40
  const [{
52
41
  tags = {}
53
42
  } = {}] = (0, _commentParser.parse)(`${commentText.slice(0, 2)}*${commentText.slice(sliceIndex)}`);
@@ -57,19 +46,17 @@ var _default = (0, _iterateJsdoc.default)(({
57
46
  return ignore.includes(tag);
58
47
  });
59
48
  });
60
-
61
49
  if (!nonJsdocNodes.length) {
62
50
  return;
63
51
  }
64
-
65
52
  for (const node of nonJsdocNodes) {
66
- const report = makeReport(context, node); // eslint-disable-next-line no-loop-func
53
+ const report = makeReport(context, node);
67
54
 
55
+ // eslint-disable-next-line no-loop-func
68
56
  const fix = fixer => {
69
57
  const text = sourceCode.getText(node);
70
58
  return fixer.replaceText(node, extraAsterisks ? text.replace(extraAsteriskCommentRegexp, '/**') : text.replace('/*', '/**'));
71
59
  };
72
-
73
60
  report('Expected JSDoc-like comment to begin with two asterisks.', fix);
74
61
  }
75
62
  }, {
@@ -98,7 +85,6 @@ var _default = (0, _iterateJsdoc.default)(({
98
85
  type: 'layout'
99
86
  }
100
87
  });
101
-
102
88
  exports.default = _default;
103
89
  module.exports = exports.default;
104
90
  //# sourceMappingURL=noBadBlocks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"noBadBlocks.js","names":["commentRegexp","extraAsteriskCommentRegexp","iterateJsdoc","context","sourceCode","allComments","makeReport","ignore","preventAllMultiAsteriskBlocks","options","extraAsterisks","nonJsdocNodes","filter","comment","commentText","getText","sliceIndex","test","multiline","exec","length","tags","commentParser","slice","some","tag","includes","node","report","fix","fixer","text","replaceText","replace","checkFile","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type"],"sources":["../../src/rules/noBadBlocks.js"],"sourcesContent":["import {\n parse as commentParser,\n} from 'comment-parser';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// Neither a single nor 3+ asterisks are valid jsdoc per\n// https://jsdoc.app/about-getting-started.html#adding-documentation-comments-to-your-code\nconst commentRegexp = /^\\/\\*(?!\\*)/u;\nconst extraAsteriskCommentRegexp = /^\\/\\*{3,}/u;\n\nexport default iterateJsdoc(({\n context,\n sourceCode,\n allComments,\n makeReport,\n}) => {\n const [\n {\n ignore = [\n 'ts-check',\n 'ts-expect-error',\n 'ts-ignore',\n 'ts-nocheck',\n ],\n preventAllMultiAsteriskBlocks = false,\n } = {},\n ] = context.options;\n\n let extraAsterisks = false;\n const nonJsdocNodes = allComments.filter((comment) => {\n const commentText = sourceCode.getText(comment);\n let sliceIndex = 2;\n if (!commentRegexp.test(commentText)) {\n const multiline = extraAsteriskCommentRegexp.exec(commentText)?.[0];\n if (!multiline) {\n return false;\n }\n\n sliceIndex = multiline.length;\n extraAsterisks = true;\n if (preventAllMultiAsteriskBlocks) {\n return true;\n }\n }\n\n const [\n {\n tags = {},\n } = {},\n ] = commentParser(\n `${commentText.slice(0, 2)}*${commentText.slice(sliceIndex)}`,\n );\n\n return tags.length && !tags.some(({\n tag,\n }) => {\n return ignore.includes(tag);\n });\n });\n\n if (!nonJsdocNodes.length) {\n return;\n }\n\n for (const node of nonJsdocNodes) {\n const report = makeReport(context, node);\n\n // eslint-disable-next-line no-loop-func\n const fix = (fixer) => {\n const text = sourceCode.getText(node);\n\n return fixer.replaceText(\n node,\n extraAsterisks ?\n text.replace(extraAsteriskCommentRegexp, '/**') :\n text.replace('/*', '/**'),\n );\n };\n\n report('Expected JSDoc-like comment to begin with two asterisks.', fix);\n }\n}, {\n checkFile: true,\n meta: {\n docs: {\n description: 'This rule checks for multi-line-style comments which fail to meet the criteria of a jsdoc block.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-bad-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n ignore: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n preventAllMultiAsteriskBlocks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"noBadBlocks.js","names":["commentRegexp","extraAsteriskCommentRegexp","iterateJsdoc","context","sourceCode","allComments","makeReport","ignore","preventAllMultiAsteriskBlocks","options","extraAsterisks","nonJsdocNodes","filter","comment","commentText","getText","sliceIndex","test","multiline","exec","length","tags","commentParser","slice","some","tag","includes","node","report","fix","fixer","text","replaceText","replace","checkFile","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type"],"sources":["../../src/rules/noBadBlocks.js"],"sourcesContent":["import {\n parse as commentParser,\n} from 'comment-parser';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// Neither a single nor 3+ asterisks are valid jsdoc per\n// https://jsdoc.app/about-getting-started.html#adding-documentation-comments-to-your-code\nconst commentRegexp = /^\\/\\*(?!\\*)/u;\nconst extraAsteriskCommentRegexp = /^\\/\\*{3,}/u;\n\nexport default iterateJsdoc(({\n context,\n sourceCode,\n allComments,\n makeReport,\n}) => {\n const [\n {\n ignore = [\n 'ts-check',\n 'ts-expect-error',\n 'ts-ignore',\n 'ts-nocheck',\n ],\n preventAllMultiAsteriskBlocks = false,\n } = {},\n ] = context.options;\n\n let extraAsterisks = false;\n const nonJsdocNodes = allComments.filter((comment) => {\n const commentText = sourceCode.getText(comment);\n let sliceIndex = 2;\n if (!commentRegexp.test(commentText)) {\n const multiline = extraAsteriskCommentRegexp.exec(commentText)?.[0];\n if (!multiline) {\n return false;\n }\n\n sliceIndex = multiline.length;\n extraAsterisks = true;\n if (preventAllMultiAsteriskBlocks) {\n return true;\n }\n }\n\n const [\n {\n tags = {},\n } = {},\n ] = commentParser(\n `${commentText.slice(0, 2)}*${commentText.slice(sliceIndex)}`,\n );\n\n return tags.length && !tags.some(({\n tag,\n }) => {\n return ignore.includes(tag);\n });\n });\n\n if (!nonJsdocNodes.length) {\n return;\n }\n\n for (const node of nonJsdocNodes) {\n const report = makeReport(context, node);\n\n // eslint-disable-next-line no-loop-func\n const fix = (fixer) => {\n const text = sourceCode.getText(node);\n\n return fixer.replaceText(\n node,\n extraAsterisks ?\n text.replace(extraAsteriskCommentRegexp, '/**') :\n text.replace('/*', '/**'),\n );\n };\n\n report('Expected JSDoc-like comment to begin with two asterisks.', fix);\n }\n}, {\n checkFile: true,\n meta: {\n docs: {\n description: 'This rule checks for multi-line-style comments which fail to meet the criteria of a jsdoc block.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-bad-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n ignore: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n preventAllMultiAsteriskBlocks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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"}
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  var _default = (0, _iterateJsdoc.default)(({
13
10
  context,
14
11
  utils
@@ -17,7 +14,6 @@ var _default = (0, _iterateJsdoc.default)(({
17
14
  noOptionalParamNames
18
15
  } = context.options[0] || {};
19
16
  const paramTags = utils.getPresentTags(['param', 'arg', 'argument']);
20
-
21
17
  for (const tag of paramTags) {
22
18
  if (noOptionalParamNames && tag.optional) {
23
19
  utils.reportJSDoc(`Optional param names are not permitted on @${tag.tag}.`, tag, () => {
@@ -33,9 +29,7 @@ var _default = (0, _iterateJsdoc.default)(({
33
29
  });
34
30
  }
35
31
  }
36
-
37
32
  const defaultTags = utils.getPresentTags(['default', 'defaultvalue']);
38
-
39
33
  for (const tag of defaultTags) {
40
34
  if (tag.description.trim()) {
41
35
  utils.reportJSDoc(`Default values are not permitted on @${tag.tag}.`, tag, () => {
@@ -85,7 +79,6 @@ var _default = (0, _iterateJsdoc.default)(({
85
79
  type: 'suggestion'
86
80
  }
87
81
  });
88
-
89
82
  exports.default = _default;
90
83
  module.exports = exports.default;
91
84
  //# sourceMappingURL=noDefaults.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"noDefaults.js","names":["iterateJsdoc","context","utils","noOptionalParamNames","options","paramTags","getPresentTags","tag","optional","reportJSDoc","changeTag","name","replace","default","defaultTags","description","trim","postTag","contextDefaults","meta","docs","url","fixable","schema","additionalProperties","properties","contexts","items","anyOf","type","comment"],"sources":["../../src/rules/noDefaults.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n const {\n noOptionalParamNames,\n } = context.options[0] || {};\n const paramTags = utils.getPresentTags([\n 'param', 'arg', 'argument',\n ]);\n for (const tag of paramTags) {\n if (noOptionalParamNames && tag.optional) {\n utils.reportJSDoc(`Optional param names are not permitted on @${tag.tag}.`, tag, () => {\n utils.changeTag(tag, {\n name: tag.name.replace(/([^=]*)(=.+)?/u, '$1'),\n });\n });\n } else if (tag.default) {\n utils.reportJSDoc(`Defaults are not permitted on @${tag.tag}.`, tag, () => {\n utils.changeTag(tag, {\n name: tag.name.replace(/([^=]*)(=.+)?/u, '[$1]'),\n });\n });\n }\n }\n\n const defaultTags = utils.getPresentTags([\n 'default', 'defaultvalue',\n ]);\n for (const tag of defaultTags) {\n if (tag.description.trim()) {\n utils.reportJSDoc(`Default values are not permitted on @${tag.tag}.`, tag, () => {\n utils.changeTag(tag, {\n description: '',\n postTag: '',\n });\n });\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'This rule reports defaults being used on the relevant portion of `@param` or `@default`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-defaults',\n },\n fixable: 'code',\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 noOptionalParamNames: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;;AAAA;;;;eAEe,IAAAA,qBAAA,EAAa,CAAC;EAC3BC,OAD2B;EAE3BC;AAF2B,CAAD,KAGtB;EACJ,MAAM;IACJC;EADI,IAEFF,OAAO,CAACG,OAAR,CAAgB,CAAhB,KAAsB,EAF1B;EAGA,MAAMC,SAAS,GAAGH,KAAK,CAACI,cAAN,CAAqB,CACrC,OADqC,EAC5B,KAD4B,EACrB,UADqB,CAArB,CAAlB;;EAGA,KAAK,MAAMC,GAAX,IAAkBF,SAAlB,EAA6B;IAC3B,IAAIF,oBAAoB,IAAII,GAAG,CAACC,QAAhC,EAA0C;MACxCN,KAAK,CAACO,WAAN,CAAmB,8CAA6CF,GAAG,CAACA,GAAI,GAAxE,EAA4EA,GAA5E,EAAiF,MAAM;QACrFL,KAAK,CAACQ,SAAN,CAAgBH,GAAhB,EAAqB;UACnBI,IAAI,EAAEJ,GAAG,CAACI,IAAJ,CAASC,OAAT,CAAiB,gBAAjB,EAAmC,IAAnC;QADa,CAArB;MAGD,CAJD;IAKD,CAND,MAMO,IAAIL,GAAG,CAACM,OAAR,EAAiB;MACtBX,KAAK,CAACO,WAAN,CAAmB,kCAAiCF,GAAG,CAACA,GAAI,GAA5D,EAAgEA,GAAhE,EAAqE,MAAM;QACzEL,KAAK,CAACQ,SAAN,CAAgBH,GAAhB,EAAqB;UACnBI,IAAI,EAAEJ,GAAG,CAACI,IAAJ,CAASC,OAAT,CAAiB,gBAAjB,EAAmC,MAAnC;QADa,CAArB;MAGD,CAJD;IAKD;EACF;;EAED,MAAME,WAAW,GAAGZ,KAAK,CAACI,cAAN,CAAqB,CACvC,SADuC,EAC5B,cAD4B,CAArB,CAApB;;EAGA,KAAK,MAAMC,GAAX,IAAkBO,WAAlB,EAA+B;IAC7B,IAAIP,GAAG,CAACQ,WAAJ,CAAgBC,IAAhB,EAAJ,EAA4B;MAC1Bd,KAAK,CAACO,WAAN,CAAmB,wCAAuCF,GAAG,CAACA,GAAI,GAAlE,EAAsEA,GAAtE,EAA2E,MAAM;QAC/EL,KAAK,CAACQ,SAAN,CAAgBH,GAAhB,EAAqB;UACnBQ,WAAW,EAAE,EADM;UAEnBE,OAAO,EAAE;QAFU,CAArB;MAID,CALD;IAMD;EACF;AACF,CAvCc,EAuCZ;EACDC,eAAe,EAAE,IADhB;EAEDC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJL,WAAW,EAAE,0FADT;MAEJM,GAAG,EAAE;IAFD,CADF;IAKJC,OAAO,EAAE,MALL;IAMJC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KADxB;MAEEC,UAAU,EAAE;QACVC,QAAQ,EAAE;UACRC,KAAK,EAAE;YACLC,KAAK,EAAE,CACL;cACEC,IAAI,EAAE;YADR,CADK,EAIL;cACEL,oBAAoB,EAAE,KADxB;cAEEC,UAAU,EAAE;gBACVK,OAAO,EAAE;kBACPD,IAAI,EAAE;gBADC,CADC;gBAIV5B,OAAO,EAAE;kBACP4B,IAAI,EAAE;gBADC;cAJC,CAFd;cAUEA,IAAI,EAAE;YAVR,CAJK;UADF,CADC;UAoBRA,IAAI,EAAE;QApBE,CADA;QAuBV1B,oBAAoB,EAAE;UACpB0B,IAAI,EAAE;QADc;MAvBZ,CAFd;MA6BEA,IAAI,EAAE;IA7BR,CADM,CANJ;IAuCJA,IAAI,EAAE;EAvCF;AAFL,CAvCY,C"}
1
+ {"version":3,"file":"noDefaults.js","names":["iterateJsdoc","context","utils","noOptionalParamNames","options","paramTags","getPresentTags","tag","optional","reportJSDoc","changeTag","name","replace","default","defaultTags","description","trim","postTag","contextDefaults","meta","docs","url","fixable","schema","additionalProperties","properties","contexts","items","anyOf","type","comment"],"sources":["../../src/rules/noDefaults.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n const {\n noOptionalParamNames,\n } = context.options[0] || {};\n const paramTags = utils.getPresentTags([\n 'param', 'arg', 'argument',\n ]);\n for (const tag of paramTags) {\n if (noOptionalParamNames && tag.optional) {\n utils.reportJSDoc(`Optional param names are not permitted on @${tag.tag}.`, tag, () => {\n utils.changeTag(tag, {\n name: tag.name.replace(/([^=]*)(=.+)?/u, '$1'),\n });\n });\n } else if (tag.default) {\n utils.reportJSDoc(`Defaults are not permitted on @${tag.tag}.`, tag, () => {\n utils.changeTag(tag, {\n name: tag.name.replace(/([^=]*)(=.+)?/u, '[$1]'),\n });\n });\n }\n }\n\n const defaultTags = utils.getPresentTags([\n 'default', 'defaultvalue',\n ]);\n for (const tag of defaultTags) {\n if (tag.description.trim()) {\n utils.reportJSDoc(`Default values are not permitted on @${tag.tag}.`, tag, () => {\n utils.changeTag(tag, {\n description: '',\n postTag: '',\n });\n });\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'This rule reports defaults being used on the relevant portion of `@param` or `@default`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-defaults',\n },\n fixable: 'code',\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 noOptionalParamNames: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA;AAA2C;AAAA,eAE5B,IAAAA,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC;EACF,CAAC,GAAGF,OAAO,CAACG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAC5B,MAAMC,SAAS,GAAGH,KAAK,CAACI,cAAc,CAAC,CACrC,OAAO,EAAE,KAAK,EAAE,UAAU,CAC3B,CAAC;EACF,KAAK,MAAMC,GAAG,IAAIF,SAAS,EAAE;IAC3B,IAAIF,oBAAoB,IAAII,GAAG,CAACC,QAAQ,EAAE;MACxCN,KAAK,CAACO,WAAW,CAAE,8CAA6CF,GAAG,CAACA,GAAI,GAAE,EAAEA,GAAG,EAAE,MAAM;QACrFL,KAAK,CAACQ,SAAS,CAACH,GAAG,EAAE;UACnBI,IAAI,EAAEJ,GAAG,CAACI,IAAI,CAACC,OAAO,CAAC,gBAAgB,EAAE,IAAI;QAC/C,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,MAAM,IAAIL,GAAG,CAACM,OAAO,EAAE;MACtBX,KAAK,CAACO,WAAW,CAAE,kCAAiCF,GAAG,CAACA,GAAI,GAAE,EAAEA,GAAG,EAAE,MAAM;QACzEL,KAAK,CAACQ,SAAS,CAACH,GAAG,EAAE;UACnBI,IAAI,EAAEJ,GAAG,CAACI,IAAI,CAACC,OAAO,CAAC,gBAAgB,EAAE,MAAM;QACjD,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;EACF;EAEA,MAAME,WAAW,GAAGZ,KAAK,CAACI,cAAc,CAAC,CACvC,SAAS,EAAE,cAAc,CAC1B,CAAC;EACF,KAAK,MAAMC,GAAG,IAAIO,WAAW,EAAE;IAC7B,IAAIP,GAAG,CAACQ,WAAW,CAACC,IAAI,EAAE,EAAE;MAC1Bd,KAAK,CAACO,WAAW,CAAE,wCAAuCF,GAAG,CAACA,GAAI,GAAE,EAAEA,GAAG,EAAE,MAAM;QAC/EL,KAAK,CAACQ,SAAS,CAACH,GAAG,EAAE;UACnBQ,WAAW,EAAE,EAAE;UACfE,OAAO,EAAE;QACX,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;EACF;AACF,CAAC,EAAE;EACDC,eAAe,EAAE,IAAI;EACrBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJL,WAAW,EAAE,0FAA0F;MACvGM,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVC,QAAQ,EAAE;UACRC,KAAK,EAAE;YACLC,KAAK,EAAE,CACL;cACEC,IAAI,EAAE;YACR,CAAC,EACD;cACEL,oBAAoB,EAAE,KAAK;cAC3BC,UAAU,EAAE;gBACVK,OAAO,EAAE;kBACPD,IAAI,EAAE;gBACR,CAAC;gBACD5B,OAAO,EAAE;kBACP4B,IAAI,EAAE;gBACR;cACF,CAAC;cACDA,IAAI,EAAE;YACR,CAAC;UAEL,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACD1B,oBAAoB,EAAE;UACpB0B,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA;AAAA"}
@@ -4,31 +4,23 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _esquery = _interopRequireDefault(require("esquery"));
9
-
10
8
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  const setDefaults = state => {
15
11
  if (!state.selectorMap) {
16
12
  state.selectorMap = {};
17
13
  }
18
14
  };
19
-
20
15
  const incrementSelector = (state, selector, comment) => {
21
16
  if (!state.selectorMap[selector]) {
22
17
  state.selectorMap[selector] = {};
23
18
  }
24
-
25
19
  if (!state.selectorMap[selector][comment]) {
26
20
  state.selectorMap[selector][comment] = 0;
27
21
  }
28
-
29
22
  state.selectorMap[selector][comment]++;
30
23
  };
31
-
32
24
  var _default = (0, _iterateJsdoc.default)(({
33
25
  context,
34
26
  node,
@@ -42,7 +34,6 @@ var _default = (0, _iterateJsdoc.default)(({
42
34
  // Handle error later
43
35
  return;
44
36
  }
45
-
46
37
  const {
47
38
  contexts
48
39
  } = context.options[0];
@@ -58,7 +49,6 @@ var _default = (0, _iterateJsdoc.default)(({
58
49
  incrementSelector(state, contextStr, comment);
59
50
  }, {
60
51
  contextSelected: true,
61
-
62
52
  exit({
63
53
  context,
64
54
  state
@@ -75,17 +65,16 @@ var _default = (0, _iterateJsdoc.default)(({
75
65
  });
76
66
  return;
77
67
  }
78
-
79
68
  setDefaults(state);
80
69
  const {
81
70
  contexts
82
- } = context.options[0]; // Report when MISSING
71
+ } = context.options[0];
83
72
 
73
+ // Report when MISSING
84
74
  contexts.some(cntxt => {
85
75
  const contextStr = typeof cntxt === 'object' ? cntxt.context ?? 'any' : cntxt;
86
76
  const comment = (cntxt === null || cntxt === void 0 ? void 0 : cntxt.comment) ?? '';
87
77
  const contextKey = contextStr === 'any' ? undefined : contextStr;
88
-
89
78
  if ((!state.selectorMap[contextKey] || !state.selectorMap[contextKey][comment] || state.selectorMap[contextKey][comment] < ((cntxt === null || cntxt === void 0 ? void 0 : cntxt.minimum) ?? 1)) && (contextStr !== 'any' || Object.values(state.selectorMap).every(cmmnt => {
90
79
  return !cmmnt[comment] || cmmnt[comment] < ((cntxt === null || cntxt === void 0 ? void 0 : cntxt.minimum) ?? 1);
91
80
  }))) {
@@ -107,11 +96,9 @@ var _default = (0, _iterateJsdoc.default)(({
107
96
  });
108
97
  return true;
109
98
  }
110
-
111
99
  return false;
112
100
  });
113
101
  },
114
-
115
102
  matchContext: true,
116
103
  meta: {
117
104
  docs: {
@@ -153,7 +140,6 @@ var _default = (0, _iterateJsdoc.default)(({
153
140
  type: 'suggestion'
154
141
  }
155
142
  });
156
-
157
143
  exports.default = _default;
158
144
  module.exports = exports.default;
159
145
  //# sourceMappingURL=noMissingSyntax.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"noMissingSyntax.js","names":["setDefaults","state","selectorMap","incrementSelector","selector","comment","iterateJsdoc","context","node","info","sourceCode","options","contexts","foundContext","find","cntxt","esquery","matches","parse","visitorKeys","contextStr","contextSelected","exit","length","report","loc","start","column","line","message","some","contextKey","undefined","minimum","Object","values","every","cmmnt","data","end","matchContext","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","anyOf","type"],"sources":["../../src/rules/noMissingSyntax.js"],"sourcesContent":["import esquery from 'esquery';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst setDefaults = (state) => {\n if (!state.selectorMap) {\n state.selectorMap = {};\n }\n};\n\nconst incrementSelector = (state, selector, comment) => {\n if (!state.selectorMap[selector]) {\n state.selectorMap[selector] = {};\n }\n\n if (!state.selectorMap[selector][comment]) {\n state.selectorMap[selector][comment] = 0;\n }\n\n state.selectorMap[selector][comment]++;\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n info: {\n comment,\n },\n sourceCode,\n state,\n}) => {\n if (!context.options[0]) {\n // Handle error later\n return;\n }\n\n const {\n contexts,\n } = context.options[0];\n\n const foundContext = contexts.find((cntxt) => {\n return typeof cntxt === 'string' ?\n esquery.matches(node, esquery.parse(cntxt), null, {\n visitorKeys: sourceCode.visitorKeys,\n }) :\n (!cntxt.context || cntxt.context === 'any' || esquery.matches(node, esquery.parse(cntxt.context), null, {\n visitorKeys: sourceCode.visitorKeys,\n })) &&\n comment === cntxt.comment;\n });\n\n const contextStr = typeof foundContext === 'object' ?\n foundContext.context ?? 'any' :\n foundContext;\n\n setDefaults(state);\n\n incrementSelector(state, contextStr, comment);\n}, {\n contextSelected: true,\n exit ({\n context,\n state,\n }) {\n if (!context.options.length) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: 'Rule `no-missing-syntax` is missing a `context` option.',\n });\n\n return;\n }\n\n setDefaults(state);\n\n const {\n contexts,\n } = context.options[0];\n\n // Report when MISSING\n contexts.some((cntxt) => {\n const contextStr = typeof cntxt === 'object' ? cntxt.context ?? 'any' : cntxt;\n const comment = cntxt?.comment ?? '';\n\n const contextKey = contextStr === 'any' ? undefined : contextStr;\n\n if (\n (!state.selectorMap[contextKey] ||\n !state.selectorMap[contextKey][comment] ||\n state.selectorMap[contextKey][comment] < (cntxt?.minimum ?? 1)) &&\n (contextStr !== 'any' || Object.values(state.selectorMap).every((cmmnt) => {\n return !cmmnt[comment] || cmmnt[comment] < (cntxt?.minimum ?? 1);\n }))\n ) {\n const message = cntxt?.message ?? 'Syntax is required: {{context}}' +\n (comment ? ' with {{comment}}' : '');\n context.report({\n data: {\n comment,\n context: contextStr,\n },\n loc: {\n end: {\n line: 1,\n },\n start: {\n line: 1,\n },\n },\n message,\n });\n\n return true;\n }\n\n return false;\n });\n },\n matchContext: true,\n meta: {\n docs: {\n description: 'Reports when certain comment structures are always expected.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-missing-syntax',\n },\n fixable: 'code',\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 message: {\n type: 'string',\n },\n minimum: {\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"noMissingSyntax.js","names":["setDefaults","state","selectorMap","incrementSelector","selector","comment","iterateJsdoc","context","node","info","sourceCode","options","contexts","foundContext","find","cntxt","esquery","matches","parse","visitorKeys","contextStr","contextSelected","exit","length","report","loc","start","column","line","message","some","contextKey","undefined","minimum","Object","values","every","cmmnt","data","end","matchContext","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","anyOf","type"],"sources":["../../src/rules/noMissingSyntax.js"],"sourcesContent":["import esquery from 'esquery';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst setDefaults = (state) => {\n if (!state.selectorMap) {\n state.selectorMap = {};\n }\n};\n\nconst incrementSelector = (state, selector, comment) => {\n if (!state.selectorMap[selector]) {\n state.selectorMap[selector] = {};\n }\n\n if (!state.selectorMap[selector][comment]) {\n state.selectorMap[selector][comment] = 0;\n }\n\n state.selectorMap[selector][comment]++;\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n info: {\n comment,\n },\n sourceCode,\n state,\n}) => {\n if (!context.options[0]) {\n // Handle error later\n return;\n }\n\n const {\n contexts,\n } = context.options[0];\n\n const foundContext = contexts.find((cntxt) => {\n return typeof cntxt === 'string' ?\n esquery.matches(node, esquery.parse(cntxt), null, {\n visitorKeys: sourceCode.visitorKeys,\n }) :\n (!cntxt.context || cntxt.context === 'any' || esquery.matches(node, esquery.parse(cntxt.context), null, {\n visitorKeys: sourceCode.visitorKeys,\n })) &&\n comment === cntxt.comment;\n });\n\n const contextStr = typeof foundContext === 'object' ?\n foundContext.context ?? 'any' :\n foundContext;\n\n setDefaults(state);\n\n incrementSelector(state, contextStr, comment);\n}, {\n contextSelected: true,\n exit ({\n context,\n state,\n }) {\n if (!context.options.length) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: 'Rule `no-missing-syntax` is missing a `context` option.',\n });\n\n return;\n }\n\n setDefaults(state);\n\n const {\n contexts,\n } = context.options[0];\n\n // Report when MISSING\n contexts.some((cntxt) => {\n const contextStr = typeof cntxt === 'object' ? cntxt.context ?? 'any' : cntxt;\n const comment = cntxt?.comment ?? '';\n\n const contextKey = contextStr === 'any' ? undefined : contextStr;\n\n if (\n (!state.selectorMap[contextKey] ||\n !state.selectorMap[contextKey][comment] ||\n state.selectorMap[contextKey][comment] < (cntxt?.minimum ?? 1)) &&\n (contextStr !== 'any' || Object.values(state.selectorMap).every((cmmnt) => {\n return !cmmnt[comment] || cmmnt[comment] < (cntxt?.minimum ?? 1);\n }))\n ) {\n const message = cntxt?.message ?? 'Syntax is required: {{context}}' +\n (comment ? ' with {{comment}}' : '');\n context.report({\n data: {\n comment,\n context: contextStr,\n },\n loc: {\n end: {\n line: 1,\n },\n start: {\n line: 1,\n },\n },\n message,\n });\n\n return true;\n }\n\n return false;\n });\n },\n matchContext: true,\n meta: {\n docs: {\n description: 'Reports when certain comment structures are always expected.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-missing-syntax',\n },\n fixable: 'code',\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 message: {\n type: 'string',\n },\n minimum: {\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA;AACA;AAA2C;AAE3C,MAAMA,WAAW,GAAIC,KAAK,IAAK;EAC7B,IAAI,CAACA,KAAK,CAACC,WAAW,EAAE;IACtBD,KAAK,CAACC,WAAW,GAAG,CAAC,CAAC;EACxB;AACF,CAAC;AAED,MAAMC,iBAAiB,GAAG,CAACF,KAAK,EAAEG,QAAQ,EAAEC,OAAO,KAAK;EACtD,IAAI,CAACJ,KAAK,CAACC,WAAW,CAACE,QAAQ,CAAC,EAAE;IAChCH,KAAK,CAACC,WAAW,CAACE,QAAQ,CAAC,GAAG,CAAC,CAAC;EAClC;EAEA,IAAI,CAACH,KAAK,CAACC,WAAW,CAACE,QAAQ,CAAC,CAACC,OAAO,CAAC,EAAE;IACzCJ,KAAK,CAACC,WAAW,CAACE,QAAQ,CAAC,CAACC,OAAO,CAAC,GAAG,CAAC;EAC1C;EAEAJ,KAAK,CAACC,WAAW,CAACE,QAAQ,CAAC,CAACC,OAAO,CAAC,EAAE;AACxC,CAAC;AAAC,eAEa,IAAAC,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,IAAI;EACJC,IAAI,EAAE;IACJJ;EACF,CAAC;EACDK,UAAU;EACVT;AACF,CAAC,KAAK;EACJ,IAAI,CAACM,OAAO,CAACI,OAAO,CAAC,CAAC,CAAC,EAAE;IACvB;IACA;EACF;EAEA,MAAM;IACJC;EACF,CAAC,GAAGL,OAAO,CAACI,OAAO,CAAC,CAAC,CAAC;EAEtB,MAAME,YAAY,GAAGD,QAAQ,CAACE,IAAI,CAAEC,KAAK,IAAK;IAC5C,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAC9BC,gBAAO,CAACC,OAAO,CAACT,IAAI,EAAEQ,gBAAO,CAACE,KAAK,CAACH,KAAK,CAAC,EAAE,IAAI,EAAE;MAChDI,WAAW,EAAET,UAAU,CAACS;IAC1B,CAAC,CAAC,GACF,CAAC,CAACJ,KAAK,CAACR,OAAO,IAAIQ,KAAK,CAACR,OAAO,KAAK,KAAK,IAAIS,gBAAO,CAACC,OAAO,CAACT,IAAI,EAAEQ,gBAAO,CAACE,KAAK,CAACH,KAAK,CAACR,OAAO,CAAC,EAAE,IAAI,EAAE;MACtGY,WAAW,EAAET,UAAU,CAACS;IAC1B,CAAC,CAAC,KACAd,OAAO,KAAKU,KAAK,CAACV,OAAO;EAC/B,CAAC,CAAC;EAEF,MAAMe,UAAU,GAAG,OAAOP,YAAY,KAAK,QAAQ,GACjDA,YAAY,CAACN,OAAO,IAAI,KAAK,GAC7BM,YAAY;EAEdb,WAAW,CAACC,KAAK,CAAC;EAElBE,iBAAiB,CAACF,KAAK,EAAEmB,UAAU,EAAEf,OAAO,CAAC;AAC/C,CAAC,EAAE;EACDgB,eAAe,EAAE,IAAI;EACrBC,IAAI,CAAE;IACJf,OAAO;IACPN;EACF,CAAC,EAAE;IACD,IAAI,CAACM,OAAO,CAACI,OAAO,CAACY,MAAM,EAAE;MAC3BhB,OAAO,CAACiB,MAAM,CAAC;QACbC,GAAG,EAAE;UACHC,KAAK,EAAE;YACLC,MAAM,EAAE,CAAC;YACTC,IAAI,EAAE;UACR;QACF,CAAC;QACDC,OAAO,EAAE;MACX,CAAC,CAAC;MAEF;IACF;IAEA7B,WAAW,CAACC,KAAK,CAAC;IAElB,MAAM;MACJW;IACF,CAAC,GAAGL,OAAO,CAACI,OAAO,CAAC,CAAC,CAAC;;IAEtB;IACAC,QAAQ,CAACkB,IAAI,CAAEf,KAAK,IAAK;MACvB,MAAMK,UAAU,GAAG,OAAOL,KAAK,KAAK,QAAQ,GAAGA,KAAK,CAACR,OAAO,IAAI,KAAK,GAAGQ,KAAK;MAC7E,MAAMV,OAAO,GAAG,CAAAU,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEV,OAAO,KAAI,EAAE;MAEpC,MAAM0B,UAAU,GAAGX,UAAU,KAAK,KAAK,GAAGY,SAAS,GAAGZ,UAAU;MAEhE,IACE,CAAC,CAACnB,KAAK,CAACC,WAAW,CAAC6B,UAAU,CAAC,IAC/B,CAAC9B,KAAK,CAACC,WAAW,CAAC6B,UAAU,CAAC,CAAC1B,OAAO,CAAC,IACvCJ,KAAK,CAACC,WAAW,CAAC6B,UAAU,CAAC,CAAC1B,OAAO,CAAC,IAAI,CAAAU,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEkB,OAAO,KAAI,CAAC,CAAC,MAC7Db,UAAU,KAAK,KAAK,IAAIc,MAAM,CAACC,MAAM,CAAClC,KAAK,CAACC,WAAW,CAAC,CAACkC,KAAK,CAAEC,KAAK,IAAK;QACzE,OAAO,CAACA,KAAK,CAAChC,OAAO,CAAC,IAAIgC,KAAK,CAAChC,OAAO,CAAC,IAAI,CAAAU,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEkB,OAAO,KAAI,CAAC,CAAC;MAClE,CAAC,CAAC,CAAC,EACH;QACA,MAAMJ,OAAO,GAAG,CAAAd,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEc,OAAO,KAAI,iCAAiC,IAChExB,OAAO,GAAG,mBAAmB,GAAG,EAAE,CAAC;QACtCE,OAAO,CAACiB,MAAM,CAAC;UACbc,IAAI,EAAE;YACJjC,OAAO;YACPE,OAAO,EAAEa;UACX,CAAC;UACDK,GAAG,EAAE;YACHc,GAAG,EAAE;cACHX,IAAI,EAAE;YACR,CAAC;YACDF,KAAK,EAAE;cACLE,IAAI,EAAE;YACR;UACF,CAAC;UACDC;QACF,CAAC,CAAC;QAEF,OAAO,IAAI;MACb;MAEA,OAAO,KAAK;IACd,CAAC,CAAC;EACJ,CAAC;EACDW,YAAY,EAAE,IAAI;EAClBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,8DAA8D;MAC3EC,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVpC,QAAQ,EAAE;UACRqC,KAAK,EAAE;YACLC,KAAK,EAAE,CACL;cACEC,IAAI,EAAE;YACR,CAAC,EACD;cACEJ,oBAAoB,EAAE,KAAK;cAC3BC,UAAU,EAAE;gBACV3C,OAAO,EAAE;kBACP8C,IAAI,EAAE;gBACR,CAAC;gBACD5C,OAAO,EAAE;kBACP4C,IAAI,EAAE;gBACR,CAAC;gBACDtB,OAAO,EAAE;kBACPsB,IAAI,EAAE;gBACR,CAAC;gBACDlB,OAAO,EAAE;kBACPkB,IAAI,EAAE;gBACR;cACF,CAAC;cACDA,IAAI,EAAE;YACR,CAAC;UAEL,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA;AAAA"}