eslint-plugin-jsdoc 55.4.0 → 56.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/cjs/WarnSettings.d.ts +16 -0
  2. package/dist/cjs/WarnSettings.js +30 -0
  3. package/dist/cjs/alignTransform.d.ts +33 -0
  4. package/dist/cjs/alignTransform.js +285 -0
  5. package/dist/cjs/defaultTagOrder.d.ts +4 -0
  6. package/dist/cjs/defaultTagOrder.js +152 -0
  7. package/dist/cjs/exportParser.d.ts +40 -0
  8. package/dist/cjs/exportParser.js +754 -0
  9. package/dist/cjs/getDefaultTagStructureForMode.d.ts +10 -0
  10. package/dist/cjs/getDefaultTagStructureForMode.js +840 -0
  11. package/dist/cjs/getJsdocProcessorPlugin.cjs +4 -0
  12. package/dist/cjs/getJsdocProcessorPlugin.d.cts +1 -0
  13. package/dist/cjs/getJsdocProcessorPlugin.d.ts +66 -0
  14. package/dist/cjs/getJsdocProcessorPlugin.js +553 -0
  15. package/dist/cjs/index-cjs.d.ts +16 -0
  16. package/dist/cjs/index-cjs.js +492 -0
  17. package/dist/cjs/index.cjs.cjs +6 -0
  18. package/dist/cjs/index.cjs.d.cts +2 -0
  19. package/dist/cjs/iterateJsdoc.cjs +38 -0
  20. package/dist/cjs/iterateJsdoc.d.cts +2 -0
  21. package/dist/cjs/iterateJsdoc.d.ts +462 -0
  22. package/dist/cjs/iterateJsdoc.js +1981 -0
  23. package/dist/cjs/jsdocUtils.d.ts +454 -0
  24. package/dist/cjs/jsdocUtils.js +1470 -0
  25. package/dist/cjs/rules/checkAccess.d.ts +2 -0
  26. package/dist/cjs/rules/checkAccess.js +35 -0
  27. package/dist/cjs/rules/checkAlignment.d.ts +2 -0
  28. package/dist/cjs/rules/checkAlignment.js +63 -0
  29. package/dist/cjs/rules/checkExamples.d.ts +3 -0
  30. package/dist/cjs/rules/checkExamples.js +486 -0
  31. package/dist/cjs/rules/checkIndentation.d.ts +2 -0
  32. package/dist/cjs/rules/checkIndentation.js +66 -0
  33. package/dist/cjs/rules/checkLineAlignment.d.ts +9 -0
  34. package/dist/cjs/rules/checkLineAlignment.js +297 -0
  35. package/dist/cjs/rules/checkParamNames.d.ts +2 -0
  36. package/dist/cjs/rules/checkParamNames.js +320 -0
  37. package/dist/cjs/rules/checkPropertyNames.d.ts +2 -0
  38. package/dist/cjs/rules/checkPropertyNames.js +105 -0
  39. package/dist/cjs/rules/checkSyntax.d.ts +2 -0
  40. package/dist/cjs/rules/checkSyntax.js +27 -0
  41. package/dist/cjs/rules/checkTagNames.d.ts +2 -0
  42. package/dist/cjs/rules/checkTagNames.js +252 -0
  43. package/dist/cjs/rules/checkTemplateNames.d.ts +2 -0
  44. package/dist/cjs/rules/checkTemplateNames.js +189 -0
  45. package/dist/cjs/rules/checkTypes.d.ts +2 -0
  46. package/dist/cjs/rules/checkTypes.js +421 -0
  47. package/dist/cjs/rules/checkValues.d.ts +2 -0
  48. package/dist/cjs/rules/checkValues.js +163 -0
  49. package/dist/cjs/rules/convertToJsdocComments.d.ts +251 -0
  50. package/dist/cjs/rules/convertToJsdocComments.js +313 -0
  51. package/dist/cjs/rules/emptyTags.d.ts +2 -0
  52. package/dist/cjs/rules/emptyTags.js +79 -0
  53. package/dist/cjs/rules/implementsOnClasses.d.ts +2 -0
  54. package/dist/cjs/rules/implementsOnClasses.js +63 -0
  55. package/dist/cjs/rules/importsAsDependencies.d.ts +2 -0
  56. package/dist/cjs/rules/importsAsDependencies.js +105 -0
  57. package/dist/cjs/rules/informativeDocs.d.ts +2 -0
  58. package/dist/cjs/rules/informativeDocs.js +153 -0
  59. package/dist/cjs/rules/linesBeforeBlock.d.ts +2 -0
  60. package/dist/cjs/rules/linesBeforeBlock.js +106 -0
  61. package/dist/cjs/rules/matchDescription.d.ts +2 -0
  62. package/dist/cjs/rules/matchDescription.js +240 -0
  63. package/dist/cjs/rules/matchName.d.ts +2 -0
  64. package/dist/cjs/rules/matchName.js +122 -0
  65. package/dist/cjs/rules/multilineBlocks.d.ts +2 -0
  66. package/dist/cjs/rules/multilineBlocks.js +339 -0
  67. package/dist/cjs/rules/noBadBlocks.d.ts +2 -0
  68. package/dist/cjs/rules/noBadBlocks.js +88 -0
  69. package/dist/cjs/rules/noBlankBlockDescriptions.d.ts +2 -0
  70. package/dist/cjs/rules/noBlankBlockDescriptions.js +56 -0
  71. package/dist/cjs/rules/noBlankBlocks.d.ts +2 -0
  72. package/dist/cjs/rules/noBlankBlocks.js +41 -0
  73. package/dist/cjs/rules/noDefaults.d.ts +2 -0
  74. package/dist/cjs/rules/noDefaults.js +84 -0
  75. package/dist/cjs/rules/noMissingSyntax.d.ts +9 -0
  76. package/dist/cjs/rules/noMissingSyntax.js +164 -0
  77. package/dist/cjs/rules/noMultiAsterisks.d.ts +2 -0
  78. package/dist/cjs/rules/noMultiAsterisks.js +83 -0
  79. package/dist/cjs/rules/noRestrictedSyntax.d.ts +2 -0
  80. package/dist/cjs/rules/noRestrictedSyntax.js +75 -0
  81. package/dist/cjs/rules/noTypes.d.ts +2 -0
  82. package/dist/cjs/rules/noTypes.js +88 -0
  83. package/dist/cjs/rules/noUndefinedTypes.d.ts +2 -0
  84. package/dist/cjs/rules/noUndefinedTypes.js +451 -0
  85. package/dist/cjs/rules/requireAsteriskPrefix.d.ts +2 -0
  86. package/dist/cjs/rules/requireAsteriskPrefix.js +144 -0
  87. package/dist/cjs/rules/requireDescription.d.ts +2 -0
  88. package/dist/cjs/rules/requireDescription.js +136 -0
  89. package/dist/cjs/rules/requireDescriptionCompleteSentence.d.ts +2 -0
  90. package/dist/cjs/rules/requireDescriptionCompleteSentence.js +258 -0
  91. package/dist/cjs/rules/requireExample.d.ts +2 -0
  92. package/dist/cjs/rules/requireExample.js +103 -0
  93. package/dist/cjs/rules/requireFileOverview.d.ts +2 -0
  94. package/dist/cjs/rules/requireFileOverview.js +117 -0
  95. package/dist/cjs/rules/requireHyphenBeforeParamDescription.d.ts +2 -0
  96. package/dist/cjs/rules/requireHyphenBeforeParamDescription.js +144 -0
  97. package/dist/cjs/rules/requireJsdoc.d.ts +25 -0
  98. package/dist/cjs/rules/requireJsdoc.js +629 -0
  99. package/dist/cjs/rules/requireParam.d.ts +3 -0
  100. package/dist/cjs/rules/requireParam.js +480 -0
  101. package/dist/cjs/rules/requireParamDescription.d.ts +2 -0
  102. package/dist/cjs/rules/requireParamDescription.js +77 -0
  103. package/dist/cjs/rules/requireParamName.d.ts +2 -0
  104. package/dist/cjs/rules/requireParamName.js +52 -0
  105. package/dist/cjs/rules/requireParamType.d.ts +2 -0
  106. package/dist/cjs/rules/requireParamType.js +77 -0
  107. package/dist/cjs/rules/requireProperty.d.ts +2 -0
  108. package/dist/cjs/rules/requireProperty.js +44 -0
  109. package/dist/cjs/rules/requirePropertyDescription.d.ts +2 -0
  110. package/dist/cjs/rules/requirePropertyDescription.js +22 -0
  111. package/dist/cjs/rules/requirePropertyName.d.ts +2 -0
  112. package/dist/cjs/rules/requirePropertyName.js +22 -0
  113. package/dist/cjs/rules/requirePropertyType.d.ts +2 -0
  114. package/dist/cjs/rules/requirePropertyType.js +22 -0
  115. package/dist/cjs/rules/requireReturns.d.ts +2 -0
  116. package/dist/cjs/rules/requireReturns.js +197 -0
  117. package/dist/cjs/rules/requireReturnsCheck.d.ts +2 -0
  118. package/dist/cjs/rules/requireReturnsCheck.js +108 -0
  119. package/dist/cjs/rules/requireReturnsDescription.d.ts +2 -0
  120. package/dist/cjs/rules/requireReturnsDescription.js +58 -0
  121. package/dist/cjs/rules/requireReturnsType.d.ts +2 -0
  122. package/dist/cjs/rules/requireReturnsType.js +52 -0
  123. package/dist/cjs/rules/requireTemplate.d.ts +2 -0
  124. package/dist/cjs/rules/requireTemplate.js +173 -0
  125. package/dist/cjs/rules/requireThrows.d.ts +2 -0
  126. package/dist/cjs/rules/requireThrows.js +101 -0
  127. package/dist/cjs/rules/requireYields.d.ts +2 -0
  128. package/dist/cjs/rules/requireYields.js +172 -0
  129. package/dist/cjs/rules/requireYieldsCheck.d.ts +2 -0
  130. package/dist/cjs/rules/requireYieldsCheck.js +164 -0
  131. package/dist/cjs/rules/sortTags.d.ts +2 -0
  132. package/dist/cjs/rules/sortTags.js +392 -0
  133. package/dist/cjs/rules/tagLines.d.ts +2 -0
  134. package/dist/cjs/rules/tagLines.js +259 -0
  135. package/dist/cjs/rules/textEscaping.d.ts +2 -0
  136. package/dist/cjs/rules/textEscaping.js +125 -0
  137. package/dist/cjs/rules/typeFormatting.d.ts +2 -0
  138. package/dist/cjs/rules/typeFormatting.js +328 -0
  139. package/dist/cjs/rules/validTypes.d.ts +2 -0
  140. package/dist/cjs/rules/validTypes.js +333 -0
  141. package/dist/cjs/tagNames.d.ts +15 -0
  142. package/dist/cjs/tagNames.js +209 -0
  143. package/dist/cjs/utils/hasReturnValue.d.ts +19 -0
  144. package/dist/cjs/utils/hasReturnValue.js +469 -0
  145. package/dist/getJsdocProcessorPlugin.cts +3 -0
  146. package/dist/index.cjs.cts +3 -0
  147. package/dist/iterateJsdoc.cts +6 -0
  148. package/package.json +21 -10
  149. package/src/getJsdocProcessorPlugin.cts +3 -0
  150. package/src/index.cjs.cts +3 -0
  151. package/src/iterateJsdoc.cts +6 -0
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const iterateJsdoc_js_1 = __importDefault(require("../iterateJsdoc.js"));
7
+ // If supporting Node >= 10, we could loosen the default to this for the
8
+ // initial letter: \\p{Upper}
9
+ const matchDescriptionDefault = '^\n?([A-Z`\\d_][\\s\\S]*[.?!`\\p{RGI_Emoji}]\\s*)?$';
10
+ /**
11
+ * @param {string} value
12
+ * @param {string} userDefault
13
+ * @returns {string}
14
+ */
15
+ const stringOrDefault = (value, userDefault) => {
16
+ return typeof value === 'string' ?
17
+ value :
18
+ userDefault || matchDescriptionDefault;
19
+ };
20
+ exports.default = (0, iterateJsdoc_js_1.default)(({ context, jsdoc, report, utils, }) => {
21
+ const { mainDescription, matchDescription, message, nonemptyTags = true, tags = {}, } = context.options[0] || {};
22
+ /**
23
+ * @param {string} desc
24
+ * @param {import('comment-parser').Spec} [tag]
25
+ * @returns {void}
26
+ */
27
+ const validateDescription = (desc, tag) => {
28
+ let mainDescriptionMatch = mainDescription;
29
+ let errorMessage = message;
30
+ if (typeof mainDescription === 'object') {
31
+ mainDescriptionMatch = mainDescription.match;
32
+ errorMessage = mainDescription.message;
33
+ }
34
+ if (mainDescriptionMatch === false && (!tag || !Object.hasOwn(tags, tag.tag))) {
35
+ return;
36
+ }
37
+ let tagValue = mainDescriptionMatch;
38
+ if (tag) {
39
+ const tagName = tag.tag;
40
+ if (typeof tags[tagName] === 'object') {
41
+ tagValue = tags[tagName].match;
42
+ errorMessage = tags[tagName].message;
43
+ }
44
+ else {
45
+ tagValue = tags[tagName];
46
+ }
47
+ }
48
+ const regex = utils.getRegexFromString(stringOrDefault(tagValue, matchDescription));
49
+ if (!regex.test(desc)) {
50
+ report(errorMessage || 'JSDoc description does not satisfy the regex pattern.', null, tag || {
51
+ // Add one as description would typically be into block
52
+ line: jsdoc.source[0].number + 1,
53
+ });
54
+ }
55
+ };
56
+ const { description, } = utils.getDescription();
57
+ if (description) {
58
+ validateDescription(description);
59
+ }
60
+ /**
61
+ * @param {string} tagName
62
+ * @returns {boolean}
63
+ */
64
+ const hasNoTag = (tagName) => {
65
+ return !tags[tagName];
66
+ };
67
+ for (const tag of [
68
+ 'description',
69
+ 'summary',
70
+ 'file',
71
+ 'classdesc',
72
+ ]) {
73
+ utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {
74
+ const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();
75
+ if (hasNoTag(targetTagName)) {
76
+ validateDescription(desc, matchingJsdocTag);
77
+ }
78
+ }, true);
79
+ }
80
+ if (nonemptyTags) {
81
+ for (const tag of [
82
+ 'copyright',
83
+ 'example',
84
+ 'see',
85
+ 'todo',
86
+ ]) {
87
+ utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {
88
+ const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();
89
+ if (hasNoTag(targetTagName) && !(/.+/v).test(desc)) {
90
+ report('JSDoc description must not be empty.', null, matchingJsdocTag);
91
+ }
92
+ });
93
+ }
94
+ }
95
+ if (!Object.keys(tags).length) {
96
+ return;
97
+ }
98
+ /**
99
+ * @param {string} tagName
100
+ * @returns {boolean}
101
+ */
102
+ const hasOptionTag = (tagName) => {
103
+ return Boolean(tags[tagName]);
104
+ };
105
+ const whitelistedTags = utils.filterTags(({ tag: tagName, }) => {
106
+ return hasOptionTag(tagName);
107
+ });
108
+ const { tagsWithNames, tagsWithoutNames, } = utils.getTagsByType(whitelistedTags);
109
+ tagsWithNames.some((tag) => {
110
+ const desc = /** @type {string} */ (utils.getTagDescription(tag)).replace(/^[\- ]*/v, '')
111
+ .trim();
112
+ return validateDescription(desc, tag);
113
+ });
114
+ tagsWithoutNames.some((tag) => {
115
+ const desc = (tag.name + ' ' + utils.getTagDescription(tag)).trim();
116
+ return validateDescription(desc, tag);
117
+ });
118
+ }, {
119
+ contextDefaults: true,
120
+ meta: {
121
+ docs: {
122
+ description: 'Enforces a regular expression pattern on descriptions.',
123
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/match-description.md#repos-sticky-header',
124
+ },
125
+ schema: [
126
+ {
127
+ additionalProperties: false,
128
+ properties: {
129
+ contexts: {
130
+ items: {
131
+ anyOf: [
132
+ {
133
+ type: 'string',
134
+ },
135
+ {
136
+ additionalProperties: false,
137
+ properties: {
138
+ comment: {
139
+ type: 'string',
140
+ },
141
+ context: {
142
+ type: 'string',
143
+ },
144
+ },
145
+ type: 'object',
146
+ },
147
+ ],
148
+ },
149
+ type: 'array',
150
+ },
151
+ mainDescription: {
152
+ oneOf: [
153
+ {
154
+ format: 'regex',
155
+ type: 'string',
156
+ },
157
+ {
158
+ type: 'boolean',
159
+ },
160
+ {
161
+ additionalProperties: false,
162
+ properties: {
163
+ match: {
164
+ oneOf: [
165
+ {
166
+ format: 'regex',
167
+ type: 'string',
168
+ },
169
+ {
170
+ type: 'boolean',
171
+ },
172
+ ],
173
+ },
174
+ message: {
175
+ type: 'string',
176
+ },
177
+ },
178
+ type: 'object',
179
+ },
180
+ ],
181
+ },
182
+ matchDescription: {
183
+ format: 'regex',
184
+ type: 'string',
185
+ },
186
+ message: {
187
+ type: 'string',
188
+ },
189
+ nonemptyTags: {
190
+ type: 'boolean',
191
+ },
192
+ tags: {
193
+ patternProperties: {
194
+ '.*': {
195
+ oneOf: [
196
+ {
197
+ format: 'regex',
198
+ type: 'string',
199
+ },
200
+ {
201
+ enum: [
202
+ true,
203
+ ],
204
+ type: 'boolean',
205
+ },
206
+ {
207
+ additionalProperties: false,
208
+ properties: {
209
+ match: {
210
+ oneOf: [
211
+ {
212
+ format: 'regex',
213
+ type: 'string',
214
+ },
215
+ {
216
+ enum: [
217
+ true,
218
+ ],
219
+ type: 'boolean',
220
+ },
221
+ ],
222
+ },
223
+ message: {
224
+ type: 'string',
225
+ },
226
+ },
227
+ type: 'object',
228
+ },
229
+ ],
230
+ },
231
+ },
232
+ type: 'object',
233
+ },
234
+ },
235
+ type: 'object',
236
+ },
237
+ ],
238
+ type: 'suggestion',
239
+ },
240
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("eslint").Rule.RuleModule;
2
+ export default _default;
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const iterateJsdoc_js_1 = __importDefault(require("../iterateJsdoc.js"));
7
+ // eslint-disable-next-line complexity
8
+ exports.default = (0, iterateJsdoc_js_1.default)(({ context, info: { lastIndex, }, jsdoc, report, utils, }) => {
9
+ const { match, } = context.options[0] || {};
10
+ if (!match) {
11
+ report('Rule `no-restricted-syntax` is missing a `match` option.');
12
+ return;
13
+ }
14
+ const { allowName, disallowName, replacement, tags = [
15
+ '*',
16
+ ], } = match[ /** @type {import('../iterateJsdoc.js').Integer} */(lastIndex)];
17
+ const allowNameRegex = allowName && utils.getRegexFromString(allowName);
18
+ const disallowNameRegex = disallowName && utils.getRegexFromString(disallowName);
19
+ let applicableTags = jsdoc.tags;
20
+ if (!tags.includes('*')) {
21
+ applicableTags = utils.getPresentTags(tags);
22
+ }
23
+ let reported = false;
24
+ for (const tag of applicableTags) {
25
+ const tagName = tag.name.replace(/^\[/v, '').replace(/(=.*)?\]$/v, '');
26
+ const allowed = !allowNameRegex || allowNameRegex.test(tagName);
27
+ const disallowed = disallowNameRegex && disallowNameRegex.test(tagName);
28
+ const hasRegex = allowNameRegex || disallowNameRegex;
29
+ if (hasRegex && allowed && !disallowed) {
30
+ continue;
31
+ }
32
+ if (!hasRegex && reported) {
33
+ continue;
34
+ }
35
+ const fixer = () => {
36
+ for (const src of tag.source) {
37
+ if (src.tokens.name) {
38
+ src.tokens.name = src.tokens.name.replace(disallowNameRegex, replacement);
39
+ break;
40
+ }
41
+ }
42
+ };
43
+ let { message, } = match[ /** @type {import('../iterateJsdoc.js').Integer} */(lastIndex)];
44
+ if (!message) {
45
+ if (hasRegex) {
46
+ message = disallowed ?
47
+ `Only allowing names not matching \`${disallowNameRegex}\` but found "${tagName}".` :
48
+ `Only allowing names matching \`${allowNameRegex}\` but found "${tagName}".`;
49
+ }
50
+ else {
51
+ message = `Prohibited context for "${tagName}".`;
52
+ }
53
+ }
54
+ utils.reportJSDoc(message, hasRegex ? tag : null,
55
+ // We could match up
56
+ disallowNameRegex && replacement !== undefined ?
57
+ fixer :
58
+ null, false, {
59
+ // Could also supply `context`, `comment`, `tags`
60
+ allowName,
61
+ disallowName,
62
+ name: tagName,
63
+ });
64
+ if (!hasRegex) {
65
+ reported = true;
66
+ }
67
+ }
68
+ }, {
69
+ matchContext: true,
70
+ meta: {
71
+ docs: {
72
+ description: 'Reports the name portion of a JSDoc tag if matching or not matching a given regular expression.',
73
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/match-name.md#repos-sticky-header',
74
+ },
75
+ fixable: 'code',
76
+ schema: [
77
+ {
78
+ additionalProperties: false,
79
+ properties: {
80
+ match: {
81
+ items: {
82
+ additionalProperties: false,
83
+ properties: {
84
+ allowName: {
85
+ type: 'string',
86
+ },
87
+ comment: {
88
+ type: 'string',
89
+ },
90
+ context: {
91
+ type: 'string',
92
+ },
93
+ disallowName: {
94
+ type: 'string',
95
+ },
96
+ message: {
97
+ type: 'string',
98
+ },
99
+ replacement: {
100
+ type: 'string',
101
+ },
102
+ tags: {
103
+ items: {
104
+ type: 'string',
105
+ },
106
+ type: 'array',
107
+ },
108
+ },
109
+ type: 'object',
110
+ },
111
+ type: 'array',
112
+ },
113
+ },
114
+ required: [
115
+ 'match',
116
+ ],
117
+ type: 'object',
118
+ },
119
+ ],
120
+ type: 'suggestion',
121
+ },
122
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("eslint").Rule.RuleModule;
2
+ export default _default;