@depup/eslint-plugin-jsdoc 63.3.2-depup.1 → 64.0.0-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/README.md +3 -11
  2. package/changes.json +3 -16
  3. package/dist/index.d.ts +7 -4
  4. package/package.json +29 -67
  5. package/src/index.js +7 -8
  6. package/dist/WarnSettings.cjs +0 -38
  7. package/dist/WarnSettings.cjs.map +0 -1
  8. package/dist/alignTransform.cjs +0 -402
  9. package/dist/alignTransform.cjs.map +0 -1
  10. package/dist/buildForbidRuleDefinition.cjs +0 -101
  11. package/dist/buildForbidRuleDefinition.cjs.map +0 -1
  12. package/dist/buildRejectOrPreferRuleDefinition.cjs +0 -352
  13. package/dist/buildRejectOrPreferRuleDefinition.cjs.map +0 -1
  14. package/dist/cjs/WarnSettings.d.ts +0 -16
  15. package/dist/cjs/alignTransform.d.ts +0 -33
  16. package/dist/cjs/buildForbidRuleDefinition.d.ts +0 -14
  17. package/dist/cjs/buildRejectOrPreferRuleDefinition.d.ts +0 -8
  18. package/dist/cjs/defaultTagOrder.d.ts +0 -4
  19. package/dist/cjs/exportParser.d.ts +0 -40
  20. package/dist/cjs/getDefaultTagStructureForMode.d.ts +0 -10
  21. package/dist/cjs/getJsdocProcessorPlugin.d.cts +0 -5
  22. package/dist/cjs/getJsdocProcessorPlugin.d.ts +0 -66
  23. package/dist/cjs/index-cjs.d.ts +0 -23
  24. package/dist/cjs/index.cjs.d.cts +0 -2
  25. package/dist/cjs/iterateJsdoc.d.cts +0 -7
  26. package/dist/cjs/iterateJsdoc.d.ts +0 -495
  27. package/dist/cjs/jsdocUtils.d.ts +0 -500
  28. package/dist/cjs/rules/checkAccess.d.ts +0 -2
  29. package/dist/cjs/rules/checkAlignment.d.ts +0 -2
  30. package/dist/cjs/rules/checkExamples.d.ts +0 -3
  31. package/dist/cjs/rules/checkIndentation.d.ts +0 -2
  32. package/dist/cjs/rules/checkLineAlignment.d.ts +0 -9
  33. package/dist/cjs/rules/checkParamNames.d.ts +0 -2
  34. package/dist/cjs/rules/checkPropertyNames.d.ts +0 -2
  35. package/dist/cjs/rules/checkSyntax.d.ts +0 -2
  36. package/dist/cjs/rules/checkTagNames.d.ts +0 -2
  37. package/dist/cjs/rules/checkTemplateNames.d.ts +0 -2
  38. package/dist/cjs/rules/checkTypes.d.ts +0 -7
  39. package/dist/cjs/rules/checkValues.d.ts +0 -2
  40. package/dist/cjs/rules/convertToJsdocComments.d.ts +0 -266
  41. package/dist/cjs/rules/emptyTags.d.ts +0 -2
  42. package/dist/cjs/rules/escapeInlineTags.d.ts +0 -2
  43. package/dist/cjs/rules/implementsOnClasses.d.ts +0 -2
  44. package/dist/cjs/rules/importsAsDependencies.d.ts +0 -2
  45. package/dist/cjs/rules/informativeDocs.d.ts +0 -2
  46. package/dist/cjs/rules/linesBeforeBlock.d.ts +0 -2
  47. package/dist/cjs/rules/matchDescription.d.ts +0 -2
  48. package/dist/cjs/rules/matchName.d.ts +0 -2
  49. package/dist/cjs/rules/multilineBlocks.d.ts +0 -2
  50. package/dist/cjs/rules/noBadBlocks.d.ts +0 -2
  51. package/dist/cjs/rules/noBlankBlockDescriptions.d.ts +0 -2
  52. package/dist/cjs/rules/noBlankBlocks.d.ts +0 -2
  53. package/dist/cjs/rules/noDefaults.d.ts +0 -2
  54. package/dist/cjs/rules/noMissingSyntax.d.ts +0 -9
  55. package/dist/cjs/rules/noMultiAsterisks.d.ts +0 -2
  56. package/dist/cjs/rules/noRestrictedSyntax.d.ts +0 -2
  57. package/dist/cjs/rules/noTypes.d.ts +0 -2
  58. package/dist/cjs/rules/noUndefinedTypes.d.ts +0 -2
  59. package/dist/cjs/rules/normalizeSeeLinks.d.ts +0 -2
  60. package/dist/cjs/rules/preferImportTag.d.ts +0 -2
  61. package/dist/cjs/rules/requireAsteriskPrefix.d.ts +0 -2
  62. package/dist/cjs/rules/requireDescription.d.ts +0 -2
  63. package/dist/cjs/rules/requireDescriptionCompleteSentence.d.ts +0 -2
  64. package/dist/cjs/rules/requireExample.d.ts +0 -2
  65. package/dist/cjs/rules/requireFileOverview.d.ts +0 -2
  66. package/dist/cjs/rules/requireHyphenBeforeParamDescription.d.ts +0 -2
  67. package/dist/cjs/rules/requireJsdoc.d.ts +0 -24
  68. package/dist/cjs/rules/requireParam.d.ts +0 -3
  69. package/dist/cjs/rules/requireParamDescription.d.ts +0 -2
  70. package/dist/cjs/rules/requireParamName.d.ts +0 -2
  71. package/dist/cjs/rules/requireParamType.d.ts +0 -2
  72. package/dist/cjs/rules/requireProperty.d.ts +0 -2
  73. package/dist/cjs/rules/requirePropertyDescription.d.ts +0 -2
  74. package/dist/cjs/rules/requirePropertyName.d.ts +0 -2
  75. package/dist/cjs/rules/requirePropertyType.d.ts +0 -2
  76. package/dist/cjs/rules/requireRejects.d.ts +0 -2
  77. package/dist/cjs/rules/requireReturns.d.ts +0 -2
  78. package/dist/cjs/rules/requireReturnsCheck.d.ts +0 -2
  79. package/dist/cjs/rules/requireReturnsDescription.d.ts +0 -2
  80. package/dist/cjs/rules/requireReturnsType.d.ts +0 -2
  81. package/dist/cjs/rules/requireTags.d.ts +0 -2
  82. package/dist/cjs/rules/requireTemplate.d.ts +0 -2
  83. package/dist/cjs/rules/requireThrows.d.ts +0 -2
  84. package/dist/cjs/rules/requireYields.d.ts +0 -2
  85. package/dist/cjs/rules/requireYieldsCheck.d.ts +0 -2
  86. package/dist/cjs/rules/sortTags.d.ts +0 -2
  87. package/dist/cjs/rules/tagLines.d.ts +0 -2
  88. package/dist/cjs/rules/textEscaping.d.ts +0 -2
  89. package/dist/cjs/rules/tsMethodSignatureStyle.d.ts +0 -2
  90. package/dist/cjs/rules/tsNoEmptyObjectType.d.ts +0 -2
  91. package/dist/cjs/rules/tsNoUnnecessaryTemplateExpression.d.ts +0 -2
  92. package/dist/cjs/rules/tsPreferFunctionType.d.ts +0 -2
  93. package/dist/cjs/rules/typeFormatting.d.ts +0 -2
  94. package/dist/cjs/rules/validTypes.d.ts +0 -2
  95. package/dist/cjs/tagNames.d.ts +0 -15
  96. package/dist/cjs/utils/hasReturnValue.d.ts +0 -19
  97. package/dist/defaultTagOrder.cjs +0 -46
  98. package/dist/defaultTagOrder.cjs.map +0 -1
  99. package/dist/exportParser.cjs +0 -732
  100. package/dist/exportParser.cjs.map +0 -1
  101. package/dist/generateDocs.cjs +0 -342
  102. package/dist/generateDocs.cjs.map +0 -1
  103. package/dist/generateOptions.cjs +0 -62
  104. package/dist/generateOptions.cjs.map +0 -1
  105. package/dist/generateRule.cjs +0 -248
  106. package/dist/generateRule.cjs.map +0 -1
  107. package/dist/generateRuleTypes.cjs +0 -24
  108. package/dist/generateRuleTypes.cjs.map +0 -1
  109. package/dist/getDefaultTagStructureForMode.cjs +0 -289
  110. package/dist/getDefaultTagStructureForMode.cjs.map +0 -1
  111. package/dist/getJsdocProcessorPlugin.cjs +0 -587
  112. package/dist/getJsdocProcessorPlugin.cjs.map +0 -1
  113. package/dist/getJsdocProcessorPlugin.cts +0 -5
  114. package/dist/index-cjs.cjs +0 -598
  115. package/dist/index-cjs.cjs.map +0 -1
  116. package/dist/index-cjs.d.ts +0 -24
  117. package/dist/index-esm.cjs +0 -162
  118. package/dist/index-esm.cjs.map +0 -1
  119. package/dist/index-esm.d.ts +0 -72
  120. package/dist/index.cjs +0 -746
  121. package/dist/index.cjs.cts +0 -3
  122. package/dist/index.cjs.map +0 -1
  123. package/dist/iterateJsdoc.cjs +0 -2150
  124. package/dist/iterateJsdoc.cjs.map +0 -1
  125. package/dist/iterateJsdoc.cts +0 -7
  126. package/dist/jsdocUtils.cjs +0 -1786
  127. package/dist/jsdocUtils.cjs.map +0 -1
  128. package/dist/rules/checkAccess.cjs +0 -40
  129. package/dist/rules/checkAccess.cjs.map +0 -1
  130. package/dist/rules/checkAlignment.cjs +0 -78
  131. package/dist/rules/checkAlignment.cjs.map +0 -1
  132. package/dist/rules/checkExamples.cjs +0 -521
  133. package/dist/rules/checkExamples.cjs.map +0 -1
  134. package/dist/rules/checkIndentation.cjs +0 -170
  135. package/dist/rules/checkIndentation.cjs.map +0 -1
  136. package/dist/rules/checkLineAlignment.cjs +0 -398
  137. package/dist/rules/checkLineAlignment.cjs.map +0 -1
  138. package/dist/rules/checkParamNames.cjs +0 -407
  139. package/dist/rules/checkParamNames.cjs.map +0 -1
  140. package/dist/rules/checkPropertyNames.cjs +0 -135
  141. package/dist/rules/checkPropertyNames.cjs.map +0 -1
  142. package/dist/rules/checkSyntax.cjs +0 -38
  143. package/dist/rules/checkSyntax.cjs.map +0 -1
  144. package/dist/rules/checkTagNames.cjs +0 -312
  145. package/dist/rules/checkTagNames.cjs.map +0 -1
  146. package/dist/rules/checkTemplateNames.cjs +0 -192
  147. package/dist/rules/checkTemplateNames.cjs.map +0 -1
  148. package/dist/rules/checkTypes.cjs +0 -111
  149. package/dist/rules/checkTypes.cjs.map +0 -1
  150. package/dist/rules/checkValues.cjs +0 -166
  151. package/dist/rules/checkValues.cjs.map +0 -1
  152. package/dist/rules/convertToJsdocComments.cjs +0 -356
  153. package/dist/rules/convertToJsdocComments.cjs.map +0 -1
  154. package/dist/rules/emptyTags.cjs +0 -98
  155. package/dist/rules/emptyTags.cjs.map +0 -1
  156. package/dist/rules/escapeInlineTags.cjs +0 -234
  157. package/dist/rules/escapeInlineTags.cjs.map +0 -1
  158. package/dist/rules/implementsOnClasses.cjs +0 -74
  159. package/dist/rules/implementsOnClasses.cjs.map +0 -1
  160. package/dist/rules/importsAsDependencies.cjs +0 -104
  161. package/dist/rules/importsAsDependencies.cjs.map +0 -1
  162. package/dist/rules/informativeDocs.cjs +0 -187
  163. package/dist/rules/informativeDocs.cjs.map +0 -1
  164. package/dist/rules/linesBeforeBlock.cjs +0 -120
  165. package/dist/rules/linesBeforeBlock.cjs.map +0 -1
  166. package/dist/rules/matchDescription.cjs +0 -356
  167. package/dist/rules/matchDescription.cjs.map +0 -1
  168. package/dist/rules/matchName.cjs +0 -160
  169. package/dist/rules/matchName.cjs.map +0 -1
  170. package/dist/rules/multilineBlocks.cjs +0 -431
  171. package/dist/rules/multilineBlocks.cjs.map +0 -1
  172. package/dist/rules/noBadBlocks.cjs +0 -100
  173. package/dist/rules/noBadBlocks.cjs.map +0 -1
  174. package/dist/rules/noBlankBlockDescriptions.cjs +0 -63
  175. package/dist/rules/noBlankBlockDescriptions.cjs.map +0 -1
  176. package/dist/rules/noBlankBlocks.cjs +0 -54
  177. package/dist/rules/noBlankBlocks.cjs.map +0 -1
  178. package/dist/rules/noDefaults.cjs +0 -102
  179. package/dist/rules/noDefaults.cjs.map +0 -1
  180. package/dist/rules/noMissingSyntax.cjs +0 -196
  181. package/dist/rules/noMissingSyntax.cjs.map +0 -1
  182. package/dist/rules/noMultiAsterisks.cjs +0 -126
  183. package/dist/rules/noMultiAsterisks.cjs.map +0 -1
  184. package/dist/rules/noRestrictedSyntax.cjs +0 -68
  185. package/dist/rules/noRestrictedSyntax.cjs.map +0 -1
  186. package/dist/rules/noTypes.cjs +0 -101
  187. package/dist/rules/noTypes.cjs.map +0 -1
  188. package/dist/rules/noUndefinedTypes.cjs +0 -616
  189. package/dist/rules/noUndefinedTypes.cjs.map +0 -1
  190. package/dist/rules/normalizeSeeLinks.cjs +0 -271
  191. package/dist/rules/normalizeSeeLinks.cjs.map +0 -1
  192. package/dist/rules/preferImportTag.cjs +0 -362
  193. package/dist/rules/preferImportTag.cjs.map +0 -1
  194. package/dist/rules/requireAsteriskPrefix.cjs +0 -190
  195. package/dist/rules/requireAsteriskPrefix.cjs.map +0 -1
  196. package/dist/rules/requireDescription.cjs +0 -164
  197. package/dist/rules/requireDescription.cjs.map +0 -1
  198. package/dist/rules/requireDescriptionCompleteSentence.cjs +0 -321
  199. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +0 -1
  200. package/dist/rules/requireExample.cjs +0 -136
  201. package/dist/rules/requireExample.cjs.map +0 -1
  202. package/dist/rules/requireFileOverview.cjs +0 -194
  203. package/dist/rules/requireFileOverview.cjs.map +0 -1
  204. package/dist/rules/requireHyphenBeforeParamDescription.cjs +0 -166
  205. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +0 -1
  206. package/dist/rules/requireJsdoc.cjs +0 -721
  207. package/dist/rules/requireJsdoc.cjs.map +0 -1
  208. package/dist/rules/requireParam.cjs +0 -772
  209. package/dist/rules/requireParam.cjs.map +0 -1
  210. package/dist/rules/requireParamDescription.cjs +0 -105
  211. package/dist/rules/requireParamDescription.cjs.map +0 -1
  212. package/dist/rules/requireParamName.cjs +0 -68
  213. package/dist/rules/requireParamName.cjs.map +0 -1
  214. package/dist/rules/requireParamType.cjs +0 -104
  215. package/dist/rules/requireParamType.cjs.map +0 -1
  216. package/dist/rules/requireProperty.cjs +0 -63
  217. package/dist/rules/requireProperty.cjs.map +0 -1
  218. package/dist/rules/requirePropertyDescription.cjs +0 -29
  219. package/dist/rules/requirePropertyDescription.cjs.map +0 -1
  220. package/dist/rules/requirePropertyName.cjs +0 -29
  221. package/dist/rules/requirePropertyName.cjs.map +0 -1
  222. package/dist/rules/requirePropertyType.cjs +0 -29
  223. package/dist/rules/requirePropertyType.cjs.map +0 -1
  224. package/dist/rules/requireRejects.cjs +0 -226
  225. package/dist/rules/requireRejects.cjs.map +0 -1
  226. package/dist/rules/requireReturns.cjs +0 -262
  227. package/dist/rules/requireReturns.cjs.map +0 -1
  228. package/dist/rules/requireReturnsCheck.cjs +0 -225
  229. package/dist/rules/requireReturnsCheck.cjs.map +0 -1
  230. package/dist/rules/requireReturnsDescription.cjs +0 -72
  231. package/dist/rules/requireReturnsDescription.cjs.map +0 -1
  232. package/dist/rules/requireReturnsType.cjs +0 -68
  233. package/dist/rules/requireReturnsType.cjs.map +0 -1
  234. package/dist/rules/requireTags.cjs +0 -74
  235. package/dist/rules/requireTags.cjs.map +0 -1
  236. package/dist/rules/requireTemplate.cjs +0 -220
  237. package/dist/rules/requireTemplate.cjs.map +0 -1
  238. package/dist/rules/requireThrows.cjs +0 -118
  239. package/dist/rules/requireThrows.cjs.map +0 -1
  240. package/dist/rules/requireYields.cjs +0 -224
  241. package/dist/rules/requireYields.cjs.map +0 -1
  242. package/dist/rules/requireYieldsCheck.cjs +0 -179
  243. package/dist/rules/requireYieldsCheck.cjs.map +0 -1
  244. package/dist/rules/sortTags.cjs +0 -656
  245. package/dist/rules/sortTags.cjs.map +0 -1
  246. package/dist/rules/tagLines.cjs +0 -374
  247. package/dist/rules/tagLines.cjs.map +0 -1
  248. package/dist/rules/textEscaping.cjs +0 -141
  249. package/dist/rules/textEscaping.cjs.map +0 -1
  250. package/dist/rules/tsMethodSignatureStyle.cjs +0 -240
  251. package/dist/rules/tsMethodSignatureStyle.cjs.map +0 -1
  252. package/dist/rules/tsNoEmptyObjectType.cjs +0 -62
  253. package/dist/rules/tsNoEmptyObjectType.cjs.map +0 -1
  254. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs +0 -104
  255. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +0 -1
  256. package/dist/rules/tsPreferFunctionType.cjs +0 -110
  257. package/dist/rules/tsPreferFunctionType.cjs.map +0 -1
  258. package/dist/rules/typeFormatting.cjs +0 -607
  259. package/dist/rules/typeFormatting.cjs.map +0 -1
  260. package/dist/rules/validTypes.cjs +0 -324
  261. package/dist/rules/validTypes.cjs.map +0 -1
  262. package/dist/tagNames.cjs +0 -244
  263. package/dist/tagNames.cjs.map +0 -1
  264. package/dist/to-valid-identifier.cjs +0 -263
  265. package/dist/utils/hasReturnValue.cjs +0 -495
  266. package/dist/utils/hasReturnValue.cjs.map +0 -1
  267. package/rollup.config.js +0 -16
  268. package/src/getJsdocProcessorPlugin.cts +0 -5
  269. package/src/index-cjs.js +0 -758
  270. package/src/index-esm.js +0 -196
  271. package/src/index.cjs.cts +0 -3
  272. package/src/iterateJsdoc.cts +0 -7
@@ -1 +0,0 @@
1
- {"version":3,"file":"noUndefinedTypes.cjs","names":["iterateJsdoc","getJSDocCommentBlocks","getDocumentNamepathDefiningTags","parseImportsExports","getJSDocComment","parseComment","tryParseType","parseType","traverse"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getDocumentNamepathDefiningTags,\n getJSDocCommentBlocks,\n} from '../jsdocUtils.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl',\n];\n\nconst globalTypes = [\n 'globalThis', 'global', 'window', 'self',\n];\n\nconst iterableIterator = [\n 'Iterable',\n 'Iterator',\n 'IteratorObject',\n];\n\nconst typescriptGlobals = [\n ...iterableIterator,\n\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n}) => {\n /** @type {string[]} */\n const foundTypedefValues = [];\n\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * checkUsedTypedefs: boolean\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean,\n * }}\n */ {\n checkUsedTypedefs = false,\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = getJSDocCommentBlocks(sourceCode);\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefs = getDocumentNamepathDefiningTags(sourceCode);\n\n const typedefDeclarations = typedefs\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdc = parseComment(commentNode, '');\n\n return jsdc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n // We err on the side of being too aggressive; checking only\n // present tags is not sufficient\n comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'template';\n });\n });\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} sc\n */\n const getChildScopes = (sc) => {\n if (sc) {\n // We must check child scopes because when multiple nodes find\n // the same comment block, only one node is reported by our code,\n // and it can be the children which are not reported.\n for (const childScope of sc.childScopes) {\n for (const {\n name,\n } of childScope.variables) {\n result.add(name);\n }\n\n for (const grandChildScope of childScope.childScopes) {\n getChildScopes(grandChildScope);\n }\n }\n }\n };\n\n getChildScopes(scp);\n\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * Recursively extracts types from a namespace declaration.\n * @param {string} prefix - The namespace prefix (e.g., \"MyNamespace\" or \"Outer.Inner\").\n * @param {import('@typescript-eslint/types').TSESTree.TSModuleDeclaration} moduleDeclaration - The module declaration node.\n * @returns {string[]} Array of fully qualified type names.\n */\n const getNamespaceTypes = (prefix, moduleDeclaration) => {\n /* c8 ignore next 3 -- Guard for ambient modules without body. */\n if (!moduleDeclaration.body || moduleDeclaration.body.type !== 'TSModuleBlock') {\n return [];\n }\n\n return moduleDeclaration.body.body.flatMap((item) => {\n /** @type {import('@typescript-eslint/types').TSESTree.ProgramStatement | import('@typescript-eslint/types').TSESTree.NamedExportDeclarations | null} */\n let declaration = item;\n\n if (item.type === 'ExportNamedDeclaration' && item.declaration) {\n declaration = item.declaration;\n }\n\n if (declaration.type === 'TSTypeAliasDeclaration' || declaration.type === 'ClassDeclaration') {\n /* c8 ignore next 4 -- Guard for anonymous class declarations. */\n if (!declaration.id) {\n return [];\n }\n\n return [\n `${prefix}.${declaration.id.name}`,\n ];\n }\n\n if (declaration.type === 'TSInterfaceDeclaration') {\n return [\n `${prefix}.${declaration.id.name}`,\n ...declaration.body.body.map((prop) => {\n // Only `TSPropertySignature` and `TSMethodSignature` have 'key'.\n if (prop.type !== 'TSPropertySignature' && prop.type !== 'TSMethodSignature') {\n return '';\n }\n\n // Key can be computed or a literal, only handle Identifier.\n if (prop.key.type !== 'Identifier') {\n return '';\n }\n\n const propName = prop.key.name;\n /* c8 ignore next -- `propName` is always truthy for Identifiers. */\n return propName ? `${prefix}.${declaration.id.name}.${propName}` : '';\n }).filter(Boolean),\n ];\n }\n\n // Handle nested namespaces.\n if (declaration.type === 'TSModuleDeclaration') {\n /* c8 ignore next -- Nested string-literal modules aren't valid TS syntax. */\n const nestedName = declaration.id?.type === 'Identifier' ? declaration.id.name : '';\n /* c8 ignore next 3 -- Guard. */\n if (!nestedName) {\n return [];\n }\n\n return [\n `${prefix}.${nestedName}`,\n ...getNamespaceTypes(`${prefix}.${nestedName}`, declaration),\n ];\n }\n\n // Fallback for unhandled declaration types (e.g., TSEnumDeclaration, FunctionDeclaration, etc.).\n return [];\n });\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n /** @type {Set<string>} */\n const closedTypes = new Set();\n\n const tsModuleVariables = scopeManager.scopes.filter(({\n type,\n }) => {\n // @ts-expect-error TS\n return type === 'tsModule';\n }).flatMap(({\n variables,\n }) => {\n return variables.map(({\n name,\n }) => {\n return name;\n });\n });\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n closedTypes.add(name);\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'TSModuleDeclaration':\n closedTypes.add(name);\n return [\n name,\n ...getNamespaceTypes(name, globalItem),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n // Module scope names are also defined\n return [\n name,\n ];\n }\n\n return [\n name,\n ];\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(tsModuleVariables)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat((() => {\n // Detect static property assignments like `MyClass.Prop = ...`\n const programBody = /** @type {import('@typescript-eslint/types').TSESTree.Program} */ (\n sourceCode.ast\n ).body;\n\n return programBody.flatMap((statement) => {\n if (\n statement.type === 'ExpressionStatement' &&\n statement.expression.type === 'AssignmentExpression' &&\n statement.expression.left.type === 'MemberExpression' &&\n statement.expression.left.object.type === 'Identifier' &&\n statement.expression.left.property.type === 'Identifier' &&\n closedTypes.has(statement.expression.left.object.name)\n ) {\n return [\n `${statement.expression.left.object.name}.${statement.expression.left.property.name}`,\n ];\n }\n\n return [];\n });\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 3 */\n sourceCode.getScope(node)) ||\n // @ts-expect-error ESLint 8\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const definedNamesAndNamepaths = new Set(utils.filterTags(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n }).map(({\n name,\n }) => {\n return name;\n }));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n // eslint-disable-next-line complexity -- Refactor\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n !globalTypes.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty'\n ) {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n const rootNamespace = val.split('.')[0];\n const isNamespaceValid = (definedTypes.includes(rootNamespace) || allDefinedTypes.has(rootNamespace)) &&\n !closedTypes.has(rootNamespace);\n\n if (!allDefinedTypes.has(val) &&\n !definedNamesAndNamepaths.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val)) && !isNamespaceValid\n ) {\n const parent =\n /**\n * @type {import('jsdoc-type-pratt-parser').RootResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (nde)._parent;\n if (parent?.type === 'JsdocTypeTypeParameter') {\n return;\n }\n\n if (parent?.type === 'JsdocTypeFunction' &&\n /** @type {import('jsdoc-type-pratt-parser').FunctionResult} */\n (parent)?.typeParameters?.some((typeParam) => {\n return value === typeParam.name.value;\n })\n ) {\n return;\n }\n\n if (parent?.type === 'JsdocTypeInfer' && value === parent.element.value) {\n allDefinedTypes.add(value);\n return;\n }\n\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 4 */\n } else {\n // @ts-expect-error ESLint 8\n context.markVariableAsUsed(val);\n }\n }\n\n if (checkUsedTypedefs && typedefDeclarations.includes(val)) {\n foundTypedefValues.push(val);\n }\n }\n });\n }\n\n state.foundTypedefValues = foundTypedefValues;\n}, {\n // We use this method rather than checking at end of handler above because\n // in that case, it is invoked too many times and would thus report errors\n // too many times.\n exit ({\n context,\n state,\n utils,\n }) {\n const {\n checkUsedTypedefs = false,\n } = context.options[0] || {};\n\n if (!checkUsedTypedefs) {\n return;\n }\n\n const allComments = context.sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return {\n doc: parseComment(commentNode, ''),\n loc: commentNode.loc,\n };\n });\n const typedefs = comments\n .flatMap(({\n doc,\n loc,\n }) => {\n const tags = doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n });\n if (!tags.length) {\n return [];\n }\n\n return {\n loc,\n tags,\n };\n });\n\n for (const typedef of typedefs) {\n if (\n !state.foundTypedefValues.includes(typedef.tags[0].name)\n ) {\n context.report({\n loc: /** @type {import('@eslint/core').SourceLocation} */ (typedef.loc),\n message: 'This typedef was not used within the file',\n });\n }\n }\n },\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkUsedTypedefs: {\n description: 'Whether to check typedefs for use within the file',\n type: 'boolean',\n },\n definedTypes: {\n description: `This array can be populated to indicate other types which\nare automatically considered as defined (in addition to globals, etc.).\nDefaults to an empty array.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n description: `Whether to disable reporting of errors. Defaults to\n\\`false\\`. This may be set to \\`true\\` in order to take advantage of only\nmarking defined variables as used or checking used typedefs.`,\n type: 'boolean',\n },\n markVariablesAsUsed: {\n description: `Whether to mark variables as used for the purposes\nof the \\`no-unused-vars\\` rule when they are not found to be undefined.\nDefaults to \\`true\\`. May be set to \\`false\\` to enforce a practice of not\nimporting types unless used in code.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,271 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
- const markdownLinkRegex = /(?<!\\)\[((?:[^\\`\]\r\n]|\\[^\r\n])+)\]\(([^`\(\)\s]+)\)/gv;
10
- const prefixLinkRegex = /(?<!\\)\[((?:[^\\\]\r\n]|\\[^\r\n])+)\]\{@link\s+([^\}\s\|]+)\}/gv;
11
- const pipeLinkRegex = /\{@link\s+([^\}\s\|]+)\s*\|\s*((?:[^\\\}\r\n]|\\[^\r\n])+)\}/gv;
12
- const markdownLinkAttemptRegex = /(?<!\\)\[[^\]\r\n]*\]\([^\r\n]*(?:\)|$)/v;
13
- const prefixLinkAttemptRegex = /(?<!\\)\[[^\]\r\n]*\]\{@link[^\}\r\n]*(?:\}|$)/v;
14
- const pipeLinkAttemptRegex = /\{@link[^\}\r\n]*\|[^\}\r\n]*(?:\}|$)/v;
15
- const scopedPackageNameRegex = /^@[\w.\-]+\/[\w.\-]+/v;
16
- const markdownCodeSpanRegex = /(?<!\\)(`+)(?!`)[\s\S]*?(?<!`)\1(?!`)/gv;
17
- const bareHttpUrlRegex = /^https?:\S+$/v;
18
-
19
- /**
20
- * @param {string} label
21
- * @returns {boolean}
22
- */
23
- const cannotSafelyFormatLink = label => {
24
- return !label.trim();
25
- };
26
-
27
- /**
28
- * @param {'pipe'|'prefix'} canonicalForm
29
- * @param {string} label
30
- * @param {'markdown'|'pipe'|'prefix'} sourceForm
31
- * @returns {string}
32
- */
33
- const escapeLinkLabel = (canonicalForm, label, sourceForm) => {
34
- const sourceEscapePattern = sourceForm === 'pipe' ? /\\([\\\}])/gv : sourceForm === 'prefix' ? /\\([\\\]])/gv : /\\([\\\}\]])/gv;
35
- const targetEscapePattern = canonicalForm === 'pipe' ? /\\(?=$|[\\\}])|\}/gv : /\\(?=$|[\\\]])|\]/gv;
36
- const decodedLabel = label.trim().replaceAll(sourceEscapePattern, '$1');
37
- return decodedLabel.replaceAll(targetEscapePattern, character => {
38
- return `\\${character}`;
39
- });
40
- };
41
-
42
- /**
43
- * @param {string} target
44
- * @returns {string}
45
- */
46
- const encodeLinkTarget = target => {
47
- return target.replaceAll(/%(?![\dA-F]{2})/giv, '%25').replaceAll('|', '%7C').replaceAll('{', '%7B').replaceAll('}', '%7D');
48
- };
49
-
50
- /**
51
- * @param {string} description
52
- * @param {boolean} enabled
53
- * @returns {string|null}
54
- */
55
- const getBareHttpUrl = (description, enabled) => {
56
- if (!enabled) {
57
- return null;
58
- }
59
- const trimmedDescription = description.trim();
60
- return bareHttpUrlRegex.test(trimmedDescription) && URL.canParse(trimmedDescription) ? trimmedDescription : null;
61
- };
62
-
63
- /**
64
- * @param {string} target
65
- * @returns {string}
66
- */
67
- const formatBareUrl = target => {
68
- return `{@link ${encodeLinkTarget(target)}}`;
69
- };
70
-
71
- /**
72
- * @param {string|undefined} bareUrl
73
- * @param {'pipe'|'prefix'} canonicalForm
74
- * @returns {string}
75
- */
76
- const getExpectedMessage = (bareUrl, canonicalForm) => {
77
- return bareUrl ? 'Expected bare @see URL to use a {@link} tag.' : `Expected @see link to use the ${canonicalForm} form.`;
78
- };
79
-
80
- /**
81
- * @param {string} description
82
- * @param {number} index
83
- * @returns {boolean}
84
- */
85
- const isInsideMarkdownCodeSpan = (description, index) => {
86
- for (const match of description.matchAll(markdownCodeSpanRegex)) {
87
- const delimiterLength = match[1].length;
88
- const contentStart = match.index + delimiterLength;
89
- const contentEnd = match.index + match[0].length - delimiterLength;
90
- if (index >= contentStart && index < contentEnd) {
91
- return true;
92
- }
93
- }
94
- return false;
95
- };
96
-
97
- /**
98
- * @param {'pipe'|'prefix'} canonicalForm
99
- * @param {string} label
100
- * @param {'markdown'|'pipe'|'prefix'} sourceForm
101
- * @param {string} target
102
- * @returns {string}
103
- */
104
- const formatLink = (canonicalForm, label, sourceForm, target) => {
105
- const encodedTarget = encodeLinkTarget(target);
106
- const escapedLabel = escapeLinkLabel(canonicalForm, label, sourceForm);
107
- return canonicalForm === 'pipe' ? `{@link ${encodedTarget}|${escapedLabel}}` : `[${escapedLabel}]{@link ${encodedTarget}}`;
108
- };
109
-
110
- /**
111
- * @param {string} description
112
- * @param {'pipe'|'prefix'} canonicalForm
113
- * @returns {string}
114
- */
115
- const normalizeDescription = (description, canonicalForm) => {
116
- const markdownNormalized = description.replaceAll(new RegExp(markdownLinkRegex, 'gv'), (_match, label, target) => {
117
- return formatLink(canonicalForm, label, 'markdown', target);
118
- });
119
- if (canonicalForm === 'pipe') {
120
- return markdownNormalized.replaceAll(new RegExp(prefixLinkRegex, 'gv'), (_match, label, target) => {
121
- return formatLink(canonicalForm, label, 'prefix', target);
122
- });
123
- }
124
- return markdownNormalized.replaceAll(new RegExp(pipeLinkRegex, 'gv'), (_match, target, label) => {
125
- return formatLink(canonicalForm, label, 'pipe', target);
126
- });
127
- };
128
- var _default = exports.default = (0, _iterateJsdoc.default)(({
129
- context,
130
- jsdoc,
131
- utils
132
- }) => {
133
- const {
134
- canonicalForm = 'pipe',
135
- enableFixer = true,
136
- wrapBareUrls = false
137
- } = context.options[0] || {};
138
- const descriptionMatcher = canonicalForm === 'pipe' ? new RegExp(`${markdownLinkRegex.source}|${prefixLinkRegex.source}`, 'v') : new RegExp(`${markdownLinkRegex.source}|${pipeLinkRegex.source}`, 'v');
139
-
140
- /** @type {import('comment-parser').Spec[]} */
141
- const fixableTags = [];
142
- /** @type {Map<import('comment-parser').Spec, string>} */
143
- const bareUrlTags = new Map();
144
- for (const tag of jsdoc.tags) {
145
- if (tag.tag !== 'see') {
146
- continue;
147
- }
148
- const firstTokens = tag.source[0].tokens;
149
- const tagDescription = String(utils.getTagDescription(tag));
150
- const rawDescription = firstTokens.name ? firstTokens.name + firstTokens.postName + tagDescription : tagDescription;
151
- let hasAmbiguousLink = false;
152
- let hasNoncanonicalLink = false;
153
- const bareUrl = getBareHttpUrl(rawDescription, wrapBareUrls);
154
- if (bareUrl) {
155
- bareUrlTags.set(tag, bareUrl);
156
- hasNoncanonicalLink = true;
157
- }
158
- for (const match of rawDescription.matchAll(markdownLinkRegex)) {
159
- const label = match[1];
160
- const target = match[2];
161
- if (isInsideMarkdownCodeSpan(rawDescription, match.index) || scopedPackageNameRegex.test(target) || cannotSafelyFormatLink(label)) {
162
- hasAmbiguousLink = true;
163
- } else {
164
- hasNoncanonicalLink = true;
165
- }
166
- }
167
- for (const inlineTag of tag.inlineTags) {
168
- if (inlineTag.tag !== 'link' || !inlineTag.text) {
169
- continue;
170
- }
171
- if (inlineTag.format === 'space') {
172
- hasAmbiguousLink = true;
173
- continue;
174
- }
175
- if (cannotSafelyFormatLink(inlineTag.text)) {
176
- hasAmbiguousLink = true;
177
- continue;
178
- }
179
- if (inlineTag.format === canonicalForm) {
180
- continue;
181
- }
182
- const {
183
- start
184
- } = /** @type {typeof inlineTag & {start: number}} */inlineTag;
185
- if (isInsideMarkdownCodeSpan(rawDescription, start) || scopedPackageNameRegex.test(inlineTag.namepathOrURL)) {
186
- hasAmbiguousLink = true;
187
- } else {
188
- hasNoncanonicalLink = true;
189
- }
190
- }
191
- const unrecognizedLinkText = rawDescription.replaceAll(new RegExp(markdownLinkRegex, 'gv'), '').replaceAll(new RegExp(prefixLinkRegex, 'gv'), '').replaceAll(new RegExp(pipeLinkRegex, 'gv'), '');
192
- hasAmbiguousLink ||= markdownLinkAttemptRegex.test(unrecognizedLinkText) || prefixLinkAttemptRegex.test(unrecognizedLinkText) || pipeLinkAttemptRegex.test(unrecognizedLinkText);
193
- if (hasAmbiguousLink) {
194
- utils.reportJSDoc('@see link cannot be safely normalized.', {
195
- line: tag.source[0].number
196
- }, null);
197
- continue;
198
- }
199
- if (!hasNoncanonicalLink) {
200
- continue;
201
- }
202
- fixableTags.push(tag);
203
- }
204
- for (const [reportIdx, tag] of fixableTags.entries()) {
205
- const bareUrl = bareUrlTags.get(tag);
206
- utils.reportJSDoc(getExpectedMessage(bareUrl, canonicalForm), {
207
- line: tag.source[0].number
208
- }, enableFixer && reportIdx === 0 ? () => {
209
- for (const fixableTag of fixableTags) {
210
- const firstTokens = fixableTag.source[0].tokens;
211
- if (firstTokens.name) {
212
- firstTokens.description = firstTokens.name + firstTokens.postName + firstTokens.description;
213
- firstTokens.name = '';
214
- firstTokens.postName = '';
215
- }
216
- const fixableBareUrl = bareUrlTags.get(fixableTag);
217
- if (fixableBareUrl) {
218
- for (const source of fixableTag.source) {
219
- if (!source.tokens.description.includes(fixableBareUrl)) {
220
- continue;
221
- }
222
- source.tokens.description = source.tokens.description.replace(fixableBareUrl, () => {
223
- return formatBareUrl(fixableBareUrl);
224
- });
225
- break;
226
- }
227
- continue;
228
- }
229
- for (let sourceIdx = 0; sourceIdx < fixableTag.source.length; sourceIdx++) {
230
- if (!descriptionMatcher.test(fixableTag.source[sourceIdx].tokens.description)) {
231
- continue;
232
- }
233
- utils.setTagDescription(fixableTag, descriptionMatcher, description => {
234
- return normalizeDescription(description, canonicalForm);
235
- });
236
- }
237
- }
238
- } : null, true);
239
- }
240
- }, {
241
- iterateAllJsdocs: true,
242
- meta: {
243
- docs: {
244
- description: 'Normalizes labeled links in `@see` tags to a canonical `{@link}` form.',
245
- url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/normalize-see-links.md#repos-sticky-header'
246
- },
247
- fixable: 'code',
248
- schema: [{
249
- additionalProperties: false,
250
- properties: {
251
- canonicalForm: {
252
- description: 'The canonical `{@link}` form: `"pipe"` produces `{@link url|label}`, while `"prefix"` produces `[label]{@link url}`. Defaults to `"pipe"`.',
253
- enum: ['pipe', 'prefix'],
254
- type: 'string'
255
- },
256
- enableFixer: {
257
- description: 'Whether to enable the fixer. Defaults to `true`.',
258
- type: 'boolean'
259
- },
260
- wrapBareUrls: {
261
- description: 'Whether to wrap an `@see` description containing only a lowercase `http:` or `https:` URL (for example, `@see https://example.com`) in a plain `{@link https://example.com}`. Defaults to `false`.',
262
- type: 'boolean'
263
- }
264
- },
265
- type: 'object'
266
- }],
267
- type: 'suggestion'
268
- }
269
- });
270
- module.exports = exports.default;
271
- //# sourceMappingURL=normalizeSeeLinks.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalizeSeeLinks.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/normalizeSeeLinks.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nconst markdownLinkRegex = /(?<!\\\\)\\[((?:[^\\\\`\\]\\r\\n]|\\\\[^\\r\\n])+)\\]\\(([^`\\(\\)\\s]+)\\)/gv;\nconst prefixLinkRegex = /(?<!\\\\)\\[((?:[^\\\\\\]\\r\\n]|\\\\[^\\r\\n])+)\\]\\{@link\\s+([^\\}\\s\\|]+)\\}/gv;\nconst pipeLinkRegex = /\\{@link\\s+([^\\}\\s\\|]+)\\s*\\|\\s*((?:[^\\\\\\}\\r\\n]|\\\\[^\\r\\n])+)\\}/gv;\n\nconst markdownLinkAttemptRegex = /(?<!\\\\)\\[[^\\]\\r\\n]*\\]\\([^\\r\\n]*(?:\\)|$)/v;\nconst prefixLinkAttemptRegex = /(?<!\\\\)\\[[^\\]\\r\\n]*\\]\\{@link[^\\}\\r\\n]*(?:\\}|$)/v;\nconst pipeLinkAttemptRegex = /\\{@link[^\\}\\r\\n]*\\|[^\\}\\r\\n]*(?:\\}|$)/v;\n\nconst scopedPackageNameRegex = /^@[\\w.\\-]+\\/[\\w.\\-]+/v;\nconst markdownCodeSpanRegex = /(?<!\\\\)(`+)(?!`)[\\s\\S]*?(?<!`)\\1(?!`)/gv;\nconst bareHttpUrlRegex = /^https?:\\S+$/v;\n\n/**\n * @param {string} label\n * @returns {boolean}\n */\nconst cannotSafelyFormatLink = (label) => {\n return !label.trim();\n};\n\n/**\n * @param {'pipe'|'prefix'} canonicalForm\n * @param {string} label\n * @param {'markdown'|'pipe'|'prefix'} sourceForm\n * @returns {string}\n */\nconst escapeLinkLabel = (canonicalForm, label, sourceForm) => {\n const sourceEscapePattern = sourceForm === 'pipe' ?\n /\\\\([\\\\\\}])/gv :\n (sourceForm === 'prefix' ?\n /\\\\([\\\\\\]])/gv :\n /\\\\([\\\\\\}\\]])/gv);\n const targetEscapePattern = canonicalForm === 'pipe' ?\n /\\\\(?=$|[\\\\\\}])|\\}/gv :\n /\\\\(?=$|[\\\\\\]])|\\]/gv;\n const decodedLabel = label.trim().replaceAll(sourceEscapePattern, '$1');\n\n return decodedLabel.replaceAll(targetEscapePattern, (character) => {\n return `\\\\${character}`;\n });\n};\n\n/**\n * @param {string} target\n * @returns {string}\n */\nconst encodeLinkTarget = (target) => {\n return target\n .replaceAll(/%(?![\\dA-F]{2})/giv, '%25')\n .replaceAll('|', '%7C')\n .replaceAll('{', '%7B')\n .replaceAll('}', '%7D');\n};\n\n/**\n * @param {string} description\n * @param {boolean} enabled\n * @returns {string|null}\n */\nconst getBareHttpUrl = (description, enabled) => {\n if (!enabled) {\n return null;\n }\n\n const trimmedDescription = description.trim();\n\n return bareHttpUrlRegex.test(trimmedDescription) &&\n URL.canParse(trimmedDescription) ?\n trimmedDescription : null;\n};\n\n/**\n * @param {string} target\n * @returns {string}\n */\nconst formatBareUrl = (target) => {\n return `{@link ${encodeLinkTarget(target)}}`;\n};\n\n/**\n * @param {string|undefined} bareUrl\n * @param {'pipe'|'prefix'} canonicalForm\n * @returns {string}\n */\nconst getExpectedMessage = (bareUrl, canonicalForm) => {\n return bareUrl ?\n 'Expected bare @see URL to use a {@link} tag.' :\n `Expected @see link to use the ${canonicalForm} form.`;\n};\n\n/**\n * @param {string} description\n * @param {number} index\n * @returns {boolean}\n */\nconst isInsideMarkdownCodeSpan = (description, index) => {\n for (const match of description.matchAll(markdownCodeSpanRegex)) {\n const delimiterLength = match[1].length;\n const contentStart = match.index + delimiterLength;\n const contentEnd = match.index + match[0].length - delimiterLength;\n\n if (index >= contentStart && index < contentEnd) {\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * @param {'pipe'|'prefix'} canonicalForm\n * @param {string} label\n * @param {'markdown'|'pipe'|'prefix'} sourceForm\n * @param {string} target\n * @returns {string}\n */\nconst formatLink = (canonicalForm, label, sourceForm, target) => {\n const encodedTarget = encodeLinkTarget(target);\n const escapedLabel = escapeLinkLabel(canonicalForm, label, sourceForm);\n\n return canonicalForm === 'pipe' ?\n `{@link ${encodedTarget}|${escapedLabel}}` :\n `[${escapedLabel}]{@link ${encodedTarget}}`;\n};\n\n/**\n * @param {string} description\n * @param {'pipe'|'prefix'} canonicalForm\n * @returns {string}\n */\nconst normalizeDescription = (description, canonicalForm) => {\n const markdownNormalized = description.replaceAll(\n new RegExp(markdownLinkRegex, 'gv'),\n (_match, label, target) => {\n return formatLink(canonicalForm, label, 'markdown', target);\n },\n );\n\n if (canonicalForm === 'pipe') {\n return markdownNormalized.replaceAll(\n new RegExp(prefixLinkRegex, 'gv'),\n (_match, label, target) => {\n return formatLink(canonicalForm, label, 'prefix', target);\n },\n );\n }\n\n return markdownNormalized.replaceAll(\n new RegExp(pipeLinkRegex, 'gv'),\n (_match, target, label) => {\n return formatLink(canonicalForm, label, 'pipe', target);\n },\n );\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n canonicalForm = 'pipe',\n enableFixer = true,\n wrapBareUrls = false,\n } = context.options[0] || {};\n\n const descriptionMatcher = canonicalForm === 'pipe' ?\n new RegExp(`${markdownLinkRegex.source}|${prefixLinkRegex.source}`, 'v') :\n new RegExp(`${markdownLinkRegex.source}|${pipeLinkRegex.source}`, 'v');\n\n /** @type {import('comment-parser').Spec[]} */\n const fixableTags = [];\n /** @type {Map<import('comment-parser').Spec, string>} */\n const bareUrlTags = new Map();\n\n for (const tag of jsdoc.tags) {\n if (tag.tag !== 'see') {\n continue;\n }\n\n const firstTokens = tag.source[0].tokens;\n const tagDescription = String(utils.getTagDescription(tag));\n const rawDescription = firstTokens.name ?\n firstTokens.name + firstTokens.postName + tagDescription :\n tagDescription;\n\n let hasAmbiguousLink = false;\n let hasNoncanonicalLink = false;\n const bareUrl = getBareHttpUrl(rawDescription, wrapBareUrls);\n\n if (bareUrl) {\n bareUrlTags.set(tag, bareUrl);\n hasNoncanonicalLink = true;\n }\n\n for (const match of rawDescription.matchAll(markdownLinkRegex)) {\n const label = match[1];\n const target = match[2];\n\n if (\n isInsideMarkdownCodeSpan(rawDescription, match.index) ||\n scopedPackageNameRegex.test(target) ||\n cannotSafelyFormatLink(label)\n ) {\n hasAmbiguousLink = true;\n } else {\n hasNoncanonicalLink = true;\n }\n }\n\n for (const inlineTag of tag.inlineTags) {\n if (inlineTag.tag !== 'link' || !inlineTag.text) {\n continue;\n }\n\n if (inlineTag.format === 'space') {\n hasAmbiguousLink = true;\n continue;\n }\n\n if (cannotSafelyFormatLink(inlineTag.text)) {\n hasAmbiguousLink = true;\n continue;\n }\n\n if (inlineTag.format === canonicalForm) {\n continue;\n }\n\n const {\n start,\n } = /** @type {typeof inlineTag & {start: number}} */ (inlineTag);\n\n if (\n isInsideMarkdownCodeSpan(rawDescription, start) ||\n scopedPackageNameRegex.test(inlineTag.namepathOrURL)\n ) {\n hasAmbiguousLink = true;\n } else {\n hasNoncanonicalLink = true;\n }\n }\n\n const unrecognizedLinkText = rawDescription\n .replaceAll(new RegExp(markdownLinkRegex, 'gv'), '')\n .replaceAll(new RegExp(prefixLinkRegex, 'gv'), '')\n .replaceAll(new RegExp(pipeLinkRegex, 'gv'), '');\n\n hasAmbiguousLink ||= markdownLinkAttemptRegex.test(unrecognizedLinkText) ||\n prefixLinkAttemptRegex.test(unrecognizedLinkText) ||\n pipeLinkAttemptRegex.test(unrecognizedLinkText);\n\n if (hasAmbiguousLink) {\n utils.reportJSDoc('@see link cannot be safely normalized.', {\n line: tag.source[0].number,\n }, null);\n continue;\n }\n\n if (!hasNoncanonicalLink) {\n continue;\n }\n\n fixableTags.push(tag);\n }\n\n for (const [\n reportIdx,\n tag,\n ] of fixableTags.entries()) {\n const bareUrl = bareUrlTags.get(tag);\n\n utils.reportJSDoc(\n getExpectedMessage(bareUrl, canonicalForm),\n {\n line: tag.source[0].number,\n },\n enableFixer && reportIdx === 0 ?\n () => {\n for (const fixableTag of fixableTags) {\n const firstTokens = fixableTag.source[0].tokens;\n\n if (firstTokens.name) {\n firstTokens.description = firstTokens.name +\n firstTokens.postName + firstTokens.description;\n firstTokens.name = '';\n firstTokens.postName = '';\n }\n\n const fixableBareUrl = bareUrlTags.get(fixableTag);\n\n if (fixableBareUrl) {\n for (const source of fixableTag.source) {\n if (!source.tokens.description.includes(fixableBareUrl)) {\n continue;\n }\n\n source.tokens.description = source.tokens.description.replace(\n fixableBareUrl,\n () => {\n return formatBareUrl(fixableBareUrl);\n },\n );\n break;\n }\n\n continue;\n }\n\n for (\n let sourceIdx = 0;\n sourceIdx < fixableTag.source.length;\n sourceIdx++\n ) {\n if (!descriptionMatcher.test(\n fixableTag.source[sourceIdx].tokens.description,\n )) {\n continue;\n }\n\n utils.setTagDescription(\n fixableTag,\n descriptionMatcher,\n (description) => {\n return normalizeDescription(description, canonicalForm);\n },\n );\n }\n }\n } :\n null,\n true,\n );\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Normalizes labeled links in `@see` tags to a canonical `{@link}` form.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/normalize-see-links.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n canonicalForm: {\n description: 'The canonical `{@link}` form: `\"pipe\"` produces `{@link url|label}`, while `\"prefix\"` produces `[label]{@link url}`. Defaults to `\"pipe\"`.',\n enum: [\n 'pipe',\n 'prefix',\n ],\n type: 'string',\n },\n enableFixer: {\n description: 'Whether to enable the fixer. Defaults to `true`.',\n type: 'boolean',\n },\n wrapBareUrls: {\n description: 'Whether to wrap an `@see` description containing only a lowercase `http:` or `https:` URL (for example, `@see https://example.com`) in a plain `{@link https://example.com}`. Defaults to `false`.',\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}