eslint-plugin-jsdoc 44.2.3 → 44.2.5

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 (120) hide show
  1. package/dist/WarnSettings.js +0 -1
  2. package/dist/WarnSettings.js.map +1 -1
  3. package/dist/alignTransform.js +87 -5
  4. package/dist/alignTransform.js.map +1 -1
  5. package/dist/bin/generateRule.js +4 -3
  6. package/dist/bin/generateRule.js.map +1 -1
  7. package/dist/exportParser.js +272 -71
  8. package/dist/exportParser.js.map +1 -1
  9. package/dist/generateRule.js +4 -3
  10. package/dist/generateRule.js.map +1 -1
  11. package/dist/iterateJsdoc.js +921 -357
  12. package/dist/iterateJsdoc.js.map +1 -1
  13. package/dist/jsdocUtils.js +270 -168
  14. package/dist/jsdocUtils.js.map +1 -1
  15. package/dist/rules/checkAlignment.js +6 -0
  16. package/dist/rules/checkAlignment.js.map +1 -1
  17. package/dist/rules/checkExamples.js +73 -9
  18. package/dist/rules/checkExamples.js.map +1 -1
  19. package/dist/rules/checkIndentation.js +12 -2
  20. package/dist/rules/checkIndentation.js.map +1 -1
  21. package/dist/rules/checkLineAlignment.js +71 -7
  22. package/dist/rules/checkLineAlignment.js.map +1 -1
  23. package/dist/rules/checkParamNames.js +29 -11
  24. package/dist/rules/checkParamNames.js.map +1 -1
  25. package/dist/rules/checkPropertyNames.js +13 -7
  26. package/dist/rules/checkPropertyNames.js.map +1 -1
  27. package/dist/rules/checkTagNames.js +45 -9
  28. package/dist/rules/checkTagNames.js.map +1 -1
  29. package/dist/rules/checkTypes.js +98 -41
  30. package/dist/rules/checkTypes.js.map +1 -1
  31. package/dist/rules/checkValues.js +7 -7
  32. package/dist/rules/checkValues.js.map +1 -1
  33. package/dist/rules/emptyTags.js +8 -1
  34. package/dist/rules/emptyTags.js.map +1 -1
  35. package/dist/rules/informativeDocs.js +27 -8
  36. package/dist/rules/informativeDocs.js.map +1 -1
  37. package/dist/rules/matchDescription.js +18 -1
  38. package/dist/rules/matchDescription.js.map +1 -1
  39. package/dist/rules/matchName.js +2 -2
  40. package/dist/rules/matchName.js.map +1 -1
  41. package/dist/rules/multilineBlocks.js +12 -1
  42. package/dist/rules/multilineBlocks.js.map +1 -1
  43. package/dist/rules/noBadBlocks.js +4 -6
  44. package/dist/rules/noBadBlocks.js.map +1 -1
  45. package/dist/rules/noBlankBlockDescriptions.js +2 -0
  46. package/dist/rules/noBlankBlockDescriptions.js.map +1 -1
  47. package/dist/rules/noMissingSyntax.js +53 -16
  48. package/dist/rules/noMissingSyntax.js.map +1 -1
  49. package/dist/rules/noMultiAsterisks.js +1 -6
  50. package/dist/rules/noMultiAsterisks.js.map +1 -1
  51. package/dist/rules/noRestrictedSyntax.js +12 -5
  52. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  53. package/dist/rules/noTypes.js +3 -0
  54. package/dist/rules/noTypes.js.map +1 -1
  55. package/dist/rules/noUndefinedTypes.js +65 -27
  56. package/dist/rules/noUndefinedTypes.js.map +1 -1
  57. package/dist/rules/requireAsteriskPrefix.js +20 -0
  58. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  59. package/dist/rules/requireDescription.js +6 -2
  60. package/dist/rules/requireDescription.js.map +1 -1
  61. package/dist/rules/requireDescriptionCompleteSentence.js +75 -12
  62. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  63. package/dist/rules/requireFileOverview.js +9 -4
  64. package/dist/rules/requireFileOverview.js.map +1 -1
  65. package/dist/rules/requireHyphenBeforeParamDescription.js +21 -7
  66. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  67. package/dist/rules/requireJsdoc.js +150 -29
  68. package/dist/rules/requireJsdoc.js.map +1 -1
  69. package/dist/rules/requireParam.js +116 -10
  70. package/dist/rules/requireParam.js.map +1 -1
  71. package/dist/rules/requireProperty.js +1 -1
  72. package/dist/rules/requireProperty.js.map +1 -1
  73. package/dist/rules/requireReturns.js +2 -3
  74. package/dist/rules/requireReturns.js.map +1 -1
  75. package/dist/rules/requireReturnsCheck.js +9 -2
  76. package/dist/rules/requireReturnsCheck.js.map +1 -1
  77. package/dist/rules/requireThrows.js +2 -3
  78. package/dist/rules/requireThrows.js.map +1 -1
  79. package/dist/rules/requireYields.js +9 -3
  80. package/dist/rules/requireYields.js.map +1 -1
  81. package/dist/rules/requireYieldsCheck.js +19 -5
  82. package/dist/rules/requireYieldsCheck.js.map +1 -1
  83. package/dist/rules/sortTags.js +67 -9
  84. package/dist/rules/sortTags.js.map +1 -1
  85. package/dist/rules/tagLines.js +22 -3
  86. package/dist/rules/tagLines.js.map +1 -1
  87. package/dist/rules/textEscaping.js +18 -4
  88. package/dist/rules/textEscaping.js.map +1 -1
  89. package/dist/rules/validTypes.js +26 -9
  90. package/dist/rules/validTypes.js.map +1 -1
  91. package/dist/tagNames.js +0 -2
  92. package/dist/tagNames.js.map +1 -1
  93. package/dist/utils/hasReturnValue.js +77 -48
  94. package/dist/utils/hasReturnValue.js.map +1 -1
  95. package/docs/rules/check-line-alignment.md +7 -0
  96. package/docs/rules/check-tag-names.md +15 -0
  97. package/docs/rules/no-missing-syntax.md +6 -0
  98. package/docs/rules/no-undefined-types.md +6 -0
  99. package/docs/rules/require-description-complete-sentence.md +525 -289
  100. package/docs/rules/require-description.md +289 -525
  101. package/docs/rules/require-file-overview.md +7 -0
  102. package/docs/rules/require-jsdoc.md +1 -1
  103. package/docs/rules/require-param-description.md +116 -1694
  104. package/docs/rules/require-param-name.md +58 -133
  105. package/docs/rules/require-param-type.md +119 -55
  106. package/docs/rules/require-param.md +1704 -111
  107. package/docs/rules/require-property-description.md +39 -79
  108. package/docs/rules/require-property-name.md +21 -30
  109. package/docs/rules/require-property-type.md +21 -21
  110. package/docs/rules/require-property.md +82 -33
  111. package/docs/rules/require-returns-check.md +636 -747
  112. package/docs/rules/require-returns-description.md +61 -933
  113. package/docs/rules/require-returns-type.md +42 -79
  114. package/docs/rules/require-returns.md +1081 -61
  115. package/docs/rules/require-yields-check.md +238 -517
  116. package/docs/rules/require-yields.md +517 -238
  117. package/docs/rules/valid-types.md +1 -1
  118. package/docs/settings.md +3 -1
  119. package/package.json +10 -9
  120. package/tsconfig.json +2 -3
@@ -4,59 +4,65 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _jsdoccomment = require("@es-joy/jsdoccomment");
8
7
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
8
+ var _jsdoccomment = require("@es-joy/jsdoccomment");
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
10
  const strictNativeTypes = ['undefined', 'null', 'boolean', 'number', 'bigint', 'string', 'symbol', 'object', 'Array', 'Function', 'Date', 'RegExp'];
11
11
 
12
12
  /**
13
13
  * Adjusts the parent type node `meta` for generic matches (or type node
14
14
  * `type` for `JsdocTypeAny`) and sets the type node `value`.
15
- *
16
15
  * @param {string} type The actual type
17
16
  * @param {string} preferred The preferred type
18
17
  * @param {boolean} isGenericMatch
19
18
  * @param {string} typeNodeName
20
- * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node
21
- * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode
19
+ * @param {import('jsdoc-type-pratt-parser').NonRootResult} node
20
+ * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
22
21
  * @returns {void}
23
22
  */
24
23
  const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {
25
24
  let ret = preferred;
26
25
  if (isGenericMatch) {
26
+ const parentMeta = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */parentNode.meta;
27
27
  if (preferred === '[]') {
28
- parentNode.meta.brackets = 'square';
29
- parentNode.meta.dot = false;
28
+ parentMeta.brackets = 'square';
29
+ parentMeta.dot = false;
30
30
  ret = 'Array';
31
31
  } else {
32
32
  const dotBracketEnd = preferred.match(/\.(?:<>)?$/u);
33
33
  if (dotBracketEnd) {
34
- parentNode.meta.brackets = 'angle';
35
- parentNode.meta.dot = true;
34
+ parentMeta.brackets = 'angle';
35
+ parentMeta.dot = true;
36
36
  ret = preferred.slice(0, -dotBracketEnd[0].length);
37
37
  } else {
38
- var _parentNode$meta;
39
38
  const bracketEnd = preferred.endsWith('<>');
40
39
  if (bracketEnd) {
41
- parentNode.meta.brackets = 'angle';
42
- parentNode.meta.dot = false;
40
+ parentMeta.brackets = 'angle';
41
+ parentMeta.dot = false;
43
42
  ret = preferred.slice(0, -2);
44
- } else if (((_parentNode$meta = parentNode.meta) === null || _parentNode$meta === void 0 ? void 0 : _parentNode$meta.brackets) === 'square' && (typeNodeName === '[]' || typeNodeName === 'Array')) {
45
- parentNode.meta.brackets = 'angle';
46
- parentNode.meta.dot = false;
43
+ } else if ((parentMeta === null || parentMeta === void 0 ? void 0 : parentMeta.brackets) === 'square' && (typeNodeName === '[]' || typeNodeName === 'Array')) {
44
+ parentMeta.brackets = 'angle';
45
+ parentMeta.dot = false;
47
46
  }
48
47
  }
49
48
  }
50
49
  } else if (type === 'JsdocTypeAny') {
51
50
  node.type = 'JsdocTypeName';
52
51
  }
52
+
53
+ /** @type {import('jsdoc-type-pratt-parser').NameResult} */
53
54
  node.value = ret.replace(/(?:\.|<>|\.<>|\[\])$/u, '');
54
55
 
55
56
  // For bare pseudo-types like `<>`
56
57
  if (!ret) {
57
- node.value = typeNodeName;
58
+ /** @type {import('jsdoc-type-pratt-parser').NameResult} */node.value = typeNodeName;
58
59
  }
59
60
  };
61
+
62
+ /**
63
+ * @param {boolean} [upperCase]
64
+ * @returns {string}
65
+ */
60
66
  const getMessage = upperCase => {
61
67
  return 'Use object shorthand or index signatures instead of ' + '`' + (upperCase ? 'O' : 'o') + 'bject`, e.g., `{[key: string]: string}`';
62
68
  };
@@ -69,22 +75,48 @@ var _default = (0, _iterateJsdoc.default)(({
69
75
  context
70
76
  }) => {
71
77
  const jsdocTagsWithPossibleType = utils.filterTags(tag => {
72
- return utils.tagMightHaveTypePosition(tag.tag);
78
+ return Boolean(utils.tagMightHaveTypePosition(tag.tag));
73
79
  });
74
- const {
80
+ const
81
+ /**
82
+ * @type {{
83
+ * preferredTypes: import('../iterateJsdoc.js').PreferredTypes,
84
+ * structuredTags: import('../iterateJsdoc.js').StructuredTags,
85
+ * mode: import('../jsdocUtils.js').ParserMode
86
+ * }}
87
+ */
88
+ {
75
89
  preferredTypes: preferredTypesOriginal,
76
90
  structuredTags,
77
91
  mode
78
92
  } = settings;
93
+ /* eslint-enable jsdoc/valid-types -- Old version */
94
+
79
95
  const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal || 'object' in preferredTypesOriginal || 'object.<>' in preferredTypesOriginal || 'Object.<>' in preferredTypesOriginal || 'object<>' in preferredTypesOriginal);
96
+
97
+ /**
98
+ * @type {{
99
+ * message: string,
100
+ * replacement: false
101
+ * }}
102
+ */
80
103
  const info = {
81
104
  message: getMessage(),
82
105
  replacement: false
83
106
  };
107
+
108
+ /**
109
+ * @type {{
110
+ * message: string,
111
+ * replacement: false
112
+ * }}
113
+ */
84
114
  const infoUC = {
85
115
  message: getMessage(true),
86
116
  replacement: false
87
117
  };
118
+
119
+ /** @type {import('../iterateJsdoc.js').PreferredTypes} */
88
120
  const typeToInject = mode === 'typescript' ? {
89
121
  Object: 'object',
90
122
  'object.<>': info,
@@ -97,11 +129,24 @@ var _default = (0, _iterateJsdoc.default)(({
97
129
  'Object.<>': 'Object<>',
98
130
  'object<>': 'Object<>'
99
131
  };
132
+
133
+ /** @type {import('../iterateJsdoc.js').PreferredTypes} */
100
134
  const preferredTypes = {
101
135
  ...(injectObjectPreferredTypes ? typeToInject : {}),
102
136
  ...preferredTypesOriginal
103
137
  };
104
- const {
138
+ const
139
+ /**
140
+ * @type {{
141
+ * noDefaults: boolean,
142
+ * unifyParentAndChildTypeChecks: boolean,
143
+ * exemptTagContexts: ({
144
+ * tag: string,
145
+ * types: true|string[]
146
+ * })[]
147
+ * }}
148
+ */
149
+ {
105
150
  noDefaults,
106
151
  unifyParentAndChildTypeChecks,
107
152
  exemptTagContexts = []
@@ -110,11 +155,10 @@ var _default = (0, _iterateJsdoc.default)(({
110
155
  /**
111
156
  * Gets information about the preferred type: whether there is a matching
112
157
  * preferred type, what the type is, and whether it is a match to a generic.
113
- *
114
158
  * @param {string} _type Not currently in use
115
159
  * @param {string} typeNodeName
116
- * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode
117
- * @param {string} property
160
+ * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
161
+ * @param {string|undefined} property
118
162
  * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}
119
163
  */
120
164
  const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {
@@ -123,9 +167,9 @@ var _default = (0, _iterateJsdoc.default)(({
123
167
  let typeName = typeNodeName;
124
168
  const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';
125
169
  if (unifyParentAndChildTypeChecks || isNameOfGeneric) {
126
- var _parentNode$meta2, _parentNode$meta3;
127
- const brackets = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta2 = parentNode.meta) === null || _parentNode$meta2 === void 0 ? void 0 : _parentNode$meta2.brackets;
128
- const dot = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta3 = parentNode.meta) === null || _parentNode$meta3 === void 0 ? void 0 : _parentNode$meta3.dot;
170
+ var _parentNode$meta, _parentNode$meta2;
171
+ const brackets = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta = parentNode.meta) === null || _parentNode$meta === void 0 ? void 0 : _parentNode$meta.brackets;
172
+ const dot = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta2 = parentNode.meta) === null || _parentNode$meta2 === void 0 ? void 0 : _parentNode$meta2.dot;
129
173
  if (brackets === 'angle') {
130
174
  const checkPostFixes = dot ? ['.', '.<>'] : ['<>'];
131
175
  isGenericMatch = checkPostFixes.some(checkPostFix => {
@@ -136,7 +180,7 @@ var _default = (0, _iterateJsdoc.default)(({
136
180
  return false;
137
181
  });
138
182
  }
139
- if (!isGenericMatch && property && parentNode.type === 'JsdocTypeGeneric') {
183
+ if (!isGenericMatch && property && /** @type {import('jsdoc-type-pratt-parser').NonRootResult} */parentNode.type === 'JsdocTypeGeneric') {
140
184
  const checkPostFixes = dot ? ['.', '.<>'] : [brackets === 'angle' ? '<>' : '[]'];
141
185
  isGenericMatch = checkPostFixes.some(checkPostFix => {
142
186
  if ((preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[checkPostFix]) !== undefined) {
@@ -149,7 +193,7 @@ var _default = (0, _iterateJsdoc.default)(({
149
193
  }
150
194
  const directNameMatch = (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[typeNodeName]) !== undefined && !Object.values(preferredTypes).includes(typeNodeName);
151
195
  const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;
152
- isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;
196
+ isGenericMatch = isGenericMatch || Boolean(unifiedSyntaxParentMatch);
153
197
  hasMatchingPreferredType = isGenericMatch || directNameMatch && !property;
154
198
  return [hasMatchingPreferredType, typeName, isGenericMatch];
155
199
  };
@@ -157,12 +201,11 @@ var _default = (0, _iterateJsdoc.default)(({
157
201
  /**
158
202
  * Iterates strict types to see if any should be added to `invalidTypes` (and
159
203
  * the the relevant strict type returned as the new preferred type).
160
- *
161
204
  * @param {string} typeNodeName
162
- * @param {string} preferred
163
- * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode
164
- * @param {string[]} invalidTypes
165
- * @returns {string} The `preferred` type string, optionally changed
205
+ * @param {string|undefined} preferred
206
+ * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
207
+ * @param {(string|false|undefined)[][]} invalidTypes
208
+ * @returns {string|undefined} The `preferred` type string, optionally changed
166
209
  */
167
210
  const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {
168
211
  let changedPreferred = preferred;
@@ -176,7 +219,18 @@ var _default = (0, _iterateJsdoc.default)(({
176
219
  // parent object without a parent match (and not
177
220
  // `unifyParentAndChildTypeChecks`) and we don't want
178
221
  // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555
179
- parentNode !== null && parentNode !== void 0 && (_parentNode$elements = parentNode.elements) !== null && _parentNode$elements !== void 0 && _parentNode$elements.length && (parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$left = parentNode.left) === null || _parentNode$left === void 0 ? void 0 : _parentNode$left.type) === 'JsdocTypeName' && (parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$left2 = parentNode.left) === null || _parentNode$left2 === void 0 ? void 0 : _parentNode$left2.value) === 'Object')) {
222
+ /**
223
+ * @type {import('jsdoc-type-pratt-parser').GenericResult}
224
+ */
225
+ parentNode !== null && parentNode !== void 0 && (_parentNode$elements = parentNode.elements) !== null && _parentNode$elements !== void 0 && _parentNode$elements.length &&
226
+ /**
227
+ * @type {import('jsdoc-type-pratt-parser').GenericResult}
228
+ */
229
+ (parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$left = parentNode.left) === null || _parentNode$left === void 0 ? void 0 : _parentNode$left.type) === 'JsdocTypeName' &&
230
+ /**
231
+ * @type {import('jsdoc-type-pratt-parser').GenericResult}
232
+ */
233
+ (parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$left2 = parentNode.left) === null || _parentNode$left2 === void 0 ? void 0 : _parentNode$left2.value) === 'Object')) {
180
234
  continue;
181
235
  }
182
236
  if (strictNativeType !== typeNodeName && strictNativeType.toLowerCase() === typeNodeName.toLowerCase() && (
@@ -192,16 +246,15 @@ var _default = (0, _iterateJsdoc.default)(({
192
246
 
193
247
  /**
194
248
  * Collect invalid type info.
195
- *
196
249
  * @param {string} type
197
250
  * @param {string} value
198
251
  * @param {string} tagName
199
252
  * @param {string} nameInTag
200
253
  * @param {number} idx
201
- * @param {string} property
202
- * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node
203
- * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode
204
- * @param {string[]} invalidTypes
254
+ * @param {string|undefined} property
255
+ * @param {import('jsdoc-type-pratt-parser').NonRootResult} node
256
+ * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
257
+ * @param {(string|false|undefined)[][]} invalidTypes
205
258
  * @returns {void}
206
259
  */
207
260
  const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => {
@@ -244,6 +297,7 @@ var _default = (0, _iterateJsdoc.default)(({
244
297
  }
245
298
  };
246
299
  for (const [idx, jsdocTag] of jsdocTagsWithPossibleType.entries()) {
300
+ /** @type {(string|false|undefined)[][]} */
247
301
  const invalidTypes = [];
248
302
  let typeAst;
249
303
  try {
@@ -259,7 +313,11 @@ var _default = (0, _iterateJsdoc.default)(({
259
313
  const {
260
314
  type,
261
315
  value
262
- } = node;
316
+ } =
317
+ /**
318
+ * @type {import('jsdoc-type-pratt-parser').NameResult}
319
+ */
320
+ node;
263
321
  if (!['JsdocTypeName', 'JsdocTypeAny'].includes(type)) {
264
322
  return;
265
323
  }
@@ -269,8 +327,7 @@ var _default = (0, _iterateJsdoc.default)(({
269
327
  const fixedType = (0, _jsdoccomment.stringify)(typeAst);
270
328
 
271
329
  /**
272
- * @param {import('eslint').Rule.ReportFixer} fixer The ESLint fixer
273
- * @returns {string}
330
+ * @type {import('eslint').Rule.ReportFixer}
274
331
  */
275
332
  const fix = fixer => {
276
333
  return fixer.replaceText(jsdocNode, sourceCode.getText(jsdocNode).replace(`{${jsdocTag.type}}`, `{${fixedType}}`));
@@ -288,7 +345,7 @@ var _default = (0, _iterateJsdoc.default)(({
288
345
  report(msg || `Invalid JSDoc @${tagName}${tagValue} type "${badType}"` + (preferredType ? '; ' : '.') + (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''), preferredType ? fix : null, jsdocTag, msg ? {
289
346
  tagName,
290
347
  tagValue
291
- } : null);
348
+ } : undefined);
292
349
  }
293
350
  }
294
351
  }
@@ -1 +1 @@
1
- {"version":3,"file":"checkTypes.js","names":["_jsdoccomment","require","_iterateJsdoc","_interopRequireDefault","obj","__esModule","default","strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","_parentNode$meta","bracketEnd","endsWith","value","replace","getMessage","upperCase","_default","iterateJsdoc","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","preferredTypesOriginal","structuredTags","mode","injectObjectPreferredTypes","info","message","replacement","infoUC","typeToInject","Object","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","isNameOfGeneric","undefined","_parentNode$meta2","_parentNode$meta3","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","checkNativeTypes","invalidTypes","changedPreferred","strictNativeType","_parentNode$elements","_parentNode$left","_parentNode$left2","elements","left","toLowerCase","push","getInvalidTypes","tagName","nameInTag","idx","types","preferredSetting","nextItem","skipRootChecking","name","startsWith","reportSettings","entries","typs","Array","isArray","jsdocTag","typeAst","tryParse","parse","traverse","fixedType","stringify","fix","fixer","replaceText","getText","badType","preferredType","msg","tagValue","JSON","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf","exports","module"],"sources":["../../src/rules/checkTypes.js"],"sourcesContent":["import {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\n/**\n * Adjusts the parent type node `meta` for generic matches (or type node\n * `type` for `JsdocTypeAny`) and sets the type node `value`.\n *\n * @param {string} type The actual type\n * @param {string} preferred The preferred type\n * @param {boolean} isGenericMatch\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @returns {void}\n */\nconst adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta?.brackets === 'square' &&\n (typeNodeName === '[]' || typeNodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = typeNodeName;\n }\n};\n\nconst getMessage = (upperCase) => {\n return 'Use object shorthand or index signatures instead of ' +\n '`' + (upperCase ? 'O' : 'o') + 'bject`, e.g., `{[key: string]: string}`';\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {\n preferredTypes: preferredTypesOriginal,\n structuredTags,\n mode,\n } = settings;\n\n const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal ||\n 'object' in preferredTypesOriginal ||\n 'object.<>' in preferredTypesOriginal ||\n 'Object.<>' in preferredTypesOriginal ||\n 'object<>' in preferredTypesOriginal);\n\n const info = {\n message: getMessage(),\n replacement: false,\n };\n\n const infoUC = {\n message: getMessage(true),\n replacement: false,\n };\n\n const typeToInject = mode === 'typescript' ?\n {\n Object: 'object',\n 'object.<>': info,\n 'Object.<>': infoUC,\n 'object<>': info,\n 'Object<>': infoUC,\n } :\n {\n Object: 'object',\n 'object.<>': 'Object<>',\n 'Object.<>': 'Object<>',\n 'object<>': 'Object<>',\n };\n\n const preferredTypes = {\n ...injectObjectPreferredTypes ?\n typeToInject :\n {},\n ...preferredTypesOriginal,\n };\n\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n /**\n * Gets information about the preferred type: whether there is a matching\n * preferred type, what the type is, and whether it is a match to a generic.\n *\n * @param {string} _type Not currently in use\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string} property\n * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}\n */\n const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {\n let hasMatchingPreferredType = false;\n let isGenericMatch = false;\n let typeName = typeNodeName;\n\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[typeNodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property && parentNode.type === 'JsdocTypeGeneric') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[typeNodeName] !== undefined &&\n !Object.values(preferredTypes).includes(typeNodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n /**\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n *\n * @param {string} typeNodeName\n * @param {string} preferred\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {string} The `preferred` type string, optionally changed\n */\n const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n strictNativeType === 'object' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n parentNode?.elements?.length && (\n parentNode?.left?.type === 'JsdocTypeName' &&\n parentNode?.left?.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n };\n\n /**\n * Collect invalid type info.\n *\n * @param {string} type\n * @param {string} value\n * @param {string} tagName\n * @param {string} nameInTag\n * @param {number} idx\n * @param {string} property\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {void}\n */\n const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => {\n let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n typeNodeName = typeName === '[]' ? typeName : typeNodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n typeNodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n typeNodeName, preferred,\n ]);\n } else if (preferredSetting && typeof preferredSetting === 'object') {\n const nextItem = preferredSetting.skipRootChecking && jsdocTagsWithPossibleType[idx + 1];\n\n if (!nextItem || !nextItem.name.startsWith(`${nameInTag}.`)) {\n preferred = preferredSetting.replacement;\n invalidTypes.push([\n typeNodeName,\n preferred,\n preferredSetting.message,\n ]);\n }\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(typeNodeName);\n })) {\n invalidTypes.push([\n typeNodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);\n }\n };\n\n for (const [\n idx,\n jsdocTag,\n ] of jsdocTagsWithPossibleType.entries()) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const {\n tag: tagName,\n name: nameInTag,\n } = jsdocTag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } = node;\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n getInvalidTypes(type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes);\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n /**\n * @param {import('eslint').Rule.ReportFixer} fixer The ESLint fixer\n * @returns {string}\n */\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [\n badType,\n preferredType = '',\n msg,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n msg ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n msg ? {\n tagName,\n tagValue,\n } : null,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"checkTypes.js","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","obj","__esModule","default","strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","parentMeta","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","getMessage","upperCase","_default","iterateJsdoc","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","Boolean","tagMightHaveTypePosition","preferredTypes","preferredTypesOriginal","structuredTags","mode","injectObjectPreferredTypes","info","message","replacement","infoUC","typeToInject","Object","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","isNameOfGeneric","undefined","_parentNode$meta","_parentNode$meta2","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","checkNativeTypes","invalidTypes","changedPreferred","strictNativeType","_parentNode$elements","_parentNode$left","_parentNode$left2","elements","left","toLowerCase","push","getInvalidTypes","tagName","nameInTag","idx","types","preferredSetting","nextItem","skipRootChecking","name","startsWith","reportSettings","entries","typs","Array","isArray","jsdocTag","typeAst","tryParse","parse","traverse","fixedType","stringify","fix","fixer","replaceText","getText","badType","preferredType","msg","tagValue","JSON","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf","exports","module"],"sources":["../../src/rules/checkTypes.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\nimport {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\n/**\n * Adjusts the parent type node `meta` for generic matches (or type node\n * `type` for `JsdocTypeAny`) and sets the type node `value`.\n * @param {string} type The actual type\n * @param {string} preferred The preferred type\n * @param {boolean} isGenericMatch\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser').NonRootResult} node\n * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode\n * @returns {void}\n */\nconst adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n const parentMeta = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (\n parentNode\n ).meta;\n if (preferred === '[]') {\n parentMeta.brackets = 'square';\n parentMeta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentMeta.brackets = 'angle';\n parentMeta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentMeta.brackets = 'angle';\n parentMeta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentMeta?.brackets === 'square' &&\n (typeNodeName === '[]' || typeNodeName === 'Array')\n ) {\n parentMeta.brackets = 'angle';\n parentMeta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n node\n ).value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n node\n ).value = typeNodeName;\n }\n};\n\n/**\n * @param {boolean} [upperCase]\n * @returns {string}\n */\nconst getMessage = (upperCase) => {\n return 'Use object shorthand or index signatures instead of ' +\n '`' + (upperCase ? 'O' : 'o') + 'bject`, e.g., `{[key: string]: string}`';\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return Boolean(utils.tagMightHaveTypePosition(tag.tag));\n });\n\n const\n /**\n * @type {{\n * preferredTypes: import('../iterateJsdoc.js').PreferredTypes,\n * structuredTags: import('../iterateJsdoc.js').StructuredTags,\n * mode: import('../jsdocUtils.js').ParserMode\n * }}\n */\n {\n preferredTypes: preferredTypesOriginal,\n structuredTags,\n mode,\n } = settings;\n /* eslint-enable jsdoc/valid-types -- Old version */\n\n const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal ||\n 'object' in preferredTypesOriginal ||\n 'object.<>' in preferredTypesOriginal ||\n 'Object.<>' in preferredTypesOriginal ||\n 'object<>' in preferredTypesOriginal);\n\n /**\n * @type {{\n * message: string,\n * replacement: false\n * }}\n */\n const info = {\n message: getMessage(),\n replacement: false,\n };\n\n /**\n * @type {{\n * message: string,\n * replacement: false\n * }}\n */\n const infoUC = {\n message: getMessage(true),\n replacement: false,\n };\n\n /** @type {import('../iterateJsdoc.js').PreferredTypes} */\n const typeToInject = mode === 'typescript' ?\n {\n Object: 'object',\n 'object.<>': info,\n 'Object.<>': infoUC,\n 'object<>': info,\n 'Object<>': infoUC,\n } :\n {\n Object: 'object',\n 'object.<>': 'Object<>',\n 'Object.<>': 'Object<>',\n 'object<>': 'Object<>',\n };\n\n /** @type {import('../iterateJsdoc.js').PreferredTypes} */\n const preferredTypes = {\n ...injectObjectPreferredTypes ?\n typeToInject :\n {},\n ...preferredTypesOriginal,\n };\n\n const\n /**\n * @type {{\n * noDefaults: boolean,\n * unifyParentAndChildTypeChecks: boolean,\n * exemptTagContexts: ({\n * tag: string,\n * types: true|string[]\n * })[]\n * }}\n */ {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n /**\n * Gets information about the preferred type: whether there is a matching\n * preferred type, what the type is, and whether it is a match to a generic.\n * @param {string} _type Not currently in use\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode\n * @param {string|undefined} property\n * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}\n */\n const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {\n let hasMatchingPreferredType = false;\n let isGenericMatch = false;\n let typeName = typeNodeName;\n\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (\n parentNode\n )?.meta?.brackets;\n const dot = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (\n parentNode\n )?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[typeNodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (\n !isGenericMatch && property &&\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult} */ (\n parentNode\n ).type === 'JsdocTypeGeneric'\n ) {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[typeNodeName] !== undefined &&\n !Object.values(preferredTypes).includes(typeNodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || Boolean(unifiedSyntaxParentMatch);\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n /**\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n * @param {string} typeNodeName\n * @param {string|undefined} preferred\n * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode\n * @param {(string|false|undefined)[][]} invalidTypes\n * @returns {string|undefined} The `preferred` type string, optionally changed\n */\n const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n strictNativeType === 'object' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (\n parentNode\n )?.elements?.length && (\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (\n parentNode\n )?.left?.type === 'JsdocTypeName' &&\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (parentNode)?.left?.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n };\n\n /**\n * Collect invalid type info.\n * @param {string} type\n * @param {string} value\n * @param {string} tagName\n * @param {string} nameInTag\n * @param {number} idx\n * @param {string|undefined} property\n * @param {import('jsdoc-type-pratt-parser').NonRootResult} node\n * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode\n * @param {(string|false|undefined)[][]} invalidTypes\n * @returns {void}\n */\n const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => {\n let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n typeNodeName = typeName === '[]' ? typeName : typeNodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n typeNodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n typeNodeName, preferred,\n ]);\n } else if (preferredSetting && typeof preferredSetting === 'object') {\n const nextItem = preferredSetting.skipRootChecking && jsdocTagsWithPossibleType[idx + 1];\n\n if (!nextItem || !nextItem.name.startsWith(`${nameInTag}.`)) {\n preferred = preferredSetting.replacement;\n invalidTypes.push([\n typeNodeName,\n preferred,\n preferredSetting.message,\n ]);\n }\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(typeNodeName);\n })) {\n invalidTypes.push([\n typeNodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);\n }\n };\n\n for (const [\n idx,\n jsdocTag,\n ] of jsdocTagsWithPossibleType.entries()) {\n /** @type {(string|false|undefined)[][]} */\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const {\n tag: tagName,\n name: nameInTag,\n } = jsdocTag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult}\n */ (node);\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n getInvalidTypes(type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes);\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n /**\n * @type {import('eslint').Rule.ReportFixer}\n */\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [\n badType,\n preferredType = '',\n msg,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n msg ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n msg ? {\n tagName,\n tagValue,\n } : undefined,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
7
8
  var _semver = _interopRequireDefault(require("semver"));
8
9
  var _spdxExpressionParse = _interopRequireDefault(require("spdx-expression-parse"));
9
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
11
  const allowedKinds = new Set(['class', 'constant', 'event', 'external', 'file', 'function', 'member', 'mixin', 'module', 'namespace', 'typedef']);
12
12
  var _default = (0, _iterateJsdoc.default)(({
@@ -22,7 +22,7 @@ var _default = (0, _iterateJsdoc.default)(({
22
22
  licensePattern = '/([^\n\r]*)/gu'
23
23
  } = options;
24
24
  utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {
25
- const version = utils.getTagDescription(jsdocParameter).trim();
25
+ const version = /** @type {string} */utils.getTagDescription(jsdocParameter).trim();
26
26
  if (!version) {
27
27
  report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
28
28
  } else if (!_semver.default.valid(version)) {
@@ -30,7 +30,7 @@ var _default = (0, _iterateJsdoc.default)(({
30
30
  }
31
31
  });
32
32
  utils.forEachPreferredTag('kind', (jsdocParameter, targetTagName) => {
33
- const kind = utils.getTagDescription(jsdocParameter).trim();
33
+ const kind = /** @type {string} */utils.getTagDescription(jsdocParameter).trim();
34
34
  if (!kind) {
35
35
  report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
36
36
  } else if (!allowedKinds.has(kind)) {
@@ -39,7 +39,7 @@ var _default = (0, _iterateJsdoc.default)(({
39
39
  });
40
40
  if (numericOnlyVariation) {
41
41
  utils.forEachPreferredTag('variation', (jsdocParameter, targetTagName) => {
42
- const variation = utils.getTagDescription(jsdocParameter).trim();
42
+ const variation = /** @type {string} */utils.getTagDescription(jsdocParameter).trim();
43
43
  if (!variation) {
44
44
  report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
45
45
  } else if (!Number.isInteger(Number(variation)) || Number(variation) <= 0) {
@@ -48,7 +48,7 @@ var _default = (0, _iterateJsdoc.default)(({
48
48
  });
49
49
  }
50
50
  utils.forEachPreferredTag('since', (jsdocParameter, targetTagName) => {
51
- const version = utils.getTagDescription(jsdocParameter).trim();
51
+ const version = /** @type {string} */utils.getTagDescription(jsdocParameter).trim();
52
52
  if (!version) {
53
53
  report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
54
54
  } else if (!_semver.default.valid(version)) {
@@ -57,7 +57,7 @@ var _default = (0, _iterateJsdoc.default)(({
57
57
  });
58
58
  utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => {
59
59
  const licenseRegex = utils.getRegexFromString(licensePattern, 'g');
60
- const matches = utils.getTagDescription(jsdocParameter).matchAll(licenseRegex);
60
+ const matches = /** @type {string} */utils.getTagDescription(jsdocParameter).matchAll(licenseRegex);
61
61
  let positiveMatch = false;
62
62
  for (const match of matches) {
63
63
  const license = match[1] || match[0];
@@ -84,7 +84,7 @@ var _default = (0, _iterateJsdoc.default)(({
84
84
  }
85
85
  });
86
86
  utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {
87
- const author = utils.getTagDescription(jsdocParameter).trim();
87
+ const author = /** @type {string} */utils.getTagDescription(jsdocParameter).trim();
88
88
  if (!author) {
89
89
  report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
90
90
  } else if (allowedAuthors && !allowedAuthors.includes(author)) {
@@ -1 +1 @@
1
- {"version":3,"file":"checkValues.js","names":["_semver","_interopRequireDefault","require","_spdxExpressionParse","_iterateJsdoc","obj","__esModule","default","allowedKinds","Set","_default","iterateJsdoc","utils","report","context","options","allowedLicenses","allowedAuthors","numericOnlyVariation","licensePattern","forEachPreferredTag","jsdocParameter","targetTagName","version","getTagDescription","trim","semver","valid","kind","has","join","variation","Number","isInteger","licenseRegex","getRegexFromString","matches","matchAll","positiveMatch","match","license","includes","spdxExpressionParse","author","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items","type","anyOf","exports","module"],"sources":["../../src/rules/checkValues.js"],"sourcesContent":["import semver from 'semver';\nimport spdxExpressionParse from 'spdx-expression-parse';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst allowedKinds = new Set([\n 'class',\n 'constant',\n 'event',\n 'external',\n 'file',\n 'function',\n 'member',\n 'mixin',\n 'module',\n 'namespace',\n 'typedef',\n]);\n\nexport default iterateJsdoc(({\n utils,\n report,\n context,\n}) => {\n const options = context.options[0] || {};\n const {\n allowedLicenses = null,\n allowedAuthors = null,\n numericOnlyVariation = false,\n licensePattern = '/([^\\n\\r]*)/gu',\n } = options;\n\n utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {\n const version = utils.getTagDescription(jsdocParameter).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n\n utils.forEachPreferredTag('kind', (jsdocParameter, targetTagName) => {\n const kind = utils.getTagDescription(jsdocParameter).trim();\n if (!kind) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!allowedKinds.has(kind)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; ` +\n `must be one of: ${[\n ...allowedKinds,\n ].join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n\n if (numericOnlyVariation) {\n utils.forEachPreferredTag('variation', (jsdocParameter, targetTagName) => {\n const variation = utils.getTagDescription(jsdocParameter).trim();\n if (!variation) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (\n !Number.isInteger(Number(variation)) ||\n Number(variation) <= 0\n ) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('since', (jsdocParameter, targetTagName) => {\n const version = utils.getTagDescription(jsdocParameter).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => {\n const licenseRegex = utils.getRegexFromString(licensePattern, 'g');\n const matches = utils.getTagDescription(jsdocParameter).matchAll(licenseRegex);\n let positiveMatch = false;\n for (const match of matches) {\n const license = match[1] || match[0];\n if (license) {\n positiveMatch = true;\n }\n\n if (!license.trim()) {\n // Avoid reporting again as empty match\n if (positiveMatch) {\n return;\n }\n\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedLicenses) {\n if (allowedLicenses !== true && !allowedLicenses.includes(license)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected one of ${allowedLicenses.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n } else {\n try {\n spdxExpressionParse(license);\n } catch {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected SPDX expression: https://spdx.org/licenses/.`,\n null,\n jsdocParameter,\n );\n }\n }\n }\n });\n\n utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {\n const author = utils.getTagDescription(jsdocParameter).trim();\n if (!author) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedAuthors && !allowedAuthors.includes(author)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; expected one of ${allowedAuthors.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-values',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedAuthors: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n allowedLicenses: {\n anyOf: [\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n {\n type: 'boolean',\n },\n ],\n },\n licensePattern: {\n type: 'string',\n },\n numericOnlyVariation: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"checkValues.js","names":["_iterateJsdoc","_interopRequireDefault","require","_semver","_spdxExpressionParse","obj","__esModule","default","allowedKinds","Set","_default","iterateJsdoc","utils","report","context","options","allowedLicenses","allowedAuthors","numericOnlyVariation","licensePattern","forEachPreferredTag","jsdocParameter","targetTagName","version","getTagDescription","trim","semver","valid","kind","has","join","variation","Number","isInteger","licenseRegex","getRegexFromString","matches","matchAll","positiveMatch","match","license","includes","spdxExpressionParse","author","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items","type","anyOf","exports","module"],"sources":["../../src/rules/checkValues.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\nimport semver from 'semver';\nimport spdxExpressionParse from 'spdx-expression-parse';\n\nconst allowedKinds = new Set([\n 'class',\n 'constant',\n 'event',\n 'external',\n 'file',\n 'function',\n 'member',\n 'mixin',\n 'module',\n 'namespace',\n 'typedef',\n]);\n\nexport default iterateJsdoc(({\n utils,\n report,\n context,\n}) => {\n const options = context.options[0] || {};\n const {\n allowedLicenses = null,\n allowedAuthors = null,\n numericOnlyVariation = false,\n licensePattern = '/([^\\n\\r]*)/gu',\n } = options;\n\n utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n\n utils.forEachPreferredTag('kind', (jsdocParameter, targetTagName) => {\n const kind = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!kind) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!allowedKinds.has(kind)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; ` +\n `must be one of: ${[\n ...allowedKinds,\n ].join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n\n if (numericOnlyVariation) {\n utils.forEachPreferredTag('variation', (jsdocParameter, targetTagName) => {\n const variation = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!variation) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (\n !Number.isInteger(Number(variation)) ||\n Number(variation) <= 0\n ) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('since', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => {\n const licenseRegex = utils.getRegexFromString(licensePattern, 'g');\n const matches = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).matchAll(licenseRegex);\n let positiveMatch = false;\n for (const match of matches) {\n const license = match[1] || match[0];\n if (license) {\n positiveMatch = true;\n }\n\n if (!license.trim()) {\n // Avoid reporting again as empty match\n if (positiveMatch) {\n return;\n }\n\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedLicenses) {\n if (allowedLicenses !== true && !allowedLicenses.includes(license)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected one of ${allowedLicenses.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n } else {\n try {\n spdxExpressionParse(license);\n } catch {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected SPDX expression: https://spdx.org/licenses/.`,\n null,\n jsdocParameter,\n );\n }\n }\n }\n });\n\n utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {\n const author = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!author) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedAuthors && !allowedAuthors.includes(author)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; expected one of ${allowedAuthors.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-values',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedAuthors: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n allowedLicenses: {\n anyOf: [\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n {\n type: 'boolean',\n },\n ],\n },\n licensePattern: {\n type: 'string',\n },\n numericOnlyVariation: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -34,7 +34,14 @@ var _default = (0, _iterateJsdoc.default)(({
34
34
  const content = tag.name || tag.description || tag.type;
35
35
  if (content.trim()) {
36
36
  const fix = () => {
37
- utils.setTag(tag);
37
+ // By time of call in fixer, `tag` will have `line` added
38
+ utils.setTag(
39
+ /**
40
+ * @type {import('comment-parser').Spec & {
41
+ * line: import('../iterateJsdoc.js').Integer
42
+ * }}
43
+ */
44
+ tag);
38
45
  };
39
46
  utils.reportJSDoc(`@${tag.tag} should be empty.`, tag, fix, true);
40
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"emptyTags.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","defaultEmptyTags","Set","emptyIfNotClosure","emptyIfClosure","_default","iterateJsdoc","settings","jsdoc","utils","emptyTags","filterTags","tag","tagName","has","hasOptionTag","tags","some","mode","content","name","description","type","trim","fix","setTag","reportJSDoc","checkInternal","checkPrivate","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","exports","module"],"sources":["../../src/rules/emptyTags.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst defaultEmptyTags = new Set([\n 'abstract', 'async', 'generator', 'global', 'hideconstructor',\n 'ignore', 'inner', 'instance', 'override', 'readonly',\n\n // jsdoc doesn't use this form in its docs, but allow for compatibility with\n // TypeScript which allows and Closure which requires\n 'inheritDoc',\n\n // jsdoc doesn't use but allow for TypeScript\n 'internal',\n 'overload',\n]);\n\nconst emptyIfNotClosure = new Set([\n 'package', 'private', 'protected', 'public', 'static',\n\n // Closure doesn't allow with this casing\n 'inheritdoc',\n]);\n\nconst emptyIfClosure = new Set([\n 'interface',\n]);\n\nexport default iterateJsdoc(({\n settings,\n jsdoc,\n utils,\n}) => {\n const emptyTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return defaultEmptyTags.has(tagName) ||\n utils.hasOptionTag(tagName) && jsdoc.tags.some(({\n tag,\n }) => {\n return tag === tagName;\n }) ||\n settings.mode === 'closure' && emptyIfClosure.has(tagName) ||\n settings.mode !== 'closure' && emptyIfNotClosure.has(tagName);\n });\n\n for (const tag of emptyTags) {\n const content = tag.name || tag.description || tag.type;\n if (content.trim()) {\n const fix = () => {\n utils.setTag(tag);\n };\n\n utils.reportJSDoc(`@${tag.tag} should be empty.`, tag, fix, true);\n }\n }\n}, {\n checkInternal: true,\n checkPrivate: true,\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Expects specific tags to be empty of any content.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-empty-tags',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA2C,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE3C,MAAMG,gBAAgB,GAAG,IAAIC,GAAG,CAAC,CAC/B,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAC7D,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;AAErD;AACA;AACA,YAAY;AAEZ;AACA,UAAU,EACV,UAAU,CACX,CAAC;AAEF,MAAMC,iBAAiB,GAAG,IAAID,GAAG,CAAC,CAChC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ;AAErD;AACA,YAAY,CACb,CAAC;AAEF,MAAME,cAAc,GAAG,IAAIF,GAAG,CAAC,CAC7B,WAAW,CACZ,CAAC;AAAC,IAAAG,QAAA,GAEY,IAAAC,qBAAY,EAAC,CAAC;EAC3BC,QAAQ;EACRC,KAAK;EACLC;AACF,CAAC,KAAK;EACJ,MAAMC,SAAS,GAAGD,KAAK,CAACE,UAAU,CAAC,CAAC;IAClCC,GAAG,EAAEC;EACP,CAAC,KAAK;IACJ,OAAOZ,gBAAgB,CAACa,GAAG,CAACD,OAAO,CAAC,IAClCJ,KAAK,CAACM,YAAY,CAACF,OAAO,CAAC,IAAIL,KAAK,CAACQ,IAAI,CAACC,IAAI,CAAC,CAAC;MAC9CL;IACF,CAAC,KAAK;MACJ,OAAOA,GAAG,KAAKC,OAAO;IACxB,CAAC,CAAC,IACFN,QAAQ,CAACW,IAAI,KAAK,SAAS,IAAId,cAAc,CAACU,GAAG,CAACD,OAAO,CAAC,IAC1DN,QAAQ,CAACW,IAAI,KAAK,SAAS,IAAIf,iBAAiB,CAACW,GAAG,CAACD,OAAO,CAAC;EACjE,CAAC,CAAC;EAEF,KAAK,MAAMD,GAAG,IAAIF,SAAS,EAAE;IAC3B,MAAMS,OAAO,GAAGP,GAAG,CAACQ,IAAI,IAAIR,GAAG,CAACS,WAAW,IAAIT,GAAG,CAACU,IAAI;IACvD,IAAIH,OAAO,CAACI,IAAI,CAAC,CAAC,EAAE;MAClB,MAAMC,GAAG,GAAGA,CAAA,KAAM;QAChBf,KAAK,CAACgB,MAAM,CAACb,GAAG,CAAC;MACnB,CAAC;MAEDH,KAAK,CAACiB,WAAW,CAAE,IAAGd,GAAG,CAACA,GAAI,mBAAkB,EAAEA,GAAG,EAAEY,GAAG,EAAE,IAAI,CAAC;IACnE;EACF;AACF,CAAC,EAAE;EACDG,aAAa,EAAE,IAAI;EACnBC,YAAY,EAAE,IAAI;EAClBC,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJV,WAAW,EAAE,mDAAmD;MAChEW,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVpB,IAAI,EAAE;UACJqB,KAAK,EAAE;YACLf,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAgB,OAAA,CAAAtC,OAAA,GAAAK,QAAA;AAAAkC,MAAA,CAAAD,OAAA,GAAAA,OAAA,CAAAtC,OAAA"}
1
+ {"version":3,"file":"emptyTags.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","defaultEmptyTags","Set","emptyIfNotClosure","emptyIfClosure","_default","iterateJsdoc","settings","jsdoc","utils","emptyTags","filterTags","tag","tagName","has","hasOptionTag","tags","some","mode","content","name","description","type","trim","fix","setTag","reportJSDoc","checkInternal","checkPrivate","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","exports","module"],"sources":["../../src/rules/emptyTags.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst defaultEmptyTags = new Set([\n 'abstract', 'async', 'generator', 'global', 'hideconstructor',\n 'ignore', 'inner', 'instance', 'override', 'readonly',\n\n // jsdoc doesn't use this form in its docs, but allow for compatibility with\n // TypeScript which allows and Closure which requires\n 'inheritDoc',\n\n // jsdoc doesn't use but allow for TypeScript\n 'internal',\n 'overload',\n]);\n\nconst emptyIfNotClosure = new Set([\n 'package', 'private', 'protected', 'public', 'static',\n\n // Closure doesn't allow with this casing\n 'inheritdoc',\n]);\n\nconst emptyIfClosure = new Set([\n 'interface',\n]);\n\nexport default iterateJsdoc(({\n settings,\n jsdoc,\n utils,\n}) => {\n const emptyTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return defaultEmptyTags.has(tagName) ||\n utils.hasOptionTag(tagName) && jsdoc.tags.some(({\n tag,\n }) => {\n return tag === tagName;\n }) ||\n settings.mode === 'closure' && emptyIfClosure.has(tagName) ||\n settings.mode !== 'closure' && emptyIfNotClosure.has(tagName);\n });\n\n for (const tag of emptyTags) {\n const content = tag.name || tag.description || tag.type;\n if (content.trim()) {\n const fix = () => {\n // By time of call in fixer, `tag` will have `line` added\n utils.setTag(\n /**\n * @type {import('comment-parser').Spec & {\n * line: import('../iterateJsdoc.js').Integer\n * }}\n */ (tag),\n );\n };\n\n utils.reportJSDoc(`@${tag.tag} should be empty.`, tag, fix, true);\n }\n }\n}, {\n checkInternal: true,\n checkPrivate: true,\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Expects specific tags to be empty of any content.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-empty-tags',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA2C,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE3C,MAAMG,gBAAgB,GAAG,IAAIC,GAAG,CAAC,CAC/B,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAC7D,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;AAErD;AACA;AACA,YAAY;AAEZ;AACA,UAAU,EACV,UAAU,CACX,CAAC;AAEF,MAAMC,iBAAiB,GAAG,IAAID,GAAG,CAAC,CAChC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ;AAErD;AACA,YAAY,CACb,CAAC;AAEF,MAAME,cAAc,GAAG,IAAIF,GAAG,CAAC,CAC7B,WAAW,CACZ,CAAC;AAAC,IAAAG,QAAA,GAEY,IAAAC,qBAAY,EAAC,CAAC;EAC3BC,QAAQ;EACRC,KAAK;EACLC;AACF,CAAC,KAAK;EACJ,MAAMC,SAAS,GAAGD,KAAK,CAACE,UAAU,CAAC,CAAC;IAClCC,GAAG,EAAEC;EACP,CAAC,KAAK;IACJ,OAAOZ,gBAAgB,CAACa,GAAG,CAACD,OAAO,CAAC,IAClCJ,KAAK,CAACM,YAAY,CAACF,OAAO,CAAC,IAAIL,KAAK,CAACQ,IAAI,CAACC,IAAI,CAAC,CAAC;MAC9CL;IACF,CAAC,KAAK;MACJ,OAAOA,GAAG,KAAKC,OAAO;IACxB,CAAC,CAAC,IACFN,QAAQ,CAACW,IAAI,KAAK,SAAS,IAAId,cAAc,CAACU,GAAG,CAACD,OAAO,CAAC,IAC1DN,QAAQ,CAACW,IAAI,KAAK,SAAS,IAAIf,iBAAiB,CAACW,GAAG,CAACD,OAAO,CAAC;EACjE,CAAC,CAAC;EAEF,KAAK,MAAMD,GAAG,IAAIF,SAAS,EAAE;IAC3B,MAAMS,OAAO,GAAGP,GAAG,CAACQ,IAAI,IAAIR,GAAG,CAACS,WAAW,IAAIT,GAAG,CAACU,IAAI;IACvD,IAAIH,OAAO,CAACI,IAAI,CAAC,CAAC,EAAE;MAClB,MAAMC,GAAG,GAAGA,CAAA,KAAM;QAChB;QACAf,KAAK,CAACgB,MAAM;QACV;AACV;AACA;AACA;AACA;QAAeb,GACP,CAAC;MACH,CAAC;MAEDH,KAAK,CAACiB,WAAW,CAAE,IAAGd,GAAG,CAACA,GAAI,mBAAkB,EAAEA,GAAG,EAAEY,GAAG,EAAE,IAAI,CAAC;IACnE;EACF;AACF,CAAC,EAAE;EACDG,aAAa,EAAE,IAAI;EACnBC,YAAY,EAAE,IAAI;EAClBC,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJV,WAAW,EAAE,mDAAmD;MAChEW,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVpB,IAAI,EAAE;UACJqB,KAAK,EAAE;YACLf,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAgB,OAAA,CAAAtC,OAAA,GAAAK,QAAA;AAAAkC,MAAA,CAAAD,OAAA,GAAAA,OAAA,CAAAtC,OAAA"}