eslint-plugin-jsdoc 39.3.20 → 39.3.22
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 +45 -0
- package/dist/iterateJsdoc.js +1 -5
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/rules/noUndefinedTypes.js +2 -2
- package/dist/rules/noUndefinedTypes.js.map +1 -1
- package/dist/rules/requireParam.js +24 -17
- package/dist/rules/requireParam.js.map +1 -1
- package/dist/rules/validTypes.js +9 -0
- package/dist/rules/validTypes.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22332,6 +22332,39 @@ function quux () {}
|
|
|
22332
22332
|
function quux () {}
|
|
22333
22333
|
// Settings: {"jsdoc":{"mode":"closure"}}
|
|
22334
22334
|
// Message: Syntax error in supresss type: blah
|
|
22335
|
+
|
|
22336
|
+
/**
|
|
22337
|
+
* @param {Object[]} employees
|
|
22338
|
+
* @param {string} employees[.name - The name of an employee.
|
|
22339
|
+
*/
|
|
22340
|
+
function quux () {}
|
|
22341
|
+
// Message: Invalid name: unpaired brackets
|
|
22342
|
+
|
|
22343
|
+
/**
|
|
22344
|
+
* @param {Object[]} employees
|
|
22345
|
+
* @param {string} [] - The name of an employee.
|
|
22346
|
+
*/
|
|
22347
|
+
function quux () {}
|
|
22348
|
+
// Message: Invalid name: empty name
|
|
22349
|
+
|
|
22350
|
+
/**
|
|
22351
|
+
* @param {Object[]} employees
|
|
22352
|
+
* @param {string} [] - The name of an employee.
|
|
22353
|
+
*/
|
|
22354
|
+
function quux () {}
|
|
22355
|
+
// Message: Invalid name: empty name
|
|
22356
|
+
|
|
22357
|
+
/**
|
|
22358
|
+
* @param {string} [name=] - The name of an employee.
|
|
22359
|
+
*/
|
|
22360
|
+
function quux () {}
|
|
22361
|
+
// Message: Invalid name: empty default value
|
|
22362
|
+
|
|
22363
|
+
/**
|
|
22364
|
+
* @param {string} [name==] - The name of an employee.
|
|
22365
|
+
*/
|
|
22366
|
+
function quux () {}
|
|
22367
|
+
// Message: Invalid name: invalid default value syntax
|
|
22335
22368
|
````
|
|
22336
22369
|
|
|
22337
22370
|
The following patterns are not considered problems:
|
|
@@ -22663,6 +22696,18 @@ function quux() {
|
|
|
22663
22696
|
*/
|
|
22664
22697
|
function quux ( id, options ) {
|
|
22665
22698
|
}
|
|
22699
|
+
|
|
22700
|
+
|
|
22701
|
+
/**
|
|
22702
|
+
* Assign the project to a list of employees.
|
|
22703
|
+
* @param {Object[]} employees - The employees who are responsible for the project.
|
|
22704
|
+
* @param {string} employees[].name - The name of an employee.
|
|
22705
|
+
* @param {string} employees[].department - The employee's department.
|
|
22706
|
+
*/
|
|
22707
|
+
function assign(employees) {
|
|
22708
|
+
// ...
|
|
22709
|
+
}
|
|
22710
|
+
// "jsdoc/valid-types": ["error"|"warn", {"allowEmptyNamepaths":true,"checkSeesForNamepaths":false}]
|
|
22666
22711
|
````
|
|
22667
22712
|
|
|
22668
22713
|
|
package/dist/iterateJsdoc.js
CHANGED
|
@@ -866,12 +866,8 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContext
|
|
|
866
866
|
const state = {};
|
|
867
867
|
return {
|
|
868
868
|
'*:not(Program)'(node) {
|
|
869
|
-
const reducedNode = (0, _jsdoccomment.getReducedASTNode)(node, sourceCode);
|
|
870
|
-
if (node !== reducedNode) {
|
|
871
|
-
return;
|
|
872
|
-
}
|
|
873
869
|
const commentNode = (0, _jsdoccomment.getJSDocComment)(sourceCode, node, settings);
|
|
874
|
-
if (trackedJsdocs.has(commentNode)) {
|
|
870
|
+
if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {
|
|
875
871
|
return;
|
|
876
872
|
}
|
|
877
873
|
if (!commentNode) {
|
package/dist/iterateJsdoc.js.map
CHANGED
|
@@ -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","allBranches","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, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn, allBranches);\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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"}
|
|
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","allBranches","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","noTracking","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 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, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn, allBranches);\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 commentNode = getJSDocComment(sourceCode, node, settings);\n if (!ruleConfig.noTracking && 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":";;;;;;;;;;;;;AAAA;AAKA;AAIA;AAAsC;AAEtC,MAAM;EACJA,WAAW;EACXC;AACF,CAAC,GAAGC,mBAAI;;AAER;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,WAAW,GAAG,IAAIC,GAAG,EAAE;AAE7B,MAAMC,aAAa,GAAG,CAACC,OAAO,EAAE;EAC9BC,iBAAiB;EACjBC;AACF,CAAC,KAAK;EACJ,MAAMC,KAAK,GAAG,CAAC,CAAC;EAChBA,KAAK,CAACC,cAAc,GAAIC,OAAO,IAAK;IAClCL,OAAO,CAACM,MAAM,CAAC;MACbC,GAAG,EAAE;QACHC,KAAK,EAAE;UACLC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR;MACF,CAAC;MACDL;IACF,CAAC,CAAC;EACJ,CAAC;EAEDF,KAAK,CAACQ,uBAAuB,GAAIC,GAAG,IAAK;IACvC,OAAOC,mBAAU,CAACF,uBAAuB,CAACC,GAAG,CAAC;EAChD,CAAC;EAEDT,KAAK,CAACW,oBAAoB,GAAGD,mBAAU,CAACC,oBAAoB;EAE5DX,KAAK,CAACY,yBAAyB,GAAG,CAAC;IACjCC;EACF,CAAC,KAAK;IACJ,MAAMC,GAAG,GAAGJ,mBAAU,CAACK,mBAAmB,CAAClB,OAAO,EAAEE,IAAI,EAAEc,OAAO,EAAEf,iBAAiB,CAAC;IACrF,MAAMkB,QAAQ,GAAGF,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ;IAC/C,IAAIA,GAAG,KAAK,KAAK,IAAIE,QAAQ,IAAI,CAACF,GAAG,CAACG,WAAW,EAAE;MACjD,OAAO;QACLC,OAAO,EAAE,IAAI;QACbL;MACF,CAAC;IACH;IAEA,OAAOC,GAAG;EACZ,CAAC;EAED,OAAOd,KAAK;AACd,CAAC;AAED,MAAMmB,QAAQ,GAAG,CACfC,IAAI,EACJC,KAAK,EACLC,SAAS,EACTC,QAAQ,EACRpB,MAAM,EACNN,OAAO,EACP2B,YAAY,EACZC,UAAU,EACVC,MAAM,KACH;EACH,MAAMC,SAAS,GAAG9B,OAAO,CAAC+B,YAAY,EAAE;EACxC,MAAMC,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;EAE1C,MAAM9B,KAAK,GAAGJ,aAAa,CAACC,OAAO,EAAE0B,QAAQ,CAAC;EAE9C,MAAM;IACJzB,iBAAiB;IACjBiC,oBAAoB;IACpBC,kBAAkB;IAClBC,sBAAsB;IACtBC,2BAA2B;IAC3BC,QAAQ;IACRC,QAAQ;IACRrC;EACF,CAAC,GAAGwB,QAAQ;EAEZvB,KAAK,CAACqC,mBAAmB,GAAG,MAAM;IAChC,OAAO,CAACb,YAAY,IAAI,CACtB,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,CACrB,CAACc,QAAQ,CAAClB,IAAI,IAAIA,IAAI,CAACmB,IAAI,CAAC;EAC/B,CAAC;EAEDvC,KAAK,CAACwC,iBAAiB,GAAG,MAAM;IAC9B,OAAOhB,YAAY,IAAIxB,KAAK,CAACyC,OAAO,CAAC,CACnC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CACzC,CAAC;EACJ,CAAC;EAEDzC,KAAK,CAAC0C,SAAS,GAAG,CAACC,QAAQ,EAAEC,UAAU,KAAK;IAC1C,OAAO,IAAAC,wBAAgB,EAACD,UAAU,GAAGrD,WAAW,CAACoD,QAAQ,CAAC,GAAGA,QAAQ,CAAC;EACxE,CAAC;EAED3C,KAAK,CAAC8C,WAAW,GAAG,CAACC,GAAG,EAAEtC,GAAG,EAAEuC,OAAO,EAAEJ,UAAU,EAAEK,IAAI,KAAK;IAC3D9C,MAAM,CAAC4C,GAAG,EAAEC,OAAO,GAAIE,KAAK,IAAK;MAC/BF,OAAO,EAAE;MACT,MAAM/B,WAAW,GAAGjB,KAAK,CAAC0C,SAAS,CAACrB,KAAK,EAAEuB,UAAU,CAAC;MAEtD,OAAOM,KAAK,CAACC,WAAW,CAAC7B,SAAS,EAAEL,WAAW,CAAC;IAClD,CAAC,GAAG,IAAI,EAAER,GAAG,EAAEwC,IAAI,CAAC;EACtB,CAAC;EAEDjD,KAAK,CAACoD,kBAAkB,GAAG,CAACC,GAAG,EAAEC,aAAa,KAAK;IACjD,OAAO5C,mBAAU,CAAC0C,kBAAkB,CAACC,GAAG,EAAEC,aAAa,CAAC;EAC1D,CAAC;EAEDtD,KAAK,CAACuD,iBAAiB,GAAIC,EAAE,IAAK;IAChC,MAAMC,YAAY,GAAG,EAAE;IACvBD,EAAE,CAACE,MAAM,CAACC,IAAI,CAAC,CAAC;MACdC,MAAM,EAAE;QACNC,GAAG;QACHC,OAAO;QACPC,aAAa;QACbtD,GAAG;QACHuD,OAAO;QACPC,IAAI;QACJ1B,IAAI;QACJ2B;MACF;IACF,CAAC,KAAK;MACJ,MAAMC,IAAI,GAAG,CACX1D,GAAG,IAAIuD,OAAO,IACd,CAACvD,GAAG,IAAI,CAACwD,IAAI,IAAI,CAAC1B,IAAI,IAAIwB,aAAa,IAAI;;MAE7C;MAAA,EACEK,KAAK,CAAC,CAAC,CAAC,IACPF,WAAW,IAAI,EAAE,CAAC,IAAIJ,OAAO,IAAI,EAAE,CAAC;MAEvC,IAAID,GAAG,EAAE;QACP,IAAIM,IAAI,EAAE;UACRV,YAAY,CAACY,IAAI,CAACF,IAAI,CAAC;QACzB;QAEA,OAAO,IAAI;MACb;MAEAV,YAAY,CAACY,IAAI,CAACF,IAAI,CAAC;MAEvB,OAAO,KAAK;IACd,CAAC,CAAC;IAEF,OAAOV,YAAY,CAACa,IAAI,CAAC,IAAI,CAAC;EAChC,CAAC;EAEDtE,KAAK,CAACuE,cAAc,GAAG,MAAM;IAC3B,MAAMd,YAAY,GAAG,EAAE;IACvB,IAAIe,mBAAmB,GAAG,CAAC;IAC3BnD,KAAK,CAACqC,MAAM,CAACC,IAAI,CAAC,CAAC;MACjBC,MAAM,EAAE;QACNM,WAAW;QACXzD,GAAG;QACHoD;MACF;IACF,CAAC,EAAEY,GAAG,KAAK;MACT,IAAIA,GAAG,KAAKhE,GAAG,IAAIoD,GAAG,CAAC,EAAE;QACvBW,mBAAmB,GAAGC,GAAG,GAAG,CAAC;QAE7B,OAAO,IAAI;MACb;MAEA,IAAIA,GAAG,IAAIP,WAAW,EAAE;QACtBT,YAAY,CAACY,IAAI,CAACH,WAAW,KAAKT,YAAY,CAACiB,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;MACrE;MAEA,OAAO,KAAK;IACd,CAAC,CAAC;IAEF,OAAO;MACLR,WAAW,EAAET,YAAY,CAACa,IAAI,CAAC,IAAI,CAAC;MACpCE;IACF,CAAC;EACH,CAAC;EAEDxE,KAAK,CAAC2E,SAAS,GAAG,CAAClE,GAAG,EAAE,GAAGmD,MAAM,KAAK;IACpC,KAAK,MAAM,CACTa,GAAG,EACHG,GAAG,CACJ,IAAInE,GAAG,CAACiD,MAAM,CAACmB,OAAO,EAAE,EAAE;MACzBD,GAAG,CAAChB,MAAM,GAAG;QACX,GAAGgB,GAAG,CAAChB,MAAM;QACb,GAAGA,MAAM,CAACa,GAAG;MACf,CAAC;IACH;EACF,CAAC;EAEDzE,KAAK,CAAC8E,MAAM,GAAG,CAACrE,GAAG,EAAEmD,MAAM,KAAK;IAC9BnD,GAAG,CAACiD,MAAM,GAAG,CACX;MACA;MACEqB,MAAM,EAAEtE,GAAG,CAACF,IAAI;MAChBqD,MAAM,EAAEpE,UAAU,CAAC;QACjBwF,SAAS,EAAE,GAAG;QACdjB,aAAa,EAAE,GAAG;QAClB1D,KAAK,EAAEqB,MAAM,GAAG,GAAG;QACnBjB,GAAG,EAAE,GAAG,GAAGA,GAAG,CAACA,GAAG;QAClB,GAAGmD;MACL,CAAC;IACH,CAAC,CACF;EACH,CAAC;EAED5D,KAAK,CAACiF,SAAS,GAAIR,GAAG,IAAK;IACzB,OAAOzE,KAAK,CAACkF,aAAa,CAACT,GAAG,CAAC;EACjC,CAAC;EAEDzE,KAAK,CAACkF,aAAa,GAAG,CAACC,QAAQ,EAAEC,eAAe,GAAG,CAAC,KAAK;IACvD,MAAM;MACJ1B,MAAM,EAAE2B;IACV,CAAC,GAAGhE,KAAK,CAACiE,IAAI,CAACH,QAAQ,CAAC;IACxB,IAAII,SAAS;IACb,MAAMC,WAAW,GAAGnE,KAAK,CAACqC,MAAM,CAAC,CAAC,CAAC,CAACqB,MAAM;IAC1CM,SAAS,CAAC1B,IAAI,CAAC,CAAC;MACdoB;IACF,CAAC,EAAEU,MAAM,KAAK;MACZ,MAAMC,WAAW,GAAGrE,KAAK,CAACqC,MAAM,CAACiC,SAAS,CAAC,CAAC;QAC1CZ,MAAM,EAAEa,SAAS;QACjBhC,MAAM,EAAE;UACNC;QACF;MACF,CAAC,KAAK;QACJ,OAAOkB,MAAM,KAAKa,SAAS,IAAI,CAAC/B,GAAG;MACrC,CAAC,CAAC;MACF;MACA,IAAI6B,WAAW,GAAG,CAAC,CAAC,EAAE;QACpB,IAAIG,WAAW,GAAG,CAAC;QACnBR,SAAS,CAACjB,KAAK,CAACqB,MAAM,GAAG,CAAC,CAAC,CAAC9B,IAAI,CAAC,CAAC;UAChCC,MAAM,EAAE;YACNnD,GAAG;YACHoD;UACF;QACF,CAAC,KAAK;UACJ,IAAI,CAACpD,GAAG,IAAI,CAACoD,GAAG,EAAE;YAChBgC,WAAW,EAAE;YAEb,OAAO,KAAK;UACd;UAEA,OAAO,IAAI;QACb,CAAC,CAAC;QACFxE,KAAK,CAACqC,MAAM,CAACoC,MAAM,CAACJ,WAAW,GAAGN,eAAe,EAAES,WAAW,GAAGT,eAAe,CAAC;QACjFC,SAAS,CAACS,MAAM,CAACL,MAAM,GAAGL,eAAe,EAAES,WAAW,GAAGT,eAAe,CAAC;QACzEG,SAAS,GAAGG,WAAW;QAEvB,OAAO,IAAI;MACb;;MAEA;MACA,OAAO,KAAK;IACd,CAAC,CAAC;IACF,KAAK,MAAM,CACTjB,GAAG,EACHG,GAAG,CACJ,IAAIvD,KAAK,CAACqC,MAAM,CAACU,KAAK,CAACmB,SAAS,CAAC,CAACV,OAAO,EAAE,EAAE;MAC5CD,GAAG,CAACG,MAAM,GAAGS,WAAW,GAAGD,SAAS,GAAGd,GAAG;IAC5C;;IAEA;IACA;IACA;EACF,CAAC;;EAEDzE,KAAK,CAAC+F,MAAM,GAAG,CACbC,aAAa,EACbjB,MAAM,GAAG,CAAC;IAAA;IAAA,sBAAA1D,KAAK,CAACiE,IAAI,CAACjE,KAAK,CAACiE,IAAI,CAACZ,MAAM,GAAG,CAAC,CAAC,uEAAjC,YAAmChB,MAAM,CAAC,CAAC,CAAC,wDAA5C,oBAA8CqB,MAAM;EAAA,QAAI1D,KAAK,CAACqC,MAAM,CAACiC,SAAS,CAAC,CAAC;IACxF/B,MAAM,EAAE;MACNnD;IACF;EACF,CAAC,KAAK;IACJ,OAAOA,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EACXmD,MAAM,GAAG,CAAC,CAAC,KACR;IACHvC,KAAK,CAACqC,MAAM,CAACoC,MAAM,CAACf,MAAM,EAAE,CAAC,EAAE;MAC7BA,MAAM;MACNrB,MAAM,EAAE,EAAE;MACVE,MAAM,EAAEpE,UAAU,CAAC;QACjBwF,SAAS,EAAE,GAAG;QACdjB,aAAa,EAAE,GAAG;QAClB1D,KAAK,EAAEqB,MAAM,GAAG,GAAG;QACnBjB,GAAG,EAAG,IAAGuF,aAAc,EAAC;QACxB,GAAGpC;MACL,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAMgB,GAAG,IAAIvD,KAAK,CAACqC,MAAM,CAACU,KAAK,CAACW,MAAM,GAAG,CAAC,CAAC,EAAE;MAChDH,GAAG,CAACG,MAAM,EAAE;IACd;EACF,CAAC;EAED/E,KAAK,CAACiG,YAAY,GAAG,MAAM;IACzB,IAAIC,SAAS;IACb,KAAK,MAAM;MACTnB,MAAM;MACNnB,MAAM,EAAE;QACNnD;MACF;IACF,CAAC,IAAIY,KAAK,CAACqC,MAAM,EAAE;MACjB,IAAIjD,GAAG,EAAE;QACPyF,SAAS,GAAGnB,MAAM;QAClB;MACF;IACF;IAEA,OAAOmB,SAAS;EAClB,CAAC;EAEDlG,KAAK,CAACR,UAAU,GAAGA,UAAU;EAE7BQ,KAAK,CAACmG,WAAW,GAAIvC,MAAM,IAAK;IAC9B,KAAK,MAAMwC,IAAI,IAAI,CACjB,OAAO,EACP,eAAe,EACf,KAAK,EACL,MAAM,EACN,UAAU,EACV,SAAS,EACT,MAAM,EACN,UAAU,EACV,aAAa,EACb,KAAK,EACL,SAAS,CACV,EAAE;MACDxC,MAAM,CAACwC,IAAI,CAAC,GAAG,EAAE;IACnB;EACF,CAAC;EAEDpG,KAAK,CAACqG,OAAO,GAAG,CAACX,WAAW,EAAE9B,MAAM,KAAK;IAAA;IACvC,MAAMmB,MAAM,GAAG,CAAC,kBAAA1D,KAAK,CAACqC,MAAM,CAACgC,WAAW,GAAG,CAAC,CAAC,kDAA7B,cAA+BX,MAAM,KAAI,CAAC,IAAI,CAAC;IAC/D1D,KAAK,CAACqC,MAAM,CAACoC,MAAM,CAACJ,WAAW,EAAE,CAAC,EAAE;MAClCX,MAAM;MACNrB,MAAM,EAAE,EAAE;MACVE,MAAM,EAAEpE,UAAU,CAACoE,MAAM;IAC3B,CAAC,CAAC;IAEF,KAAK,MAAMgB,GAAG,IAAIvD,KAAK,CAACqC,MAAM,CAACU,KAAK,CAACW,MAAM,GAAG,CAAC,CAAC,EAAE;MAChDH,GAAG,CAACG,MAAM,EAAE;IACd;IACA;IACA;EACF,CAAC;;EAED/E,KAAK,CAACsG,QAAQ,GAAG,CAACnB,QAAQ,EAAEC,eAAe,EAAEmB,QAAQ,KAAK;IACxD,MAAM;MACJ7C,MAAM,EAAE2B;IACV,CAAC,GAAGhE,KAAK,CAACiE,IAAI,CAACH,QAAQ,CAAC;IACxB,IAAII,SAAS;IACb,MAAMC,WAAW,GAAGnE,KAAK,CAACqC,MAAM,CAAC,CAAC,CAAC,CAACqB,MAAM;IAC1CM,SAAS,CAAC1B,IAAI,CAAC,CAAC;MACdoB;IACF,CAAC,KAAK;MACJ,MAAMyB,QAAQ,GAAG,MAAM;QACrB,OAAO;UACLzB,MAAM;UACNrB,MAAM,EAAE,EAAE;UACVE,MAAM,EAAEpE,UAAU,CAAC;YACjBwF,SAAS,EAAE,GAAG;YACd3E,KAAK,EAAEqB,MAAM,GAAG;UAClB,CAAC;QACH,CAAC;MACH,CAAC;MAED,MAAM+E,SAAS,GAAG,MAAM;QACtB,OAAOC,KAAK,CAACC,IAAI,CAAC;UAChBjC,MAAM,EAAE6B;QACV,CAAC,EAAEC,QAAQ,CAAC;MACd,CAAC;MAED,MAAMd,WAAW,GAAGrE,KAAK,CAACqC,MAAM,CAACiC,SAAS,CAAC,CAAC;QAC1CZ,MAAM,EAAEa,SAAS;QACjBhC,MAAM,EAAE;UACNC;QACF;MACF,CAAC,KAAK;QACJ,OAAOkB,MAAM,KAAKa,SAAS,IAAI,CAAC/B,GAAG;MACrC,CAAC,CAAC;MACF;MACA,IAAI6B,WAAW,GAAG,CAAC,CAAC,EAAE;QACpB,MAAMkB,KAAK,GAAGH,SAAS,EAAE;QACzBpF,KAAK,CAACqC,MAAM,CAACoC,MAAM,CAACJ,WAAW,GAAGN,eAAe,EAAE,CAAC,EAAE,GAAGwB,KAAK,CAAC;;QAE/D;QACArB,SAAS,GAAGG,WAAW;QAEvB,OAAO,IAAI;MACb;;MAEA;MACA,OAAO,KAAK;IACd,CAAC,CAAC;IACF,KAAK,MAAM,CACTjB,GAAG,EACHG,GAAG,CACJ,IAAIvD,KAAK,CAACqC,MAAM,CAACU,KAAK,CAACmB,SAAS,CAAC,CAACV,OAAO,EAAE,EAAE;MAC5CD,GAAG,CAACG,MAAM,GAAGS,WAAW,GAAGD,SAAS,GAAGd,GAAG;IAC5C;EACF,CAAC;EAEDzE,KAAK,CAAC6G,aAAa,GAAG,MAAM;IAC1B,MAAM;MACJnD,MAAM,EAAE,CACN;QACEE;MACF,CAAC;IAEL,CAAC,GAAGvC,KAAK;IACT,MAAM;MACJ0C,aAAa;MACbG,WAAW;MACXJ,OAAO;MACPrD,GAAG;MACHwD,IAAI;MACJ1B;IACF,CAAC,GAAGqB,MAAM;IAEV,IAAI;MACFA,MAAM,EAAE;QACNkD,QAAQ;QACR9C,OAAO;QACP+C;MACF;IACF,CAAC,GAAG1F,KAAK,CAACqC,MAAM,CAAC,CAAC,CAAC;;IAEnB;IACA,IAAI,CAACQ,WAAW,EAAE;MAChB,IAAI4C,QAAQ,EAAE;QACZA,QAAQ,GAAG,EAAE;MACf,CAAC,MAAM,IAAIC,QAAQ,EAAE;QACnBA,QAAQ,GAAG,EAAE;QACf;MACA,CAAC,MAAM,yIAA0I,IAAI/C,OAAO,EAAE;UAC5JA,OAAO,GAAG,EAAE;QACd;IACF;IAEAhE,KAAK,CAACmG,WAAW,CAACvC,MAAM,CAAC;IAEzB5D,KAAK,CAACqG,OAAO,CAAC,CAAC,EAAE;MACfrB,SAAS,EAAE,GAAG;MAEd;MACA;MACAd,WAAW,EAAEA,WAAW,CAAC8C,OAAO,EAAE;MAClC/C,IAAI;MACJF,aAAa;MACb+C,QAAQ;MACR9C,OAAO;MACP+C,QAAQ;MACR1G,KAAK,EAAEqB,MAAM,GAAG,GAAG;MACnBjB,GAAG;MACH8B;IACF,CAAC,CAAC;IACFvC,KAAK,CAACqG,OAAO,CAAC,CAAC,EAAE;MACfxC,GAAG,EAAE,IAAI;MACTC,OAAO;MACPzD,KAAK,EAAEqB,MAAM,GAAG;IAClB,CAAC,CAAC;EACJ,CAAC;EAED1B,KAAK,CAACiH,YAAY,GAAIC,MAAM,IAAK;IAC/B,OAAOxG,mBAAU,CAACuG,YAAY,CAACC,MAAM,CAAC;EACxC,CAAC;EAEDlH,KAAK,CAACmH,yBAAyB,GAAIC,0BAA0B,IAAK;IAChE,OAAO1G,mBAAU,CAACyG,yBAAyB,CAAC/F,IAAI,EAAEgG,0BAA0B,CAAC;EAC/E,CAAC;EAEDpH,KAAK,CAACqH,SAAS,GAAG,MAAM;IACtB,OAAO3G,mBAAU,CAAC2G,SAAS,CAACjG,IAAI,CAAC;EACnC,CAAC;EAEDpB,KAAK,CAACsH,WAAW,GAAG,MAAM;IACxB,OAAOlG,IAAI,KACTA,IAAI,CAACmG,SAAS,IACdnG,IAAI,CAACmB,IAAI,KAAK,kBAAkB,IAAInB,IAAI,CAACoG,KAAK,CAACD,SAAS,IACxD,CACE,wBAAwB,EAAE,0BAA0B,CACrD,CAACjF,QAAQ,CAAClB,IAAI,CAACmB,IAAI,CAAC,IACnBnB,IAAI,CAACqG,WAAW,CAACF,SAAS,CAC7B;EACH,CAAC;EAEDvH,KAAK,CAAC0H,aAAa,GAAG,MAAM;IAC1B,OAAOhH,mBAAU,CAACgH,aAAa,CAACtG,IAAI,CAAC;EACvC,CAAC;EAEDpB,KAAK,CAAC2H,gBAAgB,GAAI9G,OAAO,IAAK;IACpC,MAAMoD,IAAI,GAAGjE,KAAK,CAACe,mBAAmB,CAAC;MACrCF;IACF,CAAC,CAAC;IACF,IAAI,CAACoD,IAAI,EAAE;MACT,OAAO,KAAK;IACd;IAEA,OAAOvD,mBAAU,CAACiH,gBAAgB,CAACtG,KAAK,EAAE4C,IAAI,CAAC;EACjD,CAAC;EAEDjE,KAAK,CAACe,mBAAmB,GAAG,CAAC;IAC3BF,OAAO;IACP+G,uBAAuB,GAAG,KAAK;IAC/BC,iBAAiB,GAAG,KAAK;IACzBC,cAAc,GAAI,qBAAoBjH,OAAQ;EAChD,CAAC,KAAK;IACJ,MAAMC,GAAG,GAAGJ,mBAAU,CAACK,mBAAmB,CAAClB,OAAO,EAAEE,IAAI,EAAEc,OAAO,EAAEf,iBAAiB,CAAC;IACrF,MAAMkB,QAAQ,GAAGF,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ;IAC/C,IAAId,KAAK,CAAC+H,MAAM,CAAClH,OAAO,CAAC,KAAKC,GAAG,KAAK,KAAK,IAAIE,QAAQ,IAAI,CAACF,GAAG,CAACG,WAAW,CAAC,EAAE;MAC5E,IAAI2G,uBAAuB,EAAE;QAC3B,OAAO;UACL1G,OAAO,EAAE,IAAI;UACbL;QACF,CAAC;MACH;MAEA,MAAMX,OAAO,GAAGc,QAAQ,IAAIF,GAAG,CAACZ,OAAO,IAAI4H,cAAc;MACzD3H,MAAM,CAACD,OAAO,EAAE,IAAI,EAAEF,KAAK,CAACgI,OAAO,CAACnH,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;MAEhD,OAAO,KAAK;IACd;IAEA,OAAOG,QAAQ,IAAI,CAAC6G,iBAAiB,GAAG/G,GAAG,CAACG,WAAW,GAAGH,GAAG;EAC/D,CAAC;EAEDd,KAAK,CAACiI,UAAU,GAAG,CAAChE,IAAI,EAAEiE,WAAW,KAAK;IACxC,OAAOxH,mBAAU,CAACuH,UAAU,CAACpI,OAAO,EAAEE,IAAI,EAAEkE,IAAI,EAAEiE,WAAW,CAAC;EAChE,CAAC;EAEDlI,KAAK,CAACyC,OAAO,GAAI0F,KAAK,IAAK;IACzB,OAAOzH,mBAAU,CAAC+B,OAAO,CAACpB,KAAK,EAAE8G,KAAK,CAAC;EACzC,CAAC;EAEDnI,KAAK,CAAC+H,MAAM,GAAI9D,IAAI,IAAK;IACvB,OAAOvD,mBAAU,CAACqH,MAAM,CAAC1G,KAAK,EAAE4C,IAAI,CAAC;EACvC,CAAC;EAEDjE,KAAK,CAACoI,YAAY,GAAInE,IAAI,IAAK;IAC7B,OAAOvD,mBAAU,CAAC0H,YAAY,CAACnE,IAAI,CAAC;EACtC,CAAC;EAEDjE,KAAK,CAACqI,qBAAqB,GAAIpE,IAAI,IAAK;IACtC,OAAOvD,mBAAU,CAAC2H,qBAAqB,CAACpE,IAAI,CAAC;EAC/C,CAAC;EAEDjE,KAAK,CAACsI,SAAS,GAAG,MAAM;IAAA;IACtB,IACEtG,kBAAkB,KAAK,KAAK,KACzBhC,KAAK,CAAC+H,MAAM,CAAC,QAAQ,CAAC,IAAI/H,KAAK,CAACuI,WAAW,CAAC,QAAQ,CAAC,CAAC,IACzDxG,oBAAoB,KAAK,KAAK,KAC3B/B,KAAK,CAAC+H,MAAM,CAAC,UAAU,CAAC,IAAI/H,KAAK,CAACuI,WAAW,CAAC,UAAU,CAAC,CAAC,IAC7DtG,sBAAsB,KAAK,KAAK,KAC7BjC,KAAK,CAAC+H,MAAM,CAAC,YAAY,CAAC,IAAI/H,KAAK,CAACuI,WAAW,CAAC,YAAY,CAAC,CAAC,IAEjErG,2BAA2B,KACxBlC,KAAK,CAACyC,OAAO,CAAC,CACb,UAAU,EAAE,SAAS,CACtB,CAAC,IACAzC,KAAK,CAACuI,WAAW,CAAC,UAAU,CAAC,IAC3BvI,KAAK,CAACuI,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE;MACrC,OAAO,IAAI;IACb;IAEA,IAAI7H,mBAAU,CAAC8H,mBAAmB,CAChCnH,KAAK,EAAED,IAAI,EAAEvB,OAAO,EAAE4B,UAAU,CAACgH,IAAI,CAACC,MAAM,CAC7C,EAAE;MACD,OAAO,IAAI;IACb;IAEA,MAAMC,UAAU,GAAG,sBAAA9I,OAAO,CAAC+I,OAAO,CAAC,CAAC,CAAC,sDAAlB,kBAAoBD,UAAU,KAAI,CACnD,YAAY,EACZ,IAAG5I,IAAI,KAAK,SAAS,GAAG,EAAE,GAAG,CAC3B,YAAY,CACb,EACF;IACD,IAAI4I,UAAU,CAACjE,MAAM,IAAI1E,KAAK,CAAC6I,cAAc,CAACF,UAAU,CAAC,CAACjE,MAAM,EAAE;MAChE,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd,CAAC;EAED,KAAK,MAAMoE,MAAM,IAAI,CACnB,0BAA0B,EAC1B,0BAA0B,CAC3B,EAAE;IACD9I,KAAK,CAAC8I,MAAM,CAAC,GAAG,CAACjI,OAAO,EAAEkI,aAAa,KAAK;MAC1C,MAAMC,MAAM,GAAGtI,mBAAU,CAACoI,MAAM,CAAC,CAACjI,OAAO,CAAC;MAC1C,IAAImI,MAAM,EAAE;QACV,OAAO,IAAI;MACb;MAEA,IAAI,CAACD,aAAa,EAAE;QAClB,OAAO,KAAK;MACd;MAEA,MAAME,WAAW,GAAGF,aAAa,CAACpF,IAAI,CAAEuF,YAAY,IAAK;QACvD,OAAOxI,mBAAU,CAACoI,MAAM,CAAC,CAACjI,OAAO,EAAEqI,YAAY,CAAC;MAClD,CAAC,CAAC;MAEF,OAAOD,WAAW,GAAG;QACnBE,SAAS,EAAE;MACb,CAAC,GAAG,KAAK;IACX,CAAC;EACH;EAEA,KAAK,MAAML,MAAM,IAAI,CACnB,yBAAyB,EACzB,yBAAyB,EACzB,kCAAkC,CACnC,EAAE;IACD9I,KAAK,CAAC8I,MAAM,CAAC,GAAG,CAACjI,OAAO,EAAEkI,aAAa,KAAK;MAC1C,MAAMC,MAAM,GAAGtI,mBAAU,CAACoI,MAAM,CAAC,CAACjI,OAAO,CAAC;MAC1C,IAAI,CAACmI,MAAM,EAAE;QACX,OAAO,KAAK;MACd;;MAEA;;MAEA,MAAMC,WAAW,GAAGF,aAAa,CAACK,KAAK,CAAEF,YAAY,IAAK;QACxD,OAAOxI,mBAAU,CAACoI,MAAM,CAAC,CAACjI,OAAO,EAAEqI,YAAY,CAAC;MAClD,CAAC,CAAC;MAEF,OAAOD,WAAW,GAAG,IAAI,GAAG;QAC1BE,SAAS,EAAE;MACb,CAAC;IACH,CAAC;EACH;EAEA,KAAK,MAAML,MAAM,IAAI,CACnB,uBAAuB,EACvB,sBAAsB,CACvB,EAAE;IACD9I,KAAK,CAAC8I,MAAM,CAAC,GAAIjI,OAAO,IAAK;MAC3B,OAAOH,mBAAU,CAACoI,MAAM,CAAC,CAACjI,OAAO,CAAC;IACpC,CAAC;EACH;EAEAb,KAAK,CAACqJ,sBAAsB,GAAIC,GAAG,IAAK;IACtC,OAAO5I,mBAAU,CAAC2I,sBAAsB,CAACC,GAAG,EAAE/H,QAAQ,CAACgI,cAAc,CAAC;EACxE,CAAC;EAEDvJ,KAAK,CAACwJ,iBAAiB,GAAI/I,GAAG,IAAK;IACjC,OAAOC,mBAAU,CAAC8I,iBAAiB,CAAC/I,GAAG,CAAC;EAC1C,CAAC;EAEDT,KAAK,CAACyJ,yCAAyC,GAAG,CAACC,kBAAkB,EAAEC,WAAW,KAAK;IACrF,OAAOjJ,mBAAU,CAAC+I,yCAAyC,CAACrI,IAAI,EAAEsI,kBAAkB,EAAEC,WAAW,CAAC;EACpG,CAAC;EAED3J,KAAK,CAAC4J,aAAa,GAAG,MAAM;IAC1B,IAAI,CACF,wBAAwB,EAAE,0BAA0B,CACrD,CAACtH,QAAQ,CAAClB,IAAI,CAACmB,IAAI,CAAC,EAAE;MACrB,OAAO7B,mBAAU,CAACkJ,aAAa,CAACxI,IAAI,CAACqG,WAAW,CAAC;IACnD;IAEA,OAAO/G,mBAAU,CAACkJ,aAAa,CAACxI,IAAI,CAAC;EACvC,CAAC;EAEDpB,KAAK,CAAC6J,mBAAmB,GAAG,MAAM;IAChC,OAAOnJ,mBAAU,CAACkJ,aAAa,CAACxI,IAAI,EAAE,IAAI,CAAC;EAC7C,CAAC;EAEDpB,KAAK,CAAC8J,aAAa,GAAG,MAAM;IAC1B,OAAOpJ,mBAAU,CAACoJ,aAAa,CAAC1I,IAAI,CAAC;EACvC,CAAC;EAEDpB,KAAK,CAAC+J,OAAO,GAAG,MAAM;IACpB,OAAO3I,IAAI,CAAC4I,KAAK;EACnB,CAAC;EAEDhK,KAAK,CAACgI,OAAO,GAAInH,OAAO,IAAK;IAC3B,OAAOb,KAAK,CAACiK,UAAU,CAAEC,IAAI,IAAK;MAChC,OAAOA,IAAI,CAACzJ,GAAG,KAAKI,OAAO;IAC7B,CAAC,CAAC;EACJ,CAAC;EAEDb,KAAK,CAAC6I,cAAc,GAAIsB,OAAO,IAAK;IAClC,OAAOnK,KAAK,CAACiK,UAAU,CAAExJ,GAAG,IAAK;MAC/B,OAAO0J,OAAO,CAAC7H,QAAQ,CAAC7B,GAAG,CAACA,GAAG,CAAC;IAClC,CAAC,CAAC;EACJ,CAAC;EAEDT,KAAK,CAACiK,UAAU,GAAIG,MAAM,IAAK;IAC7B,OAAO1J,mBAAU,CAACuJ,UAAU,CAAC5I,KAAK,CAACiE,IAAI,EAAE8E,MAAM,CAAC;EAClD,CAAC;EAEDpK,KAAK,CAACqK,aAAa,GAAI/E,IAAI,IAAK;IAC9B,OAAO5E,mBAAU,CAAC2J,aAAa,CAACxK,OAAO,EAAEE,IAAI,EAAEuF,IAAI,EAAExF,iBAAiB,CAAC;EACzE,CAAC;EAEDE,KAAK,CAACsK,YAAY,GAAIzJ,OAAO,IAAK;IAChC,MAAM;MACJyE;IACF,CAAC,GAAGzF,OAAO,CAAC+I,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE5B,OAAO2B,OAAO,CAACjF,IAAI,IAAIA,IAAI,CAAChD,QAAQ,CAACzB,OAAO,CAAC,CAAC;EAChD,CAAC;EAEDb,KAAK,CAACwK,YAAY,GAAG,MAAM;IACzB,OAAO,CACL,GAAG7I,SAAS,EAAEP,IAAI,CACnB,CAACqJ,OAAO,EAAE,CAACC,IAAI,CAAEC,MAAM,IAAK;MAC3B,OAAOA,MAAM,IAAI,CACf,kBAAkB,EAAE,iBAAiB,CACtC,CAACrI,QAAQ,CAACqI,MAAM,CAACpI,IAAI,CAAC;IACzB,CAAC,CAAC,IAAI,IAAI;EACZ,CAAC;EAEDvC,KAAK,CAAC4K,aAAa,GAAG,MAAM;IAC1B,MAAMC,SAAS,GAAG7K,KAAK,CAACwK,YAAY,EAAE;IAEtC,IAAI,CAACK,SAAS,EAAE;MACd,OAAO,IAAI;IACb;IAEA,MAAMC,cAAc,GAAG,IAAAC,6BAAe,EAAClJ,UAAU,EAAEgJ,SAAS,EAAE;MAC5D1I,QAAQ;MACRC;IACF,CAAC,CAAC;IAEF,IAAI0I,cAAc,EAAE;MAClB,OAAO,IAAAE,0BAAY,EAACF,cAAc,EAAE,EAAE,CAAC;IACzC;IAEA,OAAO,IAAI;EACb,CAAC;EAED9K,KAAK,CAACuI,WAAW,GAAI1H,OAAO,IAAK;IAC/B,MAAMoK,UAAU,GAAGjL,KAAK,CAAC4K,aAAa,EAAE;IAExC,OAAOL,OAAO,CAACU,UAAU,CAAC,IAAIvK,mBAAU,CAACqH,MAAM,CAACkD,UAAU,EAAEpK,OAAO,CAAC;EACtE,CAAC;EAEDb,KAAK,CAACkL,mBAAmB,GAAG,CAACrK,OAAO,EAAEsK,YAAY,EAAEvD,uBAAuB,GAAG,KAAK,KAAK;IACtF,MAAM5B,aAAa,GAAGhG,KAAK,CAACe,mBAAmB,CAAC;MAC9C6G,uBAAuB;MACvB/G;IACF,CAAC,CAAC;IACF,IAAI,CAACmF,aAAa,IAChB4B,uBAAuB,IAAI5B,aAAa,IAAI,OAAOA,aAAa,KAAK,QAAQ,EAC7E;MACA;IACF;IAEA,MAAMoF,iBAAiB,GAAG/J,KAAK,CAACiE,IAAI,CAAC8E,MAAM,CAAC,CAAC;MAC3C3J;IACF,CAAC,KAAK;MACJ,OAAOA,GAAG,KAAKuF,aAAa;IAC9B,CAAC,CAAC;IAEF,KAAK,MAAMqF,gBAAgB,IAAID,iBAAiB,EAAE;MAChDD,YAAY,CAACE,gBAAgB,EAAErF,aAAa,CAAC;IAC/C;EACF,CAAC;EAED,OAAOhG,KAAK;AACd,CAAC;AAED,MAAMsL,WAAW,GAAIzL,OAAO,IAAK;EAAA;EAC/B;EACA,MAAM0B,QAAQ,GAAG;IACf;IACAgK,aAAa,EAAEhB,OAAO,0BAAC1K,OAAO,CAAC0B,QAAQ,CAACF,KAAK,0DAAtB,sBAAwBkK,aAAa,CAAC;IAC7DC,cAAc,EAAEjB,OAAO,2BAAC1K,OAAO,CAAC0B,QAAQ,CAACF,KAAK,2DAAtB,uBAAwBmK,cAAc,CAAC;IAC/DrJ,QAAQ,EAAEsJ,MAAM,CAAC,2BAAA5L,OAAO,CAAC0B,QAAQ,CAACF,KAAK,2DAAtB,uBAAwBc,QAAQ,KAAI,CAAC,CAAC;IACvDC,QAAQ,EAAEqJ,MAAM,CAAC,2BAAA5L,OAAO,CAAC0B,QAAQ,CAACF,KAAK,2DAAtB,uBAAwBe,QAAQ,KAAI,CAAC,CAAC;IAEvD;IACAtC,iBAAiB,EAAE,2BAAAD,OAAO,CAAC0B,QAAQ,CAACF,KAAK,2DAAtB,uBAAwBvB,iBAAiB,KAAI,CAAC,CAAC;IAElE;IACA4L,cAAc,EAAE,2BAAA7L,OAAO,CAAC0B,QAAQ,CAACF,KAAK,2DAAtB,uBAAwBqK,cAAc,KAAI,CAAC,CAAC;IAE5D;IACAnC,cAAc,EAAE,2BAAA1J,OAAO,CAAC0B,QAAQ,CAACF,KAAK,2DAAtB,uBAAwBkI,cAAc,KAAI,CAAC,CAAC;IAE5D;IACA;IACAxH,oBAAoB,4BAAElC,OAAO,CAAC0B,QAAQ,CAACF,KAAK,2DAAtB,uBAAwBU,oBAAoB;IAClEC,kBAAkB,4BAAEnC,OAAO,CAAC0B,QAAQ,CAACF,KAAK,2DAAtB,uBAAwBW,kBAAkB;IAC9DC,sBAAsB,6BAAEpC,OAAO,CAAC0B,QAAQ,CAACF,KAAK,4DAAtB,wBAAwBY,sBAAsB;IACtEC,2BAA2B,6BAAErC,OAAO,CAAC0B,QAAQ,CAACF,KAAK,4DAAtB,wBAAwBa,2BAA2B;IAEhF;IACAnC,IAAI,EAAE,4BAAAF,OAAO,CAAC0B,QAAQ,CAACF,KAAK,4DAAtB,wBAAwBtB,IAAI,MAC/BF,OAAO,CAAC8L,UAAU,CAACrJ,QAAQ,CAAC,oBAAoB,CAAC,GAAG,YAAY,GAAG,OAAO;EAC/E,CAAC;EACD;;EAEA5B,mBAAU,CAACkL,eAAe,CAACrK,QAAQ,CAACxB,IAAI,CAAC;EACzC,IAAI;IACFW,mBAAU,CAACmL,oBAAoB,CAACtK,QAAQ,CAACgI,cAAc,CAAC;EAC1D,CAAC,CAAC,OAAOuC,KAAK,EAAE;IACdjM,OAAO,CAACM,MAAM,CAAC;MACbC,GAAG,EAAE;QACHC,KAAK,EAAE;UACLC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR;MACF,CAAC;MACDL,OAAO,EAAE4L,KAAK,CAAC5L;IACjB,CAAC,CAAC;IAEF,OAAO,KAAK;EACd;EAEA,OAAOqB,QAAQ;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AALA;AAMA,MAAMwK,UAAU,GAAG,CAAClM,OAAO,EAAEmM,WAAW,KAAK;EAC3C,MAAM7L,MAAM,GAAG,CAACD,OAAO,EAAE+L,GAAG,GAAG,IAAI,EAAEC,QAAQ,GAAG,IAAI,EAAEjJ,IAAI,GAAG,IAAI,KAAK;IACpE,IAAI7C,GAAG;IAEP,IAAI8L,QAAQ,EAAE;MACZ,IAAI,EAAE,MAAM,IAAIA,QAAQ,CAAC,EAAE;QACzBA,QAAQ,CAAC3L,IAAI,GAAG2L,QAAQ,CAACxI,MAAM,CAAC,CAAC,CAAC,CAACqB,MAAM;MAC3C;MAEA,MAAMoH,UAAU,GAAGH,WAAW,CAAC5L,GAAG,CAACC,KAAK,CAACE,IAAI,GAAG2L,QAAQ,CAAC3L,IAAI;MAE7DH,GAAG,GAAG;QACJyD,GAAG,EAAE;UACHvD,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE4L;QACR,CAAC;QACD9L,KAAK,EAAE;UACLC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE4L;QACR;MACF,CAAC;;MAED;MACA;MACA,IAAID,QAAQ,CAAC5L,MAAM,EAAE;QACnB,MAAM8L,SAAS,GAAGJ,WAAW,CAAC5L,GAAG,CAACC,KAAK,CAACC,MAAM,GAAG4L,QAAQ,CAAC5L,MAAM;QAEhEF,GAAG,CAACyD,GAAG,CAACvD,MAAM,GAAG8L,SAAS;QAC1BhM,GAAG,CAACC,KAAK,CAACC,MAAM,GAAG8L,SAAS;MAC9B;IACF;IAEAvM,OAAO,CAACM,MAAM,CAAC;MACb8C,IAAI;MACJgJ,GAAG;MACH7L,GAAG;MACHF,OAAO;MACPkB,IAAI,EAAE4K;IACR,CAAC,CAAC;EACJ,CAAC;EAED,OAAO7L,MAAM;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMkM,OAAO,GAAG,CACdC,IAAI,EACJ5K,MAAM,EAAEL,KAAK,EACbI,UAAU,EAAE5B,OAAO,EAAE+G,KAAK,EAAEtF,SAAS,EAAEF,IAAI,EAAEG,QAAQ,EACrDM,UAAU,EAAE0K,QAAQ,EAAEC,KAAK,EAAEhL,YAAY,KACtC;EACH,MAAMrB,MAAM,GAAG4L,UAAU,CAAClM,OAAO,EAAEyB,SAAS,CAAC;EAE7C,MAAMtB,KAAK,GAAGmB,QAAQ,CACpBC,IAAI,EACJC,KAAK,EACLC,SAAS,EACTC,QAAQ,EACRpB,MAAM,EACNN,OAAO,EACP2B,YAAY,EACZC,UAAU,EACVC,MAAM,CACP;EAED,IACE,CAACD,UAAU,CAACgL,aAAa,IAAIlL,QAAQ,CAACiK,cAAc,IACpDxL,KAAK,CAAC+H,MAAM,CAAC,UAAU,CAAC,EACxB;IACA;EACF;EAEA,IACE,CAACtG,UAAU,CAACiL,YAAY,IAAInL,QAAQ,CAACgK,aAAa,KAEhDvL,KAAK,CAAC+H,MAAM,CAAC,SAAS,CAAC,IACvB1G,KAAK,CAACiE,IAAI,CACP8E,MAAM,CAAC,CAAC;IACP3J;EACF,CAAC,KAAK;IACJ,OAAOA,GAAG,KAAK,QAAQ;EACzB,CAAC,CAAC,CACDkD,IAAI,CAAC,CAAC;IACLO;EACF,CAAC,KAAK;IACJ,OAAOA,WAAW,KAAK,SAAS;EAClC,CAAC,CAAC,CACL,EACD;IACA;EACF;EAEAqI,QAAQ,CAAC;IACP1M,OAAO;IACPH,WAAW;IACXgC,MAAM;IACN4K,IAAI;IACJ9K,YAAY;IACZH,KAAK;IACLC,SAAS;IACTF,IAAI;IACJjB,MAAM;IACNoB,QAAQ;IACRM,UAAU;IACV2K,KAAK;IACLxM;EACF,CAAC,CAAC;AACJ,CAAC;AAED,MAAM2M,iBAAiB,GAAG,UAAU/F,KAAK,EAAEtF,SAAS,EAAE;EACpD,MAAMsL,UAAU,GAAGhG,KAAK,CAACtF,SAAS,CAAClB,GAAG,CAACC,KAAK,CAACE,IAAI,GAAG,CAAC,CAAC;EACtD,MAAMsM,KAAK,GAAGD,UAAU,CAACE,MAAM,CAAC,CAAC,CAAC,CAACC,MAAM,CAACzL,SAAS,CAAClB,GAAG,CAACC,KAAK,CAACC,MAAM,CAAC;EACrE,MAAM0M,IAAI,GAAG,IAAAhC,0BAAY,EAAC1J,SAAS,EAAE,EAAE,CAAC;EAExC,OAAO,CACLuL,KAAK,EAAEG,IAAI,CACZ;AACH,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAG,CAACV,QAAQ,EAAE9K,UAAU,EAAEyL,QAAQ,EAAEC,uBAAuB,KAAK;EACpF,MAAMC,aAAa,GAAG,IAAIC,GAAG,EAAE;EAE/B,IAAIrK,OAAO;EACX,IAAIzB,QAAQ;EACZ,MAAM+L,YAAY,GAAG,CAACzN,OAAO,EAAEuB,IAAI,EAAEmM,UAAU,EAAEf,KAAK,EAAEgB,QAAQ,KAAK;IACnE,MAAM3L,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;IAC1C,MAAM;MACJ8E;IACF,CAAC,GAAG/E,UAAU;IAEd,MAAM7B,KAAK,GAAGJ,aAAa,CAACC,OAAO,EAAE0B,QAAQ,CAAC;IAC9C,KAAK,MAAMD,SAAS,IAAIiM,UAAU,EAAE;MAClC,IAAI,CAAE,YAAY,CAAEE,IAAI,CAAC5L,UAAU,CAAC6L,OAAO,CAACpM,SAAS,CAAC,CAAC,EAAE;QACvD;MACF;MAEA,MAAM,CACJI,MAAM,EACNL,KAAK,CACN,GAAGsL,iBAAiB,CACnB/F,KAAK,EAAEtF,SAAS,CACjB;MAED,IAAI6L,uBAAuB,EAAE;QAC3B,KAAK,MAAM,CACT1I,GAAG,EACH;UACEkJ;QACF,CAAC,CACF,IAAIT,QAAQ,CAACrI,OAAO,EAAE,EAAE;UACvB,IAAI8I,OAAO,IAAI3K,OAAO,CAAC2K,OAAO,EAAEtM,KAAK,CAAC,KAAK,KAAK,EAAE;YAChD;UACF;UAEAgL,OAAO,CACL;YACEsB,OAAO;YACPpI,SAAS,EAAEd,GAAG;YACdmJ,QAAQ,EAAExM,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB;UAClB,CAAC,EACDb,MAAM,EACNL,KAAK,EACLI,UAAU,EACV5B,OAAO,EACP+G,KAAK,EACLtF,SAAS,EACTF,IAAI,EACJG,QAAQ,EACRM,UAAU,EACV0K,QAAQ,EACRC,KAAK,EACL,IAAI,CACL;QACH;QAEA;MACF;MAEA,IAAIqB,WAAW;MACf,IAAItI,SAAS;MACb;MACA,IAAI2H,QAAQ,IAAIA,QAAQ,CAAC9D,KAAK,CAAC,CAAC;QAC9BuE;MACF,CAAC,EAAElJ,GAAG,KAAK;QACToJ,WAAW,GAAGF,OAAO;QACrBpI,SAAS,GAAGd,GAAG;QAEf,OAAOkJ,OAAO,IAAI3K,OAAO,CAAC2K,OAAO,EAAEtM,KAAK,CAAC,KAAK,KAAK;MACrD,CAAC,CAAC,EAAE;QACF;MACF;MAEAgL,OAAO,CACLwB,WAAW,GAAG;QACZF,OAAO,EAAEE,WAAW;QACpBtI,SAAS;QACTqI,QAAQ,EAAExM,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB;MAClB,CAAC,GAAG;QACFgD,SAAS;QACTqI,QAAQ,EAAExM,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB;MAClB,CAAC,EACDb,MAAM,EACNL,KAAK,EACLI,UAAU,EACV5B,OAAO,EACP+G,KAAK,EACLtF,SAAS,EACTF,IAAI,EACJG,QAAQ,EACRM,UAAU,EACV0K,QAAQ,EACRC,KAAK,EACL,IAAI,CACL;IACH;IAEA,IAAIgB,QAAQ,IAAI/L,UAAU,CAACqM,IAAI,EAAE;MAC/BrM,UAAU,CAACqM,IAAI,CAAC;QACdjO,OAAO;QACP2M,KAAK;QACLxM;MACF,CAAC,CAAC;IACJ;EACF,CAAC;EAED,OAAO;IACL+N,MAAM,CAAElO,OAAO,EAAE;MACf,MAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;MAC1CP,QAAQ,GAAG+J,WAAW,CAACzL,OAAO,CAAC;MAC/B,IAAI,CAAC0B,QAAQ,EAAE;QACb,OAAO,CAAC,CAAC;MACX;MAEA,IAAI2L,QAAQ,EAAE;QACZlK,OAAO,GAAG,IAAAgL,4BAAc,EAACzM,QAAQ,CAAC;MACpC;MAEA,MAAMiL,KAAK,GAAG,CAAC,CAAC;MAEhB,OAAO;QACL,gBAAgB,CAAEpL,IAAI,EAAE;UACtB,MAAM4K,WAAW,GAAG,IAAAjB,6BAAe,EAAClJ,UAAU,EAAET,IAAI,EAAEG,QAAQ,CAAC;UAC/D,IAAI,CAACE,UAAU,CAACwM,UAAU,IAAIb,aAAa,CAACc,GAAG,CAAClC,WAAW,CAAC,EAAE;YAC5D;UACF;UAEA,IAAI,CAACA,WAAW,EAAE;YAChB,IAAIvK,UAAU,CAAC0M,UAAU,EAAE;cACzB1M,UAAU,CAAC0M,UAAU,CAAC;gBACpB/M,IAAI;gBACJoL;cACF,CAAC,CAAC;YACJ;YAEA;UACF;UAEAY,aAAa,CAACgB,GAAG,CAACpC,WAAW,CAAC;UAC9BsB,YAAY,CAACzN,OAAO,EAAEuB,IAAI,EAAE,CAC1B4K,WAAW,CACZ,EAAEQ,KAAK,CAAC;QACX,CAAC;QACD,cAAc,GAAI;UAChB,MAAM6B,WAAW,GAAGxM,UAAU,CAACyM,cAAc,EAAE;UAC/C,MAAMC,cAAc,GAAGF,WAAW,CAACjE,MAAM,CAAEhJ,IAAI,IAAK;YAClD,OAAO,CAACgM,aAAa,CAACc,GAAG,CAAC9M,IAAI,CAAC;UACjC,CAAC,CAAC;UAEFkM,YAAY,CAACzN,OAAO,EAAE,IAAI,EAAE0O,cAAc,EAAE/B,KAAK,EAAE,IAAI,CAAC;QAC1D;MACF,CAAC;IACH,CAAC;IACD/D,IAAI,EAAEhH,UAAU,CAACgH;EACnB,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM+F,SAAS,GAAG,CAACjC,QAAQ,EAAE9K,UAAU,KAAK;EAC1C,OAAO;IACLsM,MAAM,CAAElO,OAAO,EAAE;MACf,MAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;MAC1C,MAAMP,QAAQ,GAAG+J,WAAW,CAACzL,OAAO,CAAC;MACrC,IAAI,CAAC0B,QAAQ,EAAE;QACb,OAAO,CAAC,CAAC;MACX;MAEA,OAAO;QACL,cAAc,GAAI;UAChB,MAAM8M,WAAW,GAAGxM,UAAU,CAACyM,cAAc,EAAE;UAC/C,MAAM;YACJ1H;UACF,CAAC,GAAG/E,UAAU;UACd,MAAM7B,KAAK,GAAGJ,aAAa,CAACC,OAAO,EAAE0B,QAAQ,CAAC;UAE9CgL,QAAQ,CAAC;YACP8B,WAAW;YACXxO,OAAO;YACP+G,KAAK;YACLmF,UAAU;YACVxK,QAAQ;YACRM,UAAU;YACV7B;UACF,CAAC,CAAC;QACJ;MACF,CAAC;IACH,CAAC;IACDyI,IAAI,EAAEhH,UAAU,CAACgH;EACnB,CAAC;AACH,CAAC;AAQD;AACA;AACA;AACA;AACe,SAASgG,YAAY,CAAElC,QAAQ,EAAE9K,UAAU,EAAE;EAAA;EAC1D,MAAMiN,QAAQ,GAAGjN,UAAU,aAAVA,UAAU,2CAAVA,UAAU,CAAEgH,IAAI,qDAAhB,iBAAkBlG,IAAI;EACvC,IAAI,CAACmM,QAAQ,IAAI,CAAC,CAChB,SAAS,EAAE,YAAY,EAAE,QAAQ,CAClC,CAACpM,QAAQ,CAACoM,QAAQ,CAAC,EAAE;IACpB,MAAM,IAAIC,SAAS,CAAC,wFAAwF,CAAC;EAC/G;EAEA,IAAI,OAAOpC,QAAQ,KAAK,UAAU,EAAE;IAClC,MAAM,IAAIoC,SAAS,CAAC,2CAA2C,CAAC;EAClE;EAEA,IAAIlN,UAAU,CAAC+M,SAAS,EAAE;IACxB,OAAOA,SAAS,CAACjC,QAAQ,EAAE9K,UAAU,CAAC;EACxC;EAEA,IAAIA,UAAU,CAACwL,gBAAgB,EAAE;IAC/B,OAAOA,gBAAgB,CAACV,QAAQ,EAAE9K,UAAU,CAAC;EAC/C;EAEA,OAAO;IACL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIsM,MAAM,CAAElO,OAAO,EAAE;MACf,MAAM0B,QAAQ,GAAG+J,WAAW,CAACzL,OAAO,CAAC;MACrC,IAAI,CAAC0B,QAAQ,EAAE;QACb,OAAO,CAAC,CAAC;MACX;MAEA,IAAI2L,QAAQ;MACZ,IAAIzL,UAAU,CAACmN,eAAe,IAAInN,UAAU,CAACoN,eAAe,IAAIpN,UAAU,CAACqN,YAAY,EAAE;QAAA;QACvF5B,QAAQ,GAAGzL,UAAU,CAACqN,YAAY,0BAAIjP,OAAO,CAAC+I,OAAO,CAAC,CAAC,CAAC,+CAAlB,mBAAoBmG,KAAK,GAC7DlP,OAAO,CAAC+I,OAAO,CAAC,CAAC,CAAC,CAACmG,KAAK,GACxBrO,mBAAU,CAACsO,gBAAgB,CAACnP,OAAO,EAAE4B,UAAU,CAACmN,eAAe,CAAC;QAElE,IAAI1B,QAAQ,EAAE;UACZA,QAAQ,GAAGA,QAAQ,CAAC+B,GAAG,CAAEC,GAAG,IAAK;YAC/B,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAI,CAACA,GAAG,CAACrP,OAAO,EAAE;cAC3C,OAAO;gBACL,GAAGqP,GAAG;gBACNrP,OAAO,EAAE;cACX,CAAC;YACH;YAEA,OAAOqP,GAAG;UACZ,CAAC,CAAC;QACJ;QAEA,MAAMC,WAAW,gBAAGjC,QAAQ,8CAAR,UAAU5K,QAAQ,CAAC,KAAK,CAAC;QAC7C,MAAM8M,YAAY,GAAG,CAACD,WAAW,mBAAIjC,QAAQ,+CAAR,WAAUxC,IAAI,CAAE2E,IAAI,IAAK;UAC5D,OAAO,CAAAA,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAExP,OAAO,MAAK,KAAK;QAChC,CAAC,CAAC;QACF,IAAIsP,WAAW,IAAIC,YAAY,EAAE;UAC/B,OAAOnC,gBAAgB,CACrBV,QAAQ,EAAE9K,UAAU,EAAE2N,YAAY,GAAGlC,QAAQ,GAAG,IAAI,EAAEzL,UAAU,CAACqN,YAAY,CAC9E,CAACf,MAAM,CAAClO,OAAO,CAAC;QACnB;MACF;MAEA,MAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;MAC1C,MAAM;QACJ8E;MACF,CAAC,GAAG/E,UAAU;MAEd,MAAM2K,KAAK,GAAG,CAAC,CAAC;MAEhB,MAAM8C,UAAU,GAAG,CAAChD,IAAI,EAAEtJ,OAAO,EAAE5B,IAAI,KAAK;QAC1C,MAAME,SAAS,GAAG,IAAAyJ,6BAAe,EAAClJ,UAAU,EAAET,IAAI,EAAEG,QAAQ,CAAC;QAC7D,IAAI,CAACD,SAAS,EAAE;UACd;QACF;QAEA,MAAM,CACJI,MAAM,EACNL,KAAK,CACN,GAAGsL,iBAAiB,CACnB/F,KAAK,EAAEtF,SAAS,CACjB;QAED;QACE;QACA;QACA;QACA0B,OAAO,IAAIA,OAAO,CAAC3B,KAAK,CAAC,KAAK,KAAK,EACnC;UACA;QACF;QAEAgL,OAAO,CACLC,IAAI,EAAE5K,MAAM,EAAEL,KAAK,EAAEI,UAAU,EAAE5B,OAAO,EAAE+G,KAAK,EAAEtF,SAAS,EAAEF,IAAI,EAAEG,QAAQ,EAAEM,UAAU,EAAE0K,QAAQ,EAAEC,KAAK,CACxG;MACH,CAAC;MAED,IAAI+C,aAAa,GAAG,CAAC,CAAC;MAEtB,IAAIrC,QAAQ,KACVzL,UAAU,CAACmN,eAAe,IAAInN,UAAU,CAACoN,eAAe,IAAIpN,UAAU,CAACqN,YAAY,CACpF,EAAE;QACDS,aAAa,GAAG7O,mBAAU,CAAC8O,gBAAgB,CACzCtC,QAAQ,EACRoC,UAAU,EACV,IAAAtB,4BAAc,EAACzM,QAAQ,CAAC,CACzB;MACH,CAAC,MAAM;QACL,KAAK,MAAM6E,IAAI,IAAI,CACjB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,CACpB,EAAE;UACDmJ,aAAa,CAACnJ,IAAI,CAAC,GAAGkJ,UAAU,CAACG,IAAI,CAAC,IAAI,EAAE;YAC1C7B,QAAQ,EAAExH;UACZ,CAAC,EAAE,IAAI,CAAC;QACV;MACF;MAEA,IAAI3E,UAAU,CAACqM,IAAI,EAAE;QACnByB,aAAa,CAAC,cAAc,CAAC,GAAG,MAAM;UACpC9N,UAAU,CAACqM,IAAI,CAAC;YACdjO,OAAO;YACP2M;UACF,CAAC,CAAC;QACJ,CAAC;MACH;MAEA,OAAO+C,aAAa;IACtB,CAAC;IACD9G,IAAI,EAAEhH,UAAU,CAACgH;EACnB,CAAC;AACH"}
|
|
@@ -11,9 +11,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
11
11
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
12
12
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
13
13
|
const extraTypes = ['null', 'undefined', 'void', 'string', 'boolean', 'object', 'function', 'symbol', 'number', 'bigint', 'NaN', 'Infinity', 'any', '*', 'never', 'unknown', 'const', 'this', 'true', 'false', 'Array', 'Object', 'RegExp', 'Date', 'Function'];
|
|
14
|
-
|
|
14
|
+
const typescriptGlobals = [
|
|
15
15
|
// https://www.typescriptlang.org/docs/handbook/utility-types.html
|
|
16
|
-
|
|
16
|
+
'Partial', 'Required', 'Readonly', 'Record', 'Pick', 'Omit', 'Exclude', 'Extract', 'NonNullable', 'Parameters', 'ConstructorParameters', 'ReturnType', 'InstanceType', 'ThisParameterType', 'OmitThisParameter', 'ThisType', 'Uppercase', 'Lowercase', 'Capitalize', 'Uncapitalize'];
|
|
17
17
|
const stripPseudoTypes = str => {
|
|
18
18
|
return str && str.replace(/(?:\.|<>|\.<>|\[\])$/u, '');
|
|
19
19
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noUndefinedTypes.js","names":["extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","iterateJsdoc","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","options","definedPreferredTypes","preferredTypes","structuredTags","mode","Object","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","typedefDeclarations","getAllComments","comment","test","value","commentNode","parseComment","flatMap","doc","tags","tag","isNamepathDefiningTag","name","ancestorNodes","currentNode","parent","push","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","jsdocUtils","filterTags","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","type","allDefinedTypes","Set","variables","concat","jsdocTagsWithPossibleType","tagMightHaveTypePosition","parsedType","tryParseType","parseType","traverse","structuredTypes","has","Array","isArray","includes","markVariableAsUsed","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import {\n getJSDocComment,\n\n traverse,\n parse as parseType,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc';\nimport jsdocUtils from '../jsdocUtils';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function',\n];\n\n// https://www.typescriptlang.org/docs/handbook/utility-types.html\nconst typescriptGlobals = [\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n const {\n globalScope,\n } = scopeManager;\n\n const {\n definedTypes = [],\n } = context.options[0] || {};\n\n let definedPreferredTypes = [];\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n const typedefDeclarations = context.getAllComments()\n .filter((comment) => {\n return (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n })\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdocUtils.filterTags(jsdoc.tags, (tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags('template');\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).map(({\n name,\n }) => {\n return name;\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(definedTypes)\n .concat(definedPreferredTypes)\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n const jsdocTagsWithPossibleType = utils.filterTags(({\n tag,\n }) => {\n return utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n });\n\n for (const tag of jsdocTagsWithPossibleType) {\n let parsedType;\n\n try {\n parsedType = mode === 'permissive' ? tryParseType(tag.type) : parseType(tag.type, mode);\n } catch {\n // On syntax error, will be handled by valid-types.\n continue;\n }\n\n traverse(parsedType, ({\n type,\n value,\n }) => {\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(value) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(value))\n ) {\n report(`The type '${value}' is undefined.`, null, tag);\n } else if (!extraTypes.includes(value)) {\n context.markVariableAsUsed(value);\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-undefined-types',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA;AAOA;AAGA;AAAuC;AAAA;AAAA;AAEvC,MAAMA,UAAU,GAAG,CACjB,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAC1D,UAAU,EAAE,QAAQ,EACpB,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EACrC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EACvC,MAAM,EAAE,MAAM,EAAE,OAAO,EACvB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAChD;;AAED;AACA,MAAMC,iBAAiB,GAAG,CACxB,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,SAAS,EACT,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,cAAc,CACf;AAED,MAAMC,gBAAgB,GAAIC,GAAG,IAAK;EAChC,OAAOA,GAAG,IAAIA,GAAG,CAACC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC;AACxD,CAAC;AAAC,eAEa,IAAAC,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,IAAI;EACJC,MAAM;EACNC,QAAQ;EACRC,UAAU;EACVC;AACF,CAAC,KAAK;EAAA;EACJ,MAAM;IACJC;EACF,CAAC,GAAGF,UAAU;EACd,MAAM;IACJG;EACF,CAAC,GAAGD,YAAY;EAEhB,MAAM;IACJE,YAAY,GAAG;EACjB,CAAC,GAAGR,OAAO,CAACS,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,IAAIC,qBAAqB,GAAG,EAAE;EAC9B,MAAM;IACJC,cAAc;IACdC,cAAc;IACdC;EACF,CAAC,GAAGV,QAAQ;EACZ,IAAIW,MAAM,CAACC,IAAI,CAACJ,cAAc,CAAC,CAACK,MAAM,EAAE;IACtCN,qBAAqB,GAAGI,MAAM,CAACG,MAAM,CAACN,cAAc,CAAC,CAACO,GAAG,CAAEC,aAAa,IAAK;MAC3E,IAAI,OAAOA,aAAa,KAAK,QAAQ,EAAE;QACrC;QACA,OAAOvB,gBAAgB,CAACuB,aAAa,CAAC;MACxC;MAEA,IAAI,CAACA,aAAa,EAAE;QAClB,OAAOC,SAAS;MAClB;MAEA,IAAI,OAAOD,aAAa,KAAK,QAAQ,EAAE;QACrCd,KAAK,CAACgB,cAAc,CAClB,wFAAwF,CACzF;MACH;MAEA,OAAOzB,gBAAgB,CAACuB,aAAa,CAACG,WAAW,CAAC;IACpD,CAAC,CAAC,CACCC,MAAM,CAAEJ,aAAa,IAAK;MACzB,OAAOA,aAAa;IACtB,CAAC,CAAC;EACN;EAEA,MAAMK,mBAAmB,GAAGxB,OAAO,CAACyB,cAAc,EAAE,CACjDF,MAAM,CAAEG,OAAO,IAAK;IACnB,OAAQ,QAAQ,CAAEC,IAAI,CAACD,OAAO,CAACE,KAAK,CAAC;EACvC,CAAC,CAAC,CACDV,GAAG,CAAEW,WAAW,IAAK;IACpB,OAAO,IAAAC,0BAAY,EAACD,WAAW,EAAE,EAAE,CAAC;EACtC,CAAC,CAAC,CACDE,OAAO,CAAEC,GAAG,IAAK;IAChB,OAAOA,GAAG,CAACC,IAAI,CAACV,MAAM,CAAC,CAAC;MACtBW;IACF,CAAC,KAAK;MACJ,OAAO7B,KAAK,CAAC8B,qBAAqB,CAACD,GAAG,CAAC;IACzC,CAAC,CAAC;EACJ,CAAC,CAAC,CACDhB,GAAG,CAAEgB,GAAG,IAAK;IACZ,OAAOA,GAAG,CAACE,IAAI;EACjB,CAAC,CAAC;EAEJ,MAAMC,aAAa,GAAG,EAAE;EAExB,IAAIC,WAAW,GAAGrC,IAAI;EACtB;EACA,uBAAOqC,WAAW,yCAAX,aAAaC,MAAM,EAAE;IAAA;IAC1BF,aAAa,CAACG,IAAI,CAACF,WAAW,CAAC;IAC/BA,WAAW,GAAGA,WAAW,CAACC,MAAM;EAClC;EAEA,MAAME,eAAe,GAAG,UAAUC,YAAY,EAAE;IAC9C,MAAMb,WAAW,GAAG,IAAAc,6BAAe,EAACvC,UAAU,EAAEsC,YAAY,EAAEvC,QAAQ,CAAC;IACvE,IAAI,CAAC0B,WAAW,EAAE;MAChB,OAAO,EAAE;IACX;IAEA,MAAMe,KAAK,GAAG,IAAAd,0BAAY,EAACD,WAAW,EAAE,EAAE,CAAC;IAE3C,OAAOgB,mBAAU,CAACC,UAAU,CAACF,KAAK,CAACX,IAAI,EAAGC,GAAG,IAAK;MAChD,OAAOA,GAAG,CAACA,GAAG,KAAK,UAAU;IAC/B,CAAC,CAAC;EACJ,CAAC;;EAED;EACA;EACA,MAAMa,YAAY,GAAGV,aAAa,CAACrB,MAAM,GACvCqB,aAAa,CAACN,OAAO,CAAEW,YAAY,IAAK;IACtC,OAAOD,eAAe,CAACC,YAAY,CAAC;EACtC,CAAC,CAAC,GACFrC,KAAK,CAAC2C,cAAc,CAAC,UAAU,CAAC;EAElC,MAAMC,mBAAmB,GAAGF,YAAY,CAAChB,OAAO,CAAEG,GAAG,IAAK;IACxD,OAAO7B,KAAK,CAAC6C,uBAAuB,CAAChB,GAAG,CAAC;EAC3C,CAAC,CAAC;;EAEF;EACA;EACA,MAAMiB,aAAa,GAAG,0BAAA5C,WAAW,CAAC6C,WAAW,CAAC,CAAC,CAAC,oFAA1B,sBAA4BC,KAAK,2DAAjC,uBAAmCC,IAAI,MAAK,SAAS;EAE3E,MAAMC,eAAe,GAAG,IAAIC,GAAG,CAACjD,WAAW,CAACkD,SAAS,CAACvC,GAAG,CAAC,CAAC;IACzDkB;EACF,CAAC,KAAK;IACJ,OAAOA,IAAI;EACb,CAAC;;EAEC;EAAA,CACCsB,MAAM,CACLP,aAAa,GACX5C,WAAW,CAAC6C,WAAW,CAACrB,OAAO,CAAC,CAAC;IAC/B0B;EACF,CAAC,KAAK;IACJ,OAAOA,SAAS;EAClB,CAAC,CAAC,CAACvC,GAAG,CAAC,CAAC;IACNkB;EACF,CAAC,KAAK;IACJ,OAAOA,IAAI;EACb,CAAC,CAAC,GAAG,EAAE,CACV,CACAsB,MAAM,CAAChE,UAAU,CAAC,CAClBgE,MAAM,CAAClC,mBAAmB,CAAC,CAC3BkC,MAAM,CAAClD,YAAY,CAAC,CACpBkD,MAAM,CAAChD,qBAAqB,CAAC,CAC7BgD,MAAM,CACLvD,QAAQ,CAACU,IAAI,KAAK,OAAO,GACvB,EAAE,GACF,CACE,IAAGV,QAAQ,CAACU,IAAI,KAAK,YAAY,GAAGlB,iBAAiB,GAAG,EAAE,GAC1D,GAAGsD,mBAAmB,CACvB,CACJ,CAAC;EAEJ,MAAMU,yBAAyB,GAAGtD,KAAK,CAACyC,UAAU,CAAC,CAAC;IAClDZ;EACF,CAAC,KAAK;IACJ,OAAO7B,KAAK,CAACuD,wBAAwB,CAAC1B,GAAG,CAAC,KAAKA,GAAG,KAAK,UAAU,IAAI/B,QAAQ,CAACU,IAAI,KAAK,SAAS,CAAC;EACnG,CAAC,CAAC;EAEF,KAAK,MAAMqB,GAAG,IAAIyB,yBAAyB,EAAE;IAC3C,IAAIE,UAAU;IAEd,IAAI;MACFA,UAAU,GAAGhD,IAAI,KAAK,YAAY,GAAG,IAAAiD,sBAAY,EAAC5B,GAAG,CAACoB,IAAI,CAAC,GAAG,IAAAS,mBAAS,EAAC7B,GAAG,CAACoB,IAAI,EAAEzC,IAAI,CAAC;IACzF,CAAC,CAAC,MAAM;MACN;MACA;IACF;IAEA,IAAAmD,sBAAQ,EAACH,UAAU,EAAE,CAAC;MACpBP,IAAI;MACJ1B;IACF,CAAC,KAAK;MACJ,IAAI0B,IAAI,KAAK,eAAe,EAAE;QAAA;QAC5B,MAAMW,eAAe,4BAAGrD,cAAc,CAACsB,GAAG,CAACA,GAAG,CAAC,0DAAvB,sBAAyBoB,IAAI;QACrD,IAAI,CAACC,eAAe,CAACW,GAAG,CAACtC,KAAK,CAAC,KAC5B,CAACuC,KAAK,CAACC,OAAO,CAACH,eAAe,CAAC,IAAI,CAACA,eAAe,CAACI,QAAQ,CAACzC,KAAK,CAAC,CAAC,EACrE;UACA1B,MAAM,CAAE,aAAY0B,KAAM,iBAAgB,EAAE,IAAI,EAAEM,GAAG,CAAC;QACxD,CAAC,MAAM,IAAI,CAACxC,UAAU,CAAC2E,QAAQ,CAACzC,KAAK,CAAC,EAAE;UACtC5B,OAAO,CAACsE,kBAAkB,CAAC1C,KAAK,CAAC;QACnC;MACF;IACF,CAAC,CAAC;EACJ;AACF,CAAC,EAAE;EACD2C,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,kDAAkD;MAC/DC,GAAG,EAAE;IACP,CAAC;IACDC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVtE,YAAY,EAAE;UACZuE,KAAK,EAAE;YACLzB,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA;AAAA"}
|
|
1
|
+
{"version":3,"file":"noUndefinedTypes.js","names":["extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","iterateJsdoc","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","options","definedPreferredTypes","preferredTypes","structuredTags","mode","Object","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","typedefDeclarations","getAllComments","comment","test","value","commentNode","parseComment","flatMap","doc","tags","tag","isNamepathDefiningTag","name","ancestorNodes","currentNode","parent","push","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","jsdocUtils","filterTags","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","type","allDefinedTypes","Set","variables","concat","jsdocTagsWithPossibleType","tagMightHaveTypePosition","parsedType","tryParseType","parseType","traverse","structuredTypes","has","Array","isArray","includes","markVariableAsUsed","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import {\n getJSDocComment,\n\n traverse,\n parse as parseType,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc';\nimport jsdocUtils from '../jsdocUtils';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n const {\n globalScope,\n } = scopeManager;\n\n const {\n definedTypes = [],\n } = context.options[0] || {};\n\n let definedPreferredTypes = [];\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n const typedefDeclarations = context.getAllComments()\n .filter((comment) => {\n return (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n })\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdocUtils.filterTags(jsdoc.tags, (tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags('template');\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).map(({\n name,\n }) => {\n return name;\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(definedTypes)\n .concat(definedPreferredTypes)\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n const jsdocTagsWithPossibleType = utils.filterTags(({\n tag,\n }) => {\n return utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n });\n\n for (const tag of jsdocTagsWithPossibleType) {\n let parsedType;\n\n try {\n parsedType = mode === 'permissive' ? tryParseType(tag.type) : parseType(tag.type, mode);\n } catch {\n // On syntax error, will be handled by valid-types.\n continue;\n }\n\n traverse(parsedType, ({\n type,\n value,\n }) => {\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(value) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(value))\n ) {\n report(`The type '${value}' is undefined.`, null, tag);\n } else if (!extraTypes.includes(value)) {\n context.markVariableAsUsed(value);\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-undefined-types',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
|
@@ -34,21 +34,6 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
34
34
|
utils,
|
|
35
35
|
context
|
|
36
36
|
}) => {
|
|
37
|
-
const preferredTagName = utils.getPreferredTagName({
|
|
38
|
-
tagName: 'param'
|
|
39
|
-
});
|
|
40
|
-
if (!preferredTagName) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const jsdocParameterNames = utils.getJsdocTagsDeep(preferredTagName);
|
|
44
|
-
const shallowJsdocParameterNames = jsdocParameterNames.filter(tag => {
|
|
45
|
-
return !tag.name.includes('.');
|
|
46
|
-
}).map((tag, idx) => {
|
|
47
|
-
return {
|
|
48
|
-
...tag,
|
|
49
|
-
idx
|
|
50
|
-
};
|
|
51
|
-
});
|
|
52
37
|
if (utils.avoidDocs()) {
|
|
53
38
|
return;
|
|
54
39
|
}
|
|
@@ -69,9 +54,27 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
69
54
|
unnamedRootBase = ['root'],
|
|
70
55
|
useDefaultObjectProperties = false
|
|
71
56
|
} = context.options[0] || {};
|
|
57
|
+
const preferredTagName = utils.getPreferredTagName({
|
|
58
|
+
tagName: 'param'
|
|
59
|
+
});
|
|
60
|
+
if (!preferredTagName) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);
|
|
64
|
+
if (!functionParameterNames.length) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const jsdocParameterNames = utils.getJsdocTagsDeep(preferredTagName);
|
|
68
|
+
const shallowJsdocParameterNames = jsdocParameterNames.filter(tag => {
|
|
69
|
+
return !tag.name.includes('.');
|
|
70
|
+
}).map((tag, idx) => {
|
|
71
|
+
return {
|
|
72
|
+
...tag,
|
|
73
|
+
idx
|
|
74
|
+
};
|
|
75
|
+
});
|
|
72
76
|
const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);
|
|
73
77
|
const missingTags = [];
|
|
74
|
-
const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);
|
|
75
78
|
const flattenedRoots = utils.flattenRoots(functionParameterNames).names;
|
|
76
79
|
const paramIndex = {};
|
|
77
80
|
const hasParamIndex = cur => {
|
|
@@ -406,7 +409,11 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
406
409
|
type: 'object'
|
|
407
410
|
}],
|
|
408
411
|
type: 'suggestion'
|
|
409
|
-
}
|
|
412
|
+
},
|
|
413
|
+
// We cannot cache comment nodes as the contexts may recur with the
|
|
414
|
+
// same comment node but a different JS node, and we may need the different
|
|
415
|
+
// JS node to ensure we iterate its context
|
|
416
|
+
noTracking: true
|
|
410
417
|
});
|
|
411
418
|
exports.default = _default;
|
|
412
419
|
module.exports = exports.default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requireParam.js","names":["rootNamer","desiredRoots","currentIndex","name","idx","incremented","length","base","suffix","shift","iterateJsdoc","jsdoc","utils","context","preferredTagName","getPreferredTagName","tagName","jsdocParameterNames","getJsdocTagsDeep","shallowJsdocParameterNames","filter","tag","includes","map","avoidDocs","hasTag","autoIncrementBase","checkRestProperty","checkDestructured","checkDestructuredRoots","checkTypesPattern","enableFixer","enableRootFixer","enableRestElementFixer","unnamedRootBase","useDefaultObjectProperties","options","checkTypesRegex","getRegexFromString","missingTags","functionParameterNames","getFunctionParameterNames","flattenedRoots","flattenRoots","names","paramIndex","hasParamIndex","cur","dropPathSegmentQuotes","String","getParamIndex","setParamIndex","entries","findExpectedIndex","jsdocTags","indexAtFunctionParams","remainingRoots","slice","foundIndex","findIndex","newAdd","some","remainingRoot","Array","isArray","tags","tagLineCount","source","tokens","end","nextRootName","namer","functionParameterIdx","functionParameterName","inc","matchedJsdoc","rootName","type","search","hasRestElement","hasPropertyRest","rests","notCheckingNames","paramName","find","fpn","emptyParamIdx","push","remove","fullParamName","notCheckingName","paramType","comparePaths","undefined","startsWith","funcParamName","restElement","fix","createTokens","tagIndex","sourceIndex","spliceCount","number","delimiter","description","lineEnd","postDelimiter","postName","postTag","postType","start","splice","firstNumber","src","offset","expectedIdx","fixer","missingTag","makeMultiline","reportJSDoc","contextDefaults","meta","docs","url","fixable","schema","additionalProperties","properties","default","checkConstructors","checkGetters","checkSetters","contexts","items","anyOf","comment","exemptedBy"],"sources":["../../src/rules/requireParam.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * @template T\n * @param {string[]} desiredRoots\n * @param {number} currentIndex\n * @returns {[string, boolean, () => T]}\n */\nconst rootNamer = (desiredRoots, currentIndex) => {\n let name;\n let idx = currentIndex;\n const incremented = desiredRoots.length <= 1;\n if (incremented) {\n const base = desiredRoots[0];\n const suffix = idx++;\n name = `${base}${suffix}`;\n } else {\n name = desiredRoots.shift();\n }\n\n return [\n name, incremented, () => {\n return rootNamer(desiredRoots, idx);\n },\n ];\n};\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n jsdoc,\n utils,\n context,\n}) => {\n const preferredTagName = utils.getPreferredTagName({\n tagName: 'param',\n });\n if (!preferredTagName) {\n return;\n }\n\n const jsdocParameterNames = utils.getJsdocTagsDeep(preferredTagName);\n\n const shallowJsdocParameterNames = jsdocParameterNames.filter((tag) => {\n return !tag.name.includes('.');\n }).map((tag, idx) => {\n return {\n ...tag,\n idx,\n };\n });\n\n if (utils.avoidDocs()) {\n return;\n }\n\n // Param type is specified by type in @type\n if (utils.hasTag('type')) {\n return;\n }\n\n const {\n autoIncrementBase = 0,\n checkRestProperty = false,\n checkDestructured = true,\n checkDestructuredRoots = true,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = true,\n enableRootFixer = true,\n enableRestElementFixer = true,\n unnamedRootBase = [\n 'root',\n ],\n useDefaultObjectProperties = false,\n } = context.options[0] || {};\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const missingTags = [];\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n const flattenedRoots = utils.flattenRoots(functionParameterNames).names;\n\n const paramIndex = {};\n const hasParamIndex = (cur) => {\n return utils.dropPathSegmentQuotes(String(cur)) in paramIndex;\n };\n\n const getParamIndex = (cur) => {\n return paramIndex[utils.dropPathSegmentQuotes(String(cur))];\n };\n\n const setParamIndex = (cur, idx) => {\n paramIndex[utils.dropPathSegmentQuotes(String(cur))] = idx;\n };\n\n for (const [\n idx,\n cur,\n ] of flattenedRoots.entries()) {\n setParamIndex(cur, idx);\n }\n\n const findExpectedIndex = (jsdocTags, indexAtFunctionParams) => {\n const remainingRoots = functionParameterNames.slice(indexAtFunctionParams || 0);\n const foundIndex = jsdocTags.findIndex(({\n name,\n newAdd,\n }) => {\n return !newAdd && remainingRoots.some((remainingRoot) => {\n if (Array.isArray(remainingRoot)) {\n return remainingRoot[1].names.includes(name);\n }\n\n if (typeof remainingRoot === 'object') {\n return name === remainingRoot.name;\n }\n\n return name === remainingRoot;\n });\n });\n\n const tags = foundIndex > -1 ?\n jsdocTags.slice(0, foundIndex) :\n jsdocTags.filter(({\n tag,\n }) => {\n return tag === preferredTagName;\n });\n\n let tagLineCount = 0;\n for (const {\n source,\n } of tags) {\n for (const {\n tokens: {\n end,\n },\n } of source) {\n if (!end) {\n tagLineCount++;\n }\n }\n }\n\n return tagLineCount;\n };\n\n let [\n nextRootName,\n incremented,\n namer,\n ] = rootNamer([\n ...unnamedRootBase,\n ], autoIncrementBase);\n\n for (const [\n functionParameterIdx,\n functionParameterName,\n ] of functionParameterNames.entries()) {\n let inc;\n if (Array.isArray(functionParameterName)) {\n const matchedJsdoc = shallowJsdocParameterNames[functionParameterIdx] ||\n jsdocParameterNames[functionParameterIdx];\n\n let rootName;\n if (functionParameterName[0]) {\n rootName = functionParameterName[0];\n } else if (matchedJsdoc && matchedJsdoc.name) {\n rootName = matchedJsdoc.name;\n if (matchedJsdoc.type && matchedJsdoc.type.search(checkTypesRegex) === -1) {\n continue;\n }\n } else {\n rootName = nextRootName;\n inc = incremented;\n [\n nextRootName,\n incremented,\n namer,\n ] = namer();\n }\n\n const {\n hasRestElement,\n hasPropertyRest,\n rests,\n names,\n } = functionParameterName[1];\n const notCheckingNames = [];\n if (!enableRestElementFixer && hasRestElement) {\n continue;\n }\n\n if (!checkDestructuredRoots) {\n continue;\n }\n\n for (const [\n idx,\n paramName,\n ] of names.entries()) {\n // Add root if the root name is not in the docs (and is not already\n // in the tags to be fixed)\n if (!jsdocParameterNames.find(({\n name,\n }) => {\n return name === rootName;\n }) && !missingTags.find(({\n functionParameterName: fpn,\n }) => {\n return fpn === rootName;\n })) {\n const emptyParamIdx = jsdocParameterNames.findIndex(({\n name,\n }) => {\n return !name;\n });\n\n if (emptyParamIdx > -1) {\n missingTags.push({\n functionParameterIdx: emptyParamIdx,\n functionParameterName: rootName,\n inc,\n remove: true,\n });\n } else {\n missingTags.push({\n functionParameterIdx: hasParamIndex(rootName) ?\n getParamIndex(rootName) :\n getParamIndex(paramName),\n functionParameterName: rootName,\n inc,\n });\n }\n }\n\n if (!checkDestructured) {\n continue;\n }\n\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const fullParamName = `${rootName}.${paramName}`;\n\n const notCheckingName = jsdocParameterNames.find(({\n name,\n type: paramType,\n }) => {\n return utils.comparePaths(name)(fullParamName) && paramType.search(checkTypesRegex) === -1 && paramType !== '';\n });\n\n if (notCheckingName !== undefined) {\n notCheckingNames.push(notCheckingName.name);\n }\n\n if (notCheckingNames.find((name) => {\n return fullParamName.startsWith(name);\n })) {\n continue;\n }\n\n if (jsdocParameterNames && !jsdocParameterNames.find(({\n name,\n }) => {\n return utils.comparePaths(name)(fullParamName);\n })) {\n missingTags.push({\n functionParameterIdx: getParamIndex(\n functionParameterName[0] ? fullParamName : paramName,\n ),\n functionParameterName: fullParamName,\n inc,\n type: hasRestElement && !hasPropertyRest ? '{...any}' : undefined,\n });\n }\n }\n\n continue;\n }\n\n let funcParamName;\n let type;\n if (typeof functionParameterName === 'object') {\n if (!enableRestElementFixer && functionParameterName.restElement) {\n continue;\n }\n\n funcParamName = functionParameterName.name;\n type = '{...any}';\n } else {\n funcParamName = functionParameterName;\n }\n\n if (jsdocParameterNames && !jsdocParameterNames.find(({\n name,\n }) => {\n return name === funcParamName;\n }) && funcParamName !== 'this') {\n missingTags.push({\n functionParameterIdx: getParamIndex(funcParamName),\n functionParameterName: funcParamName,\n inc,\n type,\n });\n }\n }\n\n const fix = ({\n functionParameterIdx,\n functionParameterName,\n remove,\n inc,\n type,\n }) => {\n if (inc && !enableRootFixer) {\n return;\n }\n\n const createTokens = (tagIndex, sourceIndex, spliceCount) => {\n // console.log(sourceIndex, tagIndex, jsdoc.tags, jsdoc.source);\n const tokens = {\n number: sourceIndex + 1,\n tokens: {\n delimiter: '*',\n description: '',\n end: '',\n lineEnd: '',\n name: functionParameterName,\n newAdd: true,\n postDelimiter: ' ',\n postName: '',\n postTag: ' ',\n postType: type ? ' ' : '',\n start: jsdoc.source[sourceIndex].tokens.start,\n tag: `@${preferredTagName}`,\n type: type ?? '',\n },\n };\n jsdoc.tags.splice(tagIndex, spliceCount, {\n name: functionParameterName,\n newAdd: true,\n source: [\n tokens,\n ],\n tag: preferredTagName,\n type: type ?? '',\n });\n const firstNumber = jsdoc.source[0].number;\n jsdoc.source.splice(sourceIndex, spliceCount, tokens);\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(sourceIndex).entries()) {\n src.number = firstNumber + sourceIndex + idx;\n }\n };\n\n const offset = jsdoc.source.findIndex(({\n tokens: {\n tag,\n end,\n },\n }) => {\n return tag || end;\n });\n if (remove) {\n createTokens(functionParameterIdx, offset + functionParameterIdx, 1);\n } else {\n const expectedIdx = findExpectedIndex(jsdoc.tags, functionParameterIdx);\n createTokens(expectedIdx, offset + expectedIdx, 0);\n }\n };\n\n const fixer = () => {\n for (const missingTag of missingTags) {\n fix(missingTag);\n }\n };\n\n if (missingTags.length && jsdoc.source.length === 1) {\n utils.makeMultiline();\n }\n\n for (const {\n functionParameterName,\n } of missingTags) {\n utils.reportJSDoc(\n `Missing JSDoc @${preferredTagName} \"${functionParameterName}\" declaration.`,\n null,\n enableFixer ? fixer : null,\n );\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all function parameters are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n autoIncrementBase: {\n default: 0,\n type: 'integer',\n },\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkDestructured: {\n default: true,\n type: 'boolean',\n },\n checkDestructuredRoots: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n default: false,\n type: 'boolean',\n },\n checkRestProperty: {\n default: false,\n type: 'boolean',\n },\n checkSetters: {\n default: false,\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n type: 'boolean',\n },\n enableRestElementFixer: {\n type: 'boolean',\n },\n enableRootFixer: {\n type: 'boolean',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n unnamedRootBase: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"requireParam.js","names":["rootNamer","desiredRoots","currentIndex","name","idx","incremented","length","base","suffix","shift","iterateJsdoc","jsdoc","utils","context","avoidDocs","hasTag","autoIncrementBase","checkRestProperty","checkDestructured","checkDestructuredRoots","checkTypesPattern","enableFixer","enableRootFixer","enableRestElementFixer","unnamedRootBase","useDefaultObjectProperties","options","preferredTagName","getPreferredTagName","tagName","functionParameterNames","getFunctionParameterNames","jsdocParameterNames","getJsdocTagsDeep","shallowJsdocParameterNames","filter","tag","includes","map","checkTypesRegex","getRegexFromString","missingTags","flattenedRoots","flattenRoots","names","paramIndex","hasParamIndex","cur","dropPathSegmentQuotes","String","getParamIndex","setParamIndex","entries","findExpectedIndex","jsdocTags","indexAtFunctionParams","remainingRoots","slice","foundIndex","findIndex","newAdd","some","remainingRoot","Array","isArray","tags","tagLineCount","source","tokens","end","nextRootName","namer","functionParameterIdx","functionParameterName","inc","matchedJsdoc","rootName","type","search","hasRestElement","hasPropertyRest","rests","notCheckingNames","paramName","find","fpn","emptyParamIdx","push","remove","fullParamName","notCheckingName","paramType","comparePaths","undefined","startsWith","funcParamName","restElement","fix","createTokens","tagIndex","sourceIndex","spliceCount","number","delimiter","description","lineEnd","postDelimiter","postName","postTag","postType","start","splice","firstNumber","src","offset","expectedIdx","fixer","missingTag","makeMultiline","reportJSDoc","contextDefaults","meta","docs","url","fixable","schema","additionalProperties","properties","default","checkConstructors","checkGetters","checkSetters","contexts","items","anyOf","comment","exemptedBy","noTracking"],"sources":["../../src/rules/requireParam.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * @template T\n * @param {string[]} desiredRoots\n * @param {number} currentIndex\n * @returns {[string, boolean, () => T]}\n */\nconst rootNamer = (desiredRoots, currentIndex) => {\n let name;\n let idx = currentIndex;\n const incremented = desiredRoots.length <= 1;\n if (incremented) {\n const base = desiredRoots[0];\n const suffix = idx++;\n name = `${base}${suffix}`;\n } else {\n name = desiredRoots.shift();\n }\n\n return [\n name, incremented, () => {\n return rootNamer(desiredRoots, idx);\n },\n ];\n};\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n jsdoc,\n utils,\n context,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n\n // Param type is specified by type in @type\n if (utils.hasTag('type')) {\n return;\n }\n\n const {\n autoIncrementBase = 0,\n checkRestProperty = false,\n checkDestructured = true,\n checkDestructuredRoots = true,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = true,\n enableRootFixer = true,\n enableRestElementFixer = true,\n unnamedRootBase = [\n 'root',\n ],\n useDefaultObjectProperties = false,\n } = context.options[0] || {};\n\n const preferredTagName = utils.getPreferredTagName({\n tagName: 'param',\n });\n if (!preferredTagName) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n if (!functionParameterNames.length) {\n return;\n }\n\n const jsdocParameterNames = utils.getJsdocTagsDeep(preferredTagName);\n\n const shallowJsdocParameterNames = jsdocParameterNames.filter((tag) => {\n return !tag.name.includes('.');\n }).map((tag, idx) => {\n return {\n ...tag,\n idx,\n };\n });\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const missingTags = [];\n const flattenedRoots = utils.flattenRoots(functionParameterNames).names;\n\n const paramIndex = {};\n const hasParamIndex = (cur) => {\n return utils.dropPathSegmentQuotes(String(cur)) in paramIndex;\n };\n\n const getParamIndex = (cur) => {\n return paramIndex[utils.dropPathSegmentQuotes(String(cur))];\n };\n\n const setParamIndex = (cur, idx) => {\n paramIndex[utils.dropPathSegmentQuotes(String(cur))] = idx;\n };\n\n for (const [\n idx,\n cur,\n ] of flattenedRoots.entries()) {\n setParamIndex(cur, idx);\n }\n\n const findExpectedIndex = (jsdocTags, indexAtFunctionParams) => {\n const remainingRoots = functionParameterNames.slice(indexAtFunctionParams || 0);\n const foundIndex = jsdocTags.findIndex(({\n name,\n newAdd,\n }) => {\n return !newAdd && remainingRoots.some((remainingRoot) => {\n if (Array.isArray(remainingRoot)) {\n return remainingRoot[1].names.includes(name);\n }\n\n if (typeof remainingRoot === 'object') {\n return name === remainingRoot.name;\n }\n\n return name === remainingRoot;\n });\n });\n\n const tags = foundIndex > -1 ?\n jsdocTags.slice(0, foundIndex) :\n jsdocTags.filter(({\n tag,\n }) => {\n return tag === preferredTagName;\n });\n\n let tagLineCount = 0;\n for (const {\n source,\n } of tags) {\n for (const {\n tokens: {\n end,\n },\n } of source) {\n if (!end) {\n tagLineCount++;\n }\n }\n }\n\n return tagLineCount;\n };\n\n let [\n nextRootName,\n incremented,\n namer,\n ] = rootNamer([\n ...unnamedRootBase,\n ], autoIncrementBase);\n\n for (const [\n functionParameterIdx,\n functionParameterName,\n ] of functionParameterNames.entries()) {\n let inc;\n if (Array.isArray(functionParameterName)) {\n const matchedJsdoc = shallowJsdocParameterNames[functionParameterIdx] ||\n jsdocParameterNames[functionParameterIdx];\n\n let rootName;\n if (functionParameterName[0]) {\n rootName = functionParameterName[0];\n } else if (matchedJsdoc && matchedJsdoc.name) {\n rootName = matchedJsdoc.name;\n if (matchedJsdoc.type && matchedJsdoc.type.search(checkTypesRegex) === -1) {\n continue;\n }\n } else {\n rootName = nextRootName;\n inc = incremented;\n [\n nextRootName,\n incremented,\n namer,\n ] = namer();\n }\n\n const {\n hasRestElement,\n hasPropertyRest,\n rests,\n names,\n } = functionParameterName[1];\n const notCheckingNames = [];\n if (!enableRestElementFixer && hasRestElement) {\n continue;\n }\n\n if (!checkDestructuredRoots) {\n continue;\n }\n\n for (const [\n idx,\n paramName,\n ] of names.entries()) {\n // Add root if the root name is not in the docs (and is not already\n // in the tags to be fixed)\n if (!jsdocParameterNames.find(({\n name,\n }) => {\n return name === rootName;\n }) && !missingTags.find(({\n functionParameterName: fpn,\n }) => {\n return fpn === rootName;\n })) {\n const emptyParamIdx = jsdocParameterNames.findIndex(({\n name,\n }) => {\n return !name;\n });\n\n if (emptyParamIdx > -1) {\n missingTags.push({\n functionParameterIdx: emptyParamIdx,\n functionParameterName: rootName,\n inc,\n remove: true,\n });\n } else {\n missingTags.push({\n functionParameterIdx: hasParamIndex(rootName) ?\n getParamIndex(rootName) :\n getParamIndex(paramName),\n functionParameterName: rootName,\n inc,\n });\n }\n }\n\n if (!checkDestructured) {\n continue;\n }\n\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const fullParamName = `${rootName}.${paramName}`;\n\n const notCheckingName = jsdocParameterNames.find(({\n name,\n type: paramType,\n }) => {\n return utils.comparePaths(name)(fullParamName) && paramType.search(checkTypesRegex) === -1 && paramType !== '';\n });\n\n if (notCheckingName !== undefined) {\n notCheckingNames.push(notCheckingName.name);\n }\n\n if (notCheckingNames.find((name) => {\n return fullParamName.startsWith(name);\n })) {\n continue;\n }\n\n if (jsdocParameterNames && !jsdocParameterNames.find(({\n name,\n }) => {\n return utils.comparePaths(name)(fullParamName);\n })) {\n missingTags.push({\n functionParameterIdx: getParamIndex(\n functionParameterName[0] ? fullParamName : paramName,\n ),\n functionParameterName: fullParamName,\n inc,\n type: hasRestElement && !hasPropertyRest ? '{...any}' : undefined,\n });\n }\n }\n\n continue;\n }\n\n let funcParamName;\n let type;\n if (typeof functionParameterName === 'object') {\n if (!enableRestElementFixer && functionParameterName.restElement) {\n continue;\n }\n\n funcParamName = functionParameterName.name;\n type = '{...any}';\n } else {\n funcParamName = functionParameterName;\n }\n\n if (jsdocParameterNames && !jsdocParameterNames.find(({\n name,\n }) => {\n return name === funcParamName;\n }) && funcParamName !== 'this') {\n missingTags.push({\n functionParameterIdx: getParamIndex(funcParamName),\n functionParameterName: funcParamName,\n inc,\n type,\n });\n }\n }\n\n const fix = ({\n functionParameterIdx,\n functionParameterName,\n remove,\n inc,\n type,\n }) => {\n if (inc && !enableRootFixer) {\n return;\n }\n\n const createTokens = (tagIndex, sourceIndex, spliceCount) => {\n // console.log(sourceIndex, tagIndex, jsdoc.tags, jsdoc.source);\n const tokens = {\n number: sourceIndex + 1,\n tokens: {\n delimiter: '*',\n description: '',\n end: '',\n lineEnd: '',\n name: functionParameterName,\n newAdd: true,\n postDelimiter: ' ',\n postName: '',\n postTag: ' ',\n postType: type ? ' ' : '',\n start: jsdoc.source[sourceIndex].tokens.start,\n tag: `@${preferredTagName}`,\n type: type ?? '',\n },\n };\n jsdoc.tags.splice(tagIndex, spliceCount, {\n name: functionParameterName,\n newAdd: true,\n source: [\n tokens,\n ],\n tag: preferredTagName,\n type: type ?? '',\n });\n const firstNumber = jsdoc.source[0].number;\n jsdoc.source.splice(sourceIndex, spliceCount, tokens);\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(sourceIndex).entries()) {\n src.number = firstNumber + sourceIndex + idx;\n }\n };\n\n const offset = jsdoc.source.findIndex(({\n tokens: {\n tag,\n end,\n },\n }) => {\n return tag || end;\n });\n if (remove) {\n createTokens(functionParameterIdx, offset + functionParameterIdx, 1);\n } else {\n const expectedIdx = findExpectedIndex(jsdoc.tags, functionParameterIdx);\n createTokens(expectedIdx, offset + expectedIdx, 0);\n }\n };\n\n const fixer = () => {\n for (const missingTag of missingTags) {\n fix(missingTag);\n }\n };\n\n if (missingTags.length && jsdoc.source.length === 1) {\n utils.makeMultiline();\n }\n\n for (const {\n functionParameterName,\n } of missingTags) {\n utils.reportJSDoc(\n `Missing JSDoc @${preferredTagName} \"${functionParameterName}\" declaration.`,\n null,\n enableFixer ? fixer : null,\n );\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all function parameters are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n autoIncrementBase: {\n default: 0,\n type: 'integer',\n },\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkDestructured: {\n default: true,\n type: 'boolean',\n },\n checkDestructuredRoots: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n default: false,\n type: 'boolean',\n },\n checkRestProperty: {\n default: false,\n type: 'boolean',\n },\n checkSetters: {\n default: false,\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n type: 'boolean',\n },\n enableRestElementFixer: {\n type: 'boolean',\n },\n enableRootFixer: {\n type: 'boolean',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n unnamedRootBase: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n\n // We cannot cache comment nodes as the contexts may recur with the\n // same comment node but a different JS node, and we may need the different\n // JS node to ensure we iterate its context\n noTracking: true,\n});\n"],"mappings":";;;;;;AAAA;AAA2C;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,SAAS,GAAG,CAACC,YAAY,EAAEC,YAAY,KAAK;EAChD,IAAIC,IAAI;EACR,IAAIC,GAAG,GAAGF,YAAY;EACtB,MAAMG,WAAW,GAAGJ,YAAY,CAACK,MAAM,IAAI,CAAC;EAC5C,IAAID,WAAW,EAAE;IACf,MAAME,IAAI,GAAGN,YAAY,CAAC,CAAC,CAAC;IAC5B,MAAMO,MAAM,GAAGJ,GAAG,EAAE;IACpBD,IAAI,GAAI,GAAEI,IAAK,GAAEC,MAAO,EAAC;EAC3B,CAAC,MAAM;IACLL,IAAI,GAAGF,YAAY,CAACQ,KAAK,EAAE;EAC7B;EAEA,OAAO,CACLN,IAAI,EAAEE,WAAW,EAAE,MAAM;IACvB,OAAOL,SAAS,CAACC,YAAY,EAAEG,GAAG,CAAC;EACrC,CAAC,CACF;AACH,CAAC;;AAED;AAAA,eACe,IAAAM,qBAAY,EAAC,CAAC;EAC3BC,KAAK;EACLC,KAAK;EACLC;AACF,CAAC,KAAK;EACJ,IAAID,KAAK,CAACE,SAAS,EAAE,EAAE;IACrB;EACF;;EAEA;EACA,IAAIF,KAAK,CAACG,MAAM,CAAC,MAAM,CAAC,EAAE;IACxB;EACF;EAEA,MAAM;IACJC,iBAAiB,GAAG,CAAC;IACrBC,iBAAiB,GAAG,KAAK;IACzBC,iBAAiB,GAAG,IAAI;IACxBC,sBAAsB,GAAG,IAAI;IAC7BC,iBAAiB,GAAG,gEAAgE;IACpFC,WAAW,GAAG,IAAI;IAClBC,eAAe,GAAG,IAAI;IACtBC,sBAAsB,GAAG,IAAI;IAC7BC,eAAe,GAAG,CAChB,MAAM,CACP;IACDC,0BAA0B,GAAG;EAC/B,CAAC,GAAGZ,OAAO,CAACa,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,MAAMC,gBAAgB,GAAGf,KAAK,CAACgB,mBAAmB,CAAC;IACjDC,OAAO,EAAE;EACX,CAAC,CAAC;EACF,IAAI,CAACF,gBAAgB,EAAE;IACrB;EACF;EAEA,MAAMG,sBAAsB,GAAGlB,KAAK,CAACmB,yBAAyB,CAACN,0BAA0B,CAAC;EAC1F,IAAI,CAACK,sBAAsB,CAACxB,MAAM,EAAE;IAClC;EACF;EAEA,MAAM0B,mBAAmB,GAAGpB,KAAK,CAACqB,gBAAgB,CAACN,gBAAgB,CAAC;EAEpE,MAAMO,0BAA0B,GAAGF,mBAAmB,CAACG,MAAM,CAAEC,GAAG,IAAK;IACrE,OAAO,CAACA,GAAG,CAACjC,IAAI,CAACkC,QAAQ,CAAC,GAAG,CAAC;EAChC,CAAC,CAAC,CAACC,GAAG,CAAC,CAACF,GAAG,EAAEhC,GAAG,KAAK;IACnB,OAAO;MACL,GAAGgC,GAAG;MACNhC;IACF,CAAC;EACH,CAAC,CAAC;EAEF,MAAMmC,eAAe,GAAG3B,KAAK,CAAC4B,kBAAkB,CAACpB,iBAAiB,CAAC;EAEnE,MAAMqB,WAAW,GAAG,EAAE;EACtB,MAAMC,cAAc,GAAG9B,KAAK,CAAC+B,YAAY,CAACb,sBAAsB,CAAC,CAACc,KAAK;EAEvE,MAAMC,UAAU,GAAG,CAAC,CAAC;EACrB,MAAMC,aAAa,GAAIC,GAAG,IAAK;IAC7B,OAAOnC,KAAK,CAACoC,qBAAqB,CAACC,MAAM,CAACF,GAAG,CAAC,CAAC,IAAIF,UAAU;EAC/D,CAAC;EAED,MAAMK,aAAa,GAAIH,GAAG,IAAK;IAC7B,OAAOF,UAAU,CAACjC,KAAK,CAACoC,qBAAqB,CAACC,MAAM,CAACF,GAAG,CAAC,CAAC,CAAC;EAC7D,CAAC;EAED,MAAMI,aAAa,GAAG,CAACJ,GAAG,EAAE3C,GAAG,KAAK;IAClCyC,UAAU,CAACjC,KAAK,CAACoC,qBAAqB,CAACC,MAAM,CAACF,GAAG,CAAC,CAAC,CAAC,GAAG3C,GAAG;EAC5D,CAAC;EAED,KAAK,MAAM,CACTA,GAAG,EACH2C,GAAG,CACJ,IAAIL,cAAc,CAACU,OAAO,EAAE,EAAE;IAC7BD,aAAa,CAACJ,GAAG,EAAE3C,GAAG,CAAC;EACzB;EAEA,MAAMiD,iBAAiB,GAAG,CAACC,SAAS,EAAEC,qBAAqB,KAAK;IAC9D,MAAMC,cAAc,GAAG1B,sBAAsB,CAAC2B,KAAK,CAACF,qBAAqB,IAAI,CAAC,CAAC;IAC/E,MAAMG,UAAU,GAAGJ,SAAS,CAACK,SAAS,CAAC,CAAC;MACtCxD,IAAI;MACJyD;IACF,CAAC,KAAK;MACJ,OAAO,CAACA,MAAM,IAAIJ,cAAc,CAACK,IAAI,CAAEC,aAAa,IAAK;QACvD,IAAIC,KAAK,CAACC,OAAO,CAACF,aAAa,CAAC,EAAE;UAChC,OAAOA,aAAa,CAAC,CAAC,CAAC,CAAClB,KAAK,CAACP,QAAQ,CAAClC,IAAI,CAAC;QAC9C;QAEA,IAAI,OAAO2D,aAAa,KAAK,QAAQ,EAAE;UACrC,OAAO3D,IAAI,KAAK2D,aAAa,CAAC3D,IAAI;QACpC;QAEA,OAAOA,IAAI,KAAK2D,aAAa;MAC/B,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAMG,IAAI,GAAGP,UAAU,GAAG,CAAC,CAAC,GAC1BJ,SAAS,CAACG,KAAK,CAAC,CAAC,EAAEC,UAAU,CAAC,GAC9BJ,SAAS,CAACnB,MAAM,CAAC,CAAC;MAChBC;IACF,CAAC,KAAK;MACJ,OAAOA,GAAG,KAAKT,gBAAgB;IACjC,CAAC,CAAC;IAEJ,IAAIuC,YAAY,GAAG,CAAC;IACpB,KAAK,MAAM;MACTC;IACF,CAAC,IAAIF,IAAI,EAAE;MACT,KAAK,MAAM;QACTG,MAAM,EAAE;UACNC;QACF;MACF,CAAC,IAAIF,MAAM,EAAE;QACX,IAAI,CAACE,GAAG,EAAE;UACRH,YAAY,EAAE;QAChB;MACF;IACF;IAEA,OAAOA,YAAY;EACrB,CAAC;EAED,IAAI,CACFI,YAAY,EACZjE,WAAW,EACXkE,KAAK,CACN,GAAGvE,SAAS,CAAC,CACZ,GAAGwB,eAAe,CACnB,EAAER,iBAAiB,CAAC;EAErB,KAAK,MAAM,CACTwD,oBAAoB,EACpBC,qBAAqB,CACtB,IAAI3C,sBAAsB,CAACsB,OAAO,EAAE,EAAE;IACrC,IAAIsB,GAAG;IACP,IAAIX,KAAK,CAACC,OAAO,CAACS,qBAAqB,CAAC,EAAE;MACxC,MAAME,YAAY,GAAGzC,0BAA0B,CAACsC,oBAAoB,CAAC,IACnExC,mBAAmB,CAACwC,oBAAoB,CAAC;MAE3C,IAAII,QAAQ;MACZ,IAAIH,qBAAqB,CAAC,CAAC,CAAC,EAAE;QAC5BG,QAAQ,GAAGH,qBAAqB,CAAC,CAAC,CAAC;MACrC,CAAC,MAAM,IAAIE,YAAY,IAAIA,YAAY,CAACxE,IAAI,EAAE;QAC5CyE,QAAQ,GAAGD,YAAY,CAACxE,IAAI;QAC5B,IAAIwE,YAAY,CAACE,IAAI,IAAIF,YAAY,CAACE,IAAI,CAACC,MAAM,CAACvC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE;UACzE;QACF;MACF,CAAC,MAAM;QACLqC,QAAQ,GAAGN,YAAY;QACvBI,GAAG,GAAGrE,WAAW;QACjB,CACEiE,YAAY,EACZjE,WAAW,EACXkE,KAAK,CACN,GAAGA,KAAK,EAAE;MACb;MAEA,MAAM;QACJQ,cAAc;QACdC,eAAe;QACfC,KAAK;QACLrC;MACF,CAAC,GAAG6B,qBAAqB,CAAC,CAAC,CAAC;MAC5B,MAAMS,gBAAgB,GAAG,EAAE;MAC3B,IAAI,CAAC3D,sBAAsB,IAAIwD,cAAc,EAAE;QAC7C;MACF;MAEA,IAAI,CAAC5D,sBAAsB,EAAE;QAC3B;MACF;MAEA,KAAK,MAAM,CACTf,GAAG,EACH+E,SAAS,CACV,IAAIvC,KAAK,CAACQ,OAAO,EAAE,EAAE;QACpB;QACA;QACA,IAAI,CAACpB,mBAAmB,CAACoD,IAAI,CAAC,CAAC;UAC7BjF;QACF,CAAC,KAAK;UACJ,OAAOA,IAAI,KAAKyE,QAAQ;QAC1B,CAAC,CAAC,IAAI,CAACnC,WAAW,CAAC2C,IAAI,CAAC,CAAC;UACvBX,qBAAqB,EAAEY;QACzB,CAAC,KAAK;UACJ,OAAOA,GAAG,KAAKT,QAAQ;QACzB,CAAC,CAAC,EAAE;UACF,MAAMU,aAAa,GAAGtD,mBAAmB,CAAC2B,SAAS,CAAC,CAAC;YACnDxD;UACF,CAAC,KAAK;YACJ,OAAO,CAACA,IAAI;UACd,CAAC,CAAC;UAEF,IAAImF,aAAa,GAAG,CAAC,CAAC,EAAE;YACtB7C,WAAW,CAAC8C,IAAI,CAAC;cACff,oBAAoB,EAAEc,aAAa;cACnCb,qBAAqB,EAAEG,QAAQ;cAC/BF,GAAG;cACHc,MAAM,EAAE;YACV,CAAC,CAAC;UACJ,CAAC,MAAM;YACL/C,WAAW,CAAC8C,IAAI,CAAC;cACff,oBAAoB,EAAE1B,aAAa,CAAC8B,QAAQ,CAAC,GAC3C1B,aAAa,CAAC0B,QAAQ,CAAC,GACvB1B,aAAa,CAACiC,SAAS,CAAC;cAC1BV,qBAAqB,EAAEG,QAAQ;cAC/BF;YACF,CAAC,CAAC;UACJ;QACF;QAEA,IAAI,CAACxD,iBAAiB,EAAE;UACtB;QACF;QAEA,IAAI,CAACD,iBAAiB,IAAIgE,KAAK,CAAC7E,GAAG,CAAC,EAAE;UACpC;QACF;QAEA,MAAMqF,aAAa,GAAI,GAAEb,QAAS,IAAGO,SAAU,EAAC;QAEhD,MAAMO,eAAe,GAAG1D,mBAAmB,CAACoD,IAAI,CAAC,CAAC;UAChDjF,IAAI;UACJ0E,IAAI,EAAEc;QACR,CAAC,KAAK;UACJ,OAAO/E,KAAK,CAACgF,YAAY,CAACzF,IAAI,CAAC,CAACsF,aAAa,CAAC,IAAIE,SAAS,CAACb,MAAM,CAACvC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAIoD,SAAS,KAAK,EAAE;QAChH,CAAC,CAAC;QAEF,IAAID,eAAe,KAAKG,SAAS,EAAE;UACjCX,gBAAgB,CAACK,IAAI,CAACG,eAAe,CAACvF,IAAI,CAAC;QAC7C;QAEA,IAAI+E,gBAAgB,CAACE,IAAI,CAAEjF,IAAI,IAAK;UAClC,OAAOsF,aAAa,CAACK,UAAU,CAAC3F,IAAI,CAAC;QACvC,CAAC,CAAC,EAAE;UACF;QACF;QAEA,IAAI6B,mBAAmB,IAAI,CAACA,mBAAmB,CAACoD,IAAI,CAAC,CAAC;UACpDjF;QACF,CAAC,KAAK;UACJ,OAAOS,KAAK,CAACgF,YAAY,CAACzF,IAAI,CAAC,CAACsF,aAAa,CAAC;QAChD,CAAC,CAAC,EAAE;UACFhD,WAAW,CAAC8C,IAAI,CAAC;YACff,oBAAoB,EAAEtB,aAAa,CACjCuB,qBAAqB,CAAC,CAAC,CAAC,GAAGgB,aAAa,GAAGN,SAAS,CACrD;YACDV,qBAAqB,EAAEgB,aAAa;YACpCf,GAAG;YACHG,IAAI,EAAEE,cAAc,IAAI,CAACC,eAAe,GAAG,UAAU,GAAGa;UAC1D,CAAC,CAAC;QACJ;MACF;MAEA;IACF;IAEA,IAAIE,aAAa;IACjB,IAAIlB,IAAI;IACR,IAAI,OAAOJ,qBAAqB,KAAK,QAAQ,EAAE;MAC7C,IAAI,CAAClD,sBAAsB,IAAIkD,qBAAqB,CAACuB,WAAW,EAAE;QAChE;MACF;MAEAD,aAAa,GAAGtB,qBAAqB,CAACtE,IAAI;MAC1C0E,IAAI,GAAG,UAAU;IACnB,CAAC,MAAM;MACLkB,aAAa,GAAGtB,qBAAqB;IACvC;IAEA,IAAIzC,mBAAmB,IAAI,CAACA,mBAAmB,CAACoD,IAAI,CAAC,CAAC;MACpDjF;IACF,CAAC,KAAK;MACJ,OAAOA,IAAI,KAAK4F,aAAa;IAC/B,CAAC,CAAC,IAAIA,aAAa,KAAK,MAAM,EAAE;MAC9BtD,WAAW,CAAC8C,IAAI,CAAC;QACff,oBAAoB,EAAEtB,aAAa,CAAC6C,aAAa,CAAC;QAClDtB,qBAAqB,EAAEsB,aAAa;QACpCrB,GAAG;QACHG;MACF,CAAC,CAAC;IACJ;EACF;EAEA,MAAMoB,GAAG,GAAG,CAAC;IACXzB,oBAAoB;IACpBC,qBAAqB;IACrBe,MAAM;IACNd,GAAG;IACHG;EACF,CAAC,KAAK;IACJ,IAAIH,GAAG,IAAI,CAACpD,eAAe,EAAE;MAC3B;IACF;IAEA,MAAM4E,YAAY,GAAG,CAACC,QAAQ,EAAEC,WAAW,EAAEC,WAAW,KAAK;MAC3D;MACA,MAAMjC,MAAM,GAAG;QACbkC,MAAM,EAAEF,WAAW,GAAG,CAAC;QACvBhC,MAAM,EAAE;UACNmC,SAAS,EAAE,GAAG;UACdC,WAAW,EAAE,EAAE;UACfnC,GAAG,EAAE,EAAE;UACPoC,OAAO,EAAE,EAAE;UACXtG,IAAI,EAAEsE,qBAAqB;UAC3Bb,MAAM,EAAE,IAAI;UACZ8C,aAAa,EAAE,GAAG;UAClBC,QAAQ,EAAE,EAAE;UACZC,OAAO,EAAE,GAAG;UACZC,QAAQ,EAAEhC,IAAI,GAAG,GAAG,GAAG,EAAE;UACzBiC,KAAK,EAAEnG,KAAK,CAACwD,MAAM,CAACiC,WAAW,CAAC,CAAChC,MAAM,CAAC0C,KAAK;UAC7C1E,GAAG,EAAG,IAAGT,gBAAiB,EAAC;UAC3BkD,IAAI,EAAEA,IAAI,IAAI;QAChB;MACF,CAAC;MACDlE,KAAK,CAACsD,IAAI,CAAC8C,MAAM,CAACZ,QAAQ,EAAEE,WAAW,EAAE;QACvClG,IAAI,EAAEsE,qBAAqB;QAC3Bb,MAAM,EAAE,IAAI;QACZO,MAAM,EAAE,CACNC,MAAM,CACP;QACDhC,GAAG,EAAET,gBAAgB;QACrBkD,IAAI,EAAEA,IAAI,IAAI;MAChB,CAAC,CAAC;MACF,MAAMmC,WAAW,GAAGrG,KAAK,CAACwD,MAAM,CAAC,CAAC,CAAC,CAACmC,MAAM;MAC1C3F,KAAK,CAACwD,MAAM,CAAC4C,MAAM,CAACX,WAAW,EAAEC,WAAW,EAAEjC,MAAM,CAAC;MACrD,KAAK,MAAM,CACThE,GAAG,EACH6G,GAAG,CACJ,IAAItG,KAAK,CAACwD,MAAM,CAACV,KAAK,CAAC2C,WAAW,CAAC,CAAChD,OAAO,EAAE,EAAE;QAC9C6D,GAAG,CAACX,MAAM,GAAGU,WAAW,GAAGZ,WAAW,GAAGhG,GAAG;MAC9C;IACF,CAAC;IAED,MAAM8G,MAAM,GAAGvG,KAAK,CAACwD,MAAM,CAACR,SAAS,CAAC,CAAC;MACrCS,MAAM,EAAE;QACNhC,GAAG;QACHiC;MACF;IACF,CAAC,KAAK;MACJ,OAAOjC,GAAG,IAAIiC,GAAG;IACnB,CAAC,CAAC;IACF,IAAImB,MAAM,EAAE;MACVU,YAAY,CAAC1B,oBAAoB,EAAE0C,MAAM,GAAG1C,oBAAoB,EAAE,CAAC,CAAC;IACtE,CAAC,MAAM;MACL,MAAM2C,WAAW,GAAG9D,iBAAiB,CAAC1C,KAAK,CAACsD,IAAI,EAAEO,oBAAoB,CAAC;MACvE0B,YAAY,CAACiB,WAAW,EAAED,MAAM,GAAGC,WAAW,EAAE,CAAC,CAAC;IACpD;EACF,CAAC;EAED,MAAMC,KAAK,GAAG,MAAM;IAClB,KAAK,MAAMC,UAAU,IAAI5E,WAAW,EAAE;MACpCwD,GAAG,CAACoB,UAAU,CAAC;IACjB;EACF,CAAC;EAED,IAAI5E,WAAW,CAACnC,MAAM,IAAIK,KAAK,CAACwD,MAAM,CAAC7D,MAAM,KAAK,CAAC,EAAE;IACnDM,KAAK,CAAC0G,aAAa,EAAE;EACvB;EAEA,KAAK,MAAM;IACT7C;EACF,CAAC,IAAIhC,WAAW,EAAE;IAChB7B,KAAK,CAAC2G,WAAW,CACd,kBAAiB5F,gBAAiB,KAAI8C,qBAAsB,gBAAe,EAC5E,IAAI,EACJpD,WAAW,GAAG+F,KAAK,GAAG,IAAI,CAC3B;EACH;AACF,CAAC,EAAE;EACDI,eAAe,EAAE,IAAI;EACrBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJlB,WAAW,EAAE,uDAAuD;MACpEmB,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACV/G,iBAAiB,EAAE;UACjBgH,OAAO,EAAE,CAAC;UACVnD,IAAI,EAAE;QACR,CAAC;QACDoD,iBAAiB,EAAE;UACjBD,OAAO,EAAE,IAAI;UACbnD,IAAI,EAAE;QACR,CAAC;QACD3D,iBAAiB,EAAE;UACjB8G,OAAO,EAAE,IAAI;UACbnD,IAAI,EAAE;QACR,CAAC;QACD1D,sBAAsB,EAAE;UACtB6G,OAAO,EAAE,IAAI;UACbnD,IAAI,EAAE;QACR,CAAC;QACDqD,YAAY,EAAE;UACZF,OAAO,EAAE,KAAK;UACdnD,IAAI,EAAE;QACR,CAAC;QACD5D,iBAAiB,EAAE;UACjB+G,OAAO,EAAE,KAAK;UACdnD,IAAI,EAAE;QACR,CAAC;QACDsD,YAAY,EAAE;UACZH,OAAO,EAAE,KAAK;UACdnD,IAAI,EAAE;QACR,CAAC;QACDzD,iBAAiB,EAAE;UACjByD,IAAI,EAAE;QACR,CAAC;QACDuD,QAAQ,EAAE;UACRC,KAAK,EAAE;YACLC,KAAK,EAAE,CACL;cACEzD,IAAI,EAAE;YACR,CAAC,EACD;cACEiD,oBAAoB,EAAE,KAAK;cAC3BC,UAAU,EAAE;gBACVQ,OAAO,EAAE;kBACP1D,IAAI,EAAE;gBACR,CAAC;gBACDhE,OAAO,EAAE;kBACPgE,IAAI,EAAE;gBACR;cACF,CAAC;cACDA,IAAI,EAAE;YACR,CAAC;UAEL,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACDxD,WAAW,EAAE;UACXwD,IAAI,EAAE;QACR,CAAC;QACDtD,sBAAsB,EAAE;UACtBsD,IAAI,EAAE;QACR,CAAC;QACDvD,eAAe,EAAE;UACfuD,IAAI,EAAE;QACR,CAAC;QACD2D,UAAU,EAAE;UACVH,KAAK,EAAE;YACLxD,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACDrD,eAAe,EAAE;UACf6G,KAAK,EAAE;YACLxD,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACDpD,0BAA0B,EAAE;UAC1BoD,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR,CAAC;EAED;EACA;EACA;EACA4D,UAAU,EAAE;AACd,CAAC,CAAC;AAAA;AAAA"}
|
package/dist/rules/validTypes.js
CHANGED
|
@@ -92,6 +92,15 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
92
92
|
}
|
|
93
93
|
return true;
|
|
94
94
|
};
|
|
95
|
+
if (tag.problems.length) {
|
|
96
|
+
const msg = tag.problems.reduce((str, {
|
|
97
|
+
message
|
|
98
|
+
}) => {
|
|
99
|
+
return str + '; ' + message;
|
|
100
|
+
}, '').slice(2);
|
|
101
|
+
report(`Invalid name: ${msg}`, null, tag);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
95
104
|
if (tag.tag === 'borrows') {
|
|
96
105
|
const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '').trim();
|
|
97
106
|
if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validTypes.js","names":["asExpression","suppressTypes","Set","tryParsePathIgnoreError","path","tryParse","iterateJsdoc","jsdoc","report","utils","context","settings","allowEmptyNamepaths","options","mode","tag","tags","validNamepathParsing","namepath","tagName","handled","startsWith","endChar","slice","includes","startChar","charAt","validTypeParsing","type","parse","thisNamepath","getTagDescription","replace","trim","test","thatNamepath","name","parsedTypes","traverse","node","value","undefined","has","otherModeMaps","filter","mde","map","getTagStructureForMode","tagMightHaveNamePosition","modeInfo","mightHaveTypePosition","tagMightHaveTypePosition","tagMustHaveNamePosition","mustHaveTypePosition","tagMustHaveTypePosition","tagMissingRequiredTypeOrNamepath","hasTypePosition","Boolean","hasNameOrNamepathPosition","tagMightHaveNamepath","parseClosureTemplateTag","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperies","properties","default"],"sources":["../../src/rules/validTypes.js"],"sourcesContent":["import {\n tryParse,\n parse,\n traverse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nconst suppressTypes = new Set([\n // https://github.com/google/closure-compiler/wiki/@suppress-annotations\n // https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/parsing/ParserConfig.properties#L154\n 'accessControls',\n 'checkDebuggerStatement',\n 'checkPrototypalTypes',\n 'checkRegExp',\n 'checkTypes',\n 'checkVars',\n 'closureDepMethodUsageChecks',\n 'const',\n 'constantProperty',\n 'deprecated',\n 'duplicate',\n 'es5Strict',\n 'externsValidation',\n 'extraProvide',\n 'extraRequire',\n 'globalThis',\n 'invalidCasts',\n 'lateProvide',\n 'legacyGoogScopeRequire',\n 'lintChecks',\n 'messageConventions',\n 'misplacedTypeAnnotation',\n 'missingOverride',\n 'missingPolyfill',\n 'missingProperties',\n 'missingProvide',\n 'missingRequire',\n 'missingSourcesWarnings',\n 'moduleLoad',\n 'nonStandardJsDocs',\n 'partialAlias',\n 'polymer',\n 'reportUnknownTypes',\n 'strictMissingProperties',\n 'strictModuleDepCheck',\n 'strictPrimitiveOperators',\n 'suspiciousCode',\n\n // Not documented in enum\n 'switch',\n 'transitionalSuspiciousCodeWarnings',\n 'undefinedNames',\n 'undefinedVars',\n 'underscore',\n 'unknownDefines',\n 'untranspilableFeatures',\n 'unusedLocalVariables',\n 'unusedPrivateMembers',\n 'useOfGoogProvide',\n 'uselessCode',\n 'visibility',\n 'with',\n]);\n\nconst tryParsePathIgnoreError = (path) => {\n try {\n tryParse(path);\n\n return true;\n } catch {\n // Keep the original error for including the whole type\n }\n\n return false;\n};\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = false,\n } = context.options[0] || {};\n const {\n mode,\n } = settings;\n\n for (const tag of jsdoc.tags) {\n const validNamepathParsing = function (namepath, tagName) {\n if (tryParsePathIgnoreError(namepath)) {\n return true;\n }\n\n let handled = false;\n\n if (tagName) {\n // eslint-disable-next-line default-case\n switch (tagName) {\n case 'requires':\n case 'module': {\n if (!namepath.startsWith('module:')) {\n handled = tryParsePathIgnoreError(`module:${namepath}`);\n }\n\n break;\n }\n\n case 'memberof': case 'memberof!': {\n const endChar = namepath.slice(-1);\n if ([\n '#', '.', '~',\n ].includes(endChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(0, -1));\n }\n\n break;\n }\n\n case 'borrows': {\n const startChar = namepath.charAt();\n if ([\n '#', '.', '~',\n ].includes(startChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(1));\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n if (mode === 'permissive') {\n tryParse(type);\n } else {\n parse(type, mode);\n }\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n if (tag.tag === 'borrows') {\n const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '')\n .trim();\n\n if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${utils.getTagDescription(tag)}\"`, null, tag);\n\n continue;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n\n continue;\n }\n\n if (tag.tag === 'suppress' && mode === 'closure') {\n let parsedTypes;\n\n try {\n parsedTypes = tryParse(tag.type);\n } catch {\n // Ignore\n }\n\n if (parsedTypes) {\n traverse(parsedTypes, (node) => {\n const {\n value: type,\n } = node;\n if (type !== undefined && !suppressTypes.has(type)) {\n report(`Syntax error in supresss type: ${type}`, null, tag);\n }\n });\n }\n }\n\n const otherModeMaps = [\n 'jsdoc', 'typescript', 'closure', 'permissive',\n ].filter(\n (mde) => {\n return mde !== mode;\n },\n ).map((mde) => {\n return utils.getTagStructureForMode(mde);\n });\n\n const tagMightHaveNamePosition = utils.tagMightHaveNamePosition(tag.tag, otherModeMaps);\n if (tagMightHaveNamePosition !== true && tag.name) {\n const modeInfo = tagMightHaveNamePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);\n\n continue;\n }\n\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);\n if (mightHaveTypePosition !== true && tag.type) {\n const modeInfo = mightHaveTypePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED NAME\n const tagMustHaveNamePosition = utils.tagMustHaveNamePosition(tag.tag, otherModeMaps);\n\n // Don't handle `@param` here though it does require name as handled by\n // `require-param-name` (`@property` would similarly seem to require one,\n // but is handled by `require-property-name`)\n if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))\n ) {\n const modeInfo = tagMustHaveNamePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps);\n if (mustHaveTypePosition !== false && !tag.type) {\n const modeInfo = mustHaveTypePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE OR NAME/NAMEPATH\n const tagMissingRequiredTypeOrNamepath = utils.tagMissingRequiredTypeOrNamepath(tag, otherModeMaps);\n if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {\n const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // VALID TYPE\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n }\n\n // VALID NAME/NAMEPATH\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition !== false ||\n utils.tagMightHaveNamepath(tag.tag)\n ) && Boolean(tag.name);\n\n if (hasNameOrNamepathPosition) {\n if (mode !== 'jsdoc' && tag.tag === 'template') {\n for (const namepath of utils.parseClosureTemplateTag(tag)) {\n validNamepathParsing(namepath);\n }\n } else {\n validNamepathParsing(tag.name, tag.tag);\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-valid-types',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validTypes.js","names":["asExpression","suppressTypes","Set","tryParsePathIgnoreError","path","tryParse","iterateJsdoc","jsdoc","report","utils","context","settings","allowEmptyNamepaths","options","mode","tag","tags","validNamepathParsing","namepath","tagName","handled","startsWith","endChar","slice","includes","startChar","charAt","validTypeParsing","type","parse","problems","length","msg","reduce","str","message","thisNamepath","getTagDescription","replace","trim","test","thatNamepath","name","parsedTypes","traverse","node","value","undefined","has","otherModeMaps","filter","mde","map","getTagStructureForMode","tagMightHaveNamePosition","modeInfo","mightHaveTypePosition","tagMightHaveTypePosition","tagMustHaveNamePosition","mustHaveTypePosition","tagMustHaveTypePosition","tagMissingRequiredTypeOrNamepath","hasTypePosition","Boolean","hasNameOrNamepathPosition","tagMightHaveNamepath","parseClosureTemplateTag","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperies","properties","default"],"sources":["../../src/rules/validTypes.js"],"sourcesContent":["import {\n tryParse,\n parse,\n traverse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nconst suppressTypes = new Set([\n // https://github.com/google/closure-compiler/wiki/@suppress-annotations\n // https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/parsing/ParserConfig.properties#L154\n 'accessControls',\n 'checkDebuggerStatement',\n 'checkPrototypalTypes',\n 'checkRegExp',\n 'checkTypes',\n 'checkVars',\n 'closureDepMethodUsageChecks',\n 'const',\n 'constantProperty',\n 'deprecated',\n 'duplicate',\n 'es5Strict',\n 'externsValidation',\n 'extraProvide',\n 'extraRequire',\n 'globalThis',\n 'invalidCasts',\n 'lateProvide',\n 'legacyGoogScopeRequire',\n 'lintChecks',\n 'messageConventions',\n 'misplacedTypeAnnotation',\n 'missingOverride',\n 'missingPolyfill',\n 'missingProperties',\n 'missingProvide',\n 'missingRequire',\n 'missingSourcesWarnings',\n 'moduleLoad',\n 'nonStandardJsDocs',\n 'partialAlias',\n 'polymer',\n 'reportUnknownTypes',\n 'strictMissingProperties',\n 'strictModuleDepCheck',\n 'strictPrimitiveOperators',\n 'suspiciousCode',\n\n // Not documented in enum\n 'switch',\n 'transitionalSuspiciousCodeWarnings',\n 'undefinedNames',\n 'undefinedVars',\n 'underscore',\n 'unknownDefines',\n 'untranspilableFeatures',\n 'unusedLocalVariables',\n 'unusedPrivateMembers',\n 'useOfGoogProvide',\n 'uselessCode',\n 'visibility',\n 'with',\n]);\n\nconst tryParsePathIgnoreError = (path) => {\n try {\n tryParse(path);\n\n return true;\n } catch {\n // Keep the original error for including the whole type\n }\n\n return false;\n};\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = false,\n } = context.options[0] || {};\n const {\n mode,\n } = settings;\n\n for (const tag of jsdoc.tags) {\n const validNamepathParsing = function (namepath, tagName) {\n if (tryParsePathIgnoreError(namepath)) {\n return true;\n }\n\n let handled = false;\n\n if (tagName) {\n // eslint-disable-next-line default-case\n switch (tagName) {\n case 'requires':\n case 'module': {\n if (!namepath.startsWith('module:')) {\n handled = tryParsePathIgnoreError(`module:${namepath}`);\n }\n\n break;\n }\n\n case 'memberof': case 'memberof!': {\n const endChar = namepath.slice(-1);\n if ([\n '#', '.', '~',\n ].includes(endChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(0, -1));\n }\n\n break;\n }\n\n case 'borrows': {\n const startChar = namepath.charAt();\n if ([\n '#', '.', '~',\n ].includes(startChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(1));\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n if (mode === 'permissive') {\n tryParse(type);\n } else {\n parse(type, mode);\n }\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n if (tag.problems.length) {\n const msg = tag.problems.reduce((str, {\n message,\n }) => {\n return str + '; ' + message;\n }, '').slice(2);\n report(`Invalid name: ${msg}`, null, tag);\n continue;\n }\n\n if (tag.tag === 'borrows') {\n const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '')\n .trim();\n\n if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${utils.getTagDescription(tag)}\"`, null, tag);\n\n continue;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n\n continue;\n }\n\n if (tag.tag === 'suppress' && mode === 'closure') {\n let parsedTypes;\n\n try {\n parsedTypes = tryParse(tag.type);\n } catch {\n // Ignore\n }\n\n if (parsedTypes) {\n traverse(parsedTypes, (node) => {\n const {\n value: type,\n } = node;\n if (type !== undefined && !suppressTypes.has(type)) {\n report(`Syntax error in supresss type: ${type}`, null, tag);\n }\n });\n }\n }\n\n const otherModeMaps = [\n 'jsdoc', 'typescript', 'closure', 'permissive',\n ].filter(\n (mde) => {\n return mde !== mode;\n },\n ).map((mde) => {\n return utils.getTagStructureForMode(mde);\n });\n\n const tagMightHaveNamePosition = utils.tagMightHaveNamePosition(tag.tag, otherModeMaps);\n if (tagMightHaveNamePosition !== true && tag.name) {\n const modeInfo = tagMightHaveNamePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);\n\n continue;\n }\n\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);\n if (mightHaveTypePosition !== true && tag.type) {\n const modeInfo = mightHaveTypePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED NAME\n const tagMustHaveNamePosition = utils.tagMustHaveNamePosition(tag.tag, otherModeMaps);\n\n // Don't handle `@param` here though it does require name as handled by\n // `require-param-name` (`@property` would similarly seem to require one,\n // but is handled by `require-property-name`)\n if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))\n ) {\n const modeInfo = tagMustHaveNamePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps);\n if (mustHaveTypePosition !== false && !tag.type) {\n const modeInfo = mustHaveTypePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE OR NAME/NAMEPATH\n const tagMissingRequiredTypeOrNamepath = utils.tagMissingRequiredTypeOrNamepath(tag, otherModeMaps);\n if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {\n const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // VALID TYPE\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n }\n\n // VALID NAME/NAMEPATH\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition !== false ||\n utils.tagMightHaveNamepath(tag.tag)\n ) && Boolean(tag.name);\n\n if (hasNameOrNamepathPosition) {\n if (mode !== 'jsdoc' && tag.tag === 'template') {\n for (const namepath of utils.parseClosureTemplateTag(tag)) {\n validNamepathParsing(namepath);\n }\n } else {\n validNamepathParsing(tag.name, tag.tag);\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-valid-types',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
package/package.json
CHANGED