eslint-plugin-jsdoc 39.3.6 → 39.3.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +267 -52
  2. package/dist/WarnSettings.js +0 -5
  3. package/dist/WarnSettings.js.map +1 -1
  4. package/dist/alignTransform.js +69 -61
  5. package/dist/alignTransform.js.map +1 -1
  6. package/dist/bin/generateRule.js +7 -26
  7. package/dist/bin/generateRule.js.map +1 -1
  8. package/dist/defaultTagOrder.js +30 -14
  9. package/dist/defaultTagOrder.js.map +1 -1
  10. package/dist/exportParser.js +34 -143
  11. package/dist/exportParser.js.map +1 -1
  12. package/dist/generateRule.js +7 -26
  13. package/dist/generateRule.js.map +1 -1
  14. package/dist/getDefaultTagStructureForMode.js +189 -93
  15. package/dist/getDefaultTagStructureForMode.js.map +1 -1
  16. package/dist/index.js +0 -51
  17. package/dist/index.js.map +1 -1
  18. package/dist/iterateJsdoc.js +43 -206
  19. package/dist/iterateJsdoc.js.map +1 -1
  20. package/dist/jsdocUtils.js +71 -220
  21. package/dist/jsdocUtils.js.map +1 -1
  22. package/dist/rules/checkAccess.js +0 -8
  23. package/dist/rules/checkAccess.js.map +1 -1
  24. package/dist/rules/checkAlignment.js +0 -8
  25. package/dist/rules/checkAlignment.js.map +1 -1
  26. package/dist/rules/checkExamples.js +25 -63
  27. package/dist/rules/checkExamples.js.map +1 -1
  28. package/dist/rules/checkIndentation.js +0 -7
  29. package/dist/rules/checkIndentation.js.map +1 -1
  30. package/dist/rules/checkLineAlignment.js +9 -30
  31. package/dist/rules/checkLineAlignment.js.map +1 -1
  32. package/dist/rules/checkParamNames.js +9 -47
  33. package/dist/rules/checkParamNames.js.map +1 -1
  34. package/dist/rules/checkPropertyNames.js +1 -18
  35. package/dist/rules/checkPropertyNames.js.map +1 -1
  36. package/dist/rules/checkSyntax.js +2 -5
  37. package/dist/rules/checkSyntax.js.map +1 -1
  38. package/dist/rules/checkTagNames.js +0 -18
  39. package/dist/rules/checkTagNames.js.map +1 -1
  40. package/dist/rules/checkTypes.js +17 -46
  41. package/dist/rules/checkTypes.js.map +1 -1
  42. package/dist/rules/checkValues.js +0 -18
  43. package/dist/rules/checkValues.js.map +1 -1
  44. package/dist/rules/emptyTags.js +6 -11
  45. package/dist/rules/emptyTags.js.map +1 -1
  46. package/dist/rules/implementsOnClasses.js +0 -6
  47. package/dist/rules/implementsOnClasses.js.map +1 -1
  48. package/dist/rules/matchDescription.js +0 -20
  49. package/dist/rules/matchDescription.js.map +1 -1
  50. package/dist/rules/matchName.js +2 -17
  51. package/dist/rules/matchName.js.map +1 -1
  52. package/dist/rules/multilineBlocks.js +10 -34
  53. package/dist/rules/multilineBlocks.js.map +1 -1
  54. package/dist/rules/newlineAfterDescription.js +0 -8
  55. package/dist/rules/newlineAfterDescription.js.map +1 -1
  56. package/dist/rules/noBadBlocks.js +2 -16
  57. package/dist/rules/noBadBlocks.js.map +1 -1
  58. package/dist/rules/noDefaults.js +0 -7
  59. package/dist/rules/noDefaults.js.map +1 -1
  60. package/dist/rules/noMissingSyntax.js +2 -16
  61. package/dist/rules/noMissingSyntax.js.map +1 -1
  62. package/dist/rules/noMultiAsterisks.js +2 -16
  63. package/dist/rules/noMultiAsterisks.js.map +1 -1
  64. package/dist/rules/noRestrictedSyntax.js +3 -9
  65. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  66. package/dist/rules/noTypes.js +0 -7
  67. package/dist/rules/noTypes.js.map +1 -1
  68. package/dist/rules/noUndefinedTypes.js +13 -34
  69. package/dist/rules/noUndefinedTypes.js.map +1 -1
  70. package/dist/rules/requireAsteriskPrefix.js +2 -26
  71. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  72. package/dist/rules/requireDescription.js +0 -17
  73. package/dist/rules/requireDescription.js.map +1 -1
  74. package/dist/rules/requireDescriptionCompleteSentence.js +13 -34
  75. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  76. package/dist/rules/requireExample.js +0 -9
  77. package/dist/rules/requireExample.js.map +1 -1
  78. package/dist/rules/requireFileOverview.js +0 -16
  79. package/dist/rules/requireFileOverview.js.map +1 -1
  80. package/dist/rules/requireHyphenBeforeParamDescription.js +2 -16
  81. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  82. package/dist/rules/requireJsdoc.js +13 -58
  83. package/dist/rules/requireJsdoc.js.map +1 -1
  84. package/dist/rules/requireParam.js +6 -53
  85. package/dist/rules/requireParam.js.map +1 -1
  86. package/dist/rules/requireParamDescription.js +0 -4
  87. package/dist/rules/requireParamDescription.js.map +1 -1
  88. package/dist/rules/requireParamName.js +0 -4
  89. package/dist/rules/requireParamName.js.map +1 -1
  90. package/dist/rules/requireParamType.js +0 -4
  91. package/dist/rules/requireParamType.js.map +1 -1
  92. package/dist/rules/requireProperty.js +0 -9
  93. package/dist/rules/requireProperty.js.map +1 -1
  94. package/dist/rules/requirePropertyDescription.js +0 -4
  95. package/dist/rules/requirePropertyDescription.js.map +1 -1
  96. package/dist/rules/requirePropertyName.js +0 -4
  97. package/dist/rules/requirePropertyName.js.map +1 -1
  98. package/dist/rules/requirePropertyType.js +0 -4
  99. package/dist/rules/requirePropertyType.js.map +1 -1
  100. package/dist/rules/requireReturns.js +13 -23
  101. package/dist/rules/requireReturns.js.map +1 -1
  102. package/dist/rules/requireReturnsCheck.js +12 -20
  103. package/dist/rules/requireReturnsCheck.js.map +1 -1
  104. package/dist/rules/requireReturnsDescription.js +0 -6
  105. package/dist/rules/requireReturnsDescription.js.map +1 -1
  106. package/dist/rules/requireReturnsType.js +0 -4
  107. package/dist/rules/requireReturnsType.js.map +1 -1
  108. package/dist/rules/requireThrows.js +6 -15
  109. package/dist/rules/requireThrows.js.map +1 -1
  110. package/dist/rules/requireYields.js +13 -29
  111. package/dist/rules/requireYields.js.map +1 -1
  112. package/dist/rules/requireYieldsCheck.js +8 -29
  113. package/dist/rules/requireYieldsCheck.js.map +1 -1
  114. package/dist/rules/sortTags.js +17 -30
  115. package/dist/rules/sortTags.js.map +1 -1
  116. package/dist/rules/tagLines.js +0 -26
  117. package/dist/rules/tagLines.js.map +1 -1
  118. package/dist/rules/validTypes.js +22 -53
  119. package/dist/rules/validTypes.js.map +1 -1
  120. package/dist/tagNames.js +7 -4
  121. package/dist/tagNames.js.map +1 -1
  122. package/dist/utils/hasReturnValue.js +22 -66
  123. package/dist/utils/hasReturnValue.js.map +1 -1
  124. package/package.json +16 -16
@@ -1 +1 @@
1
- {"version":3,"file":"checkPropertyNames.js","names":["validatePropertyNames","targetTagName","enableFixer","jsdoc","utils","propertyTags","Object","entries","tags","filter","tag","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","name","reportJSDoc","removeTag","validatePropertyNamesDeep","jsdocPropertyNames","report","lastRealProperty","jsdocPropertyName","isPropertyPath","includes","pathRootNodeName","slice","indexOf","endsWith","iterateJsdoc","context","options","jsdocPropertyNamesDeep","getJsdocTagsDeep","length","getPreferredTagName","tagName","isError","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","type"],"sources":["../../src/rules/checkPropertyNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} enableFixer\n * @param jsdoc\n * @param utils\n * @returns {boolean}\n */\nconst validatePropertyNames = (\n targetTagName,\n enableFixer,\n jsdoc, utils,\n) => {\n const propertyTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n\n return propertyTags.some(([\n , tag,\n ], index) => {\n let tagsIndex;\n const dupeTagInfo = propertyTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {string[]} jsdocPropertyNames\n * @param jsdoc\n * @param {Function} report\n */\nconst validatePropertyNamesDeep = (\n targetTagName,\n jsdocPropertyNames, jsdoc, report,\n) => {\n let lastRealProperty;\n\n return jsdocPropertyNames.some(({\n name: jsdocPropertyName,\n idx,\n }) => {\n const isPropertyPath = jsdocPropertyName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealProperty) {\n report(`@${targetTagName} path declaration (\"${jsdocPropertyName}\") appears before any real property.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocPropertyName.slice(0, jsdocPropertyName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealProperty) {\n report(\n `@${targetTagName} path declaration (\"${jsdocPropertyName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real property name (\"${lastRealProperty}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealProperty = jsdocPropertyName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n enableFixer = false,\n } = context.options[0] || {};\n const jsdocPropertyNamesDeep = utils.getJsdocTagsDeep('property');\n if (!jsdocPropertyNamesDeep.length) {\n return;\n }\n\n const targetTagName = utils.getPreferredTagName({\n tagName: 'property',\n });\n const isError = validatePropertyNames(\n targetTagName,\n enableFixer,\n jsdoc,\n utils,\n );\n\n if (isError) {\n return;\n }\n\n validatePropertyNamesDeep(\n targetTagName, jsdocPropertyNamesDeep, jsdoc, report,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Ensures that property names in JSDoc are not duplicated on the same block and that nested properties have defined roots.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-property-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\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":"checkPropertyNames.js","names":["validatePropertyNames","targetTagName","enableFixer","jsdoc","utils","propertyTags","Object","entries","tags","filter","tag","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","name","reportJSDoc","removeTag","validatePropertyNamesDeep","jsdocPropertyNames","report","lastRealProperty","jsdocPropertyName","isPropertyPath","includes","pathRootNodeName","slice","indexOf","endsWith","iterateJsdoc","context","options","jsdocPropertyNamesDeep","getJsdocTagsDeep","length","getPreferredTagName","tagName","isError","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","type"],"sources":["../../src/rules/checkPropertyNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} enableFixer\n * @param jsdoc\n * @param utils\n * @returns {boolean}\n */\nconst validatePropertyNames = (\n targetTagName,\n enableFixer,\n jsdoc, utils,\n) => {\n const propertyTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n\n return propertyTags.some(([\n , tag,\n ], index) => {\n let tagsIndex;\n const dupeTagInfo = propertyTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {string[]} jsdocPropertyNames\n * @param jsdoc\n * @param {Function} report\n */\nconst validatePropertyNamesDeep = (\n targetTagName,\n jsdocPropertyNames, jsdoc, report,\n) => {\n let lastRealProperty;\n\n return jsdocPropertyNames.some(({\n name: jsdocPropertyName,\n idx,\n }) => {\n const isPropertyPath = jsdocPropertyName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealProperty) {\n report(`@${targetTagName} path declaration (\"${jsdocPropertyName}\") appears before any real property.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocPropertyName.slice(0, jsdocPropertyName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealProperty) {\n report(\n `@${targetTagName} path declaration (\"${jsdocPropertyName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real property name (\"${lastRealProperty}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealProperty = jsdocPropertyName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n enableFixer = false,\n } = context.options[0] || {};\n const jsdocPropertyNamesDeep = utils.getJsdocTagsDeep('property');\n if (!jsdocPropertyNamesDeep.length) {\n return;\n }\n\n const targetTagName = utils.getPreferredTagName({\n tagName: 'property',\n });\n const isError = validatePropertyNames(\n targetTagName,\n enableFixer,\n jsdoc,\n utils,\n );\n\n if (isError) {\n return;\n }\n\n validatePropertyNamesDeep(\n targetTagName, jsdocPropertyNamesDeep, jsdoc, report,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Ensures that property names in JSDoc are not duplicated on the same block and that nested properties have defined roots.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-property-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  var _default = (0, _iterateJsdoc.default)(({
13
10
  jsdoc,
14
11
  report,
@@ -16,8 +13,9 @@ var _default = (0, _iterateJsdoc.default)(({
16
13
  }) => {
17
14
  const {
18
15
  mode
19
- } = settings; // Don't check for "permissive" and "closure"
16
+ } = settings;
20
17
 
18
+ // Don't check for "permissive" and "closure"
21
19
  if (mode === 'jsdoc' || mode === 'typescript') {
22
20
  for (const tag of jsdoc.tags) {
23
21
  if (tag.type.slice(-1) === '=') {
@@ -36,7 +34,6 @@ var _default = (0, _iterateJsdoc.default)(({
36
34
  type: 'suggestion'
37
35
  }
38
36
  });
39
-
40
37
  exports.default = _default;
41
38
  module.exports = exports.default;
42
39
  //# sourceMappingURL=checkSyntax.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkSyntax.js","names":["iterateJsdoc","jsdoc","report","settings","mode","tag","tags","type","slice","iterateAllJsdocs","meta","docs","description","url"],"sources":["../../src/rules/checkSyntax.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n settings,\n}) => {\n const {\n mode,\n } = settings;\n\n // Don't check for \"permissive\" and \"closure\"\n if (mode === 'jsdoc' || mode === 'typescript') {\n for (const tag of jsdoc.tags) {\n if (tag.type.slice(-1) === '=') {\n report('Syntax should not be Google Closure Compiler style.', null, tag);\n break;\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-syntax',\n },\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;;AAAA;;;;eAEe,IAAAA,qBAAA,EAAa,CAAC;EAC3BC,KAD2B;EAE3BC,MAF2B;EAG3BC;AAH2B,CAAD,KAItB;EACJ,MAAM;IACJC;EADI,IAEFD,QAFJ,CADI,CAKJ;;EACA,IAAIC,IAAI,KAAK,OAAT,IAAoBA,IAAI,KAAK,YAAjC,EAA+C;IAC7C,KAAK,MAAMC,GAAX,IAAkBJ,KAAK,CAACK,IAAxB,EAA8B;MAC5B,IAAID,GAAG,CAACE,IAAJ,CAASC,KAAT,CAAe,CAAC,CAAhB,MAAuB,GAA3B,EAAgC;QAC9BN,MAAM,CAAC,qDAAD,EAAwD,IAAxD,EAA8DG,GAA9D,CAAN;QACA;MACD;IACF;EACF;AACF,CAlBc,EAkBZ;EACDI,gBAAgB,EAAE,IADjB;EAEDC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,oGADT;MAEJC,GAAG,EAAE;IAFD,CADF;IAKJN,IAAI,EAAE;EALF;AAFL,CAlBY,C"}
1
+ {"version":3,"file":"checkSyntax.js","names":["iterateJsdoc","jsdoc","report","settings","mode","tag","tags","type","slice","iterateAllJsdocs","meta","docs","description","url"],"sources":["../../src/rules/checkSyntax.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n settings,\n}) => {\n const {\n mode,\n } = settings;\n\n // Don't check for \"permissive\" and \"closure\"\n if (mode === 'jsdoc' || mode === 'typescript') {\n for (const tag of jsdoc.tags) {\n if (tag.type.slice(-1) === '=') {\n report('Syntax should not be Google Closure Compiler style.', null, tag);\n break;\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-syntax',\n },\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA;AAA2C;AAAA,eAE5B,IAAAA,qBAAY,EAAC,CAAC;EAC3BC,KAAK;EACLC,MAAM;EACNC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC;EACF,CAAC,GAAGD,QAAQ;;EAEZ;EACA,IAAIC,IAAI,KAAK,OAAO,IAAIA,IAAI,KAAK,YAAY,EAAE;IAC7C,KAAK,MAAMC,GAAG,IAAIJ,KAAK,CAACK,IAAI,EAAE;MAC5B,IAAID,GAAG,CAACE,IAAI,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QAC9BN,MAAM,CAAC,qDAAqD,EAAE,IAAI,EAAEG,GAAG,CAAC;QACxE;MACF;IACF;EACF;AACF,CAAC,EAAE;EACDI,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,oGAAoG;MACjHC,GAAG,EAAE;IACP,CAAC;IACDN,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA;AAAA"}
@@ -4,16 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _escapeStringRegexp = _interopRequireDefault(require("escape-string-regexp"));
9
-
10
8
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  // https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/
15
11
  const jsxTagNames = new Set(['jsx', 'jsxFrag', 'jsxImportSource', 'jsxRuntime']);
16
-
17
12
  var _default = (0, _iterateJsdoc.default)(({
18
13
  sourceCode,
19
14
  jsdoc,
@@ -34,59 +29,47 @@ var _default = (0, _iterateJsdoc.default)(({
34
29
  } = settings;
35
30
  const definedStructuredTags = Object.keys(structuredTags);
36
31
  const definedNonPreferredTags = Object.keys(tagNamePreference);
37
-
38
32
  if (definedNonPreferredTags.length) {
39
33
  definedPreferredTags = Object.values(tagNamePreference).map(preferredTag => {
40
34
  if (typeof preferredTag === 'string') {
41
35
  // May become an empty string but will be filtered out below
42
36
  return preferredTag;
43
37
  }
44
-
45
38
  if (!preferredTag) {
46
39
  return undefined;
47
40
  }
48
-
49
41
  if (typeof preferredTag !== 'object') {
50
42
  utils.reportSettings('Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.');
51
43
  }
52
-
53
44
  return preferredTag.replacement;
54
45
  }).filter(preferredType => {
55
46
  return preferredType;
56
47
  });
57
48
  }
58
-
59
49
  for (const jsdocTag of jsdoc.tags) {
60
50
  const tagName = jsdocTag.tag;
61
-
62
51
  if (jsxTags && jsxTagNames.has(tagName)) {
63
52
  continue;
64
53
  }
65
-
66
54
  if (utils.isValidTag(tagName, [...definedTags, ...definedPreferredTags, ...definedNonPreferredTags, ...definedStructuredTags])) {
67
55
  let preferredTagName = utils.getPreferredTagName({
68
56
  allowObjectReturn: true,
69
57
  defaultMessage: `Blacklisted tag found (\`@${tagName}\`)`,
70
58
  tagName
71
59
  });
72
-
73
60
  if (!preferredTagName) {
74
61
  continue;
75
62
  }
76
-
77
63
  let message;
78
-
79
64
  if (typeof preferredTagName === 'object') {
80
65
  ({
81
66
  message,
82
67
  replacement: preferredTagName
83
68
  } = preferredTagName);
84
69
  }
85
-
86
70
  if (!message) {
87
71
  message = `Invalid JSDoc tag (preference). Replace "${tagName}" JSDoc tag with "${preferredTagName}".`;
88
72
  }
89
-
90
73
  if (preferredTagName !== tagName) {
91
74
  report(message, fixer => {
92
75
  const replacement = sourceCode.getText(jsdocNode).replace(new RegExp(`@${(0, _escapeStringRegexp.default)(tagName)}\\b`, 'u'), `@${preferredTagName}`);
@@ -123,7 +106,6 @@ var _default = (0, _iterateJsdoc.default)(({
123
106
  type: 'suggestion'
124
107
  }
125
108
  });
126
-
127
109
  exports.default = _default;
128
110
  module.exports = exports.default;
129
111
  //# sourceMappingURL=checkTagNames.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkTagNames.js","names":["jsxTagNames","Set","iterateJsdoc","sourceCode","jsdoc","report","utils","context","settings","jsdocNode","definedTags","jsxTags","options","definedPreferredTags","tagNamePreference","structuredTags","definedStructuredTags","Object","keys","definedNonPreferredTags","length","values","map","preferredTag","undefined","reportSettings","replacement","filter","preferredType","jsdocTag","tags","tagName","tag","has","isValidTag","preferredTagName","getPreferredTagName","allowObjectReturn","defaultMessage","message","fixer","getText","replace","RegExp","escapeStringRegexp","replaceText","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type"],"sources":["../../src/rules/checkTagNames.js"],"sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/\nconst jsxTagNames = new Set([\n 'jsx',\n 'jsxFrag',\n 'jsxImportSource',\n 'jsxRuntime',\n]);\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdoc,\n report,\n utils,\n context,\n settings,\n jsdocNode,\n}) => {\n const {\n definedTags = [],\n jsxTags,\n } = context.options[0] || {};\n\n let definedPreferredTags = [];\n const {\n tagNamePreference,\n structuredTags,\n } = settings;\n const definedStructuredTags = Object.keys(structuredTags);\n const definedNonPreferredTags = Object.keys(tagNamePreference);\n if (definedNonPreferredTags.length) {\n definedPreferredTags = Object.values(tagNamePreference).map((preferredTag) => {\n if (typeof preferredTag === 'string') {\n // May become an empty string but will be filtered out below\n return preferredTag;\n }\n\n if (!preferredTag) {\n return undefined;\n }\n\n if (typeof preferredTag !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.',\n );\n }\n\n return preferredTag.replacement;\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n for (const jsdocTag of jsdoc.tags) {\n const tagName = jsdocTag.tag;\n if (jsxTags && jsxTagNames.has(tagName)) {\n continue;\n }\n\n if (utils.isValidTag(tagName, [\n ...definedTags, ...definedPreferredTags, ...definedNonPreferredTags,\n ...definedStructuredTags,\n ])) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n if (!preferredTagName) {\n continue;\n }\n\n let message;\n if (typeof preferredTagName === 'object') {\n ({\n message,\n replacement: preferredTagName,\n } = preferredTagName);\n }\n\n if (!message) {\n message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${escapeStringRegexp(tagName)}\\\\b`, 'u'),\n `@${preferredTagName}`,\n );\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n } else {\n report(`Invalid JSDoc tag name \"${tagName}\".`, null, jsdocTag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid block tag names.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-tag-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n jsxTags: {\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":"checkTagNames.js","names":["jsxTagNames","Set","iterateJsdoc","sourceCode","jsdoc","report","utils","context","settings","jsdocNode","definedTags","jsxTags","options","definedPreferredTags","tagNamePreference","structuredTags","definedStructuredTags","Object","keys","definedNonPreferredTags","length","values","map","preferredTag","undefined","reportSettings","replacement","filter","preferredType","jsdocTag","tags","tagName","tag","has","isValidTag","preferredTagName","getPreferredTagName","allowObjectReturn","defaultMessage","message","fixer","getText","replace","RegExp","escapeStringRegexp","replaceText","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type"],"sources":["../../src/rules/checkTagNames.js"],"sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/\nconst jsxTagNames = new Set([\n 'jsx',\n 'jsxFrag',\n 'jsxImportSource',\n 'jsxRuntime',\n]);\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdoc,\n report,\n utils,\n context,\n settings,\n jsdocNode,\n}) => {\n const {\n definedTags = [],\n jsxTags,\n } = context.options[0] || {};\n\n let definedPreferredTags = [];\n const {\n tagNamePreference,\n structuredTags,\n } = settings;\n const definedStructuredTags = Object.keys(structuredTags);\n const definedNonPreferredTags = Object.keys(tagNamePreference);\n if (definedNonPreferredTags.length) {\n definedPreferredTags = Object.values(tagNamePreference).map((preferredTag) => {\n if (typeof preferredTag === 'string') {\n // May become an empty string but will be filtered out below\n return preferredTag;\n }\n\n if (!preferredTag) {\n return undefined;\n }\n\n if (typeof preferredTag !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.',\n );\n }\n\n return preferredTag.replacement;\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n for (const jsdocTag of jsdoc.tags) {\n const tagName = jsdocTag.tag;\n if (jsxTags && jsxTagNames.has(tagName)) {\n continue;\n }\n\n if (utils.isValidTag(tagName, [\n ...definedTags, ...definedPreferredTags, ...definedNonPreferredTags,\n ...definedStructuredTags,\n ])) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n if (!preferredTagName) {\n continue;\n }\n\n let message;\n if (typeof preferredTagName === 'object') {\n ({\n message,\n replacement: preferredTagName,\n } = preferredTagName);\n }\n\n if (!message) {\n message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${escapeStringRegexp(tagName)}\\\\b`, 'u'),\n `@${preferredTagName}`,\n );\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n } else {\n report(`Invalid JSDoc tag name \"${tagName}\".`, null, jsdocTag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid block tag names.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-tag-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n jsxTags: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -4,14 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _jsdoccomment = require("@es-joy/jsdoccomment");
9
-
10
8
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  const strictNativeTypes = ['undefined', 'null', 'boolean', 'number', 'bigint', 'string', 'symbol', 'object', 'Array', 'Function', 'Date', 'RegExp'];
11
+
15
12
  /**
16
13
  * Adjusts the parent type node `meta` for generic matches (or type node
17
14
  * `type` for `JsdocTypeAny`) and sets the type node `value`.
@@ -24,10 +21,8 @@ const strictNativeTypes = ['undefined', 'null', 'boolean', 'number', 'bigint', '
24
21
  * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode
25
22
  * @returns {void}
26
23
  */
27
-
28
24
  const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {
29
25
  let ret = preferred;
30
-
31
26
  if (isGenericMatch) {
32
27
  if (preferred === '[]') {
33
28
  parentNode.meta.brackets = 'square';
@@ -35,14 +30,12 @@ const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parent
35
30
  ret = 'Array';
36
31
  } else {
37
32
  const dotBracketEnd = preferred.match(/\.(?:<>)?$/u);
38
-
39
33
  if (dotBracketEnd) {
40
34
  parentNode.meta.brackets = 'angle';
41
35
  parentNode.meta.dot = true;
42
36
  ret = preferred.slice(0, -dotBracketEnd[0].length);
43
37
  } else {
44
38
  const bracketEnd = preferred.endsWith('<>');
45
-
46
39
  if (bracketEnd) {
47
40
  parentNode.meta.brackets = 'angle';
48
41
  parentNode.meta.dot = false;
@@ -56,14 +49,13 @@ const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parent
56
49
  } else if (type === 'JsdocTypeAny') {
57
50
  node.type = 'JsdocTypeName';
58
51
  }
52
+ node.value = ret.replace(/(?:\.|<>|\.<>|\[\])$/u, '');
59
53
 
60
- node.value = ret.replace(/(?:\.|<>|\.<>|\[\])$/u, ''); // For bare pseudo-types like `<>`
61
-
54
+ // For bare pseudo-types like `<>`
62
55
  if (!ret) {
63
56
  node.value = typeNodeName;
64
57
  }
65
58
  };
66
-
67
59
  var _default = (0, _iterateJsdoc.default)(({
68
60
  jsdocNode,
69
61
  sourceCode,
@@ -81,7 +73,8 @@ var _default = (0, _iterateJsdoc.default)(({
81
73
  mode
82
74
  } = settings;
83
75
  const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal || 'object' in preferredTypesOriginal || 'object.<>' in preferredTypesOriginal || 'Object.<>' in preferredTypesOriginal || 'object<>' in preferredTypesOriginal);
84
- const preferredTypes = { ...(injectObjectPreferredTypes ? {
76
+ const preferredTypes = {
77
+ ...(injectObjectPreferredTypes ? {
85
78
  Object: 'object',
86
79
  'object.<>': 'Object<>',
87
80
  'Object.<>': 'Object<>',
@@ -94,6 +87,7 @@ var _default = (0, _iterateJsdoc.default)(({
94
87
  unifyParentAndChildTypeChecks,
95
88
  exemptTagContexts = []
96
89
  } = context.options[0] || {};
90
+
97
91
  /**
98
92
  * Gets information about the preferred type: whether there is a matching
99
93
  * preferred type, what the type is, and whether it is a match to a generic.
@@ -104,19 +98,15 @@ var _default = (0, _iterateJsdoc.default)(({
104
98
  * @param {string} property
105
99
  * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}
106
100
  */
107
-
108
101
  const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {
109
102
  let hasMatchingPreferredType = false;
110
103
  let isGenericMatch = false;
111
104
  let typeName = typeNodeName;
112
105
  const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';
113
-
114
106
  if (unifyParentAndChildTypeChecks || isNameOfGeneric) {
115
107
  var _parentNode$meta, _parentNode$meta2;
116
-
117
108
  const brackets = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta = parentNode.meta) === null || _parentNode$meta === void 0 ? void 0 : _parentNode$meta.brackets;
118
109
  const dot = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta2 = parentNode.meta) === null || _parentNode$meta2 === void 0 ? void 0 : _parentNode$meta2.dot;
119
-
120
110
  if (brackets === 'angle') {
121
111
  const checkPostFixes = dot ? ['.', '.<>'] : ['<>'];
122
112
  isGenericMatch = checkPostFixes.some(checkPostFix => {
@@ -124,11 +114,9 @@ var _default = (0, _iterateJsdoc.default)(({
124
114
  typeName += checkPostFix;
125
115
  return true;
126
116
  }
127
-
128
117
  return false;
129
118
  });
130
119
  }
131
-
132
120
  if (!isGenericMatch && property) {
133
121
  const checkPostFixes = dot ? ['.', '.<>'] : [brackets === 'angle' ? '<>' : '[]'];
134
122
  isGenericMatch = checkPostFixes.some(checkPostFix => {
@@ -136,18 +124,17 @@ var _default = (0, _iterateJsdoc.default)(({
136
124
  typeName = checkPostFix;
137
125
  return true;
138
126
  }
139
-
140
127
  return false;
141
128
  });
142
129
  }
143
130
  }
144
-
145
131
  const directNameMatch = (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[typeNodeName]) !== undefined && !Object.values(preferredTypes).includes(typeNodeName);
146
132
  const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;
147
133
  isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;
148
134
  hasMatchingPreferredType = isGenericMatch || directNameMatch && !property;
149
135
  return [hasMatchingPreferredType, typeName, isGenericMatch];
150
136
  };
137
+
151
138
  /**
152
139
  * Iterates strict types to see if any should be added to `invalidTypes` (and
153
140
  * the the relevant strict type returned as the new preferred type).
@@ -158,34 +145,32 @@ var _default = (0, _iterateJsdoc.default)(({
158
145
  * @param {string[]} invalidTypes
159
146
  * @returns {string} The `preferred` type string, optionally changed
160
147
  */
161
-
162
-
163
148
  const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {
164
149
  let changedPreferred = preferred;
165
-
166
150
  for (const strictNativeType of strictNativeTypes) {
167
151
  var _parentNode$elements, _parentNode$left, _parentNode$left2;
168
-
169
- if (strictNativeType === 'object' && ( // This is not set to remap with exact type match (e.g.,
152
+ if (strictNativeType === 'object' && (
153
+ // This is not set to remap with exact type match (e.g.,
170
154
  // `object: 'Object'`), so can ignore (including if circular)
171
- !(preferredTypes !== null && preferredTypes !== void 0 && preferredTypes[typeNodeName]) || // Although present on `preferredTypes` for remapping, this is a
155
+ !(preferredTypes !== null && preferredTypes !== void 0 && preferredTypes[typeNodeName]) ||
156
+ // Although present on `preferredTypes` for remapping, this is a
172
157
  // parent object without a parent match (and not
173
158
  // `unifyParentAndChildTypeChecks`) and we don't want
174
159
  // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555
175
160
  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')) {
176
161
  continue;
177
162
  }
178
-
179
- if (strictNativeType !== typeNodeName && strictNativeType.toLowerCase() === typeNodeName.toLowerCase() && ( // Don't report if user has own map for a strict native type
163
+ if (strictNativeType !== typeNodeName && strictNativeType.toLowerCase() === typeNodeName.toLowerCase() && (
164
+ // Don't report if user has own map for a strict native type
180
165
  !preferredTypes || (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[strictNativeType]) === undefined)) {
181
166
  changedPreferred = strictNativeType;
182
167
  invalidTypes.push([typeNodeName, changedPreferred]);
183
168
  break;
184
169
  }
185
170
  }
186
-
187
171
  return changedPreferred;
188
172
  };
173
+
189
174
  /**
190
175
  * Collect invalid type info.
191
176
  *
@@ -198,18 +183,14 @@ var _default = (0, _iterateJsdoc.default)(({
198
183
  * @param {string[]} invalidTypes
199
184
  * @returns {void}
200
185
  */
201
-
202
-
203
186
  const getInvalidTypes = (type, value, tagName, property, node, parentNode, invalidTypes) => {
204
187
  let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;
205
188
  const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);
206
189
  let preferred;
207
190
  let types;
208
-
209
191
  if (hasMatchingPreferredType) {
210
192
  const preferredSetting = preferredTypes[typeName];
211
193
  typeNodeName = typeName === '[]' ? typeName : typeNodeName;
212
-
213
194
  if (!preferredSetting) {
214
195
  invalidTypes.push([typeNodeName]);
215
196
  } else if (typeof preferredSetting === 'string') {
@@ -231,52 +212,44 @@ var _default = (0, _iterateJsdoc.default)(({
231
212
  invalidTypes.push([typeNodeName, types]);
232
213
  } else if (!noDefaults && type === 'JsdocTypeName') {
233
214
  preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);
234
- } // For fixer
235
-
215
+ }
236
216
 
217
+ // For fixer
237
218
  if (preferred) {
238
219
  adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);
239
220
  }
240
221
  };
241
-
242
222
  for (const jsdocTag of jsdocTagsWithPossibleType) {
243
223
  const invalidTypes = [];
244
224
  let typeAst;
245
-
246
225
  try {
247
226
  typeAst = mode === 'permissive' ? (0, _jsdoccomment.tryParse)(jsdocTag.type) : (0, _jsdoccomment.parse)(jsdocTag.type, mode);
248
227
  } catch {
249
228
  continue;
250
229
  }
251
-
252
230
  const tagName = jsdocTag.tag;
253
231
  (0, _jsdoccomment.traverse)(typeAst, (node, parentNode, property) => {
254
232
  const {
255
233
  type,
256
234
  value
257
235
  } = node;
258
-
259
236
  if (!['JsdocTypeName', 'JsdocTypeAny'].includes(type)) {
260
237
  return;
261
238
  }
262
-
263
239
  getInvalidTypes(type, value, tagName, property, node, parentNode, invalidTypes);
264
240
  });
265
-
266
241
  if (invalidTypes.length) {
267
242
  const fixedType = (0, _jsdoccomment.stringify)(typeAst);
243
+
268
244
  /**
269
245
  * @param {any} fixer The ESLint fixer
270
246
  * @returns {string}
271
247
  */
272
-
273
248
  const fix = fixer => {
274
249
  return fixer.replaceText(jsdocNode, sourceCode.getText(jsdocNode).replace(`{${jsdocTag.type}}`, `{${fixedType}}`));
275
250
  };
276
-
277
251
  for (const [badType, preferredType = '', message] of invalidTypes) {
278
252
  const tagValue = jsdocTag.name ? ` "${jsdocTag.name}"` : '';
279
-
280
253
  if (exemptTagContexts.some(({
281
254
  tag,
282
255
  types
@@ -285,7 +258,6 @@ var _default = (0, _iterateJsdoc.default)(({
285
258
  })) {
286
259
  continue;
287
260
  }
288
-
289
261
  report(message || `Invalid JSDoc @${tagName}${tagValue} type "${badType}"` + (preferredType ? '; ' : '.') + (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''), preferredType ? fix : null, jsdocTag, message ? {
290
262
  tagName,
291
263
  tagValue
@@ -338,7 +310,6 @@ var _default = (0, _iterateJsdoc.default)(({
338
310
  type: 'suggestion'
339
311
  }
340
312
  });
341
-
342
313
  exports.default = _default;
343
314
  module.exports = exports.default;
344
315
  //# sourceMappingURL=checkTypes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkTypes.js","names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","iterateJsdoc","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","preferredTypesOriginal","structuredTags","mode","injectObjectPreferredTypes","Object","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","checkNativeTypes","invalidTypes","changedPreferred","strictNativeType","elements","left","toLowerCase","push","getInvalidTypes","tagName","types","preferredSetting","replacement","message","reportSettings","entries","typs","Array","isArray","jsdocTag","typeAst","tryParse","parse","traverse","fixedType","stringify","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"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\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 preferredTypes = {\n ...injectObjectPreferredTypes ? {\n Object: 'object',\n 'object.<>': 'Object<>',\n 'Object.<>': 'Object<>',\n 'object<>': 'Object<>',\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) {\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} 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, 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 (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n typeNodeName,\n preferred,\n preferredSetting?.message,\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 jsdocTag of jsdocTagsWithPossibleType) {\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 tagName = jsdocTag.tag;\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, property, node, parentNode, invalidTypes);\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n /**\n * @param {any} 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 message,\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 message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\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":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","iterateJsdoc","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","preferredTypesOriginal","structuredTags","mode","injectObjectPreferredTypes","Object","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","checkNativeTypes","invalidTypes","changedPreferred","strictNativeType","elements","left","toLowerCase","push","getInvalidTypes","tagName","types","preferredSetting","replacement","message","reportSettings","entries","typs","Array","isArray","jsdocTag","typeAst","tryParse","parse","traverse","fixedType","stringify","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"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\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 preferredTypes = {\n ...injectObjectPreferredTypes ? {\n Object: 'object',\n 'object.<>': 'Object<>',\n 'Object.<>': 'Object<>',\n 'object<>': 'Object<>',\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) {\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} 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, 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 (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n typeNodeName,\n preferred,\n preferredSetting?.message,\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 jsdocTag of jsdocTagsWithPossibleType) {\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 tagName = jsdocTag.tag;\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, property, node, parentNode, invalidTypes);\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n /**\n * @param {any} 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 message,\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 message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\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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"}