eslint-plugin-jsdoc 39.2.2 → 39.2.3

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
@@ -588,14 +588,11 @@ properties:
588
588
  within a normal AST selector but this should only be considered
589
589
  experimental. When using such a parser, you need not use `comment` and
590
590
  can just use a plain string context. The determination of the node on
591
- which the comment is attached is also subject to change. It may be
592
- currently possible for different structures to map to the same comment
593
- block. This is because normally when querying to find either the
594
- declaration of the function expression for
595
- `const quux = function () {}`, the associated comment would,
596
- in both cases, generally be expected to be on the line above both, rather
597
- than to be immediately preceding the function (in the case of the
598
- function). See [@es-joy/jsdoccomment](https://github.com/es-joy/jsdoccomment)
591
+ which the comment is attached is based more on actual location than
592
+ semantics (e.g., it will be attached to a `VariableDeclaration` if above
593
+ that rather than to the `FunctionExpression` it is fundamentally
594
+ describing). See
595
+ [@es-joy/jsdoccomment](https://github.com/es-joy/jsdoccomment)
599
596
  for the precise structure of the comment (and comment type) nodes.
600
597
 
601
598
  <a name="user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors-discovering-available-ast-definitions"></a>
@@ -14870,6 +14867,13 @@ function quux (foo) {
14870
14867
  }
14871
14868
  // Message: Missing JSDoc @param "foo" type.
14872
14869
 
14870
+ /**
14871
+ * @param {a xxx
14872
+ */
14873
+ function quux () {
14874
+ }
14875
+ // Message: Missing JSDoc @param "" type.
14876
+
14873
14877
  /**
14874
14878
  * @param foo
14875
14879
  */
@@ -652,8 +652,7 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
652
652
  });
653
653
 
654
654
  if (classJsdocNode) {
655
- const indnt = ' '.repeat(classJsdocNode.loc.start.column);
656
- return (0, _jsdoccomment.parseComment)(classJsdocNode, indnt);
655
+ return (0, _jsdoccomment.parseComment)(classJsdocNode, '');
657
656
  }
658
657
 
659
658
  return null;
@@ -756,9 +755,11 @@ const makeReport = (context, commentNode) => {
756
755
  const lineNumber = commentNode.loc.start.line + jsdocLoc.line;
757
756
  loc = {
758
757
  end: {
758
+ column: 0,
759
759
  line: lineNumber
760
760
  },
761
761
  start: {
762
+ column: 0,
762
763
  line: lineNumber
763
764
  }
764
765
  }; // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+
@@ -845,7 +846,7 @@ const iterate = (info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, nod
845
846
  const getIndentAndJSDoc = function (lines, jsdocNode) {
846
847
  const sourceLine = lines[jsdocNode.loc.start.line - 1];
847
848
  const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);
848
- const jsdc = (0, _jsdoccomment.parseComment)(jsdocNode, indnt);
849
+ const jsdc = (0, _jsdoccomment.parseComment)(jsdocNode, '');
849
850
  return [indnt, jsdc];
850
851
  };
851
852
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/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","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","indnt","repeat","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","charAt","jsdc","iterateAllJsdocs","contexts","additiveContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","reducedNode","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"mappings":"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","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/*\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 const indnt = ' '.repeat(classJsdocNode.loc.start.column);\n\n return parseComment(classJsdocNode, indnt);\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 line: lineNumber,\n },\n start: {\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 -- Need to build this in; see https://www.typescriptlang.org/docs/handbook/utility-types.html */\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: object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- Need to build this in */\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, indnt);\n\n return [\n indnt, jsdc,\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 {{meta: any}} ruleConfig\n * @param contexts\n * @param {boolean} additiveContexts\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {\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 (additiveContexts) {\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 {{meta: any}} 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 {{\n * meta: any,\n * contextDefaults?: true | string[],\n * contextSelected?: true,\n * iterateAllJsdocs?: true,\n * }} 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"],"file":"iterateJsdoc.js"}
1
+ {"version":3,"sources":["../src/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","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","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","additiveContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","reducedNode","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"mappings":"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","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/*\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 -- Need to build this in; see https://www.typescriptlang.org/docs/handbook/utility-types.html */\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: object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- Need to build this in */\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 * 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 {{meta: any}} ruleConfig\n * @param contexts\n * @param {boolean} additiveContexts\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {\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 (additiveContexts) {\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 {{meta: any}} 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 {{\n * meta: any,\n * contextDefaults?: true | string[],\n * contextSelected?: true,\n * iterateAllJsdocs?: true,\n * }} 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"],"file":"iterateJsdoc.js"}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "url": "http://gajus.com"
6
6
  },
7
7
  "dependencies": {
8
- "@es-joy/jsdoccomment": "~0.23.1",
8
+ "@es-joy/jsdoccomment": "~0.25.0",
9
9
  "comment-parser": "1.3.1",
10
10
  "debug": "^4.3.4",
11
11
  "escape-string-regexp": "^4.0.0",
@@ -23,7 +23,7 @@
23
23
  "@babel/plugin-transform-flow-strip-types": "^7.16.7",
24
24
  "@babel/preset-env": "^7.16.11",
25
25
  "@babel/register": "^7.17.7",
26
- "@es-joy/jsdoc-eslint-parser": "^0.10.1",
26
+ "@es-joy/jsdoc-eslint-parser": "^0.13.0",
27
27
  "@hkdobrev/run-if-changed": "^0.3.1",
28
28
  "@typescript-eslint/parser": "^5.19.0",
29
29
  "babel-plugin-add-module-exports": "^1.0.4",
@@ -37,6 +37,7 @@
37
37
  "gitdown": "^3.1.5",
38
38
  "glob": "^8.0.1",
39
39
  "husky": "^7.0.4",
40
+ "jsdoc-type-pratt-parser": "^2.2.5",
40
41
  "lint-staged": "^12.3.8",
41
42
  "lodash.defaultsdeep": "^4.6.1",
42
43
  "mocha": "^9.2.2",
@@ -116,5 +117,5 @@
116
117
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
117
118
  "test-index": "npm run test-no-cov -- test/rules/index.js"
118
119
  },
119
- "version": "39.2.2"
120
+ "version": "39.2.3"
120
121
  }