eslint-plugin-jsdoc 51.2.1 → 51.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1236,7 +1236,7 @@ const isInlineTag = (tag) => {
1236
1236
  exports.hasThrowValue = hasThrowValue;
1237
1237
  const parseClosureTemplateTag = tag => {
1238
1238
  return tag.name.split(',').map(type => {
1239
- return type.trim().replace(/^\[(?<name>.*?)=.*\]$/u, '$<name>');
1239
+ return type.trim().replace(/^\[?(?<name>.*?)=.*$/u, '$<name>');
1240
1240
  });
1241
1241
  };
1242
1242
 
@@ -1 +1 @@
1
- {"version":3,"file":"jsdocUtils.cjs","names":["_getDefaultTagStructureForMode","_interopRequireDefault","require","_tagNames","_WarnSettings","_jsdoccomment","_hasReturnValue","e","__esModule","default","tagStructure","setTagStructure","mode","getDefaultTagStructureForMode","exports","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","getParamName","param","isProperty","hasLeftTypeAnnotation","left","propertyNames","annotationParamName","hasLeftName","properties","roots","prop","value","elements","idx","right","raw","includes","argument","parameter","Error","hasParams","length","getJsdocTagsDeep","jsdoc","targetTagName","ret","tag","tags","entries","modeWarnSettings","WarnSettings","getTagNamesForMode","context","closureTags","jsdocTags","typeScriptTags","hasBeenWarned","report","loc","end","column","line","start","message","markSettingAsWarned","getTagDescription","tg","returnArray","descriptions","source","some","tokens","description","lineEnd","postDelimiter","postTag","desc","slice","join","getPreferredTagNameSimple","tagPreference","prefValues","Object","values","prefVal","replacement","tagPreferenceFixed","fromEntries","replace","prototype","hasOwnProperty","call","tagNames","preferredTagName","find","aliases","isValidTag","definedTags","validTagNames","keys","flat","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","filterTags","getTags","tagName","item","getPreferredTagName","allowObjectReturn","defaultMessage","skipReportingBlockedTag","tagNamePreference","isObject","blocked","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getAllTags","inlineTags","inlineTag","flatMap","tagBegins","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","element","body","bodyNode","arguments","expression","computed","test","consequent","alternate","object","property","nde","expressions","subExpression","cases","someCase","quasi","block","handler","finalizer","declarations","id","init","parent","hasYieldValue","generator","hasThrowValue","innerFunction","async","parseClosureTemplateTag","split","enforcedContexts","defaultContexts","settings","contexts","options","getContextObject","checkJsdoc","selInfo","lastIndex","selector","comment","bind","old","tagsWithNamesAndDescriptions","getTagsByType","tagsWithoutNames","tagsWithNames","tagWithName","getIndent","sourceCode","text","match","isConstructor","kind","isGetter","isSetter","hasAccessorPair","sourceKind","sourceName","oppositeKind","sibling","child","ky","exemptSpeciaMethods","schema","hasSchemaOption","schemaProperties","checkGetters","checkSetters","dropPathSegmentQuotes","str","replaceAll","comparePaths","otherPathName","pathDoesNotBeginWith","startsWith","getRegexFromString","regexString","requiredFlags","flags","regex","uniqueFlags","RegExp"],"sources":["../src/jsdocUtils.js"],"sourcesContent":["import getDefaultTagStructureForMode from './getDefaultTagStructureForMode.js';\nimport {\n closureTags,\n jsdocTags,\n typeScriptTags,\n} from './tagNames.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 '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 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 }\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 'ExperimentalRestProperty', 'RestElement',\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(({\n // @ts-expect-error Ok\n name,\n }) => {\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 {Reporter} context\n * @returns {import('./tagNames.js').AliasedTags}\n */\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'closure':\n case 'permissive':\n return closureTags;\n case 'jsdoc':\n return jsdocTags; case 'typescript':\n return typeScriptTags;\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('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\nconst getTagDescription = (tg, returnArray) => {\n /**\n * @type {string[]}\n */\n const descriptions = [];\n tg.source.some(({\n tokens: {\n description,\n end,\n lineEnd,\n name,\n postDelimiter,\n postTag,\n tag,\n type,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return returnArray ? descriptions : descriptions.join('\\n');\n};\n\n/**\n * @typedef {{\n * report: (descriptor: import('eslint').Rule.ReportDescriptor) => void\n * }} Reporter\n */\n\n/**\n * @param {string} name\n * @param {ParserMode|undefined} mode\n * @param {TagNamePreference} tagPreference\n * @param {Reporter} context\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined;\n * }}\n */\nconst getPreferredTagNameSimple = (\n name,\n mode,\n tagPreference = {},\n // eslint-disable-next-line unicorn/no-object-as-default-parameter -- Ok\n context = {\n report () {\n // No-op\n },\n },\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 * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\nconst filterTags = (jsdoc, filter) => {\n return jsdoc.tags.filter((tag) => {\n return filter(tag);\n });\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\nconst getTags = (jsdoc, tagName) => {\n return filterTags(jsdoc, (item) => {\n return item.tag === tagName;\n });\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {{\n * tagName: string,\n * context?: import('eslint').Rule.RuleContext,\n * mode?: ParserMode,\n * report?: import('./iterateJsdoc.js').Report\n * tagNamePreference?: TagNamePreference\n * skipReportingBlockedTag?: boolean,\n * allowObjectReturn?: boolean,\n * defaultMessage?: string,\n * }} cfg\n * @returns {string|undefined|false|{\n * message: string;\n * replacement?: string|undefined;\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\nconst getPreferredTagName = (jsdoc, {\n allowObjectReturn = false,\n context,\n tagName,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n mode,\n report = () => {},\n skipReportingBlockedTag = false,\n tagNamePreference,\n}) => {\n const ret = getPreferredTagNameSimple(tagName, mode, tagNamePreference, context);\n const isObject = ret && typeof ret === 'object';\n if (hasTag(jsdoc, tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, getTags(jsdoc, tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} tagName\n * @param {(\n * matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n * targetTagName: string\n * ) => void} arrayHandler\n * @param {object} cfg\n * @param {import('eslint').Rule.RuleContext} [cfg.context]\n * @param {ParserMode} [cfg.mode]\n * @param {import('./iterateJsdoc.js').Report} [cfg.report]\n * @param {TagNamePreference} [cfg.tagNamePreference]\n * @param {boolean} [cfg.skipReportingBlockedTag]\n * @returns {void}\n */\nconst forEachPreferredTag = (\n jsdoc, tagName, arrayHandler,\n {\n context,\n mode,\n report,\n skipReportingBlockedTag = false,\n tagNamePreference,\n } = {},\n) => {\n const targetTagName = /** @type {string|false} */ (\n getPreferredTagName(jsdoc, {\n context,\n mode,\n report,\n skipReportingBlockedTag,\n tagName,\n tagNamePreference,\n })\n );\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(\n /**\n * @type {import('@es-joy/jsdoccomment').JsdocTagWithInline}\n */ (\n matchingJsdocTag\n ), targetTagName,\n );\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 required = [],\n type,\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 'ArrayExpression':\n\n case 'ArrayPattern':\n return node.elements.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n hasNonFunctionYield(node.right, checkYieldReturnValue);\n }\n\n case 'AssignmentPattern':\n return hasNonFunctionYield(node.right, checkYieldReturnValue);\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 case 'CallExpression':\n // @ts-expect-error In Babel?\n case 'OptionalCallExpression':\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 /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ClassProperty':\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ObjectProperty':\n /* c8 ignore next 2 -- In Babel? */\n case 'Property':\n\n case 'PropertyDefinition':\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n hasNonFunctionYield(node.value, checkYieldReturnValue);\n\n case 'ConditionalExpression':\n\n case 'IfStatement': {\n return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n }\n\n case 'DoWhileStatement':\n case 'ForInStatement':\n\n case 'ForOfStatement':\n\n case 'ForStatement':\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'WithStatement': {\n return hasNonFunctionYield(node.body, checkYieldReturnValue);\n }\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 // ?.\n /* c8 ignore next 2 -- In Babel? */\n case 'MemberExpression':\n // @ts-expect-error In Babel?\n case 'OptionalMemberExpression':\n return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n case 'ObjectExpression':\n /* eslint-disable no-fallthrough */\n case 'ObjectPattern':\n /* eslint-enable no-fallthrough */\n return node.properties.some((property) => {\n return hasNonFunctionYield(property, checkYieldReturnValue);\n });\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 case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n }\n\n // Comma\n case 'SequenceExpression':\n\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n });\n case 'SpreadElement':\n\n case 'UnaryExpression':\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\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 'TaggedTemplateExpression':\n return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\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 '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 '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 'ArrowFunctionExpression':\n case 'FunctionDeclaration':\n case 'FunctionExpression': {\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 'DoWhileStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'ForStatement':\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\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 // 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 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|import('./iterateJsdoc.js').ContextObject)[]}\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 'arg', 'argument', 'param', 'prop', 'property',\n 'return',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'template',\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 key,\n kind: sourceKind,\n type,\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 key: ky,\n kind,\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 {\n comparePaths,\n dropPathSegmentQuotes,\n enforcedContexts,\n exemptSpeciaMethods,\n filterTags,\n flattenRoots,\n forEachPreferredTag,\n getAllTags,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getPreferredTagNameSimple,\n getRegexFromString,\n getTagDescription,\n getTags,\n getTagsByType,\n getTagStructureForMode,\n hasATag,\n hasParams,\n\n hasTag,\n hasThrowValue,\n\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};\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n} from './utils/hasReturnValue.js';\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"jsdocUtils.cjs","names":["_getDefaultTagStructureForMode","_interopRequireDefault","require","_tagNames","_WarnSettings","_jsdoccomment","_hasReturnValue","e","__esModule","default","tagStructure","setTagStructure","mode","getDefaultTagStructureForMode","exports","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","getParamName","param","isProperty","hasLeftTypeAnnotation","left","propertyNames","annotationParamName","hasLeftName","properties","roots","prop","value","elements","idx","right","raw","includes","argument","parameter","Error","hasParams","length","getJsdocTagsDeep","jsdoc","targetTagName","ret","tag","tags","entries","modeWarnSettings","WarnSettings","getTagNamesForMode","context","closureTags","jsdocTags","typeScriptTags","hasBeenWarned","report","loc","end","column","line","start","message","markSettingAsWarned","getTagDescription","tg","returnArray","descriptions","source","some","tokens","description","lineEnd","postDelimiter","postTag","desc","slice","join","getPreferredTagNameSimple","tagPreference","prefValues","Object","values","prefVal","replacement","tagPreferenceFixed","fromEntries","replace","prototype","hasOwnProperty","call","tagNames","preferredTagName","find","aliases","isValidTag","definedTags","validTagNames","keys","flat","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","filterTags","getTags","tagName","item","getPreferredTagName","allowObjectReturn","defaultMessage","skipReportingBlockedTag","tagNamePreference","isObject","blocked","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getAllTags","inlineTags","inlineTag","flatMap","tagBegins","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","element","body","bodyNode","arguments","expression","computed","test","consequent","alternate","object","property","nde","expressions","subExpression","cases","someCase","quasi","block","handler","finalizer","declarations","id","init","parent","hasYieldValue","generator","hasThrowValue","innerFunction","async","parseClosureTemplateTag","split","enforcedContexts","defaultContexts","settings","contexts","options","getContextObject","checkJsdoc","selInfo","lastIndex","selector","comment","bind","old","tagsWithNamesAndDescriptions","getTagsByType","tagsWithoutNames","tagsWithNames","tagWithName","getIndent","sourceCode","text","match","isConstructor","kind","isGetter","isSetter","hasAccessorPair","sourceKind","sourceName","oppositeKind","sibling","child","ky","exemptSpeciaMethods","schema","hasSchemaOption","schemaProperties","checkGetters","checkSetters","dropPathSegmentQuotes","str","replaceAll","comparePaths","otherPathName","pathDoesNotBeginWith","startsWith","getRegexFromString","regexString","requiredFlags","flags","regex","uniqueFlags","RegExp"],"sources":["../src/jsdocUtils.js"],"sourcesContent":["import getDefaultTagStructureForMode from './getDefaultTagStructureForMode.js';\nimport {\n closureTags,\n jsdocTags,\n typeScriptTags,\n} from './tagNames.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 '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 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 }\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 'ExperimentalRestProperty', 'RestElement',\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(({\n // @ts-expect-error Ok\n name,\n }) => {\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 {Reporter} context\n * @returns {import('./tagNames.js').AliasedTags}\n */\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'closure':\n case 'permissive':\n return closureTags;\n case 'jsdoc':\n return jsdocTags; case 'typescript':\n return typeScriptTags;\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('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\nconst getTagDescription = (tg, returnArray) => {\n /**\n * @type {string[]}\n */\n const descriptions = [];\n tg.source.some(({\n tokens: {\n description,\n end,\n lineEnd,\n name,\n postDelimiter,\n postTag,\n tag,\n type,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return returnArray ? descriptions : descriptions.join('\\n');\n};\n\n/**\n * @typedef {{\n * report: (descriptor: import('eslint').Rule.ReportDescriptor) => void\n * }} Reporter\n */\n\n/**\n * @param {string} name\n * @param {ParserMode|undefined} mode\n * @param {TagNamePreference} tagPreference\n * @param {Reporter} context\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined;\n * }}\n */\nconst getPreferredTagNameSimple = (\n name,\n mode,\n tagPreference = {},\n // eslint-disable-next-line unicorn/no-object-as-default-parameter -- Ok\n context = {\n report () {\n // No-op\n },\n },\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 * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\nconst filterTags = (jsdoc, filter) => {\n return jsdoc.tags.filter((tag) => {\n return filter(tag);\n });\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\nconst getTags = (jsdoc, tagName) => {\n return filterTags(jsdoc, (item) => {\n return item.tag === tagName;\n });\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {{\n * tagName: string,\n * context?: import('eslint').Rule.RuleContext,\n * mode?: ParserMode,\n * report?: import('./iterateJsdoc.js').Report\n * tagNamePreference?: TagNamePreference\n * skipReportingBlockedTag?: boolean,\n * allowObjectReturn?: boolean,\n * defaultMessage?: string,\n * }} cfg\n * @returns {string|undefined|false|{\n * message: string;\n * replacement?: string|undefined;\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\nconst getPreferredTagName = (jsdoc, {\n allowObjectReturn = false,\n context,\n tagName,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n mode,\n report = () => {},\n skipReportingBlockedTag = false,\n tagNamePreference,\n}) => {\n const ret = getPreferredTagNameSimple(tagName, mode, tagNamePreference, context);\n const isObject = ret && typeof ret === 'object';\n if (hasTag(jsdoc, tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, getTags(jsdoc, tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} tagName\n * @param {(\n * matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n * targetTagName: string\n * ) => void} arrayHandler\n * @param {object} cfg\n * @param {import('eslint').Rule.RuleContext} [cfg.context]\n * @param {ParserMode} [cfg.mode]\n * @param {import('./iterateJsdoc.js').Report} [cfg.report]\n * @param {TagNamePreference} [cfg.tagNamePreference]\n * @param {boolean} [cfg.skipReportingBlockedTag]\n * @returns {void}\n */\nconst forEachPreferredTag = (\n jsdoc, tagName, arrayHandler,\n {\n context,\n mode,\n report,\n skipReportingBlockedTag = false,\n tagNamePreference,\n } = {},\n) => {\n const targetTagName = /** @type {string|false} */ (\n getPreferredTagName(jsdoc, {\n context,\n mode,\n report,\n skipReportingBlockedTag,\n tagName,\n tagNamePreference,\n })\n );\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(\n /**\n * @type {import('@es-joy/jsdoccomment').JsdocTagWithInline}\n */ (\n matchingJsdocTag\n ), targetTagName,\n );\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 required = [],\n type,\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 'ArrayExpression':\n\n case 'ArrayPattern':\n return node.elements.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n hasNonFunctionYield(node.right, checkYieldReturnValue);\n }\n\n case 'AssignmentPattern':\n return hasNonFunctionYield(node.right, checkYieldReturnValue);\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 case 'CallExpression':\n // @ts-expect-error In Babel?\n case 'OptionalCallExpression':\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 /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ClassProperty':\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ObjectProperty':\n /* c8 ignore next 2 -- In Babel? */\n case 'Property':\n\n case 'PropertyDefinition':\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n hasNonFunctionYield(node.value, checkYieldReturnValue);\n\n case 'ConditionalExpression':\n\n case 'IfStatement': {\n return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n }\n\n case 'DoWhileStatement':\n case 'ForInStatement':\n\n case 'ForOfStatement':\n\n case 'ForStatement':\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'WithStatement': {\n return hasNonFunctionYield(node.body, checkYieldReturnValue);\n }\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 // ?.\n /* c8 ignore next 2 -- In Babel? */\n case 'MemberExpression':\n // @ts-expect-error In Babel?\n case 'OptionalMemberExpression':\n return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n case 'ObjectExpression':\n /* eslint-disable no-fallthrough */\n case 'ObjectPattern':\n /* eslint-enable no-fallthrough */\n return node.properties.some((property) => {\n return hasNonFunctionYield(property, checkYieldReturnValue);\n });\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 case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n }\n\n // Comma\n case 'SequenceExpression':\n\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n });\n case 'SpreadElement':\n\n case 'UnaryExpression':\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\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 'TaggedTemplateExpression':\n return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\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 '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 '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 'ArrowFunctionExpression':\n case 'FunctionDeclaration':\n case 'FunctionExpression': {\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 'DoWhileStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'ForStatement':\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\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 // 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 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|import('./iterateJsdoc.js').ContextObject)[]}\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 'arg', 'argument', 'param', 'prop', 'property',\n 'return',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'template',\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 key,\n kind: sourceKind,\n type,\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 key: ky,\n kind,\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 {\n comparePaths,\n dropPathSegmentQuotes,\n enforcedContexts,\n exemptSpeciaMethods,\n filterTags,\n flattenRoots,\n forEachPreferredTag,\n getAllTags,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getPreferredTagNameSimple,\n getRegexFromString,\n getTagDescription,\n getTags,\n getTagsByType,\n getTagStructureForMode,\n hasATag,\n hasParams,\n\n hasTag,\n hasThrowValue,\n\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};\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n} from './utils/hasReturnValue.js';\n"],"mappings":"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","ignoreList":[]}
@@ -313,7 +313,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
313
313
  if (
314
314
  // Avoid appending for imports and globals since we don't want to
315
315
  // check their properties which may or may not exist
316
- !imports.includes(val) && !globals.includes(val) && currNode && 'right' in currNode && currNode.right?.type === 'JsdocTypeProperty') {
316
+ !imports.includes(val) && !globals.includes(val) && !importTags.includes(val) && !typedefDeclarations.includes(val) && currNode && 'right' in currNode && currNode.right?.type === 'JsdocTypeProperty') {
317
317
  val = val + '.' + currNode.right.value;
318
318
  }
319
319
  } while (currNode?.type === 'JsdocTypeNamePath');
@@ -1 +1 @@
1
- {"version":3,"file":"noUndefinedTypes.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","allComments","getAllComments","comments","comment","test","value","commentNode","parseComment","globals","flatMap","trim","split","concat","languageOptions","typedefDeclarations","doc","tags","tag","isNamepathDefiningTag","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","imports","allDefinedTypes","identifiers","includes","body","methodOrProp","key","id","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","right","structuredTypes","Array","isArray","markVariableAsUsed","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean\n * }}\n */ {\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/u).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/u, '').trim().split(/,\\s*/u);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefDeclarations = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdoc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).map(({\n identifiers,\n name,\n }) => {\n if (\n [\n 'ImportDefaultSpecifier',\n 'ImportNamespaceSpecifier',\n 'ImportSpecifier',\n ].includes(\n /** @type {import('estree').Identifier & {parent: {type: string}}} */ (\n identifiers?.[0])?.parent?.type,\n )\n ) {\n imports.push(name);\n }\n\n return name;\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 2 */\n sourceCode.getScope(node)) ||\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty') {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))\n ) {\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 3 */\n } else {\n context.markVariableAsUsed(val);\n }\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\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":"noUndefinedTypes.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","allComments","getAllComments","comments","comment","test","value","commentNode","parseComment","globals","flatMap","trim","split","concat","languageOptions","typedefDeclarations","doc","tags","tag","isNamepathDefiningTag","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","imports","allDefinedTypes","identifiers","includes","body","methodOrProp","key","id","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","right","structuredTypes","Array","isArray","markVariableAsUsed","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean\n * }}\n */ {\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/u).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/u, '').trim().split(/,\\s*/u);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefDeclarations = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdoc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).map(({\n identifiers,\n name,\n }) => {\n if (\n [\n 'ImportDefaultSpecifier',\n 'ImportNamespaceSpecifier',\n 'ImportSpecifier',\n ].includes(\n /** @type {import('estree').Identifier & {parent: {type: string}}} */ (\n identifiers?.[0])?.parent?.type,\n )\n ) {\n imports.push(name);\n }\n\n return name;\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 2 */\n sourceCode.getScope(node)) ||\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !typedefDeclarations.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty') {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))\n ) {\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 3 */\n } else {\n context.markVariableAsUsed(val);\n }\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -22,18 +22,18 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
22
22
  } = settings;
23
23
  const usedNames = new Set();
24
24
  const templateTags = utils.getTags('template');
25
- const templateNames = templateTags.flatMap(({
26
- name
27
- }) => {
28
- return name.split(/,\s*/u);
25
+ const templateNames = templateTags.flatMap(tag => {
26
+ return utils.parseClosureTemplateTag(tag);
29
27
  });
30
- for (const tag of templateTags) {
31
- const {
32
- name
33
- } = tag;
34
- const names = name.split(/,\s*/u);
35
- if (requireSeparateTemplates && names.length > 1) {
36
- report(`Missing separate @template for ${names[1]}`, null, tag);
28
+ if (requireSeparateTemplates) {
29
+ for (const tag of templateTags) {
30
+ const {
31
+ name
32
+ } = tag;
33
+ const names = name.split(/,\s*/u);
34
+ if (names.length > 1) {
35
+ report(`Missing separate @template for ${names[1]}`, null, tag);
36
+ }
37
37
  }
38
38
  }
39
39
 
@@ -1 +1 @@
1
- {"version":3,"file":"requireTemplate.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","e","__esModule","default","_default","exports","iterateJsdoc","context","node","report","settings","utils","requireSeparateTemplates","options","mode","usedNames","Set","templateTags","getTags","templateNames","flatMap","name","split","tag","names","length","checkTypeParams","aliasDeclaration","params","typeParameters","add","usedName","includes","handleTypes","nde","type","declaration","usedNameToTag","Map","checkForUsedTypes","potentialTag","parsedType","tryParseType","parseType","traverse","value","test","has","set","checkTagsAndTemplates","tagNames","tagName","preferredTagName","getPreferredTagName","matchingTags","matchingTag","get","callbackTags","functionTags","typedefTags","potentialTypedef","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","module"],"sources":["../../src/rules/requireTemplate.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n requireSeparateTemplates = false,\n } = context.options[0] || {};\n\n const {\n mode,\n } = settings;\n\n const usedNames = new Set();\n const templateTags = utils.getTags('template');\n const templateNames = templateTags.flatMap(({\n name,\n }) => {\n return name.split(/,\\s*/u);\n });\n\n for (const tag of templateTags) {\n const {\n name,\n } = tag;\n const names = name.split(/,\\s*/u);\n if (requireSeparateTemplates && names.length > 1) {\n report(`Missing separate @template for ${names[1]}`, null, tag);\n }\n }\n\n /**\n * @param {import('@typescript-eslint/types').TSESTree.FunctionDeclaration|\n * import('@typescript-eslint/types').TSESTree.ClassDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSTypeAliasDeclaration} aliasDeclaration\n */\n const checkTypeParams = (aliasDeclaration) => {\n const {\n params,\n /* c8 ignore next -- Guard */\n } = aliasDeclaration.typeParameters ?? {\n /* c8 ignore next -- Guard */\n params: [],\n };\n for (const {\n name: {\n name,\n },\n } of params) {\n usedNames.add(name);\n }\n\n for (const usedName of usedNames) {\n if (!templateNames.includes(usedName)) {\n report(`Missing @template ${usedName}`);\n }\n }\n };\n\n const handleTypes = () => {\n const nde = /** @type {import('@typescript-eslint/types').TSESTree.Node} */ (\n node\n );\n if (!nde) {\n return;\n }\n\n switch (nde.type) {\n case 'ClassDeclaration':\n case 'FunctionDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkTypeParams(nde);\n break;\n case 'ExportDefaultDeclaration':\n switch (nde.declaration?.type) {\n case 'ClassDeclaration':\n case 'FunctionDeclaration':\n case 'TSInterfaceDeclaration':\n checkTypeParams(nde.declaration);\n break;\n }\n\n break;\n case 'ExportNamedDeclaration':\n switch (nde.declaration?.type) {\n case 'ClassDeclaration':\n case 'FunctionDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkTypeParams(nde.declaration);\n break;\n }\n\n break;\n }\n };\n\n const usedNameToTag = new Map();\n\n /**\n * @param {import('comment-parser').Spec} potentialTag\n */\n const checkForUsedTypes = (potentialTag) => {\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialTag.type)) :\n parseType(/** @type {string} */ (potentialTag.type), mode);\n } catch {\n return;\n }\n\n traverse(parsedType, (nde) => {\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n if (type === 'JsdocTypeName' && (/^[A-Z]$/u).test(value)) {\n usedNames.add(value);\n if (!usedNameToTag.has(value)) {\n usedNameToTag.set(value, potentialTag);\n }\n }\n });\n };\n\n /**\n * @param {string[]} tagNames\n */\n const checkTagsAndTemplates = (tagNames) => {\n for (const tagName of tagNames) {\n const preferredTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName,\n }));\n const matchingTags = utils.getTags(preferredTagName);\n for (const matchingTag of matchingTags) {\n checkForUsedTypes(matchingTag);\n }\n }\n\n // Could check against whitelist/blacklist\n for (const usedName of usedNames) {\n if (!templateNames.includes(usedName)) {\n report(`Missing @template ${usedName}`, null, usedNameToTag.get(usedName));\n }\n }\n };\n\n const callbackTags = utils.getTags('callback');\n const functionTags = utils.getTags('function');\n if (callbackTags.length || functionTags.length) {\n checkTagsAndTemplates([\n 'param', 'returns',\n ]);\n return;\n }\n\n const typedefTags = utils.getTags('typedef');\n if (!typedefTags.length || typedefTags.length >= 2) {\n handleTypes();\n return;\n }\n\n const potentialTypedef = typedefTags[0];\n checkForUsedTypes(potentialTypedef);\n\n checkTagsAndTemplates([\n 'property',\n ]);\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires template tags for each generic type parameter',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-template.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n requireSeparateTemplates: {\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":"requireTemplate.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","e","__esModule","default","_default","exports","iterateJsdoc","context","node","report","settings","utils","requireSeparateTemplates","options","mode","usedNames","Set","templateTags","getTags","templateNames","flatMap","tag","parseClosureTemplateTag","name","names","split","length","checkTypeParams","aliasDeclaration","params","typeParameters","add","usedName","includes","handleTypes","nde","type","declaration","usedNameToTag","Map","checkForUsedTypes","potentialTag","parsedType","tryParseType","parseType","traverse","value","test","has","set","checkTagsAndTemplates","tagNames","tagName","preferredTagName","getPreferredTagName","matchingTags","matchingTag","get","callbackTags","functionTags","typedefTags","potentialTypedef","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","module"],"sources":["../../src/rules/requireTemplate.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n requireSeparateTemplates = false,\n } = context.options[0] || {};\n\n const {\n mode,\n } = settings;\n\n const usedNames = new Set();\n const templateTags = utils.getTags('template');\n const templateNames = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n if (requireSeparateTemplates) {\n for (const tag of templateTags) {\n const {\n name,\n } = tag;\n const names = name.split(/,\\s*/u);\n if (names.length > 1) {\n report(`Missing separate @template for ${names[1]}`, null, tag);\n }\n }\n }\n\n /**\n * @param {import('@typescript-eslint/types').TSESTree.FunctionDeclaration|\n * import('@typescript-eslint/types').TSESTree.ClassDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSTypeAliasDeclaration} aliasDeclaration\n */\n const checkTypeParams = (aliasDeclaration) => {\n const {\n params,\n /* c8 ignore next -- Guard */\n } = aliasDeclaration.typeParameters ?? {\n /* c8 ignore next -- Guard */\n params: [],\n };\n for (const {\n name: {\n name,\n },\n } of params) {\n usedNames.add(name);\n }\n\n for (const usedName of usedNames) {\n if (!templateNames.includes(usedName)) {\n report(`Missing @template ${usedName}`);\n }\n }\n };\n\n const handleTypes = () => {\n const nde = /** @type {import('@typescript-eslint/types').TSESTree.Node} */ (\n node\n );\n if (!nde) {\n return;\n }\n\n switch (nde.type) {\n case 'ClassDeclaration':\n case 'FunctionDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkTypeParams(nde);\n break;\n case 'ExportDefaultDeclaration':\n switch (nde.declaration?.type) {\n case 'ClassDeclaration':\n case 'FunctionDeclaration':\n case 'TSInterfaceDeclaration':\n checkTypeParams(nde.declaration);\n break;\n }\n\n break;\n case 'ExportNamedDeclaration':\n switch (nde.declaration?.type) {\n case 'ClassDeclaration':\n case 'FunctionDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkTypeParams(nde.declaration);\n break;\n }\n\n break;\n }\n };\n\n const usedNameToTag = new Map();\n\n /**\n * @param {import('comment-parser').Spec} potentialTag\n */\n const checkForUsedTypes = (potentialTag) => {\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialTag.type)) :\n parseType(/** @type {string} */ (potentialTag.type), mode);\n } catch {\n return;\n }\n\n traverse(parsedType, (nde) => {\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n if (type === 'JsdocTypeName' && (/^[A-Z]$/u).test(value)) {\n usedNames.add(value);\n if (!usedNameToTag.has(value)) {\n usedNameToTag.set(value, potentialTag);\n }\n }\n });\n };\n\n /**\n * @param {string[]} tagNames\n */\n const checkTagsAndTemplates = (tagNames) => {\n for (const tagName of tagNames) {\n const preferredTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName,\n }));\n const matchingTags = utils.getTags(preferredTagName);\n for (const matchingTag of matchingTags) {\n checkForUsedTypes(matchingTag);\n }\n }\n\n // Could check against whitelist/blacklist\n for (const usedName of usedNames) {\n if (!templateNames.includes(usedName)) {\n report(`Missing @template ${usedName}`, null, usedNameToTag.get(usedName));\n }\n }\n };\n\n const callbackTags = utils.getTags('callback');\n const functionTags = utils.getTags('function');\n if (callbackTags.length || functionTags.length) {\n checkTagsAndTemplates([\n 'param', 'returns',\n ]);\n return;\n }\n\n const typedefTags = utils.getTags('typedef');\n if (!typedefTags.length || typedefTags.length >= 2) {\n handleTypes();\n return;\n }\n\n const potentialTypedef = typedefTags[0];\n checkForUsedTypes(potentialTypedef);\n\n checkTagsAndTemplates([\n 'property',\n ]);\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires template tags for each generic type parameter',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-template.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n requireSeparateTemplates: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -160,5 +160,5 @@
160
160
  "test-cov": "cross-env TIMING=1 c8 --reporter text npm run test-no-cov",
161
161
  "test-index": "npm run test-no-cov -- test/rules/index.js"
162
162
  },
163
- "version": "51.2.1"
163
+ "version": "51.2.3"
164
164
  }
package/src/jsdocUtils.js CHANGED
@@ -1495,7 +1495,7 @@ const parseClosureTemplateTag = (tag) => {
1495
1495
  return tag.name
1496
1496
  .split(',')
1497
1497
  .map((type) => {
1498
- return type.trim().replace(/^\[(?<name>.*?)=.*\]$/u, '$<name>');
1498
+ return type.trim().replace(/^\[?(?<name>.*?)=.*$/u, '$<name>');
1499
1499
  });
1500
1500
  };
1501
1501
 
@@ -440,6 +440,8 @@ export default iterateJsdoc(({
440
440
  // Avoid appending for imports and globals since we don't want to
441
441
  // check their properties which may or may not exist
442
442
  !imports.includes(val) && !globals.includes(val) &&
443
+ !importTags.includes(val) &&
444
+ !typedefDeclarations.includes(val) &&
443
445
  currNode && 'right' in currNode &&
444
446
  currNode.right?.type === 'JsdocTypeProperty') {
445
447
  val = val + '.' + currNode.right.value;
@@ -22,19 +22,19 @@ export default iterateJsdoc(({
22
22
 
23
23
  const usedNames = new Set();
24
24
  const templateTags = utils.getTags('template');
25
- const templateNames = templateTags.flatMap(({
26
- name,
27
- }) => {
28
- return name.split(/,\s*/u);
25
+ const templateNames = templateTags.flatMap((tag) => {
26
+ return utils.parseClosureTemplateTag(tag);
29
27
  });
30
28
 
31
- for (const tag of templateTags) {
32
- const {
33
- name,
34
- } = tag;
35
- const names = name.split(/,\s*/u);
36
- if (requireSeparateTemplates && names.length > 1) {
37
- report(`Missing separate @template for ${names[1]}`, null, tag);
29
+ if (requireSeparateTemplates) {
30
+ for (const tag of templateTags) {
31
+ const {
32
+ name,
33
+ } = tag;
34
+ const names = name.split(/,\s*/u);
35
+ if (names.length > 1) {
36
+ report(`Missing separate @template for ${names[1]}`, null, tag);
37
+ }
38
38
  }
39
39
  }
40
40