eslint-plugin-jsdoc 39.3.3 → 39.3.6

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.
package/README.md CHANGED
@@ -2,7 +2,6 @@
2
2
  <a name="eslint-plugin-jsdoc"></a>
3
3
  # eslint-plugin-jsdoc
4
4
 
5
- [![GitSpo Mentions](https://gitspo.com/badges/mentions/gajus/eslint-plugin-jsdoc?style=flat-square)](https://gitspo.com/mentions/gajus/eslint-plugin-jsdoc)
6
5
  [![NPM version](https://img.shields.io/npm/v/eslint-plugin-jsdoc.svg?style=flat-square)](https://www.npmjs.org/package/eslint-plugin-jsdoc)
7
6
  [![Travis build status](https://img.shields.io/travis/gajus/eslint-plugin-jsdoc/master.svg?style=flat-square)](https://travis-ci.org/gajus/eslint-plugin-jsdoc)
8
7
  [![js-canonical-style](https://img.shields.io/badge/code%20style-canonical-blue.svg?style=flat-square)](https://github.com/gajus/canonical)
@@ -3281,6 +3280,12 @@ function quux (foo) {
3281
3280
  }
3282
3281
  // "jsdoc/check-param-names": ["error"|"warn", {"enableFixer":true}]
3283
3282
  // Message: Duplicate @param "foo"
3283
+
3284
+ /**
3285
+ * @param barr This is the description of bar. Oops, we misspelled "bar" as "barr".
3286
+ */
3287
+ declare function foo(bar: number) {}
3288
+ // Message: Expected @param names to be "bar". Got "barr".
3284
3289
  ````
3285
3290
 
3286
3291
  The following patterns are not considered problems:
@@ -4501,6 +4506,15 @@ function quux (foo) {}
4501
4506
  /** @jsxImportSource preact */
4502
4507
  /** @jsxRuntime automatic */
4503
4508
  // Message: Invalid JSDoc tag name "jsx".
4509
+
4510
+ /**
4511
+ * @constructor
4512
+ */
4513
+ function Test() {
4514
+ this.works = false;
4515
+ }
4516
+ // Settings: {"jsdoc":{"tagNamePreference":{"returns":"return"}}}
4517
+ // Message: Invalid JSDoc tag (preference). Replace "constructor" JSDoc tag with "class".
4504
4518
  ````
4505
4519
 
4506
4520
  The following patterns are not considered problems:
@@ -6759,7 +6773,7 @@ You may provide a custom default message by using the following format:
6759
6773
  ```js
6760
6774
  {
6761
6775
  'jsdoc/match-description': ['error', {
6762
- message: 'The default dscription should begin with a capital letter.'
6776
+ message: 'The default description should begin with a capital letter.'
6763
6777
  }]
6764
6778
  }
6765
6779
  ```
@@ -1177,7 +1177,7 @@ function iterateJsdoc(iterator, ruleConfig) {
1177
1177
  if (contexts && (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext)) {
1178
1178
  contextObject = _jsdocUtils.default.getContextObject(contexts, checkJsdoc, (0, _jsdoccomment.commentHandler)(settings));
1179
1179
  } else {
1180
- for (const prop of ['ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression']) {
1180
+ for (const prop of ['ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction']) {
1181
1181
  contextObject[prop] = checkJsdoc.bind(null, {
1182
1182
  selector: prop
1183
1183
  }, null);
@@ -1 +1 @@
1
- {"version":3,"file":"iterateJsdoc.js","names":["rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","commentStringify","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","getDescription","lastDescriptionLine","idx","length","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","charAt","repeat","jsdc","iterateAllJsdocs","contexts","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","commentHandler","reducedNode","getReducedASTNode","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\n getReducedASTNode,\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n *\n * @typedef {any} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n *\n * @typedef {any} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n *\n * @typedef {any} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n\n return true;\n }\n\n if (idx || description) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (idx) => {\n return utils.removeTagItem(idx);\n };\n\n utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end,\n },\n }) => {\n if (!tag && !end) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),\n };\n /* eslint-enable canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/* eslint-disable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: Node | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * Our internal dynamic set of utilities.\n *\n * @todo Document\n * @typedef {any} Utils\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed\n * upon exiting iteration of program AST\n * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param contexts The `contexts` containing relevant `comment` info.\n * @param {boolean} additiveCommentContexts If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const commentNode = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"iterateJsdoc.js","names":["rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","commentStringify","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","getDescription","lastDescriptionLine","idx","length","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","charAt","repeat","jsdc","iterateAllJsdocs","contexts","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","commentHandler","reducedNode","getReducedASTNode","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\n getReducedASTNode,\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n *\n * @typedef {any} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n *\n * @typedef {any} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n *\n * @typedef {any} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n\n return true;\n }\n\n if (idx || description) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (idx) => {\n return utils.removeTagItem(idx);\n };\n\n utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end,\n },\n }) => {\n if (!tag && !end) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),\n };\n /* eslint-enable canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/* eslint-disable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: Node | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * Our internal dynamic set of utilities.\n *\n * @todo Document\n * @typedef {any} Utils\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed\n * upon exiting iteration of program AST\n * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param contexts The `contexts` containing relevant `comment` info.\n * @param {boolean} additiveCommentContexts If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const commentNode = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}