eslint-plugin-jsdoc 48.5.0 → 48.5.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"jsdocUtils.cjs","names":["_getDefaultTagStructureForMode","_interopRequireDefault","require","_tagNames","_hasReturnValue","_WarnSettings","_jsdoccomment","e","__esModule","default","tagStructure","setTagStructure","mode","getDefaultTagStructureForMode","flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","String","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","checkDefaultObjects","_functionNode$value","getParamName","param","isProperty","_param$left2","hasLeftTypeAnnotation","left","_typeAnnotation$typeA","propertyNames","annotationParamName","hasLeftName","_param$left","properties","roots","prop","value","elements","idx","right","raw","_param$left3","includes","argument","parameter","Error","hasParams","length","getJsdocTagsDeep","jsdoc","targetTagName","ret","tag","tags","entries","modeWarnSettings","WarnSettings","getTagNamesForMode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","end","column","line","start","message","markSettingAsWarned","getPreferredTagName","tagPreference","_Object$entries$find","prefValues","Object","values","some","prefVal","replacement","tagPreferenceFixed","fromEntries","replace","prototype","hasOwnProperty","call","tagNames","preferredTagName","find","aliases","isValidTag","definedTags","validTagNames","keys","flat","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","getAllTags","inlineTags","inlineTag","tokens","description","source","flatMap","tagBegins","tg","number","hasATag","targetTagNames","mayBeUndefinedTypeTag","tagType","trim","parsedTypes","tryParse","elem","ensureMap","has","set","Map","get","overrideTagStructure","structuredTags","tagMap","required","tagStruct","requiredName","requiredType","typeOrNameRequired","getTagStructureForMode","isNamepathDefiningTag","isNamepathReferencingTag","isNamepathOrUrlReferencingTag","tagMustHaveTypePosition","tagMightHaveTypePosition","namepathTypes","Set","tagMightHaveNamePosition","tagMightHaveNamepath","nampathRole","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","tagMissingRequiredTypeOrNamepath","mustHaveTypePosition","mightHaveTypePosition","hasTypePosition","hasNameOrNamepathPosition","mustHaveEither","hasEither","hasNonFunctionYield","node","checkYieldReturnValue","body","bodyNode","arguments","element","expression","test","consequent","alternate","block","handler","finalizer","cases","someCase","nde","declarations","id","init","expressions","subExpression","property","computed","quasi","object","parent","hasYieldValue","generator","hasThrowValue","innerFunction","async","parseClosureTemplateTag","split","enforcedContexts","defaultContexts","settings","_context$options$","contexts","options","getContextObject","checkJsdoc","selInfo","lastIndex","selector","comment","bind","old","tagsWithNamesAndDescriptions","getTagsByType","tagsWithoutNames","tagsWithNames","tagName","tagWithName","getIndent","sourceCode","_sourceCode$text$matc","text","match","isConstructor","_node$parent","kind","isGetter","_node$parent2","isSetter","_node$parent3","hasAccessorPair","sourceKind","sourceName","oppositeKind","sibling","child","ky","exemptSpeciaMethods","schema","hasSchemaOption","_context$options$2","schemaProperties","checkGetters","checkSetters","dropPathSegmentQuotes","str","replaceAll","comparePaths","otherPathName","pathDoesNotBeginWith","startsWith","getRegexFromString","regexString","requiredFlags","flags","regex","uniqueFlags","join","RegExp","_default","exports","hasReturnValue","hasValueOrExecutorHasNonEmptyResolveValue","module"],"sources":["../src/jsdocUtils.js"],"sourcesContent":["import getDefaultTagStructureForMode from './getDefaultTagStructureForMode.js';\nimport {\n closureTags,\n jsdocTags,\n typeScriptTags,\n} from './tagNames.js';\nimport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n} from './utils/hasReturnValue.js';\nimport WarnSettings from './WarnSettings.js';\nimport {\n tryParse,\n} from '@es-joy/jsdoccomment';\n\n/**\n * @typedef {number} Integer\n */\n/**\n * @typedef {import('./utils/hasReturnValue.js').ESTreeOrTypeScriptNode} ESTreeOrTypeScriptNode\n */\n\n/**\n * @typedef {\"jsdoc\"|\"typescript\"|\"closure\"|\"permissive\"} ParserMode\n */\n\n/**\n * @type {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\nlet tagStructure;\n\n/**\n * @param {ParserMode} mode\n * @returns {void}\n */\nconst setTagStructure = (mode) => {\n tagStructure = getDefaultTagStructureForMode(mode);\n};\n\n/**\n * @typedef {undefined|string|{\n * name: Integer,\n * restElement: boolean\n * }|{\n * isRestProperty: boolean|undefined,\n * name: string,\n * restElement: boolean\n * }|{\n * name: string,\n * restElement: boolean\n * }} ParamCommon\n */\n/**\n * @typedef {ParamCommon|[string|undefined, (FlattendRootInfo & {\n * annotationParamName?: string,\n * })]|NestedParamInfo} ParamNameInfo\n */\n\n/**\n * @typedef {{\n * hasPropertyRest: boolean,\n * hasRestElement: boolean,\n * names: string[],\n * rests: boolean[],\n * }} FlattendRootInfo\n */\n/**\n * @typedef {[string, (string[]|ParamInfo[])]} NestedParamInfo\n */\n/**\n * @typedef {ParamCommon|\n * [string|undefined, (FlattendRootInfo & {\n * annotationParamName?: string\n * })]|\n * NestedParamInfo} ParamInfo\n */\n\n/**\n * Given a nested array of property names, reduce them to a single array,\n * appending the name of the root element along the way if present.\n * @callback FlattenRoots\n * @param {ParamInfo[]} params\n * @param {string} [root]\n * @returns {FlattendRootInfo}\n */\n\n/** @type {FlattenRoots} */\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n\n /**\n * @type {boolean[]}\n */\n const rests = [];\n\n const names = params.reduce(\n /**\n * @param {string[]} acc\n * @param {ParamInfo} cur\n * @returns {string[]}\n */\n (acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n const inner = /** @type {string[]} */ ([\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean));\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n\n if (typeof cur === 'object') {\n if ('isRestProperty' in cur && cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n\n if ('restElement' in cur && cur.restElement) {\n hasRestElement = true;\n }\n\n acc.push(root ? `${root}.${String(cur.name)}` : String(cur.name));\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, [],\n );\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\n/**\n * @param {import('@typescript-eslint/types').TSESTree.TSIndexSignature|\n * import('@typescript-eslint/types').TSESTree.TSConstructSignatureDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSCallSignatureDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSPropertySignature} propSignature\n * @returns {undefined|string|[string, string[]]}\n */\nconst getPropertiesFromPropertySignature = (propSignature) => {\n if (\n propSignature.type === 'TSIndexSignature' ||\n propSignature.type === 'TSConstructSignatureDeclaration' ||\n propSignature.type === 'TSCallSignatureDeclaration'\n ) {\n return undefined;\n }\n\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n propSignature.key\n ).name,\n propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return /** @type {string} */ (\n getPropertiesFromPropertySignature(\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n member\n ),\n )\n );\n }),\n ];\n }\n\n return /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n propSignature.key\n ).name;\n};\n\n/**\n * @param {ESTreeOrTypeScriptNode|null} functionNode\n * @param {boolean} [checkDefaultObjects]\n * @throws {Error}\n * @returns {ParamNameInfo[]}\n */\nconst getFunctionParameterNames = (\n functionNode, checkDefaultObjects,\n) => {\n /* eslint-disable complexity -- Temporary */\n /**\n * @param {import('estree').Identifier|import('estree').AssignmentPattern|\n * import('estree').ObjectPattern|import('estree').Property|\n * import('estree').RestElement|import('estree').ArrayPattern|\n * import('@typescript-eslint/types').TSESTree.TSParameterProperty|\n * import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.RestElement|\n * import('@typescript-eslint/types').TSESTree.Identifier|\n * import('@typescript-eslint/types').TSESTree.ObjectPattern|\n * import('@typescript-eslint/types').TSESTree.BindingName|\n * import('@typescript-eslint/types').TSESTree.Parameter\n * } param\n * @param {boolean} [isProperty]\n * @returns {ParamNameInfo|[string, ParamNameInfo[]]}\n */\n const getParamName = (param, isProperty) => {\n /* eslint-enable complexity -- Temporary */\n const hasLeftTypeAnnotation = 'left' in param && 'typeAnnotation' in param.left;\n\n if ('typeAnnotation' in param || hasLeftTypeAnnotation) {\n const typeAnnotation = hasLeftTypeAnnotation ?\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n param.left\n ).typeAnnotation :\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier|import('@typescript-eslint/types').TSESTree.ObjectPattern} */\n (param).typeAnnotation;\n\n if (typeAnnotation?.typeAnnotation?.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */\n (member),\n );\n });\n\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: 'name' in param ? param.name : undefined,\n };\n const hasLeftName = 'left' in param && 'name' in param.left;\n\n if ('name' in param || hasLeftName) {\n return [\n hasLeftName ?\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n param.left\n ).name :\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n param\n ).name,\n flattened,\n ];\n }\n\n return [\n undefined, flattened,\n ];\n }\n }\n\n if ('name' in param) {\n return param.name;\n }\n\n if ('left' in param && 'name' in param.left) {\n return param.left.name;\n }\n\n if (\n param.type === 'ObjectPattern' ||\n ('left' in param &&\n (\n param\n ).left.type === 'ObjectPattern')\n ) {\n const properties = /** @type {import('@typescript-eslint/types').TSESTree.ObjectPattern} */ (\n param\n ).properties ||\n /** @type {import('estree').ObjectPattern} */\n (\n /** @type {import('@typescript-eslint/types').TSESTree.AssignmentPattern} */ (\n param\n ).left\n )?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if (param.type === 'Property') {\n switch (param.value.type) {\n case 'ArrayPattern': {\n return [\n /** @type {import('estree').Identifier} */\n (param.key).name,\n /** @type {import('estree').ArrayPattern} */ (\n param.value\n ).elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop?.type === 'RestElement',\n };\n }),\n ];\n }\n\n case 'ObjectPattern': {\n return [\n /** @type {import('estree').Identifier} */ (param.key).name,\n /** @type {import('estree').ObjectPattern} */ (\n param.value\n ).properties.map((prop) => {\n return /** @type {string|[string, string[]]} */ (getParamName(prop, isProperty));\n }),\n ];\n }\n\n case 'AssignmentPattern': {\n switch (param.value.left.type) {\n case 'Identifier':\n // Default parameter\n if (checkDefaultObjects && param.value.right.type === 'ObjectExpression') {\n return [\n /** @type {import('estree').Identifier} */ (\n param.key\n ).name,\n /** @type {import('estree').AssignmentPattern} */ (\n param.value\n ).right.properties.map((prop) => {\n return /** @type {string} */ (getParamName(\n /** @type {import('estree').Property} */\n (prop),\n isProperty,\n ));\n }),\n ];\n }\n\n break;\n case 'ObjectPattern':\n return [\n /** @type {import('estree').Identifier} */\n (param.key).name,\n /** @type {import('estree').ObjectPattern} */ (\n param.value.left\n ).properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'ArrayPattern':\n return [\n /** @type {import('estree').Identifier} */\n (param.key).name,\n /** @type {import('estree').ArrayPattern} */ (\n param.value.left\n ).elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop?.type === 'RestElement',\n };\n }),\n ];\n }\n }\n }\n\n switch (param.key.type) {\n case 'Identifier':\n return param.key.name;\n\n // The key of an object could also be a string or number\n case 'Literal':\n /* c8 ignore next 2 -- `raw` may not be present in all parsers */\n return /** @type {string} */ (param.key.raw ||\n param.key.value);\n\n // case 'MemberExpression':\n default:\n // Todo: We should really create a structure (and a corresponding\n // option analogous to `checkRestProperty`) which allows for\n // (and optionally requires) dynamic properties to have a single\n // line of documentation\n return undefined;\n }\n }\n\n if (\n param.type === 'ArrayPattern' ||\n /** @type {import('estree').AssignmentPattern} */ (\n param\n ).left?.type === 'ArrayPattern'\n ) {\n const elements = /** @type {import('estree').ArrayPattern} */ (\n param\n ).elements || /** @type {import('estree').ArrayPattern} */ (\n /** @type {import('estree').AssignmentPattern} */ (\n param\n ).left\n )?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: `\"${idx}\"`,\n restElement: prop?.type === 'RestElement',\n };\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if ([\n 'RestElement', 'ExperimentalRestProperty',\n ].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.RestElement} */ (\n param\n ).argument).name,\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSParameterProperty} */ (\n param\n ).parameter\n ),\n true,\n );\n }\n\n throw new Error(`Unsupported function signature format: \\`${param.type}\\`.`);\n };\n\n if (!functionNode) {\n return [];\n }\n\n return (/** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n functionNode\n ).params || /** @type {import('@typescript-eslint/types').TSESTree.MethodDefinition} */ (\n functionNode\n ).value?.params || []).map((param) => {\n return getParamName(param);\n });\n};\n\n/**\n * @param {ESTreeOrTypeScriptNode} functionNode\n * @returns {Integer}\n */\nconst hasParams = (functionNode) => {\n // Should also check `functionNode.value.params` if supporting `MethodDefinition`\n return /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n functionNode\n ).params.length;\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * `foo` or `foo.bar`.\n * @param {import('comment-parser').Block} jsdoc\n * @param {string} targetTagName\n * @returns {{\n * idx: Integer,\n * name: string,\n * type: string\n * }[]}\n */\nconst getJsdocTagsDeep = (jsdoc, targetTagName) => {\n const ret = [];\n for (const [\n idx,\n {\n name,\n tag,\n type,\n },\n ] of jsdoc.tags.entries()) {\n if (tag !== targetTagName) {\n continue;\n }\n\n ret.push({\n idx,\n name,\n type,\n });\n }\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\n/**\n * @param {ParserMode|undefined} mode\n * @param {import('eslint').Rule.RuleContext} context\n * @returns {import('./tagNames.js').AliasedTags}\n */\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure': case 'permissive':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {ParserMode|undefined} mode\n * @param {string} name\n * @param {TagNamePreference} tagPreference\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined;\n * }}\n */\nconst getPreferredTagName = (\n context,\n mode,\n name,\n tagPreference = {},\n) => {\n const prefValues = Object.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = Object.fromEntries(\n Object\n .entries(tagPreference)\n .map(([\n key,\n value,\n ]) => {\n return [\n key.replace(/^tag /u, ''), value,\n ];\n }),\n );\n\n if (Object.prototype.hasOwnProperty.call(tagPreferenceFixed, name)) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([\n , aliases,\n ]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {ParserMode|undefined} mode\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\nconst isValidTag = (\n context,\n mode,\n name,\n definedTags,\n) => {\n const tagNames = getTagNamesForMode(mode, context);\n\n const validTagNames = Object.keys(tagNames).concat(Object.values(tagNames).flat());\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} targetTagName\n * @returns {boolean}\n */\nconst hasTag = (jsdoc, targetTagName) => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return jsdoc.tags.some((doc) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\n/**\n * Get all tags, inline tags and inline tags in tags\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\nconst getAllTags = (jsdoc) => {\n return [\n ...jsdoc.tags,\n ...jsdoc.inlineTags.map((inlineTag) => {\n // Tags don't have source or line numbers, so add before returning\n let line = -1;\n for (const {\n tokens: {\n description,\n },\n } of jsdoc.source) {\n line++;\n if (description && description.includes(`{@${inlineTag.tag}`)) {\n break;\n }\n }\n\n inlineTag.line = line;\n\n return inlineTag;\n }),\n ...jsdoc.tags.flatMap((tag) => {\n let tagBegins = -1;\n for (const {\n tokens: {\n tag: tg,\n },\n } of jsdoc.source) {\n tagBegins++;\n if (tg) {\n break;\n }\n }\n\n for (const inlineTag of tag.inlineTags) {\n /** @type {import('./iterateJsdoc.js').Integer} */\n let line = 0;\n for (const {\n number,\n tokens: {\n description,\n },\n } of tag.source) {\n if (description && description.includes(`{@${inlineTag.tag}`)) {\n line = number;\n break;\n }\n }\n\n inlineTag.line = tagBegins + line - 1;\n }\n\n return (\n /**\n * @type {import('comment-parser').Spec & {\n * inlineTags: import('@es-joy/jsdoccomment').JsdocInlineTagNoType[]\n * }}\n */ (\n tag\n ).inlineTags\n );\n }),\n ];\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string[]} targetTagNames\n * @returns {boolean}\n */\nconst hasATag = (jsdoc, targetTagNames) => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment has an undefined type.\n * @param {import('comment-parser').Spec|null|undefined} tag\n * the tag which should be checked.\n * @param {ParserMode} mode\n * @returns {boolean}\n * true in case a defined type is undeclared; otherwise false.\n */\nconst mayBeUndefinedTypeTag = (tag, mode) => {\n // The function should not continue in the event the type is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return true;\n }\n\n // .. same applies if it declares an `{undefined}` or `{void}` type\n const tagType = tag.type.trim();\n\n // Exit early if matching\n if (\n tagType === 'undefined' || tagType === 'void' ||\n tagType === '*' || tagType === 'any'\n ) {\n return true;\n }\n\n let parsedTypes;\n try {\n parsedTypes = tryParse(\n tagType,\n mode === 'permissive' ? undefined : [\n mode,\n ],\n );\n } catch {\n // Ignore\n }\n\n if (\n // We do not traverse deeply as it could be, e.g., `Promise<void>`\n parsedTypes &&\n parsedTypes.type === 'JsdocTypeUnion' &&\n parsedTypes.elements.find((elem) => {\n return elem.type === 'JsdocTypeUndefined' ||\n elem.type === 'JsdocTypeName' && elem.value === 'void';\n })) {\n return true;\n }\n\n // In any other case, a type is present\n return false;\n};\n\n/**\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} map\n * @param {string} tag\n * @returns {Map<string, string|string[]|boolean|undefined>}\n */\nconst ensureMap = (map, tag) => {\n if (!map.has(tag)) {\n map.set(tag, new Map());\n }\n\n return /** @type {Map<string, string | boolean>} */ (map.get(tag));\n};\n\n/**\n * @param {import('./iterateJsdoc.js').StructuredTags} structuredTags\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {void}\n */\nconst overrideTagStructure = (structuredTags, tagMap = tagStructure) => {\n for (const [\n tag,\n {\n name,\n type,\n required = [],\n },\n ] of Object.entries(structuredTags)) {\n const tagStruct = ensureMap(tagMap, tag);\n\n tagStruct.set('namepathRole', name);\n tagStruct.set('typeAllowed', type);\n\n const requiredName = required.includes('name');\n if (requiredName && name === false) {\n throw new Error('Cannot add \"name\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n tagStruct.set('nameRequired', requiredName);\n\n const requiredType = required.includes('type');\n if (requiredType && type === false) {\n throw new Error('Cannot add \"type\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeRequired', requiredType);\n\n const typeOrNameRequired = required.includes('typeOrNameRequired');\n if (typeOrNameRequired && name === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n if (typeOrNameRequired && type === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeOrNameRequired', typeOrNameRequired);\n }\n};\n\n/**\n * @param {ParserMode} mode\n * @param {import('./iterateJsdoc.js').StructuredTags} structuredTags\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\nconst getTagStructureForMode = (mode, structuredTags) => {\n const tagStruct = getDefaultTagStructureForMode(mode);\n\n try {\n overrideTagStructure(structuredTags, tagStruct);\n /* c8 ignore next 3 */\n } catch {\n //\n }\n\n return tagStruct;\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathDefiningTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('namepathRole') === 'namepath-defining';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathReferencingTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n return tagStruct.get('namepathRole') === 'namepath-referencing';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathOrUrlReferencingTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n return tagStruct.get('namepathRole') === 'namepath-or-url-referencing';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveTypePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return /** @type {boolean|undefined} */ (tagStruct.get('typeRequired'));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|string}\n */\nconst tagMightHaveTypePosition = (tag, tagMap = tagStructure) => {\n if (tagMustHaveTypePosition(tag, tagMap)) {\n return true;\n }\n\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = /** @type {boolean|undefined} */ (tagStruct.get('typeAllowed'));\n\n return ret === undefined ? true : ret;\n};\n\nconst namepathTypes = new Set([\n 'namepath-defining', 'namepath-referencing',\n]);\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('namepathRole');\n\n return ret === undefined ? true : Boolean(ret);\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamepath = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const nampathRole = tagStruct.get('namepathRole');\n\n return nampathRole !== false &&\n namepathTypes.has(/** @type {string} */ (nampathRole));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return /** @type {boolean|undefined} */ (tagStruct.get('nameRequired'));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n return Boolean(tagMightHaveTypePosition(tag, tagMap)) || tagMightHaveNamepath(tag, tagMap);\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return /** @type {boolean} */ (tagStruct.get('typeOrNameRequired'));\n};\n\n/**\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => {\n const mustHaveTypePosition = tagMustHaveTypePosition(tag.tag, tagMap);\n const mightHaveTypePosition = tagMightHaveTypePosition(tag.tag, tagMap);\n const hasTypePosition = mightHaveTypePosition && Boolean(tag.type);\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition(tag.tag, tagMap) ||\n tagMightHaveNamepath(tag.tag, tagMap)\n ) && Boolean(tag.name);\n const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap);\n const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) &&\n (hasTypePosition || hasNameOrNamepathPosition);\n\n return mustHaveEither && !hasEither && !mustHaveTypePosition;\n};\n\n/* eslint-disable complexity -- Temporary */\n/**\n * @param {ESTreeOrTypeScriptNode|null|undefined} node\n * @param {boolean} [checkYieldReturnValue]\n * @returns {boolean}\n */\nconst hasNonFunctionYield = (node, checkYieldReturnValue) => {\n /* eslint-enable complexity -- Temporary */\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return ![\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(bodyNode.type) && hasNonFunctionYield(\n bodyNode, checkYieldReturnValue,\n );\n });\n }\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.arguments.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'ChainExpression':\n case 'ExpressionStatement': {\n return hasNonFunctionYield(node.expression, checkYieldReturnValue);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonFunctionYield(node.body, checkYieldReturnValue);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n }\n\n case 'TryStatement': {\n return hasNonFunctionYield(node.block, checkYieldReturnValue) ||\n hasNonFunctionYield(\n node.handler && node.handler.body, checkYieldReturnValue,\n ) ||\n hasNonFunctionYield(\n /** @type {import('@typescript-eslint/types').TSESTree.BlockStatement} */\n (node.finalizer),\n checkYieldReturnValue,\n );\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'AssignmentPattern':\n return hasNonFunctionYield(node.right, checkYieldReturnValue);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonFunctionYield(node.id, checkYieldReturnValue) ||\n hasNonFunctionYield(node.init, checkYieldReturnValue);\n }\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n hasNonFunctionYield(node.right, checkYieldReturnValue);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonFunctionYield(property, checkYieldReturnValue);\n });\n\n /* c8 ignore next -- In Babel? */\n case 'PropertyDefinition':\n /* eslint-disable no-fallthrough */\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ObjectProperty':\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ClassProperty':\n case 'Property':\n /* eslint-enable no-fallthrough */\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n hasNonFunctionYield(node.value, checkYieldReturnValue);\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ObjectMethod':\n /* c8 ignore next 6 -- In Babel? */\n // @ts-expect-error In Babel?\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n // @ts-expect-error In Babel?\n node.arguments.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n\n case 'SpreadElement':\n case 'UnaryExpression':\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n\n case 'TaggedTemplateExpression':\n return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\n\n // ?.\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonFunctionYield(node.source, checkYieldReturnValue);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n }\n\n case 'YieldExpression': {\n if (checkYieldReturnValue) {\n if (\n /** @type {import('eslint').Rule.Node} */ (\n node\n ).parent.type === 'VariableDeclarator'\n ) {\n return true;\n }\n\n return false;\n }\n\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n * @param {ESTreeOrTypeScriptNode} node\n * @param {boolean} [checkYieldReturnValue]\n * @returns {boolean}\n */\nconst hasYieldValue = (node, checkYieldReturnValue) => {\n return /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n node\n ).generator && (\n /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n node\n ).expression || hasNonFunctionYield(\n /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */\n (node).body,\n checkYieldReturnValue,\n )\n );\n};\n\n/**\n * Checks if a node has a throws statement.\n * @param {ESTreeOrTypeScriptNode|null|undefined} node\n * @param {boolean} [innerFunction]\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasThrowValue = (node, innerFunction) => {\n if (!node) {\n return false;\n }\n\n // There are cases where a function may execute its inner function which\n // throws, but we're treating functions atomically rather than trying to\n // follow them\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return !innerFunction && !node.async && hasThrowValue(node.body, true);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasThrowValue(nde);\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @param {string} tag\n */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n * @see {@link https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @see {@link https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template}\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.name\n .split(',')\n .map((type) => {\n return type.trim().replace(/^\\[(?<name>.*?)=.*\\]$/u, '$<name>');\n });\n};\n\n/**\n * @typedef {true|string[]} DefaultContexts\n */\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n * @param {import('eslint').Rule.RuleContext} context\n * @param {DefaultContexts|undefined} defaultContexts\n * @param {{\n * contexts?: import('./iterateJsdoc.js').Context[]\n * }} settings\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts, settings) => {\n const contexts = context.options[0]?.contexts || settings.contexts || (defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ] : defaultContexts);\n\n return contexts;\n};\n\n/**\n * @param {import('./iterateJsdoc.js').Context[]} contexts\n * @param {import('./iterateJsdoc.js').CheckJsdoc} checkJsdoc\n * @param {import('@es-joy/jsdoccomment').CommentHandler} [handler]\n * @returns {import('eslint').Rule.RuleListener}\n */\nconst getContextObject = (contexts, checkJsdoc, handler) => {\n /** @type {import('eslint').Rule.RuleListener} */\n const properties = {};\n\n for (const [\n idx,\n prop,\n ] of contexts.entries()) {\n /** @type {string} */\n let property;\n\n /** @type {(node: import('eslint').Rule.Node) => void} */\n let value;\n\n if (typeof prop === 'object') {\n const selInfo = {\n lastIndex: idx,\n selector: prop.context,\n };\n if (prop.comment) {\n property = /** @type {string} */ (prop.context);\n value = checkJsdoc.bind(\n null,\n {\n ...selInfo,\n comment: prop.comment,\n },\n /**\n * @type {(jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean}\n */\n (/** @type {import('@es-joy/jsdoccomment').CommentHandler} */ (\n handler\n ).bind(null, prop.comment)),\n );\n } else {\n property = /** @type {string} */ (prop.context);\n value = checkJsdoc.bind(null, selInfo, null);\n }\n } else {\n const selInfo = {\n lastIndex: idx,\n selector: prop,\n };\n property = prop;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n\n const old = /**\n * @type {((node: import('eslint').Rule.Node) => void)}\n */ (properties[property]);\n properties[property] = old ?\n /**\n * @type {((node: import('eslint').Rule.Node) => void)}\n */\n function (node) {\n old(node);\n value(node);\n } :\n value;\n }\n\n return properties;\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n 'param', 'arg', 'argument', 'property', 'prop',\n 'template',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n]);\n\n/**\n * @typedef {{\n * [key: string]: false|string|\n * {message: string, replacement?: string}\n * }} TagNamePreference\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {ParserMode|undefined} mode\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n * tagsWithNames: import('comment-parser').Spec[],\n * tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\nconst getTagsByType = (context, mode, tags) => {\n /**\n * @type {import('comment-parser').Spec[]}\n */\n const tagsWithoutNames = [];\n const tagsWithNames = tags.filter((tag) => {\n const {\n tag: tagName,\n } = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n if (!tagWithName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\n/**\n * @param {import('eslint').SourceCode|{\n * text: string\n * }} sourceCode\n * @returns {string}\n */\nconst getIndent = (sourceCode) => {\n return (sourceCode.text.match(/^\\n*([ \\t]+)/u)?.[1] ?? '') + ' ';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isConstructor = (node) => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n /** @type {import('@typescript-eslint/types').TSESTree.MethodDefinition} */ (\n node?.parent\n )?.kind === 'constructor';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isGetter = (node) => {\n return node !== null &&\n /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */ (\n node.parent\n )?.kind === 'get';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isSetter = (node) => {\n return node !== null &&\n /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */(\n node.parent\n )?.kind === 'set';\n};\n\n/**\n * @param {import('eslint').Rule.Node} node\n * @returns {boolean}\n */\nconst hasAccessorPair = (node) => {\n const {\n type,\n kind: sourceKind,\n key,\n } =\n /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */ (node);\n\n const sourceName =\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n key\n ).name;\n\n const oppositeKind = sourceKind === 'get' ? 'set' : 'get';\n\n const sibling = type === 'MethodDefinition' ?\n /** @type {import('@typescript-eslint/types').TSESTree.ClassBody} */ (\n node.parent\n ).body :\n /** @type {import('@typescript-eslint/types').TSESTree.ObjectExpression} */ (\n node.parent\n ).properties;\n\n return (\n sibling.some((child) => {\n const {\n kind,\n key: ky,\n } = /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */ (child);\n\n const name =\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n ky\n ).name;\n\n return kind === oppositeKind && name === sourceName;\n })\n );\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {import('eslint').Rule.Node|null} node\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('json-schema').JSONSchema4} schema\n * @returns {boolean}\n */\nconst exemptSpeciaMethods = (jsdoc, node, context, schema) => {\n /**\n * @param {\"checkGetters\"|\"checkSetters\"|\"checkConstructors\"} prop\n * @returns {boolean|\"no-setter\"|\"no-getter\"}\n */\n const hasSchemaOption = (prop) => {\n const schemaProperties = schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n const checkGetters = hasSchemaOption('checkGetters');\n const checkSetters = hasSchemaOption('checkSetters');\n\n return !hasSchemaOption('checkConstructors') &&\n (\n isConstructor(node) ||\n hasATag(jsdoc, [\n 'class',\n 'constructor',\n ])) ||\n isGetter(node) && (\n !checkGetters ||\n checkGetters === 'no-setter' && hasAccessorPair(/** @type {import('./iterateJsdoc.js').Node} */ (node).parent)\n ) ||\n isSetter(node) && (\n !checkSetters ||\n checkSetters === 'no-getter' && hasAccessorPair(/** @type {import('./iterateJsdoc.js').Node} */ (node).parent)\n );\n};\n\n/**\n * Since path segments may be unquoted (if matching a reserved word,\n * identifier or numeric literal) or single or double quoted, in either\n * the `@param` or in source, we need to strip the quotes to give a fair\n * comparison.\n * @param {string} str\n * @returns {string}\n */\nconst dropPathSegmentQuotes = (str) => {\n return str.replaceAll(/\\.(['\"])(.*)\\1/gu, '.$2');\n};\n\n/**\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\nconst comparePaths = (name) => {\n return (otherPathName) => {\n return otherPathName === name ||\n dropPathSegmentQuotes(otherPathName) === dropPathSegmentQuotes(name);\n };\n};\n\n/**\n * @callback PathDoesNotBeginWith\n * @param {string} name\n * @param {string} otherPathName\n * @returns {boolean}\n */\n\n/** @type {PathDoesNotBeginWith} */\nconst pathDoesNotBeginWith = (name, otherPathName) => {\n return !name.startsWith(otherPathName) &&\n !dropPathSegmentQuotes(name).startsWith(dropPathSegmentQuotes(otherPathName));\n};\n\n/**\n * @param {string} regexString\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\nconst getRegexFromString = (regexString, requiredFlags) => {\n const match = regexString.match(/^\\/(.*)\\/([gimyus]*)$/us);\n let flags = 'u';\n let regex = regexString;\n if (match) {\n [\n , regex,\n flags,\n ] = match;\n if (!flags) {\n flags = 'u';\n }\n }\n\n const uniqueFlags = [\n ...new Set(flags + (requiredFlags || '')),\n ];\n flags = uniqueFlags.join('');\n\n return new RegExp(regex, flags);\n};\n\nexport default {\n comparePaths,\n dropPathSegmentQuotes,\n enforcedContexts,\n exemptSpeciaMethods,\n flattenRoots,\n getAllTags,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getRegexFromString,\n getTagsByType,\n getTagStructureForMode,\n hasATag,\n hasParams,\n hasReturnValue,\n hasTag,\n hasThrowValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n hasYieldValue,\n isConstructor,\n isGetter,\n isNamepathDefiningTag,\n isNamepathOrUrlReferencingTag,\n isNamepathReferencingTag,\n isSetter,\n isValidTag,\n mayBeUndefinedTypeTag,\n overrideTagStructure,\n parseClosureTemplateTag,\n pathDoesNotBeginWith,\n setTagStructure,\n tagMightHaveEitherTypeOrNamePosition,\n tagMightHaveNamepath,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMissingRequiredTypeOrNamepath,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"jsdocUtils.cjs","names":["_getDefaultTagStructureForMode","_interopRequireDefault","require","_tagNames","_hasReturnValue","_WarnSettings","_jsdoccomment","e","__esModule","default","tagStructure","setTagStructure","mode","getDefaultTagStructureForMode","flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","String","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","checkDefaultObjects","_functionNode$value","getParamName","param","isProperty","_param$left2","hasLeftTypeAnnotation","left","_typeAnnotation$typeA","propertyNames","annotationParamName","hasLeftName","_param$left","properties","roots","prop","value","elements","idx","right","raw","_param$left3","includes","_param$argument","argument","parameter","Error","hasParams","length","getJsdocTagsDeep","jsdoc","targetTagName","ret","tag","tags","entries","modeWarnSettings","WarnSettings","getTagNamesForMode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","end","column","line","start","message","markSettingAsWarned","getPreferredTagName","tagPreference","_Object$entries$find","prefValues","Object","values","some","prefVal","replacement","tagPreferenceFixed","fromEntries","replace","prototype","hasOwnProperty","call","tagNames","preferredTagName","find","aliases","isValidTag","definedTags","validTagNames","keys","flat","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","getAllTags","inlineTags","inlineTag","tokens","description","source","flatMap","tagBegins","tg","number","hasATag","targetTagNames","mayBeUndefinedTypeTag","tagType","trim","parsedTypes","tryParse","elem","ensureMap","has","set","Map","get","overrideTagStructure","structuredTags","tagMap","required","tagStruct","requiredName","requiredType","typeOrNameRequired","getTagStructureForMode","isNamepathDefiningTag","isNamepathReferencingTag","isNamepathOrUrlReferencingTag","tagMustHaveTypePosition","tagMightHaveTypePosition","namepathTypes","Set","tagMightHaveNamePosition","tagMightHaveNamepath","nampathRole","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","tagMissingRequiredTypeOrNamepath","mustHaveTypePosition","mightHaveTypePosition","hasTypePosition","hasNameOrNamepathPosition","mustHaveEither","hasEither","hasNonFunctionYield","node","checkYieldReturnValue","body","bodyNode","arguments","element","expression","test","consequent","alternate","block","handler","finalizer","cases","someCase","nde","declarations","id","init","expressions","subExpression","property","computed","quasi","object","parent","hasYieldValue","generator","hasThrowValue","innerFunction","async","parseClosureTemplateTag","split","enforcedContexts","defaultContexts","settings","_context$options$","contexts","options","getContextObject","checkJsdoc","selInfo","lastIndex","selector","comment","bind","old","tagsWithNamesAndDescriptions","getTagsByType","tagsWithoutNames","tagsWithNames","tagName","tagWithName","getIndent","sourceCode","_sourceCode$text$matc","text","match","isConstructor","_node$parent","kind","isGetter","_node$parent2","isSetter","_node$parent3","hasAccessorPair","sourceKind","sourceName","oppositeKind","sibling","child","ky","exemptSpeciaMethods","schema","hasSchemaOption","_context$options$2","schemaProperties","checkGetters","checkSetters","dropPathSegmentQuotes","str","replaceAll","comparePaths","otherPathName","pathDoesNotBeginWith","startsWith","getRegexFromString","regexString","requiredFlags","flags","regex","uniqueFlags","join","RegExp","_default","exports","hasReturnValue","hasValueOrExecutorHasNonEmptyResolveValue","module"],"sources":["../src/jsdocUtils.js"],"sourcesContent":["import getDefaultTagStructureForMode from './getDefaultTagStructureForMode.js';\nimport {\n closureTags,\n jsdocTags,\n typeScriptTags,\n} from './tagNames.js';\nimport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n} from './utils/hasReturnValue.js';\nimport WarnSettings from './WarnSettings.js';\nimport {\n tryParse,\n} from '@es-joy/jsdoccomment';\n\n/**\n * @typedef {number} Integer\n */\n/**\n * @typedef {import('./utils/hasReturnValue.js').ESTreeOrTypeScriptNode} ESTreeOrTypeScriptNode\n */\n\n/**\n * @typedef {\"jsdoc\"|\"typescript\"|\"closure\"|\"permissive\"} ParserMode\n */\n\n/**\n * @type {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\nlet tagStructure;\n\n/**\n * @param {ParserMode} mode\n * @returns {void}\n */\nconst setTagStructure = (mode) => {\n tagStructure = getDefaultTagStructureForMode(mode);\n};\n\n/**\n * @typedef {undefined|string|{\n * name: Integer,\n * restElement: boolean\n * }|{\n * isRestProperty: boolean|undefined,\n * name: string,\n * restElement: boolean\n * }|{\n * name: string,\n * restElement: boolean\n * }} ParamCommon\n */\n/**\n * @typedef {ParamCommon|[string|undefined, (FlattendRootInfo & {\n * annotationParamName?: string,\n * })]|NestedParamInfo} ParamNameInfo\n */\n\n/**\n * @typedef {{\n * hasPropertyRest: boolean,\n * hasRestElement: boolean,\n * names: string[],\n * rests: boolean[],\n * }} FlattendRootInfo\n */\n/**\n * @typedef {[string, (string[]|ParamInfo[])]} NestedParamInfo\n */\n/**\n * @typedef {ParamCommon|\n * [string|undefined, (FlattendRootInfo & {\n * annotationParamName?: string\n * })]|\n * NestedParamInfo} ParamInfo\n */\n\n/**\n * Given a nested array of property names, reduce them to a single array,\n * appending the name of the root element along the way if present.\n * @callback FlattenRoots\n * @param {ParamInfo[]} params\n * @param {string} [root]\n * @returns {FlattendRootInfo}\n */\n\n/** @type {FlattenRoots} */\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n\n /**\n * @type {boolean[]}\n */\n const rests = [];\n\n const names = params.reduce(\n /**\n * @param {string[]} acc\n * @param {ParamInfo} cur\n * @returns {string[]}\n */\n (acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n const inner = /** @type {string[]} */ ([\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean));\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n\n if (typeof cur === 'object') {\n if ('isRestProperty' in cur && cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n\n if ('restElement' in cur && cur.restElement) {\n hasRestElement = true;\n }\n\n acc.push(root ? `${root}.${String(cur.name)}` : String(cur.name));\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, [],\n );\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\n/**\n * @param {import('@typescript-eslint/types').TSESTree.TSIndexSignature|\n * import('@typescript-eslint/types').TSESTree.TSConstructSignatureDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSCallSignatureDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSPropertySignature} propSignature\n * @returns {undefined|string|[string, string[]]}\n */\nconst getPropertiesFromPropertySignature = (propSignature) => {\n if (\n propSignature.type === 'TSIndexSignature' ||\n propSignature.type === 'TSConstructSignatureDeclaration' ||\n propSignature.type === 'TSCallSignatureDeclaration'\n ) {\n return undefined;\n }\n\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n propSignature.key\n ).name,\n propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return /** @type {string} */ (\n getPropertiesFromPropertySignature(\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n member\n ),\n )\n );\n }),\n ];\n }\n\n return /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n propSignature.key\n ).name;\n};\n\n/**\n * @param {ESTreeOrTypeScriptNode|null} functionNode\n * @param {boolean} [checkDefaultObjects]\n * @throws {Error}\n * @returns {ParamNameInfo[]}\n */\nconst getFunctionParameterNames = (\n functionNode, checkDefaultObjects,\n) => {\n /* eslint-disable complexity -- Temporary */\n /**\n * @param {import('estree').Identifier|import('estree').AssignmentPattern|\n * import('estree').ObjectPattern|import('estree').Property|\n * import('estree').RestElement|import('estree').ArrayPattern|\n * import('@typescript-eslint/types').TSESTree.TSParameterProperty|\n * import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.RestElement|\n * import('@typescript-eslint/types').TSESTree.Identifier|\n * import('@typescript-eslint/types').TSESTree.ObjectPattern|\n * import('@typescript-eslint/types').TSESTree.BindingName|\n * import('@typescript-eslint/types').TSESTree.Parameter\n * } param\n * @param {boolean} [isProperty]\n * @returns {ParamNameInfo|[string, ParamNameInfo[]]}\n */\n const getParamName = (param, isProperty) => {\n /* eslint-enable complexity -- Temporary */\n const hasLeftTypeAnnotation = 'left' in param && 'typeAnnotation' in param.left;\n\n if ('typeAnnotation' in param || hasLeftTypeAnnotation) {\n const typeAnnotation = hasLeftTypeAnnotation ?\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n param.left\n ).typeAnnotation :\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier|import('@typescript-eslint/types').TSESTree.ObjectPattern} */\n (param).typeAnnotation;\n\n if (typeAnnotation?.typeAnnotation?.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */\n (member),\n );\n });\n\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: 'name' in param ? param.name : undefined,\n };\n const hasLeftName = 'left' in param && 'name' in param.left;\n\n if ('name' in param || hasLeftName) {\n return [\n hasLeftName ?\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n param.left\n ).name :\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n param\n ).name,\n flattened,\n ];\n }\n\n return [\n undefined, flattened,\n ];\n }\n }\n\n if ('name' in param) {\n return param.name;\n }\n\n if ('left' in param && 'name' in param.left) {\n return param.left.name;\n }\n\n if (\n param.type === 'ObjectPattern' ||\n ('left' in param &&\n (\n param\n ).left.type === 'ObjectPattern')\n ) {\n const properties = /** @type {import('@typescript-eslint/types').TSESTree.ObjectPattern} */ (\n param\n ).properties ||\n /** @type {import('estree').ObjectPattern} */\n (\n /** @type {import('@typescript-eslint/types').TSESTree.AssignmentPattern} */ (\n param\n ).left\n )?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if (param.type === 'Property') {\n switch (param.value.type) {\n case 'ArrayPattern': {\n return [\n /** @type {import('estree').Identifier} */\n (param.key).name,\n /** @type {import('estree').ArrayPattern} */ (\n param.value\n ).elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop?.type === 'RestElement',\n };\n }),\n ];\n }\n\n case 'ObjectPattern': {\n return [\n /** @type {import('estree').Identifier} */ (param.key).name,\n /** @type {import('estree').ObjectPattern} */ (\n param.value\n ).properties.map((prop) => {\n return /** @type {string|[string, string[]]} */ (getParamName(prop, isProperty));\n }),\n ];\n }\n\n case 'AssignmentPattern': {\n switch (param.value.left.type) {\n case 'Identifier':\n // Default parameter\n if (checkDefaultObjects && param.value.right.type === 'ObjectExpression') {\n return [\n /** @type {import('estree').Identifier} */ (\n param.key\n ).name,\n /** @type {import('estree').AssignmentPattern} */ (\n param.value\n ).right.properties.map((prop) => {\n return /** @type {string} */ (getParamName(\n /** @type {import('estree').Property} */\n (prop),\n isProperty,\n ));\n }),\n ];\n }\n\n break;\n case 'ObjectPattern':\n return [\n /** @type {import('estree').Identifier} */\n (param.key).name,\n /** @type {import('estree').ObjectPattern} */ (\n param.value.left\n ).properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'ArrayPattern':\n return [\n /** @type {import('estree').Identifier} */\n (param.key).name,\n /** @type {import('estree').ArrayPattern} */ (\n param.value.left\n ).elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop?.type === 'RestElement',\n };\n }),\n ];\n }\n }\n }\n\n switch (param.key.type) {\n case 'Identifier':\n return param.key.name;\n\n // The key of an object could also be a string or number\n case 'Literal':\n /* c8 ignore next 2 -- `raw` may not be present in all parsers */\n return /** @type {string} */ (param.key.raw ||\n param.key.value);\n\n // case 'MemberExpression':\n default:\n // Todo: We should really create a structure (and a corresponding\n // option analogous to `checkRestProperty`) which allows for\n // (and optionally requires) dynamic properties to have a single\n // line of documentation\n return undefined;\n }\n }\n\n if (\n param.type === 'ArrayPattern' ||\n /** @type {import('estree').AssignmentPattern} */ (\n param\n ).left?.type === 'ArrayPattern'\n ) {\n const elements = /** @type {import('estree').ArrayPattern} */ (\n param\n ).elements || /** @type {import('estree').ArrayPattern} */ (\n /** @type {import('estree').AssignmentPattern} */ (\n param\n ).left\n )?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: `\"${idx}\"`,\n restElement: prop?.type === 'RestElement',\n };\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if ([\n 'RestElement', 'ExperimentalRestProperty',\n ].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.RestElement} */ (\n param\n // @ts-expect-error Ok\n ).argument).name ?? param?.argument?.elements?.map(({name}) => {\n return name;\n }),\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSParameterProperty} */ (\n param\n ).parameter\n ),\n true,\n );\n }\n\n throw new Error(`Unsupported function signature format: \\`${param.type}\\`.`);\n };\n\n if (!functionNode) {\n return [];\n }\n\n return (/** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n functionNode\n ).params || /** @type {import('@typescript-eslint/types').TSESTree.MethodDefinition} */ (\n functionNode\n ).value?.params || []).map((param) => {\n return getParamName(param);\n });\n};\n\n/**\n * @param {ESTreeOrTypeScriptNode} functionNode\n * @returns {Integer}\n */\nconst hasParams = (functionNode) => {\n // Should also check `functionNode.value.params` if supporting `MethodDefinition`\n return /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n functionNode\n ).params.length;\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * `foo` or `foo.bar`.\n * @param {import('comment-parser').Block} jsdoc\n * @param {string} targetTagName\n * @returns {{\n * idx: Integer,\n * name: string,\n * type: string\n * }[]}\n */\nconst getJsdocTagsDeep = (jsdoc, targetTagName) => {\n const ret = [];\n for (const [\n idx,\n {\n name,\n tag,\n type,\n },\n ] of jsdoc.tags.entries()) {\n if (tag !== targetTagName) {\n continue;\n }\n\n ret.push({\n idx,\n name,\n type,\n });\n }\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\n/**\n * @param {ParserMode|undefined} mode\n * @param {import('eslint').Rule.RuleContext} context\n * @returns {import('./tagNames.js').AliasedTags}\n */\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure': case 'permissive':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {ParserMode|undefined} mode\n * @param {string} name\n * @param {TagNamePreference} tagPreference\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined;\n * }}\n */\nconst getPreferredTagName = (\n context,\n mode,\n name,\n tagPreference = {},\n) => {\n const prefValues = Object.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = Object.fromEntries(\n Object\n .entries(tagPreference)\n .map(([\n key,\n value,\n ]) => {\n return [\n key.replace(/^tag /u, ''), value,\n ];\n }),\n );\n\n if (Object.prototype.hasOwnProperty.call(tagPreferenceFixed, name)) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([\n , aliases,\n ]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {ParserMode|undefined} mode\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\nconst isValidTag = (\n context,\n mode,\n name,\n definedTags,\n) => {\n const tagNames = getTagNamesForMode(mode, context);\n\n const validTagNames = Object.keys(tagNames).concat(Object.values(tagNames).flat());\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} targetTagName\n * @returns {boolean}\n */\nconst hasTag = (jsdoc, targetTagName) => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return jsdoc.tags.some((doc) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\n/**\n * Get all tags, inline tags and inline tags in tags\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\nconst getAllTags = (jsdoc) => {\n return [\n ...jsdoc.tags,\n ...jsdoc.inlineTags.map((inlineTag) => {\n // Tags don't have source or line numbers, so add before returning\n let line = -1;\n for (const {\n tokens: {\n description,\n },\n } of jsdoc.source) {\n line++;\n if (description && description.includes(`{@${inlineTag.tag}`)) {\n break;\n }\n }\n\n inlineTag.line = line;\n\n return inlineTag;\n }),\n ...jsdoc.tags.flatMap((tag) => {\n let tagBegins = -1;\n for (const {\n tokens: {\n tag: tg,\n },\n } of jsdoc.source) {\n tagBegins++;\n if (tg) {\n break;\n }\n }\n\n for (const inlineTag of tag.inlineTags) {\n /** @type {import('./iterateJsdoc.js').Integer} */\n let line = 0;\n for (const {\n number,\n tokens: {\n description,\n },\n } of tag.source) {\n if (description && description.includes(`{@${inlineTag.tag}`)) {\n line = number;\n break;\n }\n }\n\n inlineTag.line = tagBegins + line - 1;\n }\n\n return (\n /**\n * @type {import('comment-parser').Spec & {\n * inlineTags: import('@es-joy/jsdoccomment').JsdocInlineTagNoType[]\n * }}\n */ (\n tag\n ).inlineTags\n );\n }),\n ];\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string[]} targetTagNames\n * @returns {boolean}\n */\nconst hasATag = (jsdoc, targetTagNames) => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment has an undefined type.\n * @param {import('comment-parser').Spec|null|undefined} tag\n * the tag which should be checked.\n * @param {ParserMode} mode\n * @returns {boolean}\n * true in case a defined type is undeclared; otherwise false.\n */\nconst mayBeUndefinedTypeTag = (tag, mode) => {\n // The function should not continue in the event the type is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return true;\n }\n\n // .. same applies if it declares an `{undefined}` or `{void}` type\n const tagType = tag.type.trim();\n\n // Exit early if matching\n if (\n tagType === 'undefined' || tagType === 'void' ||\n tagType === '*' || tagType === 'any'\n ) {\n return true;\n }\n\n let parsedTypes;\n try {\n parsedTypes = tryParse(\n tagType,\n mode === 'permissive' ? undefined : [\n mode,\n ],\n );\n } catch {\n // Ignore\n }\n\n if (\n // We do not traverse deeply as it could be, e.g., `Promise<void>`\n parsedTypes &&\n parsedTypes.type === 'JsdocTypeUnion' &&\n parsedTypes.elements.find((elem) => {\n return elem.type === 'JsdocTypeUndefined' ||\n elem.type === 'JsdocTypeName' && elem.value === 'void';\n })) {\n return true;\n }\n\n // In any other case, a type is present\n return false;\n};\n\n/**\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} map\n * @param {string} tag\n * @returns {Map<string, string|string[]|boolean|undefined>}\n */\nconst ensureMap = (map, tag) => {\n if (!map.has(tag)) {\n map.set(tag, new Map());\n }\n\n return /** @type {Map<string, string | boolean>} */ (map.get(tag));\n};\n\n/**\n * @param {import('./iterateJsdoc.js').StructuredTags} structuredTags\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {void}\n */\nconst overrideTagStructure = (structuredTags, tagMap = tagStructure) => {\n for (const [\n tag,\n {\n name,\n type,\n required = [],\n },\n ] of Object.entries(structuredTags)) {\n const tagStruct = ensureMap(tagMap, tag);\n\n tagStruct.set('namepathRole', name);\n tagStruct.set('typeAllowed', type);\n\n const requiredName = required.includes('name');\n if (requiredName && name === false) {\n throw new Error('Cannot add \"name\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n tagStruct.set('nameRequired', requiredName);\n\n const requiredType = required.includes('type');\n if (requiredType && type === false) {\n throw new Error('Cannot add \"type\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeRequired', requiredType);\n\n const typeOrNameRequired = required.includes('typeOrNameRequired');\n if (typeOrNameRequired && name === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n if (typeOrNameRequired && type === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeOrNameRequired', typeOrNameRequired);\n }\n};\n\n/**\n * @param {ParserMode} mode\n * @param {import('./iterateJsdoc.js').StructuredTags} structuredTags\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\nconst getTagStructureForMode = (mode, structuredTags) => {\n const tagStruct = getDefaultTagStructureForMode(mode);\n\n try {\n overrideTagStructure(structuredTags, tagStruct);\n /* c8 ignore next 3 */\n } catch {\n //\n }\n\n return tagStruct;\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathDefiningTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('namepathRole') === 'namepath-defining';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathReferencingTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n return tagStruct.get('namepathRole') === 'namepath-referencing';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathOrUrlReferencingTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n return tagStruct.get('namepathRole') === 'namepath-or-url-referencing';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveTypePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return /** @type {boolean|undefined} */ (tagStruct.get('typeRequired'));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|string}\n */\nconst tagMightHaveTypePosition = (tag, tagMap = tagStructure) => {\n if (tagMustHaveTypePosition(tag, tagMap)) {\n return true;\n }\n\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = /** @type {boolean|undefined} */ (tagStruct.get('typeAllowed'));\n\n return ret === undefined ? true : ret;\n};\n\nconst namepathTypes = new Set([\n 'namepath-defining', 'namepath-referencing',\n]);\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('namepathRole');\n\n return ret === undefined ? true : Boolean(ret);\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamepath = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const nampathRole = tagStruct.get('namepathRole');\n\n return nampathRole !== false &&\n namepathTypes.has(/** @type {string} */ (nampathRole));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return /** @type {boolean|undefined} */ (tagStruct.get('nameRequired'));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n return Boolean(tagMightHaveTypePosition(tag, tagMap)) || tagMightHaveNamepath(tag, tagMap);\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return /** @type {boolean} */ (tagStruct.get('typeOrNameRequired'));\n};\n\n/**\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => {\n const mustHaveTypePosition = tagMustHaveTypePosition(tag.tag, tagMap);\n const mightHaveTypePosition = tagMightHaveTypePosition(tag.tag, tagMap);\n const hasTypePosition = mightHaveTypePosition && Boolean(tag.type);\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition(tag.tag, tagMap) ||\n tagMightHaveNamepath(tag.tag, tagMap)\n ) && Boolean(tag.name);\n const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap);\n const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) &&\n (hasTypePosition || hasNameOrNamepathPosition);\n\n return mustHaveEither && !hasEither && !mustHaveTypePosition;\n};\n\n/* eslint-disable complexity -- Temporary */\n/**\n * @param {ESTreeOrTypeScriptNode|null|undefined} node\n * @param {boolean} [checkYieldReturnValue]\n * @returns {boolean}\n */\nconst hasNonFunctionYield = (node, checkYieldReturnValue) => {\n /* eslint-enable complexity -- Temporary */\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return ![\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(bodyNode.type) && hasNonFunctionYield(\n bodyNode, checkYieldReturnValue,\n );\n });\n }\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.arguments.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'ChainExpression':\n case 'ExpressionStatement': {\n return hasNonFunctionYield(node.expression, checkYieldReturnValue);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonFunctionYield(node.body, checkYieldReturnValue);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n }\n\n case 'TryStatement': {\n return hasNonFunctionYield(node.block, checkYieldReturnValue) ||\n hasNonFunctionYield(\n node.handler && node.handler.body, checkYieldReturnValue,\n ) ||\n hasNonFunctionYield(\n /** @type {import('@typescript-eslint/types').TSESTree.BlockStatement} */\n (node.finalizer),\n checkYieldReturnValue,\n );\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'AssignmentPattern':\n return hasNonFunctionYield(node.right, checkYieldReturnValue);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonFunctionYield(node.id, checkYieldReturnValue) ||\n hasNonFunctionYield(node.init, checkYieldReturnValue);\n }\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n hasNonFunctionYield(node.right, checkYieldReturnValue);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonFunctionYield(property, checkYieldReturnValue);\n });\n\n /* c8 ignore next -- In Babel? */\n case 'PropertyDefinition':\n /* eslint-disable no-fallthrough */\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ObjectProperty':\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ClassProperty':\n case 'Property':\n /* eslint-enable no-fallthrough */\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n hasNonFunctionYield(node.value, checkYieldReturnValue);\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ObjectMethod':\n /* c8 ignore next 6 -- In Babel? */\n // @ts-expect-error In Babel?\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n // @ts-expect-error In Babel?\n node.arguments.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n\n case 'SpreadElement':\n case 'UnaryExpression':\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n\n case 'TaggedTemplateExpression':\n return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\n\n // ?.\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonFunctionYield(node.source, checkYieldReturnValue);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n }\n\n case 'YieldExpression': {\n if (checkYieldReturnValue) {\n if (\n /** @type {import('eslint').Rule.Node} */ (\n node\n ).parent.type === 'VariableDeclarator'\n ) {\n return true;\n }\n\n return false;\n }\n\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n * @param {ESTreeOrTypeScriptNode} node\n * @param {boolean} [checkYieldReturnValue]\n * @returns {boolean}\n */\nconst hasYieldValue = (node, checkYieldReturnValue) => {\n return /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n node\n ).generator && (\n /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n node\n ).expression || hasNonFunctionYield(\n /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */\n (node).body,\n checkYieldReturnValue,\n )\n );\n};\n\n/**\n * Checks if a node has a throws statement.\n * @param {ESTreeOrTypeScriptNode|null|undefined} node\n * @param {boolean} [innerFunction]\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasThrowValue = (node, innerFunction) => {\n if (!node) {\n return false;\n }\n\n // There are cases where a function may execute its inner function which\n // throws, but we're treating functions atomically rather than trying to\n // follow them\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return !innerFunction && !node.async && hasThrowValue(node.body, true);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasThrowValue(nde);\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @param {string} tag\n */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n * @see {@link https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @see {@link https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template}\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.name\n .split(',')\n .map((type) => {\n return type.trim().replace(/^\\[(?<name>.*?)=.*\\]$/u, '$<name>');\n });\n};\n\n/**\n * @typedef {true|string[]} DefaultContexts\n */\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n * @param {import('eslint').Rule.RuleContext} context\n * @param {DefaultContexts|undefined} defaultContexts\n * @param {{\n * contexts?: import('./iterateJsdoc.js').Context[]\n * }} settings\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts, settings) => {\n const contexts = context.options[0]?.contexts || settings.contexts || (defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ] : defaultContexts);\n\n return contexts;\n};\n\n/**\n * @param {import('./iterateJsdoc.js').Context[]} contexts\n * @param {import('./iterateJsdoc.js').CheckJsdoc} checkJsdoc\n * @param {import('@es-joy/jsdoccomment').CommentHandler} [handler]\n * @returns {import('eslint').Rule.RuleListener}\n */\nconst getContextObject = (contexts, checkJsdoc, handler) => {\n /** @type {import('eslint').Rule.RuleListener} */\n const properties = {};\n\n for (const [\n idx,\n prop,\n ] of contexts.entries()) {\n /** @type {string} */\n let property;\n\n /** @type {(node: import('eslint').Rule.Node) => void} */\n let value;\n\n if (typeof prop === 'object') {\n const selInfo = {\n lastIndex: idx,\n selector: prop.context,\n };\n if (prop.comment) {\n property = /** @type {string} */ (prop.context);\n value = checkJsdoc.bind(\n null,\n {\n ...selInfo,\n comment: prop.comment,\n },\n /**\n * @type {(jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean}\n */\n (/** @type {import('@es-joy/jsdoccomment').CommentHandler} */ (\n handler\n ).bind(null, prop.comment)),\n );\n } else {\n property = /** @type {string} */ (prop.context);\n value = checkJsdoc.bind(null, selInfo, null);\n }\n } else {\n const selInfo = {\n lastIndex: idx,\n selector: prop,\n };\n property = prop;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n\n const old = /**\n * @type {((node: import('eslint').Rule.Node) => void)}\n */ (properties[property]);\n properties[property] = old ?\n /**\n * @type {((node: import('eslint').Rule.Node) => void)}\n */\n function (node) {\n old(node);\n value(node);\n } :\n value;\n }\n\n return properties;\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n 'param', 'arg', 'argument', 'property', 'prop',\n 'template',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n]);\n\n/**\n * @typedef {{\n * [key: string]: false|string|\n * {message: string, replacement?: string}\n * }} TagNamePreference\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {ParserMode|undefined} mode\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n * tagsWithNames: import('comment-parser').Spec[],\n * tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\nconst getTagsByType = (context, mode, tags) => {\n /**\n * @type {import('comment-parser').Spec[]}\n */\n const tagsWithoutNames = [];\n const tagsWithNames = tags.filter((tag) => {\n const {\n tag: tagName,\n } = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n if (!tagWithName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\n/**\n * @param {import('eslint').SourceCode|{\n * text: string\n * }} sourceCode\n * @returns {string}\n */\nconst getIndent = (sourceCode) => {\n return (sourceCode.text.match(/^\\n*([ \\t]+)/u)?.[1] ?? '') + ' ';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isConstructor = (node) => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n /** @type {import('@typescript-eslint/types').TSESTree.MethodDefinition} */ (\n node?.parent\n )?.kind === 'constructor';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isGetter = (node) => {\n return node !== null &&\n /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */ (\n node.parent\n )?.kind === 'get';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isSetter = (node) => {\n return node !== null &&\n /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */(\n node.parent\n )?.kind === 'set';\n};\n\n/**\n * @param {import('eslint').Rule.Node} node\n * @returns {boolean}\n */\nconst hasAccessorPair = (node) => {\n const {\n type,\n kind: sourceKind,\n key,\n } =\n /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */ (node);\n\n const sourceName =\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n key\n ).name;\n\n const oppositeKind = sourceKind === 'get' ? 'set' : 'get';\n\n const sibling = type === 'MethodDefinition' ?\n /** @type {import('@typescript-eslint/types').TSESTree.ClassBody} */ (\n node.parent\n ).body :\n /** @type {import('@typescript-eslint/types').TSESTree.ObjectExpression} */ (\n node.parent\n ).properties;\n\n return (\n sibling.some((child) => {\n const {\n kind,\n key: ky,\n } = /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */ (child);\n\n const name =\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n ky\n ).name;\n\n return kind === oppositeKind && name === sourceName;\n })\n );\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {import('eslint').Rule.Node|null} node\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('json-schema').JSONSchema4} schema\n * @returns {boolean}\n */\nconst exemptSpeciaMethods = (jsdoc, node, context, schema) => {\n /**\n * @param {\"checkGetters\"|\"checkSetters\"|\"checkConstructors\"} prop\n * @returns {boolean|\"no-setter\"|\"no-getter\"}\n */\n const hasSchemaOption = (prop) => {\n const schemaProperties = schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n const checkGetters = hasSchemaOption('checkGetters');\n const checkSetters = hasSchemaOption('checkSetters');\n\n return !hasSchemaOption('checkConstructors') &&\n (\n isConstructor(node) ||\n hasATag(jsdoc, [\n 'class',\n 'constructor',\n ])) ||\n isGetter(node) && (\n !checkGetters ||\n checkGetters === 'no-setter' && hasAccessorPair(/** @type {import('./iterateJsdoc.js').Node} */ (node).parent)\n ) ||\n isSetter(node) && (\n !checkSetters ||\n checkSetters === 'no-getter' && hasAccessorPair(/** @type {import('./iterateJsdoc.js').Node} */ (node).parent)\n );\n};\n\n/**\n * Since path segments may be unquoted (if matching a reserved word,\n * identifier or numeric literal) or single or double quoted, in either\n * the `@param` or in source, we need to strip the quotes to give a fair\n * comparison.\n * @param {string} str\n * @returns {string}\n */\nconst dropPathSegmentQuotes = (str) => {\n return str.replaceAll(/\\.(['\"])(.*)\\1/gu, '.$2');\n};\n\n/**\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\nconst comparePaths = (name) => {\n return (otherPathName) => {\n return otherPathName === name ||\n dropPathSegmentQuotes(otherPathName) === dropPathSegmentQuotes(name);\n };\n};\n\n/**\n * @callback PathDoesNotBeginWith\n * @param {string} name\n * @param {string} otherPathName\n * @returns {boolean}\n */\n\n/** @type {PathDoesNotBeginWith} */\nconst pathDoesNotBeginWith = (name, otherPathName) => {\n return !name.startsWith(otherPathName) &&\n !dropPathSegmentQuotes(name).startsWith(dropPathSegmentQuotes(otherPathName));\n};\n\n/**\n * @param {string} regexString\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\nconst getRegexFromString = (regexString, requiredFlags) => {\n const match = regexString.match(/^\\/(.*)\\/([gimyus]*)$/us);\n let flags = 'u';\n let regex = regexString;\n if (match) {\n [\n , regex,\n flags,\n ] = match;\n if (!flags) {\n flags = 'u';\n }\n }\n\n const uniqueFlags = [\n ...new Set(flags + (requiredFlags || '')),\n ];\n flags = uniqueFlags.join('');\n\n return new RegExp(regex, flags);\n};\n\nexport default {\n comparePaths,\n dropPathSegmentQuotes,\n enforcedContexts,\n exemptSpeciaMethods,\n flattenRoots,\n getAllTags,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getRegexFromString,\n getTagsByType,\n getTagStructureForMode,\n hasATag,\n hasParams,\n hasReturnValue,\n hasTag,\n hasThrowValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n hasYieldValue,\n isConstructor,\n isGetter,\n isNamepathDefiningTag,\n isNamepathOrUrlReferencingTag,\n isNamepathReferencingTag,\n isSetter,\n isValidTag,\n mayBeUndefinedTypeTag,\n overrideTagStructure,\n parseClosureTemplateTag,\n pathDoesNotBeginWith,\n setTagStructure,\n tagMightHaveEitherTypeOrNamePosition,\n tagMightHaveNamepath,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMissingRequiredTypeOrNamepath,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -61,6 +61,16 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
61
61
  report(`@${targetTagName} "${tag.name}" does not match an existing function parameter.`, null, tag);
62
62
  return true;
63
63
  }
64
+ if (typeof functionParameterName === 'object' && 'name' in functionParameterName && Array.isArray(functionParameterName.name)) {
65
+ const actualName = tag.name.trim();
66
+ const expectedName = functionParameterName.name[index];
67
+ if (actualName === expectedName) {
68
+ thisOffset--;
69
+ return false;
70
+ }
71
+ report(`Expected @${targetTagName} name to be "${expectedName}". Got "${actualName}".`, null, tag);
72
+ return true;
73
+ }
64
74
  if (Array.isArray(functionParameterName)) {
65
75
  if (!checkDestructured) {
66
76
  return false;
@@ -195,7 +205,9 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
195
205
  return false;
196
206
  }
197
207
  }
198
- report(`Expected @${targetTagName} names to be "${expectedNames.join(', ')}". Got "${actualNames.join(', ')}".`, null, tag);
208
+ report(`Expected @${targetTagName} names to be "${expectedNames.map(expectedName => {
209
+ return typeof expectedName === 'object' && 'name' in expectedName && expectedName.restElement ? '...' + expectedName.name : expectedName;
210
+ }).join(', ')}". Got "${actualNames.join(', ')}".`, null, tag);
199
211
  return true;
200
212
  }
201
213
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"checkParamNames.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","validateParameterNames","targetTagName","allowExtraTrailingParamDocs","checkDestructured","checkRestProperty","checkTypesRegex","disableExtraPropertyReporting","disableMissingParamChecks","enableFixer","functionParameterNames","jsdoc","utils","report","paramTags","Object","entries","tags","filter","tag","paramTagsNonNested","name","includes","dotted","thisOffset","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","Number","reportJSDoc","removeTag","functionParameterName","trim","Array","isArray","type","search","parameterName","names","properties","hasPropertyRest","rests","annotationParamName","undefined","tagName","expectedNames","map","actualNames","paramTag","actualTypes","missingProperties","notCheckingNames","notCheckingName","startsWith","actualNameIdx","findIndex","actualName","comparePaths","missingIndex","pathDoesNotBeginWith","line","source","number","length","push","tagPlacement","hasMissing","missingProperty","extraProperties","match","prop","split","extraProperty","funcParamName","item","_item$","usedExpectedNames","a","toString","expectedName","usedInOrder","every","join","validateParameterNamesDeep","_allowExtraTrailingParamDocs","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","_default","exports","iterateJsdoc","context","checkTypesPattern","useDefaultObjectProperties","options","getRegexFromString","jsdocParameterNamesDeep","getJsdocTagsDeep","getFunctionParameterNames","getPreferredTagName","isError","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","module"],"sources":["../../src/rules/checkParamNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} allowExtraTrailingParamDocs\n * @param {boolean} checkDestructured\n * @param {boolean} checkRestProperty\n * @param {RegExp} checkTypesRegex\n * @param {boolean} disableExtraPropertyReporting\n * @param {boolean} disableMissingParamChecks\n * @param {boolean} enableFixer\n * @param {import('../jsdocUtils.js').ParamNameInfo[]} functionParameterNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {import('../iterateJsdoc.js').Report} report\n * @returns {boolean}\n */\nconst validateParameterNames = (\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n disableMissingParamChecks,\n enableFixer,\n functionParameterNames, jsdoc, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([\n , tag,\n ]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n let thisOffset = 0;\n\n // eslint-disable-next-line complexity\n return paramTags.some(([\n , tag,\n ], index) => {\n /** @type {import('../iterateJsdoc.js').Integer} */\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = Number(tgsIndex);\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n let functionParameterName = functionParameterNames[index - dotted + thisOffset];\n if (functionParameterName === 'this' && tag.name.trim() !== 'this') {\n ++thisOffset;\n functionParameterName = functionParameterNames[index - dotted + thisOffset];\n }\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [\n parameterName,\n {\n names: properties,\n hasPropertyRest,\n rests,\n annotationParamName,\n },\n ] =\n /**\n * @type {[string | undefined, import('../jsdocUtils.js').FlattendRootInfo & {\n * annotationParamName?: string | undefined;\n }]} */ (functionParameterName);\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n\n /** @type {string[]} */\n const notCheckingNames = [];\n\n for (const [\n idx,\n name,\n ] of expectedNames.entries()) {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n continue;\n }\n\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const missingIndex = actualNames.findIndex((actualName) => {\n return utils.pathDoesNotBeginWith(name, actualName);\n });\n const line = tag.source[0].number - 1 + (missingIndex > -1 ? missingIndex : actualNames.length);\n missingProperties.push({\n name,\n tagPlacement: {\n line: line === 0 ? 1 : line,\n },\n });\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n for (const {\n tagPlacement,\n name: missingProperty,\n } of missingProperties) {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tagPlacement);\n }\n }\n\n if (!hasPropertyRest || checkRestProperty) {\n /** @type {[string, import('comment-parser').Spec][]} */\n const extraProperties = [];\n for (const [\n idx,\n name,\n ] of actualNames.entries()) {\n const match = name.startsWith(tag.name.trim() + '.');\n if (\n match && !expectedNames.some(\n utils.comparePaths(name),\n ) && !utils.comparePaths(name)(tag.name) &&\n (!disableExtraPropertyReporting || properties.some((prop) => {\n return prop.split('.').length >= name.split('.').length - 1;\n }))\n ) {\n extraProperties.push([\n name, paramTags[idx][1],\n ]);\n }\n }\n\n if (extraProperties.length) {\n for (const [\n extraProperty,\n tg,\n ] of extraProperties) {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n }\n\n return true;\n }\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {\n name,\n } = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([\n , {\n name,\n },\n ]) => {\n return name.trim();\n });\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (/**\n * @type {[string|undefined, (import('../jsdocUtils.js').FlattendRootInfo & {\n * annotationParamName?: string,\n })]} */ (item)?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).filter((item) => {\n return item !== 'this';\n });\n\n // When disableMissingParamChecks is true tag names can be omitted.\n // Report when the tag names do not match the expected names or they are used out of order.\n if (disableMissingParamChecks) {\n const usedExpectedNames = expectedNames.map(a => a?.toString()).filter(expectedName => expectedName && actualNames.includes(expectedName));\n const usedInOrder = actualNames.every((actualName, idx) => actualName === usedExpectedNames[idx]);\n if (usedInOrder) {\n return false;\n }\n }\n\n report(\n `Expected @${targetTagName} names to be \"${expectedNames.join(', ')}\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {boolean} _allowExtraTrailingParamDocs\n * @param {{\n * name: string,\n * idx: import('../iterateJsdoc.js').Integer\n * }[]} jsdocParameterNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {Function} report\n * @returns {boolean}\n */\nconst validateParameterNamesDeep = (\n targetTagName, _allowExtraTrailingParamDocs,\n jsdocParameterNames, jsdoc, report,\n) => {\n /** @type {string} */\n let lastRealParameter;\n\n return jsdocParameterNames.some(({\n name: jsdocParameterName,\n idx,\n }) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = false,\n useDefaultObjectProperties = false,\n disableExtraPropertyReporting = false,\n disableMissingParamChecks = false,\n } = context.options[0] || {};\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep || !jsdocParameterNamesDeep.length) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n const targetTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'param',\n }));\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n disableMissingParamChecks,\n enableFixer,\n functionParameterNames,\n jsdoc,\n utils,\n report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,\n );\n}, {\n contextDefaults: [\n 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction',\n // Add this to above defaults\n 'TSMethodSignature'\n ],\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-param-names.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n disableExtraPropertyReporting: {\n type: 'boolean',\n },\n disableMissingParamChecks: {\n type: 'boolean',\n },\n enableFixer: {\n type: 'boolean',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"checkParamNames.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","validateParameterNames","targetTagName","allowExtraTrailingParamDocs","checkDestructured","checkRestProperty","checkTypesRegex","disableExtraPropertyReporting","disableMissingParamChecks","enableFixer","functionParameterNames","jsdoc","utils","report","paramTags","Object","entries","tags","filter","tag","paramTagsNonNested","name","includes","dotted","thisOffset","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","Number","reportJSDoc","removeTag","functionParameterName","trim","Array","isArray","actualName","expectedName","type","search","parameterName","names","properties","hasPropertyRest","rests","annotationParamName","undefined","tagName","expectedNames","map","actualNames","paramTag","actualTypes","missingProperties","notCheckingNames","notCheckingName","startsWith","actualNameIdx","findIndex","comparePaths","missingIndex","pathDoesNotBeginWith","line","source","number","length","push","tagPlacement","hasMissing","missingProperty","extraProperties","match","prop","split","extraProperty","funcParamName","item","_item$","usedExpectedNames","a","toString","usedInOrder","every","restElement","join","validateParameterNamesDeep","_allowExtraTrailingParamDocs","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","_default","exports","iterateJsdoc","context","checkTypesPattern","useDefaultObjectProperties","options","getRegexFromString","jsdocParameterNamesDeep","getJsdocTagsDeep","getFunctionParameterNames","getPreferredTagName","isError","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","module"],"sources":["../../src/rules/checkParamNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} allowExtraTrailingParamDocs\n * @param {boolean} checkDestructured\n * @param {boolean} checkRestProperty\n * @param {RegExp} checkTypesRegex\n * @param {boolean} disableExtraPropertyReporting\n * @param {boolean} disableMissingParamChecks\n * @param {boolean} enableFixer\n * @param {import('../jsdocUtils.js').ParamNameInfo[]} functionParameterNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {import('../iterateJsdoc.js').Report} report\n * @returns {boolean}\n */\nconst validateParameterNames = (\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n disableMissingParamChecks,\n enableFixer,\n functionParameterNames, jsdoc, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([\n , tag,\n ]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n let thisOffset = 0;\n\n // eslint-disable-next-line complexity\n return paramTags.some(([\n , tag,\n ], index) => {\n /** @type {import('../iterateJsdoc.js').Integer} */\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = Number(tgsIndex);\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n let functionParameterName = functionParameterNames[index - dotted + thisOffset];\n if (functionParameterName === 'this' && tag.name.trim() !== 'this') {\n ++thisOffset;\n functionParameterName = functionParameterNames[index - dotted + thisOffset];\n }\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n if (\n typeof functionParameterName === 'object' &&\n 'name' in functionParameterName &&\n Array.isArray(functionParameterName.name)\n ) {\n const actualName = tag.name.trim();\n const expectedName = functionParameterName.name[index];\n if (actualName === expectedName) {\n thisOffset--;\n return false;\n }\n report(\n `Expected @${targetTagName} name to be \"${expectedName}\". Got \"${actualName}\".`,\n null,\n tag,\n );\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [\n parameterName,\n {\n names: properties,\n hasPropertyRest,\n rests,\n annotationParamName,\n },\n ] =\n /**\n * @type {[string | undefined, import('../jsdocUtils.js').FlattendRootInfo & {\n * annotationParamName?: string | undefined;\n }]} */ (functionParameterName);\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n\n /** @type {string[]} */\n const notCheckingNames = [];\n\n for (const [\n idx,\n name,\n ] of expectedNames.entries()) {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n continue;\n }\n\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const missingIndex = actualNames.findIndex((actualName) => {\n return utils.pathDoesNotBeginWith(name, actualName);\n });\n const line = tag.source[0].number - 1 + (missingIndex > -1 ? missingIndex : actualNames.length);\n missingProperties.push({\n name,\n tagPlacement: {\n line: line === 0 ? 1 : line,\n },\n });\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n for (const {\n tagPlacement,\n name: missingProperty,\n } of missingProperties) {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tagPlacement);\n }\n }\n\n if (!hasPropertyRest || checkRestProperty) {\n /** @type {[string, import('comment-parser').Spec][]} */\n const extraProperties = [];\n for (const [\n idx,\n name,\n ] of actualNames.entries()) {\n const match = name.startsWith(tag.name.trim() + '.');\n if (\n match && !expectedNames.some(\n utils.comparePaths(name),\n ) && !utils.comparePaths(name)(tag.name) &&\n (!disableExtraPropertyReporting || properties.some((prop) => {\n return prop.split('.').length >= name.split('.').length - 1;\n }))\n ) {\n extraProperties.push([\n name, paramTags[idx][1],\n ]);\n }\n }\n\n if (extraProperties.length) {\n for (const [\n extraProperty,\n tg,\n ] of extraProperties) {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n }\n\n return true;\n }\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {\n name,\n } = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([\n , {\n name,\n },\n ]) => {\n return name.trim();\n });\n\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (/**\n * @type {[string|undefined, (import('../jsdocUtils.js').FlattendRootInfo & {\n * annotationParamName?: string,\n })]} */ (item)?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).filter((item) => {\n return item !== 'this';\n });\n\n // When disableMissingParamChecks is true tag names can be omitted.\n // Report when the tag names do not match the expected names or they are used out of order.\n if (disableMissingParamChecks) {\n const usedExpectedNames = expectedNames.map(a => a?.toString()).filter(expectedName => expectedName && actualNames.includes(expectedName));\n const usedInOrder = actualNames.every((actualName, idx) => actualName === usedExpectedNames[idx]);\n if (usedInOrder) {\n return false;\n }\n }\n\n report(\n `Expected @${targetTagName} names to be \"${\n expectedNames.map((expectedName) => {\n return typeof expectedName === 'object' &&\n 'name' in expectedName &&\n expectedName.restElement\n ? '...' + expectedName.name\n : expectedName;\n }).join(', ')\n }\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {boolean} _allowExtraTrailingParamDocs\n * @param {{\n * name: string,\n * idx: import('../iterateJsdoc.js').Integer\n * }[]} jsdocParameterNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {Function} report\n * @returns {boolean}\n */\nconst validateParameterNamesDeep = (\n targetTagName, _allowExtraTrailingParamDocs,\n jsdocParameterNames, jsdoc, report,\n) => {\n /** @type {string} */\n let lastRealParameter;\n\n return jsdocParameterNames.some(({\n name: jsdocParameterName,\n idx,\n }) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = false,\n useDefaultObjectProperties = false,\n disableExtraPropertyReporting = false,\n disableMissingParamChecks = false,\n } = context.options[0] || {};\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep || !jsdocParameterNamesDeep.length) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n\n const targetTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'param',\n }));\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n disableMissingParamChecks,\n enableFixer,\n functionParameterNames,\n jsdoc,\n utils,\n report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,\n );\n}, {\n contextDefaults: [\n 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction',\n // Add this to above defaults\n 'TSMethodSignature'\n ],\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-param-names.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n disableExtraPropertyReporting: {\n type: 'boolean',\n },\n disableMissingParamChecks: {\n type: 'boolean',\n },\n enableFixer: {\n type: 'boolean',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -194,7 +194,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
194
194
  for (const [functionParameterIdx, functionParameterName] of functionParameterNames.entries()) {
195
195
  let inc;
196
196
  if (Array.isArray(functionParameterName)) {
197
- const matchedJsdoc = shallowJsdocParameterNames[functionParameterIdx - thisOffset] || jsdocParameterNames[functionParameterIdx - thisOffset];
197
+ const matchedJsdoc = shallowJsdocParameterNames[functionParameterIdx - thisOffset];
198
198
 
199
199
  /** @type {string} */
200
200
  let rootName;
@@ -208,8 +208,8 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
208
208
  } else {
209
209
  rootName = nextRootName;
210
210
  inc = incremented;
211
- [nextRootName, incremented, namer] = namer();
212
211
  }
212
+ [nextRootName, incremented, namer] = namer();
213
213
  const {
214
214
  hasRestElement,
215
215
  hasPropertyRest,