eslint-plugin-jsdoc 48.2.4 → 48.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/iterateJsdoc.cjs +3 -3
- package/dist/iterateJsdoc.cjs.map +1 -1
- package/dist/rules/importsAsDependencies.cjs +2 -2
- package/dist/rules/importsAsDependencies.cjs.map +1 -1
- package/dist/utils/hasReturnValue.cjs +2 -2
- package/dist/utils/hasReturnValue.cjs.map +1 -1
- package/package.json +17 -18
- package/src/iterateJsdoc.js +1 -1
- package/src/rules/importsAsDependencies.js +1 -1
- package/src/utils/hasReturnValue.js +2 -3
package/dist/iterateJsdoc.cjs
CHANGED
|
@@ -1202,18 +1202,18 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
1202
1202
|
|
|
1203
1203
|
/** @type {IsGenerator} */
|
|
1204
1204
|
utils.isGenerator = () => {
|
|
1205
|
+
var _node$declaration;
|
|
1205
1206
|
return node !== null && Boolean(
|
|
1206
1207
|
/**
|
|
1207
1208
|
* @type {import('estree').FunctionDeclaration|
|
|
1208
1209
|
* import('estree').FunctionExpression}
|
|
1209
1210
|
*/
|
|
1210
|
-
node.generator || node.type === 'MethodDefinition' && node.value.generator || ['ExportNamedDeclaration', 'ExportDefaultDeclaration'].includes(node.type) && /** @type {import('estree').FunctionDeclaration} */
|
|
1211
|
-
(
|
|
1211
|
+
node.generator || node.type === 'MethodDefinition' && node.value.generator || ['ExportNamedDeclaration', 'ExportDefaultDeclaration'].includes(node.type) && ( /** @type {import('estree').FunctionDeclaration} */(_node$declaration =
|
|
1212
1212
|
/**
|
|
1213
1213
|
* @type {import('estree').ExportNamedDeclaration|
|
|
1214
1214
|
* import('estree').ExportDefaultDeclaration}
|
|
1215
1215
|
*/
|
|
1216
|
-
node.declaration).generator);
|
|
1216
|
+
node.declaration) === null || _node$declaration === void 0 ? void 0 : _node$declaration.generator));
|
|
1217
1217
|
};
|
|
1218
1218
|
|
|
1219
1219
|
/** @type {IsConstructor} */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterateJsdoc.cjs","names":["_jsdocUtils","_interopRequireDefault","require","_jsdoccomment","_commentParser","_esquery","obj","__esModule","default","rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","end","column","line","start","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","sc","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","String","type","isVirtualFunction","Boolean","hasATag","stringify","tagBlock","specRewire","block","commentStringify","reportJSDoc","msg","handler","data","fixer","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","descriptions","source","some","tokens","lineEnd","postDelimiter","postTag","name","description","desc","push","join","setTagDescription","matcher","setter","finalIdx","idx","getDescription","lastDescriptionLine","tagsBegun","length","setBlockDescription","descLines","startIdx","endIdx","info","delimiter","undefined","splice","setDescriptionLines","changeTag","src","entries","setTag","number","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","addTag","targetTagName","_jsdoc$tags","getFirstLine","firstLine","emptyTokens","prop","addLine","_jsdoc$source","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","_context$options$","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","tagMissingRequiredTypeOrNamepath","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","tagList","filter","filterAllTags","getAllTags","getTagsByType","hasOptionTag","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","findContext","contexts","comment","foundContext","cntxt","esquery","matches","parse","visitorKeys","contextStr","getSettings","_context$settings$jsd","_context$settings$jsd2","_context$settings$jsd3","_context$settings$jsd4","_context$settings$jsd5","_context$settings$jsd6","_context$settings$jsd7","_context$settings$jsd8","_context$settings$jsd9","_context$settings$jsd10","_context$settings$jsd11","_context$settings$jsd12","_context$settings$jsd13","_context$settings$jsd14","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","iterator","state","jsdocNde","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","selector","lastComment","settngs","exit","create","commentHandler","*:not(Program)","noTracking","has","nonComment","ste","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","allComms","iterateJsdoc","_ruleConfig$meta","metaType","TypeError","contextDefaults","contextSelected","matchContext","_context$options$2","_contexts","_contexts2","match","enforcedContexts","nonGlobalSettings","map","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import jsdocUtils from './jsdocUtils.js';\nimport {\n commentHandler,\n getJSDocComment,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport esquery from 'esquery';\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @typedef {import('@es-joy/jsdoccomment').JsdocBlockWithInline} JsdocBlockWithInline\n */\n\n/**\n * @typedef {{\n * disallowName?: string,\n * allowName?: string,\n * context?: string,\n * comment?: string,\n * tags?: string[],\n * replacement?: string,\n * minimum?: Integer,\n * message?: string,\n * forceRequireReturn?: boolean\n * }} ContextObject\n */\n/**\n * @typedef {string|ContextObject} Context\n */\n\n/**\n * @callback CheckJsdoc\n * @param {{\n * lastIndex?: Integer,\n * isFunctionContext?: boolean,\n * selector?: string,\n * comment?: string\n * }} info\n * @param {null|((jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean|undefined)} handler\n * @param {import('eslint').Rule.Node} node\n * @returns {void}\n */\n\n/**\n * @callback ForEachPreferredTag\n * @param {string} tagName\n * @param {(\n * matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n * targetTagName: string\n * ) => void} arrayHandler\n * @param {boolean} [skipReportingBlockedTag]\n * @returns {void}\n */\n\n/**\n * @callback ReportSettings\n * @param {string} message\n * @returns {void}\n */\n\n/**\n * @callback ParseClosureTemplateTag\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\n\n/**\n * @callback GetPreferredTagNameObject\n * @param {{\n * tagName: string\n * }} cfg\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @typedef {{\n * forEachPreferredTag: ForEachPreferredTag,\n * reportSettings: ReportSettings,\n * parseClosureTemplateTag: ParseClosureTemplateTag,\n * getPreferredTagNameObject: GetPreferredTagNameObject,\n * pathDoesNotBeginWith: import('./jsdocUtils.js').PathDoesNotBeginWith\n * }} BasicUtils\n */\n\n/**\n * @callback IsIteratingFunction\n * @returns {boolean}\n */\n\n/**\n * @callback IsVirtualFunction\n * @returns {boolean}\n */\n\n/**\n * @callback Stringify\n * @param {import('comment-parser').Block} tagBlock\n * @param {boolean} [specRewire]\n * @returns {string}\n */\n\n/**\n * @callback ReportJSDoc\n * @param {string} msg\n * @param {null|import('comment-parser').Spec|{line: Integer, column?: Integer}} [tag]\n * @param {(() => void)|null} [handler]\n * @param {boolean} [specRewire]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n */\n\n/**\n * @callback GetRegexFromString\n * @param {string} str\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\n\n/**\n * @callback GetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\n\n/**\n * @callback SetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback GetDescription\n * @returns {{\n * description: string,\n * descriptions: string[],\n * lastDescriptionLine: Integer\n * }}\n */\n\n/**\n * @callback SetBlockDescription\n * @param {(\n * info: {\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * },\n * seedTokens: (\n * tokens?: Partial<import('comment-parser').Tokens>\n * ) => import('comment-parser').Tokens,\n * descLines: string[]\n * ) => import('comment-parser').Line[]} setter\n * @returns {void}\n */\n\n/**\n * @callback SetDescriptionLines\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback ChangeTag\n * @param {import('comment-parser').Spec} tag\n * @param {...Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback SetTag\n * @param {import('comment-parser').Spec & {\n * line: Integer\n * }} tag\n * @param {Partial<import('comment-parser').Tokens>} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback RemoveTag\n * @param {Integer} tagIndex\n * @param {{\n * removeEmptyBlock?: boolean,\n * tagSourceOffset?: Integer\n * }} [cfg]\n * @returns {void}\n */\n\n/**\n * @callback AddTag\n * @param {string} targetTagName\n * @param {Integer} [number]\n * @param {import('comment-parser').Tokens|{}} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback GetFirstLine\n * @returns {Integer|undefined}\n */\n\n/**\n * @typedef {(\n * tokens?: Partial<import('comment-parser').Tokens> | undefined\n * ) => import('comment-parser').Tokens} SeedTokens\n */\n\n/**\n * Sets tokens to empty string.\n * @callback EmptyTokens\n * @param {import('comment-parser').Tokens} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLine\n * @param {Integer} sourceIndex\n * @param {Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLines\n * @param {Integer} tagIndex\n * @param {Integer} tagSourceOffset\n * @param {Integer} numLines\n * @returns {void}\n */\n\n/**\n * @callback MakeMultiline\n * @returns {void}\n */\n\n/**\n * @callback GetFunctionParameterNames\n * @param {boolean} [useDefaultObjectProperties]\n * @returns {import('./jsdocUtils.js').ParamNameInfo[]}\n */\n\n/**\n * @callback HasParams\n * @returns {Integer}\n */\n\n/**\n * @callback IsGenerator\n * @returns {boolean}\n */\n\n/**\n * @callback IsConstructor\n * @returns {boolean}\n */\n\n/**\n * @callback GetJsdocTagsDeep\n * @param {string} tagName\n * @returns {false|{\n * idx: Integer,\n * name: string,\n * type: string\n * }[]}\n */\n\n/**\n * @callback GetPreferredTagName\n * @param {{\n * tagName: string,\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 */\n\n/**\n * @callback IsValidTag\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\n\n/**\n * @callback HasATag\n * @param {string[]} names\n * @returns {boolean}\n */\n\n/**\n * @callback HasTag\n * @param {string} name\n * @returns {boolean}\n */\n\n/**\n * @callback ComparePaths\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\n\n/**\n * @callback DropPathSegmentQuotes\n * @param {string} name\n * @returns {string}\n */\n\n/**\n * @callback AvoidDocs\n * @returns {boolean}\n */\n\n/**\n * @callback TagMightHaveNamePositionTypePosition\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} [otherModeMaps]\n * @returns {boolean|{otherMode: true}}\n */\n\n/**\n * @callback TagMustHave\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback TagMissingRequiredTypeOrNamepath\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback IsNamepathX\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetTagStructureForMode\n * @param {import('./jsdocUtils.js').ParserMode} mde\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\n\n/**\n * @callback MayBeUndefinedTypeTag\n * @param {import('comment-parser').Spec} tag\n * @returns {boolean}\n */\n\n/**\n * @callback HasValueOrExecutorHasNonEmptyResolveValue\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} [allBranches]\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldReturnValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasThrowValue\n * @returns {boolean}\n */\n\n/**\n * @callback IsAsync\n * @returns {boolean|undefined}\n */\n\n/**\n * @callback GetTags\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\n\n/**\n * @callback GetPresentTags\n * @param {string[]} tagList\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterTags\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterAllTags\n * @param {(tag: (import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)) => boolean} filter\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\n\n/**\n * @callback GetTagsByType\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n * tagsWithNames: import('comment-parser').Spec[],\n * tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\n\n/**\n * @callback HasOptionTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetClassNode\n * @returns {Node|null}\n */\n\n/**\n * @callback GetClassJsdoc\n * @returns {null|JsdocBlockWithInline}\n */\n\n/**\n * @callback ClassHasTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback FindContext\n * @param {Context[]} contexts\n * @param {string|undefined} comment\n * @returns {{\n * foundContext: Context|undefined,\n * contextStr: string\n * }}\n */\n\n/**\n * @typedef {BasicUtils & {\n * isIteratingFunction: IsIteratingFunction,\n * isVirtualFunction: IsVirtualFunction,\n * stringify: Stringify,\n * reportJSDoc: ReportJSDoc,\n * getRegexFromString: GetRegexFromString,\n * getTagDescription: GetTagDescription,\n * setTagDescription: SetTagDescription,\n * getDescription: GetDescription,\n * setBlockDescription: SetBlockDescription,\n * setDescriptionLines: SetDescriptionLines,\n * changeTag: ChangeTag,\n * setTag: SetTag,\n * removeTag: RemoveTag,\n * addTag: AddTag,\n * getFirstLine: GetFirstLine,\n * seedTokens: SeedTokens,\n * emptyTokens: EmptyTokens,\n * addLine: AddLine,\n * addLines: AddLines,\n * makeMultiline: MakeMultiline,\n * flattenRoots: import('./jsdocUtils.js').FlattenRoots,\n * getFunctionParameterNames: GetFunctionParameterNames,\n * hasParams: HasParams,\n * isGenerator: IsGenerator,\n * isConstructor: IsConstructor,\n * getJsdocTagsDeep: GetJsdocTagsDeep,\n * getPreferredTagName: GetPreferredTagName,\n * isValidTag: IsValidTag,\n * hasATag: HasATag,\n * hasTag: HasTag,\n * comparePaths: ComparePaths,\n * dropPathSegmentQuotes: DropPathSegmentQuotes,\n * avoidDocs: AvoidDocs,\n * tagMightHaveNamePosition: TagMightHaveNamePositionTypePosition,\n * tagMightHaveTypePosition: TagMightHaveNamePositionTypePosition,\n * tagMustHaveNamePosition: TagMustHave,\n * tagMustHaveTypePosition: TagMustHave,\n * tagMissingRequiredTypeOrNamepath: TagMissingRequiredTypeOrNamepath,\n * isNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNamepath: IsNamepathX,\n * getTagStructureForMode: GetTagStructureForMode,\n * mayBeUndefinedTypeTag: MayBeUndefinedTypeTag,\n * hasValueOrExecutorHasNonEmptyResolveValue: HasValueOrExecutorHasNonEmptyResolveValue,\n * hasYieldValue: HasYieldValue,\n * hasYieldReturnValue: HasYieldReturnValue,\n * hasThrowValue: HasThrowValue,\n * isAsync: IsAsync,\n * getTags: GetTags,\n * getPresentTags: GetPresentTags,\n * filterTags: FilterTags,\n * filterAllTags: FilterAllTags,\n * getTagsByType: GetTagsByType,\n * hasOptionTag: HasOptionTag,\n * getClassNode: GetClassNode,\n * getClassJsdoc: GetClassJsdoc,\n * classHasTag: ClassHasTag,\n * findContext: FindContext\n * }} Utils\n */\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n * @typedef {import('eslint').Rule.RuleMetaData} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n * @typedef {{\n * globalTags: {},\n * hasDuplicates: {\n * [key: string]: boolean\n * },\n * selectorMap: {\n * [selector: string]: {\n * [comment: string]: Integer\n * }\n * },\n * hasTag: {\n * [key: string]: boolean\n * },\n * hasNonComment: number,\n * hasNonCommentBeforeTag: {\n * [key: string]: boolean|number\n * }\n * }} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n * @typedef {import('eslint').Rule.Node} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {{\n * tagNamePreference?: import('./jsdocUtils.js').TagNamePreference,\n * mode?: import('./jsdocUtils.js').ParserMode\n * }} cfg\n * @returns {BasicUtils}\n */\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n /** @type {BasicUtils} */\n const utils = {};\n\n /** @type {ReportSettings} */\n utils.reportSettings = (message) => {\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,\n });\n };\n\n /** @type {ParseClosureTemplateTag} */\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n /** @type {GetPreferredTagNameObject} */\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(\n context,\n /** @type {import('./jsdocUtils.js').ParserMode} */ (mode),\n tagName,\n tagNamePreference,\n );\n const isObject = ret && typeof ret === 'object';\n if (ret === false || (isObject && !ret.replacement)) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\n/**\n * @callback Report\n * @param {string} message\n * @param {import('eslint').Rule.ReportFixer|null} [fix]\n * @param {null|\n * {line?: Integer, column?: Integer}|\n * import('comment-parser').Spec & {line?: Integer}\n * } [jsdocLoc]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n * @returns {void}\n */\n\n/**\n * @param {Node|null} node\n * @param {JsdocBlockWithInline} jsdoc\n * @param {import('eslint').AST.Token} jsdocNode\n * @param {Settings} settings\n * @param {Report} report\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('eslint').SourceCode} sc\n * @param {boolean|undefined} iteratingAll\n * @param {RuleConfig} ruleConfig\n * @param {string} indent\n * @returns {Utils}\n */\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n sc,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = /** @type {import('eslint').Rule.Node[]} */ (node ?\n (sc.getAncestors ?\n (\n sc.getAncestors(node)\n /* c8 ignore next 4 */\n ) :\n (\n context.getAncestors()\n )) :\n []);\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n\n const utils = /** @type {Utils} */ (getBasicUtils(context, settings));\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(String(node && node.type));\n };\n\n /** @type {IsVirtualFunction} */\n utils.isVirtualFunction = () => {\n return Boolean(iteratingAll) && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n /** @type {Stringify} */\n utils.stringify = (tagBlock, specRewire) => {\n let block;\n if (specRewire) {\n block = rewireSpecs(tagBlock);\n }\n\n return commentStringify(/** @type {import('comment-parser').Block} */ (\n specRewire ? block : tagBlock));\n };\n\n /** @type {ReportJSDoc} */\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? /** @type {import('eslint').Rule.ReportFixer} */ (\n fixer,\n ) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/u);\n if (lastLineBreakPos > -1) {\n return fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]);\n }\n\n return fixer.removeRange(\n (/\\s/u).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n );\n }\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n /** @type {GetRegexFromString} */\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n /** @type {GetTagDescription} */\n utils.getTagDescription = (tg, returnArray) => {\n /**\n * @type {string[]}\n */\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return returnArray ? descriptions : descriptions.join('\\n');\n };\n\n /** @type {SetTagDescription} */\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {GetDescription} */\n utils.getDescription = () => {\n /** @type {string[]} */\n const descriptions = [];\n let lastDescriptionLine = 0;\n let tagsBegun = false;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (tag) {\n tagsBegun = true;\n }\n\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n if (!tagsBegun && description) {\n descriptions.push(description);\n }\n\n return true;\n }\n\n if (!tagsBegun && (idx || description)) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n descriptions,\n lastDescriptionLine,\n };\n };\n\n /** @type {SetBlockDescription} */\n utils.setBlockDescription = (setter) => {\n /** @type {string[]} */\n const descLines = [];\n /**\n * @type {undefined|Integer}\n */\n let startIdx;\n /**\n * @type {undefined|Integer}\n */\n let endIdx;\n\n /**\n * @type {undefined|{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n let info;\n\n jsdoc.source.some(({\n tokens: {\n description,\n start,\n delimiter,\n postDelimiter,\n tag,\n end,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n descLines.push(description);\n return false;\n });\n\n /* c8 ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n /** @type {Integer} */ (startIdx),\n /** @type {Integer} */ (endIdx) - /** @type {Integer} */ (startIdx),\n ...setter(\n /**\n * @type {{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n (info),\n seedTokens,\n descLines,\n ),\n );\n }\n };\n\n /** @type {SetDescriptionLines} */\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n /* c8 ignore next 3 -- Already checked */\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {ChangeTag} */\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n /** @type {SetTag} */\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n number: tag.line,\n // Or tag.source[0].number?\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n /** @type {RemoveTag} */\n utils.removeTag = (tagIndex, {\n removeEmptyBlock = false,\n tagSourceOffset = 0,\n } = {}) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n /** @type {Integer|undefined} */\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n }) => {\n return number === srcNumber;\n });\n // c8 ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end: ending,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n if (\n spliceIdx === 0 && jsdoc.tags.length >= 2 ||\n !removeEmptyBlock && (end || delimiter === '/**')\n ) {\n const {\n tokens,\n } = jsdoc.source[spliceIdx];\n for (const item of [\n 'postDelimiter',\n 'tag',\n 'postTag',\n 'type',\n 'postType',\n 'name',\n 'postName',\n 'description',\n ]) {\n tokens[\n /**\n * @type {\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n * \"postTag\"|\"name\"|\"postName\"|\"description\"}\n */ (\n item\n )\n ] = '';\n }\n } else {\n jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n }\n\n lastIndex = sourceIndex;\n\n return true;\n }\n /* c8 ignore next */\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect\n // missing tags, this step should be added here (so that, e.g.,\n // if accessing `jsdoc.tags`, such as to add a new tag, the\n // correct information will be available)\n };\n\n /** @type {AddTag} */\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n /** @type {GetFirstLine} */\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n /** @type {SeedTokens} */\n utils.seedTokens = seedTokens;\n\n /** @type {EmptyTokens} */\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[\n /**\n * @type {\"start\"|\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n * \"postTag\"|\"name\"|\"postName\"|\"description\"|\"end\"|\"lineEnd\"}\n */ (\n prop\n )\n ] = '';\n }\n };\n\n /** @type {AddLine} */\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n /** @type {AddLines} */\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n /** @type {Integer|undefined} */\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // c8 ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n /* c8 ignore next */\n return false;\n });\n\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n };\n\n /** @type {MakeMultiline} */\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n } else /* c8 ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n /**\n * @type {import('./jsdocUtils.js').FlattenRoots}\n */\n utils.flattenRoots = jsdocUtils.flattenRoots;\n\n /** @type {GetFunctionParameterNames} */\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n /** @type {HasParams} */\n utils.hasParams = () => {\n return jsdocUtils.hasParams(/** @type {Node} */ (node));\n };\n\n /** @type {IsGenerator} */\n utils.isGenerator = () => {\n return node !== null && Boolean(\n /**\n * @type {import('estree').FunctionDeclaration|\n * import('estree').FunctionExpression}\n */ (node).generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n /** @type {import('estree').FunctionDeclaration} */\n (\n /**\n * @type {import('estree').ExportNamedDeclaration|\n * import('estree').ExportDefaultDeclaration}\n */ (node).declaration\n ).generator,\n );\n };\n\n /** @type {IsConstructor} */\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(/** @type {Node} */ (node));\n };\n\n /** @type {GetJsdocTagsDeep} */\n utils.getJsdocTagsDeep = (tagName) => {\n const name = /** @type {string|false} */ (utils.getPreferredTagName({\n tagName,\n }));\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n /** @type {GetPreferredTagName} */\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n /** @type {IsValidTag} */\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n /** @type {HasATag} */\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n /** @type {HasTag} */\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n /** @type {ComparePaths} */\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n /** @type {DropPathSegmentQuotes} */\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n /** @type {AvoidDocs} */\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc,\n node,\n context,\n /** @type {import('json-schema').JSONSchema4|import('json-schema').JSONSchema4[]} */ (\n ruleConfig.meta.schema\n ),\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n /** @type {TagMightHaveNamePositionTypePosition} */\n utils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */ (\n method\n )\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n /** @type {TagMissingRequiredTypeOrNamepath} */\n utils.tagMissingRequiredTypeOrNamepath = (tagName, otherModeMaps) => {\n const result = jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName);\n if (!result) {\n return false;\n }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n ]) {\n /** @type {TagMustHave} */\n utils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'isNamepathReferencingTag',\n 'isNamepathOrUrlReferencingTag',\n 'tagMightHaveNamepath',\n ]) {\n /** @type {IsNamepathX} */\n utils[\n /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */ (\n method\n )] = (tagName) => {\n return jsdocUtils[\n /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */\n (method)\n ](tagName);\n };\n }\n\n /** @type {GetTagStructureForMode} */\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n /** @type {MayBeUndefinedTypeTag} */\n utils.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n /** @type {HasValueOrExecutorHasNonEmptyResolveValue} */\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(\n /** @type {Node} */ (node), anyPromiseAsReturn, allBranches,\n );\n };\n\n /** @type {HasYieldValue} */\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(/** @type {Node} */ (node).type)) {\n return jsdocUtils.hasYieldValue(\n /** @type {import('estree').Declaration|import('estree').Expression} */ (\n /** @type {import('estree').ExportNamedDeclaration|import('estree').ExportDefaultDeclaration} */\n (node).declaration\n ),\n );\n }\n\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node));\n };\n\n /** @type {HasYieldReturnValue} */\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node), true);\n };\n\n /** @type {HasThrowValue} */\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n /** @type {IsAsync} */\n utils.isAsync = () => {\n return Boolean(node && 'async' in node && node.async);\n };\n\n /** @type {GetTags} */\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n /** @type {GetPresentTags} */\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n /** @type {FilterTags} */\n utils.filterTags = (filter) => {\n return jsdoc.tags.filter((tag) => {\n return filter(tag);\n });\n };\n\n /** @type {FilterAllTags} */\n utils.filterAllTags = (filter) => {\n const tags = jsdocUtils.getAllTags(jsdoc);\n return tags.filter((tag) => {\n return filter(tag);\n });\n };\n\n /** @type {GetTagsByType} */\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags);\n };\n\n /** @type {HasOptionTag} */\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n /** @type {GetClassNode} */\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) ?? null;\n };\n\n /** @type {GetClassJsdoc} */\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n /** @type {ClassHasTag} */\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return classJsdoc !== null && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n /** @type {ForEachPreferredTag} */\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = /** @type {string|false} */ (\n utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\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 /** @type {FindContext} */\n utils.findContext = (contexts, comment) => {\n const foundContext = contexts.find((cntxt) => {\n return typeof cntxt === 'string' ?\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n ) :\n (!cntxt.context || cntxt.context === 'any' ||\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt.context),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n )) && comment === cntxt.comment;\n });\n\n const contextStr = typeof foundContext === 'object' ?\n foundContext.context ?? 'any' :\n String(foundContext);\n\n return {\n contextStr,\n foundContext,\n };\n };\n\n return utils;\n};\n\n/**\n * @typedef {{\n * [key: string]: false|string|{\n * message: string,\n * replacement?: false|string\n * skipRootChecking?: boolean\n * }\n * }} PreferredTypes\n */\n/**\n * @typedef {{\n * [key: string]: {\n * name?: \"text\"|\"namepath-defining\"|\"namepath-referencing\"|false,\n * type?: boolean|string[],\n * required?: (\"name\"|\"type\"|\"typeOrNameRequired\")[]\n * }\n * }} StructuredTags\n */\n/**\n * Settings from ESLint types.\n * @typedef {{\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * mode: import('./jsdocUtils.js').ParserMode,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * [name: string]: any,\n * contexts?: Context[]\n * }} Settings\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @returns {Settings|false}\n */\nconst getSettings = (context) => {\n /* dslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ?? 'typescript',\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\n };\n /* dslint-enable canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: /** @type {Error} */ (error).message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n * @callback MakeReport\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('estree').Node} commentNode\n * @returns {Report}\n */\n\n/** @type {MakeReport} */\nconst makeReport = (context, commentNode) => {\n /** @type {Report} */\n const report = (message, fix = null, jsdocLoc = null, data = undefined) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = /** @type {import('comment-parser').Spec & {line?: Integer}} */ (\n jsdocLoc\n ).source[0].number;\n }\n\n const lineNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.line +\n /** @type {Integer} */ (jsdocLoc.line);\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n if ('column' in jsdocLoc && typeof jsdocLoc.column === 'number') {\n const colNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent?: string,\n * info?: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state?: StateObject,\n * globalState?: Map<string, Map<string, string>>,\n * jsdoc?: JsdocBlockWithInline,\n * jsdocNode?: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node?: Node,\n * allComments?: import('estree').Node[]\n * report?: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: BasicUtils,\n * }\n * ) => any } JsdocVisitorBasic\n */\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent: string,\n * info: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state: StateObject,\n * globalState: Map<string, Map<string, string>>,\n * jsdoc: JsdocBlockWithInline,\n * jsdocNode: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node: Node|null,\n * allComments?: import('estree').Node[]\n * report: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n\n/**\n * @param {{\n * comment?: string,\n * lastIndex?: Integer,\n * selector?: string,\n * isFunctionContext?: boolean,\n * }} info\n * @param {string} indent\n * @param {JsdocBlockWithInline} jsdoc\n * @param {RuleConfig} ruleConfig\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('@es-joy/jsdoccomment').Token} jsdocNode\n * @param {Node|null} node\n * @param {Settings} settings\n * @param {import('eslint').SourceCode} sourceCode\n * @param {JsdocVisitor} iterator\n * @param {StateObject} state\n * @param {boolean} [iteratingAll]\n * @returns {void}\n */\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n const report = makeReport(\n context,\n /** @type {import('estree').Node} */\n (jsdocNde),\n );\n\n const utils = getUtils(\n node,\n jsdoc,\n /** @type {import('eslint').AST.Token} */\n (jsdocNode),\n settings,\n report,\n context,\n sourceCode,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n jsdoc,\n jsdocNode: /**\n * @type {import('eslint').Rule.Node & {\n * range: [number, number];}}\n */ (jsdocNde),\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\n/**\n * @param {string[]} lines\n * @param {import('estree').Comment} jsdocNode\n * @returns {[indent: string, jsdoc: JsdocBlockWithInline]}\n */\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.line - 1\n ];\n const indnt = sourceLine.charAt(0).repeat(\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.column,\n );\n\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node & {\n * range: [number, number]\n * }, state: StateObject}} NonCommentArgs\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils.js').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {true} [checkPrivate] Whether to check `@private` blocks (normally exempted)\n * @property {true} [checkInternal] Whether to check `@internal` blocks (normally exempted)\n * @property {true} [checkFile] Whether to iterates over all JSDoc blocks regardless of attachment\n * @property {true} [nonGlobalSettings] Whether to avoid relying on settings for global contexts\n * @property {true} [noTracking] Whether to disable the tracking of visited comment nodes (as\n * non-tracked may conduct further actions)\n * @property {true} [matchContext] Whether the rule expects contexts to be based on a match option\n * @property {(args: {\n * context: import('eslint').Rule.RuleContext,\n * state: StateObject,\n * settings: Settings,\n * utils: BasicUtils\n * }) => void} [exit] Handler to be executed upon exiting iteration of program AST\n * @property {(nca: NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param {ContextObject[]|null} [contexts] The `contexts` containing relevant `comment` info.\n * @param {boolean} [additiveCommentContexts] If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n /** @type {import('@es-joy/jsdoccomment').CommentHandler} */\n let handler;\n\n /** @type {Settings|false} */\n let settings;\n\n /**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {Node|null} node\n * @param {import('estree').Comment[]} jsdocNodes\n * @param {StateObject} state\n * @param {boolean} [lastCall]\n * @returns {void}\n */\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, /** @type {Settings} */ (settings));\n for (const jsdocNode of jsdocNodes) {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(\n /** @type {import('estree').Node} */\n (jsdocNde),\n ))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of /** @type {ContextObject[]} */ (contexts).entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n /** @type {Node} */\n (node),\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n const settngs = /** @type {Settings} */ (settings);\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n settings: settngs,\n state,\n utils,\n });\n }\n };\n\n return {\n // @ts-expect-error ESLint accepts\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n /**\n * @param {import('eslint').Rule.Node & {\n * range: [Integer, Integer];\n * }} node\n * @returns {void}\n */\n '*:not(Program)' (node) {\n const commentNode = getJSDocComment(\n sourceCode, node, /** @type {Settings} */ (settings),\n );\n if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n const ste = /** @type {StateObject} */ (state);\n ruleConfig.nonComment({\n node,\n state: ste,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n /** @type {import('estree').Comment} */\n (commentNode),\n ], /** @type {StateObject} */ (state));\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(\n context,\n null,\n untrackedJSdoc,\n /** @type {StateObject} */\n (state),\n true,\n );\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitorBasic} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComms = /** @type {unknown} */ (sourceCode.getAllComments());\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments: /** @type {import('estree').Node[]} */ (allComms),\n context,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // dslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(\n /** @type {JsdocVisitorBasic} */ (iterator),\n ruleConfig,\n );\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n /** @type {import('eslint').Rule.RuleModule} */\n return {\n /**\n * The entrypoint for the JSDoc rule.\n * @param {import('eslint').Rule.RuleContext} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {import('eslint').Rule.RuleListener}\n * a listener with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n /**\n * @type {Context[]|undefined}\n */\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults, ruleConfig.nonGlobalSettings ? {} : settings);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator,\n ruleConfig,\n hasObjectAny ? /** @type {ContextObject[]} */ (contexts) : null,\n ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n /** @type {Partial<StateObject>} */\n const state = {};\n\n /** @type {CheckJsdoc} */\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines,\n /** @type {import('estree').Comment} */\n (jsdocNode),\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info,\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n /** @type {StateObject} */\n (state),\n );\n };\n\n /** @type {import('eslint').Rule.RuleListener} */\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (typeof ruleConfig.exit === 'function') {\n contextObject['Program:exit'] = () => {\n const ste = /** @type {StateObject} */ (state);\n\n // @ts-expect-error `utils` not needed at this point\n /** @type {Required<RuleConfig>} */ (ruleConfig).exit({\n context,\n settings,\n state: ste,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAKA,IAAAE,cAAA,GAAAF,OAAA;AAIA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAA8B,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM;EACJG,WAAW;EACXC;AACF,CAAC,GAAGC,mBAAI;;AAER;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAAC,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,aAAa,GAAGA,CAACC,OAAO,EAAE;EAC9BC,iBAAiB;EACjBC;AACF,CAAC,KAAK;EACJ;EACA,MAAMC,KAAK,GAAG,CAAC,CAAC;;EAEhB;EACAA,KAAK,CAACC,cAAc,GAAIC,OAAO,IAAK;IAClCL,OAAO,CAACM,MAAM,CAAC;MACbC,GAAG,EAAE;QACHC,GAAG,EAAE;UACHC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR,CAAC;QACDC,KAAK,EAAE;UACLF,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR;MACF,CAAC;MACDL;IACF,CAAC,CAAC;EACJ,CAAC;;EAED;EACAF,KAAK,CAACS,uBAAuB,GAAIC,GAAG,IAAK;IACvC,OAAOC,mBAAU,CAACF,uBAAuB,CAACC,GAAG,CAAC;EAChD,CAAC;EAEDV,KAAK,CAACY,oBAAoB,GAAGD,mBAAU,CAACC,oBAAoB;;EAE5D;EACAZ,KAAK,CAACa,yBAAyB,GAAG,CAAC;IACjCC;EACF,CAAC,KAAK;IACJ,MAAMC,GAAG,GAAGJ,mBAAU,CAACK,mBAAmB,CACxCnB,OAAO,EACP,mDAAqDE,IAAI,EACzDe,OA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;QAEhCF,GAAG,CAACC,GAAG,CAACC,MAAM,GAAGsP,SAAS;QAC1BxP,GAAG,CAACI,KAAK,CAACF,MAAM,GAAGsP,SAAS;MAC9B;IACF;IAEA/P,OAAO,CAACM,MAAM,CAAC;MACbmD,IAAI;MACJmM,GAAG;MACHrP,GAAG;MACHF,OAAO;MACPmB,IAAI,EAAEmO;IACR,CAAC,CAAC;EACJ,CAAC;EAED,OAAOrP,MAAM;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM0P,OAAO,GAAGA,CACd5J,IAAI,EACJrE,MAAM,EAAEN,KAAK,EACbK,UAAU,EAAE9B,OAAO,EAAE0B,SAAS,EAAEF,IAAI,EAAEG,QAAQ,EAC9CO,UAAU,EAAE+N,QAAQ,EAAEC,KAAK,EAAErO,YAAY,KACtC;EACH,MAAMsO,QAAQ,GAAG,sBAAwBzO,SAAU;EACnD,MAAMpB,MAAM,GAAGoP,UAAU,CACvB1P,OAAO,EACP;EACCmQ,QACH,CAAC;EAED,MAAMhQ,KAAK,GAAGoB,QAAQ,CACpBC,IAAI,EACJC,KAAK,EACL;EACCC,SAAS,EACVC,QAAQ,EACRrB,MAAM,EACNN,OAAO,EACPkC,UAAU,EACVL,YAAY,EACZC,UAAU,EACVC,MACF,CAAC;EAED,IACE,CAACD,UAAU,CAACsO,aAAa,IAAIzO,QAAQ,CAACuN,cAAc,IACpD/O,KAAK,CAAC4J,MAAM,CAAC,UAAU,CAAC,EACxB;IACA;EACF;EAEA,IACE,CAACjI,UAAU,CAACuO,YAAY,IAAI1O,QAAQ,CAACsN,aAAa,KAEhD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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"iterateJsdoc.cjs","names":["_jsdocUtils","_interopRequireDefault","require","_jsdoccomment","_commentParser","_esquery","obj","__esModule","default","rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","end","column","line","start","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","sc","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","String","type","isVirtualFunction","Boolean","hasATag","stringify","tagBlock","specRewire","block","commentStringify","reportJSDoc","msg","handler","data","fixer","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","descriptions","source","some","tokens","lineEnd","postDelimiter","postTag","name","description","desc","push","join","setTagDescription","matcher","setter","finalIdx","idx","getDescription","lastDescriptionLine","tagsBegun","length","setBlockDescription","descLines","startIdx","endIdx","info","delimiter","undefined","splice","setDescriptionLines","changeTag","src","entries","setTag","number","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","addTag","targetTagName","_jsdoc$tags","getFirstLine","firstLine","emptyTokens","prop","addLine","_jsdoc$source","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","_node$declaration","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","_context$options$","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","tagMissingRequiredTypeOrNamepath","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","tagList","filter","filterAllTags","getAllTags","getTagsByType","hasOptionTag","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","findContext","contexts","comment","foundContext","cntxt","esquery","matches","parse","visitorKeys","contextStr","getSettings","_context$settings$jsd","_context$settings$jsd2","_context$settings$jsd3","_context$settings$jsd4","_context$settings$jsd5","_context$settings$jsd6","_context$settings$jsd7","_context$settings$jsd8","_context$settings$jsd9","_context$settings$jsd10","_context$settings$jsd11","_context$settings$jsd12","_context$settings$jsd13","_context$settings$jsd14","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","iterator","state","jsdocNde","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","selector","lastComment","settngs","exit","create","commentHandler","*:not(Program)","noTracking","has","nonComment","ste","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","allComms","iterateJsdoc","_ruleConfig$meta","metaType","TypeError","contextDefaults","contextSelected","matchContext","_context$options$2","_contexts","_contexts2","match","enforcedContexts","nonGlobalSettings","map","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import jsdocUtils from './jsdocUtils.js';\nimport {\n commentHandler,\n getJSDocComment,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport esquery from 'esquery';\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @typedef {import('@es-joy/jsdoccomment').JsdocBlockWithInline} JsdocBlockWithInline\n */\n\n/**\n * @typedef {{\n * disallowName?: string,\n * allowName?: string,\n * context?: string,\n * comment?: string,\n * tags?: string[],\n * replacement?: string,\n * minimum?: Integer,\n * message?: string,\n * forceRequireReturn?: boolean\n * }} ContextObject\n */\n/**\n * @typedef {string|ContextObject} Context\n */\n\n/**\n * @callback CheckJsdoc\n * @param {{\n * lastIndex?: Integer,\n * isFunctionContext?: boolean,\n * selector?: string,\n * comment?: string\n * }} info\n * @param {null|((jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean|undefined)} handler\n * @param {import('eslint').Rule.Node} node\n * @returns {void}\n */\n\n/**\n * @callback ForEachPreferredTag\n * @param {string} tagName\n * @param {(\n * matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n * targetTagName: string\n * ) => void} arrayHandler\n * @param {boolean} [skipReportingBlockedTag]\n * @returns {void}\n */\n\n/**\n * @callback ReportSettings\n * @param {string} message\n * @returns {void}\n */\n\n/**\n * @callback ParseClosureTemplateTag\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\n\n/**\n * @callback GetPreferredTagNameObject\n * @param {{\n * tagName: string\n * }} cfg\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @typedef {{\n * forEachPreferredTag: ForEachPreferredTag,\n * reportSettings: ReportSettings,\n * parseClosureTemplateTag: ParseClosureTemplateTag,\n * getPreferredTagNameObject: GetPreferredTagNameObject,\n * pathDoesNotBeginWith: import('./jsdocUtils.js').PathDoesNotBeginWith\n * }} BasicUtils\n */\n\n/**\n * @callback IsIteratingFunction\n * @returns {boolean}\n */\n\n/**\n * @callback IsVirtualFunction\n * @returns {boolean}\n */\n\n/**\n * @callback Stringify\n * @param {import('comment-parser').Block} tagBlock\n * @param {boolean} [specRewire]\n * @returns {string}\n */\n\n/**\n * @callback ReportJSDoc\n * @param {string} msg\n * @param {null|import('comment-parser').Spec|{line: Integer, column?: Integer}} [tag]\n * @param {(() => void)|null} [handler]\n * @param {boolean} [specRewire]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n */\n\n/**\n * @callback GetRegexFromString\n * @param {string} str\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\n\n/**\n * @callback GetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\n\n/**\n * @callback SetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback GetDescription\n * @returns {{\n * description: string,\n * descriptions: string[],\n * lastDescriptionLine: Integer\n * }}\n */\n\n/**\n * @callback SetBlockDescription\n * @param {(\n * info: {\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * },\n * seedTokens: (\n * tokens?: Partial<import('comment-parser').Tokens>\n * ) => import('comment-parser').Tokens,\n * descLines: string[]\n * ) => import('comment-parser').Line[]} setter\n * @returns {void}\n */\n\n/**\n * @callback SetDescriptionLines\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback ChangeTag\n * @param {import('comment-parser').Spec} tag\n * @param {...Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback SetTag\n * @param {import('comment-parser').Spec & {\n * line: Integer\n * }} tag\n * @param {Partial<import('comment-parser').Tokens>} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback RemoveTag\n * @param {Integer} tagIndex\n * @param {{\n * removeEmptyBlock?: boolean,\n * tagSourceOffset?: Integer\n * }} [cfg]\n * @returns {void}\n */\n\n/**\n * @callback AddTag\n * @param {string} targetTagName\n * @param {Integer} [number]\n * @param {import('comment-parser').Tokens|{}} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback GetFirstLine\n * @returns {Integer|undefined}\n */\n\n/**\n * @typedef {(\n * tokens?: Partial<import('comment-parser').Tokens> | undefined\n * ) => import('comment-parser').Tokens} SeedTokens\n */\n\n/**\n * Sets tokens to empty string.\n * @callback EmptyTokens\n * @param {import('comment-parser').Tokens} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLine\n * @param {Integer} sourceIndex\n * @param {Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLines\n * @param {Integer} tagIndex\n * @param {Integer} tagSourceOffset\n * @param {Integer} numLines\n * @returns {void}\n */\n\n/**\n * @callback MakeMultiline\n * @returns {void}\n */\n\n/**\n * @callback GetFunctionParameterNames\n * @param {boolean} [useDefaultObjectProperties]\n * @returns {import('./jsdocUtils.js').ParamNameInfo[]}\n */\n\n/**\n * @callback HasParams\n * @returns {Integer}\n */\n\n/**\n * @callback IsGenerator\n * @returns {boolean}\n */\n\n/**\n * @callback IsConstructor\n * @returns {boolean}\n */\n\n/**\n * @callback GetJsdocTagsDeep\n * @param {string} tagName\n * @returns {false|{\n * idx: Integer,\n * name: string,\n * type: string\n * }[]}\n */\n\n/**\n * @callback GetPreferredTagName\n * @param {{\n * tagName: string,\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 */\n\n/**\n * @callback IsValidTag\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\n\n/**\n * @callback HasATag\n * @param {string[]} names\n * @returns {boolean}\n */\n\n/**\n * @callback HasTag\n * @param {string} name\n * @returns {boolean}\n */\n\n/**\n * @callback ComparePaths\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\n\n/**\n * @callback DropPathSegmentQuotes\n * @param {string} name\n * @returns {string}\n */\n\n/**\n * @callback AvoidDocs\n * @returns {boolean}\n */\n\n/**\n * @callback TagMightHaveNamePositionTypePosition\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} [otherModeMaps]\n * @returns {boolean|{otherMode: true}}\n */\n\n/**\n * @callback TagMustHave\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback TagMissingRequiredTypeOrNamepath\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback IsNamepathX\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetTagStructureForMode\n * @param {import('./jsdocUtils.js').ParserMode} mde\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\n\n/**\n * @callback MayBeUndefinedTypeTag\n * @param {import('comment-parser').Spec} tag\n * @returns {boolean}\n */\n\n/**\n * @callback HasValueOrExecutorHasNonEmptyResolveValue\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} [allBranches]\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldReturnValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasThrowValue\n * @returns {boolean}\n */\n\n/**\n * @callback IsAsync\n * @returns {boolean|undefined}\n */\n\n/**\n * @callback GetTags\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\n\n/**\n * @callback GetPresentTags\n * @param {string[]} tagList\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterTags\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterAllTags\n * @param {(tag: (import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)) => boolean} filter\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\n\n/**\n * @callback GetTagsByType\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n * tagsWithNames: import('comment-parser').Spec[],\n * tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\n\n/**\n * @callback HasOptionTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetClassNode\n * @returns {Node|null}\n */\n\n/**\n * @callback GetClassJsdoc\n * @returns {null|JsdocBlockWithInline}\n */\n\n/**\n * @callback ClassHasTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback FindContext\n * @param {Context[]} contexts\n * @param {string|undefined} comment\n * @returns {{\n * foundContext: Context|undefined,\n * contextStr: string\n * }}\n */\n\n/**\n * @typedef {BasicUtils & {\n * isIteratingFunction: IsIteratingFunction,\n * isVirtualFunction: IsVirtualFunction,\n * stringify: Stringify,\n * reportJSDoc: ReportJSDoc,\n * getRegexFromString: GetRegexFromString,\n * getTagDescription: GetTagDescription,\n * setTagDescription: SetTagDescription,\n * getDescription: GetDescription,\n * setBlockDescription: SetBlockDescription,\n * setDescriptionLines: SetDescriptionLines,\n * changeTag: ChangeTag,\n * setTag: SetTag,\n * removeTag: RemoveTag,\n * addTag: AddTag,\n * getFirstLine: GetFirstLine,\n * seedTokens: SeedTokens,\n * emptyTokens: EmptyTokens,\n * addLine: AddLine,\n * addLines: AddLines,\n * makeMultiline: MakeMultiline,\n * flattenRoots: import('./jsdocUtils.js').FlattenRoots,\n * getFunctionParameterNames: GetFunctionParameterNames,\n * hasParams: HasParams,\n * isGenerator: IsGenerator,\n * isConstructor: IsConstructor,\n * getJsdocTagsDeep: GetJsdocTagsDeep,\n * getPreferredTagName: GetPreferredTagName,\n * isValidTag: IsValidTag,\n * hasATag: HasATag,\n * hasTag: HasTag,\n * comparePaths: ComparePaths,\n * dropPathSegmentQuotes: DropPathSegmentQuotes,\n * avoidDocs: AvoidDocs,\n * tagMightHaveNamePosition: TagMightHaveNamePositionTypePosition,\n * tagMightHaveTypePosition: TagMightHaveNamePositionTypePosition,\n * tagMustHaveNamePosition: TagMustHave,\n * tagMustHaveTypePosition: TagMustHave,\n * tagMissingRequiredTypeOrNamepath: TagMissingRequiredTypeOrNamepath,\n * isNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNamepath: IsNamepathX,\n * getTagStructureForMode: GetTagStructureForMode,\n * mayBeUndefinedTypeTag: MayBeUndefinedTypeTag,\n * hasValueOrExecutorHasNonEmptyResolveValue: HasValueOrExecutorHasNonEmptyResolveValue,\n * hasYieldValue: HasYieldValue,\n * hasYieldReturnValue: HasYieldReturnValue,\n * hasThrowValue: HasThrowValue,\n * isAsync: IsAsync,\n * getTags: GetTags,\n * getPresentTags: GetPresentTags,\n * filterTags: FilterTags,\n * filterAllTags: FilterAllTags,\n * getTagsByType: GetTagsByType,\n * hasOptionTag: HasOptionTag,\n * getClassNode: GetClassNode,\n * getClassJsdoc: GetClassJsdoc,\n * classHasTag: ClassHasTag,\n * findContext: FindContext\n * }} Utils\n */\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n * @typedef {import('eslint').Rule.RuleMetaData} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n * @typedef {{\n * globalTags: {},\n * hasDuplicates: {\n * [key: string]: boolean\n * },\n * selectorMap: {\n * [selector: string]: {\n * [comment: string]: Integer\n * }\n * },\n * hasTag: {\n * [key: string]: boolean\n * },\n * hasNonComment: number,\n * hasNonCommentBeforeTag: {\n * [key: string]: boolean|number\n * }\n * }} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n * @typedef {import('eslint').Rule.Node} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {{\n * tagNamePreference?: import('./jsdocUtils.js').TagNamePreference,\n * mode?: import('./jsdocUtils.js').ParserMode\n * }} cfg\n * @returns {BasicUtils}\n */\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n /** @type {BasicUtils} */\n const utils = {};\n\n /** @type {ReportSettings} */\n utils.reportSettings = (message) => {\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,\n });\n };\n\n /** @type {ParseClosureTemplateTag} */\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n /** @type {GetPreferredTagNameObject} */\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(\n context,\n /** @type {import('./jsdocUtils.js').ParserMode} */ (mode),\n tagName,\n tagNamePreference,\n );\n const isObject = ret && typeof ret === 'object';\n if (ret === false || (isObject && !ret.replacement)) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\n/**\n * @callback Report\n * @param {string} message\n * @param {import('eslint').Rule.ReportFixer|null} [fix]\n * @param {null|\n * {line?: Integer, column?: Integer}|\n * import('comment-parser').Spec & {line?: Integer}\n * } [jsdocLoc]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n * @returns {void}\n */\n\n/**\n * @param {Node|null} node\n * @param {JsdocBlockWithInline} jsdoc\n * @param {import('eslint').AST.Token} jsdocNode\n * @param {Settings} settings\n * @param {Report} report\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('eslint').SourceCode} sc\n * @param {boolean|undefined} iteratingAll\n * @param {RuleConfig} ruleConfig\n * @param {string} indent\n * @returns {Utils}\n */\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n sc,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = /** @type {import('eslint').Rule.Node[]} */ (node ?\n (sc.getAncestors ?\n (\n sc.getAncestors(node)\n /* c8 ignore next 4 */\n ) :\n (\n context.getAncestors()\n )) :\n []);\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n\n const utils = /** @type {Utils} */ (getBasicUtils(context, settings));\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(String(node && node.type));\n };\n\n /** @type {IsVirtualFunction} */\n utils.isVirtualFunction = () => {\n return Boolean(iteratingAll) && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n /** @type {Stringify} */\n utils.stringify = (tagBlock, specRewire) => {\n let block;\n if (specRewire) {\n block = rewireSpecs(tagBlock);\n }\n\n return commentStringify(/** @type {import('comment-parser').Block} */ (\n specRewire ? block : tagBlock));\n };\n\n /** @type {ReportJSDoc} */\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? /** @type {import('eslint').Rule.ReportFixer} */ (\n fixer,\n ) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/u);\n if (lastLineBreakPos > -1) {\n return fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]);\n }\n\n return fixer.removeRange(\n (/\\s/u).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n );\n }\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n /** @type {GetRegexFromString} */\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n /** @type {GetTagDescription} */\n utils.getTagDescription = (tg, returnArray) => {\n /**\n * @type {string[]}\n */\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return returnArray ? descriptions : descriptions.join('\\n');\n };\n\n /** @type {SetTagDescription} */\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {GetDescription} */\n utils.getDescription = () => {\n /** @type {string[]} */\n const descriptions = [];\n let lastDescriptionLine = 0;\n let tagsBegun = false;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (tag) {\n tagsBegun = true;\n }\n\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n if (!tagsBegun && description) {\n descriptions.push(description);\n }\n\n return true;\n }\n\n if (!tagsBegun && (idx || description)) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n descriptions,\n lastDescriptionLine,\n };\n };\n\n /** @type {SetBlockDescription} */\n utils.setBlockDescription = (setter) => {\n /** @type {string[]} */\n const descLines = [];\n /**\n * @type {undefined|Integer}\n */\n let startIdx;\n /**\n * @type {undefined|Integer}\n */\n let endIdx;\n\n /**\n * @type {undefined|{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n let info;\n\n jsdoc.source.some(({\n tokens: {\n description,\n start,\n delimiter,\n postDelimiter,\n tag,\n end,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n descLines.push(description);\n return false;\n });\n\n /* c8 ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n /** @type {Integer} */ (startIdx),\n /** @type {Integer} */ (endIdx) - /** @type {Integer} */ (startIdx),\n ...setter(\n /**\n * @type {{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n (info),\n seedTokens,\n descLines,\n ),\n );\n }\n };\n\n /** @type {SetDescriptionLines} */\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n /* c8 ignore next 3 -- Already checked */\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {ChangeTag} */\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n /** @type {SetTag} */\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n number: tag.line,\n // Or tag.source[0].number?\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n /** @type {RemoveTag} */\n utils.removeTag = (tagIndex, {\n removeEmptyBlock = false,\n tagSourceOffset = 0,\n } = {}) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n /** @type {Integer|undefined} */\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n }) => {\n return number === srcNumber;\n });\n // c8 ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end: ending,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n if (\n spliceIdx === 0 && jsdoc.tags.length >= 2 ||\n !removeEmptyBlock && (end || delimiter === '/**')\n ) {\n const {\n tokens,\n } = jsdoc.source[spliceIdx];\n for (const item of [\n 'postDelimiter',\n 'tag',\n 'postTag',\n 'type',\n 'postType',\n 'name',\n 'postName',\n 'description',\n ]) {\n tokens[\n /**\n * @type {\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n * \"postTag\"|\"name\"|\"postName\"|\"description\"}\n */ (\n item\n )\n ] = '';\n }\n } else {\n jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n }\n\n lastIndex = sourceIndex;\n\n return true;\n }\n /* c8 ignore next */\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect\n // missing tags, this step should be added here (so that, e.g.,\n // if accessing `jsdoc.tags`, such as to add a new tag, the\n // correct information will be available)\n };\n\n /** @type {AddTag} */\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n /** @type {GetFirstLine} */\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n /** @type {SeedTokens} */\n utils.seedTokens = seedTokens;\n\n /** @type {EmptyTokens} */\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[\n /**\n * @type {\"start\"|\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n * \"postTag\"|\"name\"|\"postName\"|\"description\"|\"end\"|\"lineEnd\"}\n */ (\n prop\n )\n ] = '';\n }\n };\n\n /** @type {AddLine} */\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n /** @type {AddLines} */\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n /** @type {Integer|undefined} */\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // c8 ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n /* c8 ignore next */\n return false;\n });\n\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n };\n\n /** @type {MakeMultiline} */\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n } else /* c8 ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n /**\n * @type {import('./jsdocUtils.js').FlattenRoots}\n */\n utils.flattenRoots = jsdocUtils.flattenRoots;\n\n /** @type {GetFunctionParameterNames} */\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n /** @type {HasParams} */\n utils.hasParams = () => {\n return jsdocUtils.hasParams(/** @type {Node} */ (node));\n };\n\n /** @type {IsGenerator} */\n utils.isGenerator = () => {\n return node !== null && Boolean(\n /**\n * @type {import('estree').FunctionDeclaration|\n * import('estree').FunctionExpression}\n */ (node).generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n /** @type {import('estree').FunctionDeclaration} */\n (\n /**\n * @type {import('estree').ExportNamedDeclaration|\n * import('estree').ExportDefaultDeclaration}\n */ (node).declaration\n )?.generator,\n );\n };\n\n /** @type {IsConstructor} */\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(/** @type {Node} */ (node));\n };\n\n /** @type {GetJsdocTagsDeep} */\n utils.getJsdocTagsDeep = (tagName) => {\n const name = /** @type {string|false} */ (utils.getPreferredTagName({\n tagName,\n }));\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n /** @type {GetPreferredTagName} */\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n /** @type {IsValidTag} */\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n /** @type {HasATag} */\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n /** @type {HasTag} */\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n /** @type {ComparePaths} */\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n /** @type {DropPathSegmentQuotes} */\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n /** @type {AvoidDocs} */\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc,\n node,\n context,\n /** @type {import('json-schema').JSONSchema4|import('json-schema').JSONSchema4[]} */ (\n ruleConfig.meta.schema\n ),\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n /** @type {TagMightHaveNamePositionTypePosition} */\n utils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */ (\n method\n )\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n /** @type {TagMissingRequiredTypeOrNamepath} */\n utils.tagMissingRequiredTypeOrNamepath = (tagName, otherModeMaps) => {\n const result = jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName);\n if (!result) {\n return false;\n }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n ]) {\n /** @type {TagMustHave} */\n utils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'isNamepathReferencingTag',\n 'isNamepathOrUrlReferencingTag',\n 'tagMightHaveNamepath',\n ]) {\n /** @type {IsNamepathX} */\n utils[\n /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */ (\n method\n )] = (tagName) => {\n return jsdocUtils[\n /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */\n (method)\n ](tagName);\n };\n }\n\n /** @type {GetTagStructureForMode} */\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n /** @type {MayBeUndefinedTypeTag} */\n utils.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n /** @type {HasValueOrExecutorHasNonEmptyResolveValue} */\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(\n /** @type {Node} */ (node), anyPromiseAsReturn, allBranches,\n );\n };\n\n /** @type {HasYieldValue} */\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(/** @type {Node} */ (node).type)) {\n return jsdocUtils.hasYieldValue(\n /** @type {import('estree').Declaration|import('estree').Expression} */ (\n /** @type {import('estree').ExportNamedDeclaration|import('estree').ExportDefaultDeclaration} */\n (node).declaration\n ),\n );\n }\n\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node));\n };\n\n /** @type {HasYieldReturnValue} */\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node), true);\n };\n\n /** @type {HasThrowValue} */\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n /** @type {IsAsync} */\n utils.isAsync = () => {\n return Boolean(node && 'async' in node && node.async);\n };\n\n /** @type {GetTags} */\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n /** @type {GetPresentTags} */\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n /** @type {FilterTags} */\n utils.filterTags = (filter) => {\n return jsdoc.tags.filter((tag) => {\n return filter(tag);\n });\n };\n\n /** @type {FilterAllTags} */\n utils.filterAllTags = (filter) => {\n const tags = jsdocUtils.getAllTags(jsdoc);\n return tags.filter((tag) => {\n return filter(tag);\n });\n };\n\n /** @type {GetTagsByType} */\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags);\n };\n\n /** @type {HasOptionTag} */\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n /** @type {GetClassNode} */\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) ?? null;\n };\n\n /** @type {GetClassJsdoc} */\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n /** @type {ClassHasTag} */\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return classJsdoc !== null && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n /** @type {ForEachPreferredTag} */\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = /** @type {string|false} */ (\n utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\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 /** @type {FindContext} */\n utils.findContext = (contexts, comment) => {\n const foundContext = contexts.find((cntxt) => {\n return typeof cntxt === 'string' ?\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n ) :\n (!cntxt.context || cntxt.context === 'any' ||\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt.context),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n )) && comment === cntxt.comment;\n });\n\n const contextStr = typeof foundContext === 'object' ?\n foundContext.context ?? 'any' :\n String(foundContext);\n\n return {\n contextStr,\n foundContext,\n };\n };\n\n return utils;\n};\n\n/**\n * @typedef {{\n * [key: string]: false|string|{\n * message: string,\n * replacement?: false|string\n * skipRootChecking?: boolean\n * }\n * }} PreferredTypes\n */\n/**\n * @typedef {{\n * [key: string]: {\n * name?: \"text\"|\"namepath-defining\"|\"namepath-referencing\"|false,\n * type?: boolean|string[],\n * required?: (\"name\"|\"type\"|\"typeOrNameRequired\")[]\n * }\n * }} StructuredTags\n */\n/**\n * Settings from ESLint types.\n * @typedef {{\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * mode: import('./jsdocUtils.js').ParserMode,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * [name: string]: any,\n * contexts?: Context[]\n * }} Settings\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @returns {Settings|false}\n */\nconst getSettings = (context) => {\n /* dslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ?? 'typescript',\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\n };\n /* dslint-enable canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: /** @type {Error} */ (error).message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n * @callback MakeReport\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('estree').Node} commentNode\n * @returns {Report}\n */\n\n/** @type {MakeReport} */\nconst makeReport = (context, commentNode) => {\n /** @type {Report} */\n const report = (message, fix = null, jsdocLoc = null, data = undefined) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = /** @type {import('comment-parser').Spec & {line?: Integer}} */ (\n jsdocLoc\n ).source[0].number;\n }\n\n const lineNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.line +\n /** @type {Integer} */ (jsdocLoc.line);\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n if ('column' in jsdocLoc && typeof jsdocLoc.column === 'number') {\n const colNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent?: string,\n * info?: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state?: StateObject,\n * globalState?: Map<string, Map<string, string>>,\n * jsdoc?: JsdocBlockWithInline,\n * jsdocNode?: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node?: Node,\n * allComments?: import('estree').Node[]\n * report?: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: BasicUtils,\n * }\n * ) => any } JsdocVisitorBasic\n */\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent: string,\n * info: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state: StateObject,\n * globalState: Map<string, Map<string, string>>,\n * jsdoc: JsdocBlockWithInline,\n * jsdocNode: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node: Node|null,\n * allComments?: import('estree').Node[]\n * report: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n\n/**\n * @param {{\n * comment?: string,\n * lastIndex?: Integer,\n * selector?: string,\n * isFunctionContext?: boolean,\n * }} info\n * @param {string} indent\n * @param {JsdocBlockWithInline} jsdoc\n * @param {RuleConfig} ruleConfig\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('@es-joy/jsdoccomment').Token} jsdocNode\n * @param {Node|null} node\n * @param {Settings} settings\n * @param {import('eslint').SourceCode} sourceCode\n * @param {JsdocVisitor} iterator\n * @param {StateObject} state\n * @param {boolean} [iteratingAll]\n * @returns {void}\n */\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n const report = makeReport(\n context,\n /** @type {import('estree').Node} */\n (jsdocNde),\n );\n\n const utils = getUtils(\n node,\n jsdoc,\n /** @type {import('eslint').AST.Token} */\n (jsdocNode),\n settings,\n report,\n context,\n sourceCode,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n jsdoc,\n jsdocNode: /**\n * @type {import('eslint').Rule.Node & {\n * range: [number, number];}}\n */ (jsdocNde),\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\n/**\n * @param {string[]} lines\n * @param {import('estree').Comment} jsdocNode\n * @returns {[indent: string, jsdoc: JsdocBlockWithInline]}\n */\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.line - 1\n ];\n const indnt = sourceLine.charAt(0).repeat(\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.column,\n );\n\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node & {\n * range: [number, number]\n * }, state: StateObject}} NonCommentArgs\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils.js').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {true} [checkPrivate] Whether to check `@private` blocks (normally exempted)\n * @property {true} [checkInternal] Whether to check `@internal` blocks (normally exempted)\n * @property {true} [checkFile] Whether to iterates over all JSDoc blocks regardless of attachment\n * @property {true} [nonGlobalSettings] Whether to avoid relying on settings for global contexts\n * @property {true} [noTracking] Whether to disable the tracking of visited comment nodes (as\n * non-tracked may conduct further actions)\n * @property {true} [matchContext] Whether the rule expects contexts to be based on a match option\n * @property {(args: {\n * context: import('eslint').Rule.RuleContext,\n * state: StateObject,\n * settings: Settings,\n * utils: BasicUtils\n * }) => void} [exit] Handler to be executed upon exiting iteration of program AST\n * @property {(nca: NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param {ContextObject[]|null} [contexts] The `contexts` containing relevant `comment` info.\n * @param {boolean} [additiveCommentContexts] If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n /** @type {import('@es-joy/jsdoccomment').CommentHandler} */\n let handler;\n\n /** @type {Settings|false} */\n let settings;\n\n /**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {Node|null} node\n * @param {import('estree').Comment[]} jsdocNodes\n * @param {StateObject} state\n * @param {boolean} [lastCall]\n * @returns {void}\n */\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, /** @type {Settings} */ (settings));\n for (const jsdocNode of jsdocNodes) {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(\n /** @type {import('estree').Node} */\n (jsdocNde),\n ))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of /** @type {ContextObject[]} */ (contexts).entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n /** @type {Node} */\n (node),\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n const settngs = /** @type {Settings} */ (settings);\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n settings: settngs,\n state,\n utils,\n });\n }\n };\n\n return {\n // @ts-expect-error ESLint accepts\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n /**\n * @param {import('eslint').Rule.Node & {\n * range: [Integer, Integer];\n * }} node\n * @returns {void}\n */\n '*:not(Program)' (node) {\n const commentNode = getJSDocComment(\n sourceCode, node, /** @type {Settings} */ (settings),\n );\n if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n const ste = /** @type {StateObject} */ (state);\n ruleConfig.nonComment({\n node,\n state: ste,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n /** @type {import('estree').Comment} */\n (commentNode),\n ], /** @type {StateObject} */ (state));\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(\n context,\n null,\n untrackedJSdoc,\n /** @type {StateObject} */\n (state),\n true,\n );\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitorBasic} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComms = /** @type {unknown} */ (sourceCode.getAllComments());\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments: /** @type {import('estree').Node[]} */ (allComms),\n context,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // dslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(\n /** @type {JsdocVisitorBasic} */ (iterator),\n ruleConfig,\n );\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n /** @type {import('eslint').Rule.RuleModule} */\n return {\n /**\n * The entrypoint for the JSDoc rule.\n * @param {import('eslint').Rule.RuleContext} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {import('eslint').Rule.RuleListener}\n * a listener with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n /**\n * @type {Context[]|undefined}\n */\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults, ruleConfig.nonGlobalSettings ? {} : settings);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator,\n ruleConfig,\n hasObjectAny ? /** @type {ContextObject[]} */ (contexts) : null,\n ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n /** @type {Partial<StateObject>} */\n const state = {};\n\n /** @type {CheckJsdoc} */\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines,\n /** @type {import('estree').Comment} */\n (jsdocNode),\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info,\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n /** @type {StateObject} */\n (state),\n );\n };\n\n /** @type {import('eslint').Rule.RuleListener} */\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (typeof ruleConfig.exit === 'function') {\n contextObject['Program:exit'] = () => {\n const ste = /** @type {StateObject} */ (state);\n\n // @ts-expect-error `utils` not needed at this point\n /** @type {Required<RuleConfig>} */ (ruleConfig).exit({\n context,\n settings,\n state: ste,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAKA,IAAAE,cAAA,GAAAF,OAAA;AAIA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAA8B,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM;EACJG,WAAW;EACXC;AACF,CAAC,GAAGC,mBAAI;;AAER;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAAC,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,aAAa,GAAGA,CAACC,OAAO,EAAE;EAC9BC,iBAAiB;EACjBC;AACF,CAAC,KAAK;EACJ;EACA,MAAMC,KAAK,GAAG,CAAC,CAAC;;EAEhB;EACAA,KAAK,CAACC,cAAc,GAAIC,OAAO,IAAK;IAClCL,OAAO,CAACM,MAAM,CAAC;MACbC,GAAG,EAAE;QACHC,GAAG,EAAE;UACHC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR,CAAC;QACDC,KAAK,EAAE;UACLF,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR;MACF,CAAC;MACDL;IACF,CAAC,CAAC;EACJ,CAAC;;EAED;EACAF,KAAK,CAACS,uBAAuB,GAAIC,GAAG,IAAK;IACvC,OAAOC,mBAAU,CAACF,uBAAuB,CAACC,GAAG,CAAC;EAChD,CAAC;EAEDV,KAAK,CAACY,oBAAoB,GAAGD,mBAAU,CAACC,oBAAoB;;EAE5D;EACAZ,KAAK,CAACa,yBAAyB,GAAG,CAAC;IACjCC;EACF,CAAC,KAAK;IACJ,MAAMC,GAAG,GAAGJ,mBAAU,CAACK,mBAAmB,CACxCnB,OAAO,EACP,mDAAqDE,IAAI,EACzDe,OA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AACrP,GAAG,CACfI,KAAK,CAACF,MAAM,GAAGqP,QAAQ,CAACrP,MAAM;QAEhCF,GAAG,CAACC,GAAG,CAACC,MAAM,GAAGuP,SAAS;QAC1BzP,GAAG,CAACI,KAAK,CAACF,MAAM,GAAGuP,SAAS;MAC9B;IACF;IAEAhQ,OAAO,CAACM,MAAM,CAAC;MACbmD,IAAI;MACJoM,GAAG;MACHtP,GAAG;MACHF,OAAO;MACPmB,IAAI,EAAEoO;IACR,CAAC,CAAC;EACJ,CAAC;EAED,OAAOtP,MAAM;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM2P,OAAO,GAAGA,CACd7J,IAAI,EACJrE,MAAM,EAAEN,KAAK,EACbK,UAAU,EAAE9B,OAAO,EAAE0B,SAAS,EAAEF,IAAI,EAAEG,QAAQ,EAC9CO,UAAU,EAAEgO,QAAQ,EAAEC,KAAK,EAAEtO,YAAY,KACtC;EACH,MAAMuO,QAAQ,GAAG,sBAAwB1O,SAAU;EACnD,MAAMpB,MAAM,GAAGqP,UAAU,CACvB3P,OAAO,EACP;EACCoQ,QACH,CAAC;EAED,MAAMjQ,KAAK,GAAGoB,QAAQ,CACpBC,IAAI,EACJC,KAAK,EACL;EACCC,SAAS,EACVC,QAAQ,EACRrB,MAAM,EACNN,OAAO,EACPkC,UAAU,EACVL,YAAY,EACZC,UAAU,EACVC,MACF,CAAC;EAED,IACE,CAACD,UAAU,CAACuO,aAAa,IAAI1O,QAAQ,CAACwN,cAAc,IACpDhP,KAAK,CAAC6J,MAAM,CAAC,UAAU,CAAC,EACxB;IACA;EACF;EAEA,IA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","ignoreList":[]}
|
|
@@ -7,7 +7,7 @@ exports.default = void 0;
|
|
|
7
7
|
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
|
|
8
8
|
var _jsdoccomment = require("@es-joy/jsdoccomment");
|
|
9
9
|
var _fs = require("fs");
|
|
10
|
-
var
|
|
10
|
+
var _nodeModule = require("node:module");
|
|
11
11
|
var _path = require("path");
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
13
|
/**
|
|
@@ -68,7 +68,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
68
68
|
if (/^[./]/u.test(mod)) {
|
|
69
69
|
return;
|
|
70
70
|
}
|
|
71
|
-
if ((0,
|
|
71
|
+
if ((0, _nodeModule.isBuiltin)(mod)) {
|
|
72
72
|
// mod = '@types/node';
|
|
73
73
|
// moduleCheck.set(mod, !deps.has(mod));
|
|
74
74
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importsAsDependencies.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","_fs","
|
|
1
|
+
{"version":3,"file":"importsAsDependencies.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","_fs","_nodeModule","_path","obj","__esModule","default","deps","setDeps","pkg","JSON","parse","readFileSync","join","process","cwd","Set","dependencies","Object","keys","devDependencies","error","console","log","moduleCheck","Map","_default","exports","iterateJsdoc","jsdoc","settings","utils","undefined","mode","tag","tags","typeAst","tryParse","type","traverse","nde","mod","element","value","replace","test","isBuiltinModule","has","types","typings","set","get","reportJSDoc","iterateAllJsdocs","meta","docs","description","url","module"],"sources":["../../src/rules/importsAsDependencies.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport {\n readFileSync,\n} from 'fs';\nimport {isBuiltin as isBuiltinModule} from 'node:module';\nimport {\n join,\n} from 'path';\n\n/**\n * @type {Set<string>|null}\n */\nlet deps;\n\nconst setDeps = function () {\n try {\n const pkg = JSON.parse(\n // @ts-expect-error It's ok\n readFileSync(join(process.cwd(), './package.json')),\n );\n deps = new Set([\n ...(pkg.dependencies ?\n /* c8 ignore next 2 */\n Object.keys(pkg.dependencies) :\n []),\n ...(pkg.devDependencies ?\n /* c8 ignore next 2 */\n Object.keys(pkg.devDependencies) :\n []),\n ]);\n /* c8 ignore next -- our package.json exists */\n } catch (error) {\n /* c8 ignore next -- our package.json exists */\n deps = null;\n /* c8 ignore next 4 -- our package.json exists */\n /* eslint-disable no-console -- Inform user */\n console.log(error);\n /* eslint-enable no-console -- Inform user */\n }\n};\n\nconst moduleCheck = new Map();\n\nexport default iterateJsdoc(({\n jsdoc,\n settings,\n utils,\n}) => {\n if (deps === undefined) {\n setDeps();\n }\n\n /* c8 ignore next 3 -- our package.json exists */\n if (deps === null) {\n return;\n }\n\n const {\n mode,\n } = settings;\n\n for (const tag of jsdoc.tags) {\n let typeAst;\n try {\n typeAst = mode === 'permissive' ? tryParse(tag.type) : parse(tag.type, mode);\n } catch {\n continue;\n }\n\n // eslint-disable-next-line no-loop-func -- Safe\n traverse(typeAst, (nde) => {\n /* c8 ignore next 3 -- TS guard */\n if (deps === null) {\n return;\n }\n\n if (nde.type === 'JsdocTypeImport') {\n let mod = nde.element.value.replace(\n /^(@[^/]+\\/[^/]+|[^/]+).*$/u, '$1',\n );\n\n if ((/^[./]/u).test(mod)) {\n return;\n }\n\n if (isBuiltinModule(mod)) {\n // mod = '@types/node';\n // moduleCheck.set(mod, !deps.has(mod));\n return;\n } else if (!moduleCheck.has(mod)) {\n let pkg;\n try {\n pkg = JSON.parse(\n // @ts-expect-error It's ok\n readFileSync(join(process.cwd(), 'node_modules', mod, './package.json')),\n );\n } catch {\n // Ignore\n }\n\n if (!pkg || (!pkg.types && !pkg.typings)) {\n mod = `@types/${mod}`;\n }\n\n moduleCheck.set(mod, !deps.has(mod));\n }\n\n if (moduleCheck.get(mod)) {\n utils.reportJSDoc(\n 'import points to package which is not found in dependencies',\n tag,\n );\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports if JSDoc `import()` statements point to a package which is not listed in `dependencies` or `devDependencies`',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/imports-as-dependencies.md#repos-sticky-header',\n },\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -24,8 +24,8 @@ const isNewPromiseExpression = node => {
|
|
|
24
24
|
* @returns {boolean}
|
|
25
25
|
*/
|
|
26
26
|
const isVoidPromise = node => {
|
|
27
|
-
var _node$typeParameters;
|
|
28
|
-
return /** @type {import('@typescript-eslint/types').TSESTree.TSTypeReference} */(node === null || node === void 0 || (_node$typeParameters = node.typeParameters) === null || _node$typeParameters === void 0 || (_node$typeParameters = _node$typeParameters.params) === null || _node$typeParameters === void 0 || (_node$typeParameters = _node$typeParameters[0]) === null || _node$typeParameters === void 0 ? void 0 : _node$typeParameters.type) === 'TSVoidKeyword';
|
|
27
|
+
var _node$typeArguments, _node$typeParameters;
|
|
28
|
+
return /** @type {import('@typescript-eslint/types').TSESTree.TSTypeReference} */(node === null || node === void 0 || (_node$typeArguments = node.typeArguments) === null || _node$typeArguments === void 0 || (_node$typeArguments = _node$typeArguments.params) === null || _node$typeArguments === void 0 || (_node$typeArguments = _node$typeArguments[0]) === null || _node$typeArguments === void 0 ? void 0 : _node$typeArguments.type) === 'TSVoidKeyword' || /** @type {import('@typescript-eslint/types').TSESTree.TSTypeReference} */(node === null || node === void 0 || (_node$typeParameters = node.typeParameters) === null || _node$typeParameters === void 0 || (_node$typeParameters = _node$typeParameters.params) === null || _node$typeParameters === void 0 || (_node$typeParameters = _node$typeParameters[0]) === null || _node$typeParameters === void 0 ? void 0 : _node$typeParameters.type) === 'TSVoidKeyword';
|
|
29
29
|
};
|
|
30
30
|
const undefinedKeywords = new Set(['TSVoidKeyword', 'TSUndefinedKeyword', 'TSNeverKeyword']);
|
|
31
31
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasReturnValue.cjs","names":["isNewPromiseExpression","node","type","callee","name","isVoidPromise","_node$typeParameters","typeParameters","params","undefinedKeywords","Set","hasReturnValue","throwOnNullReturn","promFilter","_node$returnType","returnType","typeAnnotation","has","value","expression","body","some","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","argument","Error","exports","allBrancheshaveReturnValues","_node$returnType2","lastBodyNode","slice","test","error","message","every","consNode","hasNonEmptyResolverCall","resolverName","arguments","length","undefined","_node$params$","elements","element","right","left","expressions","subExpression","properties","property","decorators","decorator","computed","key","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasReturnMethod","promiseFilter","hasReturn","Boolean","prom"],"sources":["../../src/utils/hasReturnValue.js"],"sourcesContent":["/**\n * @typedef {import('estree').Node|\n * import('@typescript-eslint/types').TSESTree.Node} ESTreeOrTypeScriptNode\n */\n\n/**\n * Checks if a node is a promise but has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n * @param {ESTreeOrTypeScriptNode|undefined|null} node\n * @returns {boolean|undefined|null}\n */\nconst isNewPromiseExpression = (node) => {\n return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\n};\n\n/**\n * @param {ESTreeOrTypeScriptNode|null|undefined} node\n * @returns {boolean}\n */\nconst isVoidPromise = (node) => {\n return /** @type {import('@typescript-eslint/types').TSESTree.TSTypeReference} */ (\n node\n )?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';\n};\n\nconst undefinedKeywords = new Set([\n 'TSVoidKeyword', 'TSUndefinedKeyword', 'TSNeverKeyword',\n]);\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n * @param {ESTreeOrTypeScriptNode|undefined|null} node\n * @param {boolean} [throwOnNullReturn]\n * @param {PromiseFilter} [promFilter]\n * @returns {boolean|undefined}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, throwOnNullReturn, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n case 'MethodDefinition':\n return hasReturnValue(node.value, throwOnNullReturn, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return 'expression' in node && node.expression && (!isNewPromiseExpression(\n node.body,\n ) || !isVoidPromise(node.body)) ||\n hasReturnValue(node.body, throwOnNullReturn, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, throwOnNullReturn, promFilter);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body, throwOnNullReturn, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.alternate, throwOnNullReturn, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.finalizer, throwOnNullReturn, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(nde, throwOnNullReturn, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n if (throwOnNullReturn) {\n throw new Error('Null return');\n }\n\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\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|null|undefined} node\n * @param {PromiseFilter} promFilter\n * @returns {undefined|boolean|ESTreeOrTypeScriptNode}\n */\n// eslint-disable-next-line complexity\nconst allBrancheshaveReturnValues = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n // case 'MethodDefinition':\n // return allBrancheshaveReturnValues(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return 'expression' in node && node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n allBrancheshaveReturnValues(node.body, promFilter) ||\n /** @type {import('@typescript-eslint/types').TSESTree.BlockStatement} */\n (node.body).body.some((nde) => {\n return nde.type === 'ReturnStatement';\n });\n }\n\n case 'BlockStatement': {\n const lastBodyNode = node.body.slice(-1)[0];\n return allBrancheshaveReturnValues(lastBodyNode, promFilter);\n }\n\n case 'WhileStatement':\n case 'DoWhileStatement':\n if (\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Literal}\n */\n (node.test).value === true\n ) {\n // If this is an infinite loop, we assume only one branch\n // is needed to provide a return\n return hasReturnValue(node.body, false, promFilter);\n }\n\n // Fallthrough\n case 'LabeledStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return allBrancheshaveReturnValues(node.body, promFilter);\n }\n\n case 'IfStatement': {\n return allBrancheshaveReturnValues(node.consequent, promFilter) &&\n allBrancheshaveReturnValues(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n // If `finally` returns, all return\n return node.finalizer && allBrancheshaveReturnValues(node.finalizer, promFilter) ||\n // Return in `try`/`catch` may still occur despite `finally`\n allBrancheshaveReturnValues(node.block, promFilter) &&\n (!node.handler ||\n allBrancheshaveReturnValues(node.handler && node.handler.body, promFilter)) &&\n (!node.finalizer || (() => {\n try {\n hasReturnValue(node.finalizer, true, promFilter);\n } catch (error) {\n if (/** @type {Error} */ (error).message === 'Null return') {\n return false;\n }\n /* c8 ignore next 2 */\n throw error;\n }\n\n // As long as not an explicit empty return, then return true\n return true;\n })());\n }\n\n case 'SwitchStatement': {\n return /** @type {import('@typescript-eslint/types').TSESTree.SwitchStatement} */ (node).cases.every(\n (someCase) => {\n return !someCase.consequent.some((consNode) => {\n return consNode.type === 'BreakStatement' ||\n consNode.type === 'ReturnStatement' && consNode.argument === null;\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @callback PromiseFilter\n * @param {ESTreeOrTypeScriptNode|undefined} node\n * @returns {boolean}\n */\n\n/**\n * Avoids further checking child nodes if a nested function shadows the\n * resolver, but otherwise, if name is used (by call or passed in as an\n * argument to another function), will be considered as non-empty.\n *\n * This could check for redeclaration of the resolver, but as such is\n * unlikely, we avoid the performance cost of checking everywhere for\n * (re)declarations or assignments.\n * @param {import('@typescript-eslint/types').TSESTree.Node|null|undefined} node\n * @param {string} resolverName\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasNonEmptyResolverCall = (node, resolverName) => {\n if (!node) {\n return false;\n }\n\n // Arrow function without block\n switch (node.type) {\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n node.callee\n ).name === resolverName && (\n\n // Implicit or explicit undefined\n node.arguments.length > 1 || node.arguments[0] !== undefined\n ) ||\n node.arguments.some((nde) => {\n // Being passed in to another function (which might invoke it)\n return nde.type === 'Identifier' && nde.name === resolverName ||\n\n // Handle nested items\n hasNonEmptyResolverCall(nde, resolverName);\n });\n case 'ChainExpression':\n case 'Decorator':\n case 'ExpressionStatement':\n return hasNonEmptyResolverCall(node.expression, resolverName);\n case 'ClassBody':\n case 'BlockStatement':\n return node.body.some((bodyNode) => {\n return hasNonEmptyResolverCall(bodyNode, resolverName);\n });\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n // Shadowing\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n node.params[0]\n )?.name === resolverName) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonEmptyResolverCall(node.test, resolverName) ||\n hasNonEmptyResolverCall(node.consequent, resolverName) ||\n hasNonEmptyResolverCall(node.alternate, resolverName);\n }\n\n case 'TryStatement': {\n return hasNonEmptyResolverCall(node.block, resolverName) ||\n hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||\n hasNonEmptyResolverCall(node.finalizer, resolverName);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonEmptyResolverCall(element, resolverName);\n });\n\n case 'AssignmentPattern':\n return hasNonEmptyResolverCall(node.right, resolverName);\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonEmptyResolverCall(node.left, resolverName) ||\n hasNonEmptyResolverCall(node.right, resolverName);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonEmptyResolverCall(subExpression, resolverName);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonEmptyResolverCall(property, resolverName);\n });\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'ClassMethod':\n case 'MethodDefinition':\n return node.decorators && node.decorators.some((decorator) => {\n return hasNonEmptyResolverCall(decorator, resolverName);\n }) ||\n node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'ObjectProperty':\n /* eslint-disable no-fallthrough */\n /* c8 ignore next -- In Babel? */\n case 'PropertyDefinition':\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'ClassProperty':\n case 'Property':\n /* eslint-enable no-fallthrough */\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'ObjectMethod':\n /* c8 ignore next 6 -- In Babel? */\n // @ts-expect-error\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n // @ts-expect-error\n node.arguments.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n\n case 'ClassExpression':\n case 'ClassDeclaration':\n return hasNonEmptyResolverCall(node.body, resolverName);\n\n case 'AwaitExpression':\n case 'SpreadElement':\n case 'UnaryExpression':\n case 'YieldExpression':\n return hasNonEmptyResolverCall(node.argument, resolverName);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonEmptyResolverCall(node.id, resolverName) ||\n hasNonEmptyResolverCall(node.init, resolverName);\n }\n\n case 'TaggedTemplateExpression':\n return hasNonEmptyResolverCall(node.quasi, resolverName);\n\n // ?.\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonEmptyResolverCall(node.object, resolverName) ||\n hasNonEmptyResolverCall(node.property, resolverName);\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonEmptyResolverCall(node.source, resolverName);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.argument, resolverName);\n }\n\n /*\n // Shouldn't need to parse literals/literal components, etc.\n\n case 'Identifier':\n case 'TemplateElement':\n case 'Super':\n // Exports not relevant in this context\n */\n default:\n return false;\n }\n};\n\n/**\n * Checks if a Promise executor has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n * @param {ESTreeOrTypeScriptNode} node\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} [allBranches]\n * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, allBranches) => {\n const hasReturnMethod = allBranches ?\n /**\n * @param {ESTreeOrTypeScriptNode} nde\n * @param {PromiseFilter} promiseFilter\n * @returns {boolean}\n */\n (nde, promiseFilter) => {\n let hasReturn;\n try {\n hasReturn = hasReturnValue(nde, true, promiseFilter);\n } catch (error) {\n // c8 ignore else\n if (/** @type {Error} */ (error).message === 'Null return') {\n return false;\n }\n /* c8 ignore next 2 */\n throw error;\n }\n\n // `hasReturn` check needed since `throw` treated as valid return by\n // `allBrancheshaveReturnValues`\n return Boolean(hasReturn && allBrancheshaveReturnValues(nde, promiseFilter));\n } :\n /**\n * @param {ESTreeOrTypeScriptNode} nde\n * @param {PromiseFilter} promiseFilter\n * @returns {boolean}\n */\n (nde, promiseFilter) => {\n return Boolean(hasReturnValue(nde, false, promiseFilter));\n };\n\n return hasReturnMethod(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\n }\n\n if (isVoidPromise(prom)) {\n return false;\n }\n\n const {\n params,\n body,\n } =\n /**\n * @type {import('@typescript-eslint/types').TSESTree.FunctionExpression|\n * import('@typescript-eslint/types').TSESTree.ArrowFunctionExpression}\n */ (\n /** @type {import('@typescript-eslint/types').TSESTree.NewExpression} */ (\n prom\n ).arguments[0]\n ) || {};\n\n if (!params?.length) {\n return false;\n }\n\n const {\n name: resolverName,\n } = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n params[0]\n );\n\n return hasNonEmptyResolverCall(body, resolverName);\n });\n};\n\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"hasReturnValue.cjs","names":["isNewPromiseExpression","node","type","callee","name","isVoidPromise","_node$typeArguments","_node$typeParameters","typeArguments","params","typeParameters","undefinedKeywords","Set","hasReturnValue","throwOnNullReturn","promFilter","_node$returnType","returnType","typeAnnotation","has","value","expression","body","some","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","argument","Error","exports","allBrancheshaveReturnValues","_node$returnType2","lastBodyNode","slice","test","error","message","every","consNode","hasNonEmptyResolverCall","resolverName","arguments","length","undefined","_node$params$","elements","element","right","left","expressions","subExpression","properties","property","decorators","decorator","computed","key","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasReturnMethod","promiseFilter","hasReturn","Boolean","prom"],"sources":["../../src/utils/hasReturnValue.js"],"sourcesContent":["/**\n * @typedef {import('estree').Node|\n * import('@typescript-eslint/types').TSESTree.Node} ESTreeOrTypeScriptNode\n */\n\n/**\n * Checks if a node is a promise but has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n * @param {ESTreeOrTypeScriptNode|undefined|null} node\n * @returns {boolean|undefined|null}\n */\nconst isNewPromiseExpression = (node) => {\n return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\n};\n\n/**\n * @param {ESTreeOrTypeScriptNode|null|undefined} node\n * @returns {boolean}\n */\nconst isVoidPromise = (node) => {\n return /** @type {import('@typescript-eslint/types').TSESTree.TSTypeReference} */ (node)?.typeArguments?.params?.[0]?.type === 'TSVoidKeyword'\n || /** @type {import('@typescript-eslint/types').TSESTree.TSTypeReference} */ (node)?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';\n};\n\nconst undefinedKeywords = new Set([\n 'TSVoidKeyword', 'TSUndefinedKeyword', 'TSNeverKeyword',\n]);\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n * @param {ESTreeOrTypeScriptNode|undefined|null} node\n * @param {boolean} [throwOnNullReturn]\n * @param {PromiseFilter} [promFilter]\n * @returns {boolean|undefined}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, throwOnNullReturn, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n case 'MethodDefinition':\n return hasReturnValue(node.value, throwOnNullReturn, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return 'expression' in node && node.expression && (!isNewPromiseExpression(\n node.body,\n ) || !isVoidPromise(node.body)) ||\n hasReturnValue(node.body, throwOnNullReturn, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, throwOnNullReturn, promFilter);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body, throwOnNullReturn, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.alternate, throwOnNullReturn, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.finalizer, throwOnNullReturn, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(nde, throwOnNullReturn, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n if (throwOnNullReturn) {\n throw new Error('Null return');\n }\n\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\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|null|undefined} node\n * @param {PromiseFilter} promFilter\n * @returns {undefined|boolean|ESTreeOrTypeScriptNode}\n */\n// eslint-disable-next-line complexity\nconst allBrancheshaveReturnValues = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n // case 'MethodDefinition':\n // return allBrancheshaveReturnValues(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return 'expression' in node && node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n allBrancheshaveReturnValues(node.body, promFilter) ||\n /** @type {import('@typescript-eslint/types').TSESTree.BlockStatement} */\n (node.body).body.some((nde) => {\n return nde.type === 'ReturnStatement';\n });\n }\n\n case 'BlockStatement': {\n const lastBodyNode = node.body.slice(-1)[0];\n return allBrancheshaveReturnValues(lastBodyNode, promFilter);\n }\n\n case 'WhileStatement':\n case 'DoWhileStatement':\n if (\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Literal}\n */\n (node.test).value === true\n ) {\n // If this is an infinite loop, we assume only one branch\n // is needed to provide a return\n return hasReturnValue(node.body, false, promFilter);\n }\n\n // Fallthrough\n case 'LabeledStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return allBrancheshaveReturnValues(node.body, promFilter);\n }\n\n case 'IfStatement': {\n return allBrancheshaveReturnValues(node.consequent, promFilter) &&\n allBrancheshaveReturnValues(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n // If `finally` returns, all return\n return node.finalizer && allBrancheshaveReturnValues(node.finalizer, promFilter) ||\n // Return in `try`/`catch` may still occur despite `finally`\n allBrancheshaveReturnValues(node.block, promFilter) &&\n (!node.handler ||\n allBrancheshaveReturnValues(node.handler && node.handler.body, promFilter)) &&\n (!node.finalizer || (() => {\n try {\n hasReturnValue(node.finalizer, true, promFilter);\n } catch (error) {\n if (/** @type {Error} */ (error).message === 'Null return') {\n return false;\n }\n /* c8 ignore next 2 */\n throw error;\n }\n\n // As long as not an explicit empty return, then return true\n return true;\n })());\n }\n\n case 'SwitchStatement': {\n return /** @type {import('@typescript-eslint/types').TSESTree.SwitchStatement} */ (node).cases.every(\n (someCase) => {\n return !someCase.consequent.some((consNode) => {\n return consNode.type === 'BreakStatement' ||\n consNode.type === 'ReturnStatement' && consNode.argument === null;\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @callback PromiseFilter\n * @param {ESTreeOrTypeScriptNode|undefined} node\n * @returns {boolean}\n */\n\n/**\n * Avoids further checking child nodes if a nested function shadows the\n * resolver, but otherwise, if name is used (by call or passed in as an\n * argument to another function), will be considered as non-empty.\n *\n * This could check for redeclaration of the resolver, but as such is\n * unlikely, we avoid the performance cost of checking everywhere for\n * (re)declarations or assignments.\n * @param {import('@typescript-eslint/types').TSESTree.Node|null|undefined} node\n * @param {string} resolverName\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasNonEmptyResolverCall = (node, resolverName) => {\n if (!node) {\n return false;\n }\n\n // Arrow function without block\n switch (node.type) {\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n node.callee\n ).name === resolverName && (\n\n // Implicit or explicit undefined\n node.arguments.length > 1 || node.arguments[0] !== undefined\n ) ||\n node.arguments.some((nde) => {\n // Being passed in to another function (which might invoke it)\n return nde.type === 'Identifier' && nde.name === resolverName ||\n\n // Handle nested items\n hasNonEmptyResolverCall(nde, resolverName);\n });\n case 'ChainExpression':\n case 'Decorator':\n case 'ExpressionStatement':\n return hasNonEmptyResolverCall(node.expression, resolverName);\n case 'ClassBody':\n case 'BlockStatement':\n return node.body.some((bodyNode) => {\n return hasNonEmptyResolverCall(bodyNode, resolverName);\n });\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n // Shadowing\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n node.params[0]\n )?.name === resolverName) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonEmptyResolverCall(node.test, resolverName) ||\n hasNonEmptyResolverCall(node.consequent, resolverName) ||\n hasNonEmptyResolverCall(node.alternate, resolverName);\n }\n\n case 'TryStatement': {\n return hasNonEmptyResolverCall(node.block, resolverName) ||\n hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||\n hasNonEmptyResolverCall(node.finalizer, resolverName);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonEmptyResolverCall(element, resolverName);\n });\n\n case 'AssignmentPattern':\n return hasNonEmptyResolverCall(node.right, resolverName);\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonEmptyResolverCall(node.left, resolverName) ||\n hasNonEmptyResolverCall(node.right, resolverName);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonEmptyResolverCall(subExpression, resolverName);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonEmptyResolverCall(property, resolverName);\n });\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'ClassMethod':\n case 'MethodDefinition':\n return node.decorators && node.decorators.some((decorator) => {\n return hasNonEmptyResolverCall(decorator, resolverName);\n }) ||\n node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'ObjectProperty':\n /* eslint-disable no-fallthrough */\n /* c8 ignore next -- In Babel? */\n case 'PropertyDefinition':\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'ClassProperty':\n case 'Property':\n /* eslint-enable no-fallthrough */\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'ObjectMethod':\n /* c8 ignore next 6 -- In Babel? */\n // @ts-expect-error\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n // @ts-expect-error\n node.arguments.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n\n case 'ClassExpression':\n case 'ClassDeclaration':\n return hasNonEmptyResolverCall(node.body, resolverName);\n\n case 'AwaitExpression':\n case 'SpreadElement':\n case 'UnaryExpression':\n case 'YieldExpression':\n return hasNonEmptyResolverCall(node.argument, resolverName);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonEmptyResolverCall(node.id, resolverName) ||\n hasNonEmptyResolverCall(node.init, resolverName);\n }\n\n case 'TaggedTemplateExpression':\n return hasNonEmptyResolverCall(node.quasi, resolverName);\n\n // ?.\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonEmptyResolverCall(node.object, resolverName) ||\n hasNonEmptyResolverCall(node.property, resolverName);\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonEmptyResolverCall(node.source, resolverName);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.argument, resolverName);\n }\n\n /*\n // Shouldn't need to parse literals/literal components, etc.\n\n case 'Identifier':\n case 'TemplateElement':\n case 'Super':\n // Exports not relevant in this context\n */\n default:\n return false;\n }\n};\n\n/**\n * Checks if a Promise executor has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n * @param {ESTreeOrTypeScriptNode} node\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} [allBranches]\n * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, allBranches) => {\n const hasReturnMethod = allBranches ?\n /**\n * @param {ESTreeOrTypeScriptNode} nde\n * @param {PromiseFilter} promiseFilter\n * @returns {boolean}\n */\n (nde, promiseFilter) => {\n let hasReturn;\n try {\n hasReturn = hasReturnValue(nde, true, promiseFilter);\n } catch (error) {\n // c8 ignore else\n if (/** @type {Error} */ (error).message === 'Null return') {\n return false;\n }\n /* c8 ignore next 2 */\n throw error;\n }\n\n // `hasReturn` check needed since `throw` treated as valid return by\n // `allBrancheshaveReturnValues`\n return Boolean(hasReturn && allBrancheshaveReturnValues(nde, promiseFilter));\n } :\n /**\n * @param {ESTreeOrTypeScriptNode} nde\n * @param {PromiseFilter} promiseFilter\n * @returns {boolean}\n */\n (nde, promiseFilter) => {\n return Boolean(hasReturnValue(nde, false, promiseFilter));\n };\n\n return hasReturnMethod(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\n }\n\n if (isVoidPromise(prom)) {\n return false;\n }\n\n const {\n params,\n body,\n } =\n /**\n * @type {import('@typescript-eslint/types').TSESTree.FunctionExpression|\n * import('@typescript-eslint/types').TSESTree.ArrowFunctionExpression}\n */ (\n /** @type {import('@typescript-eslint/types').TSESTree.NewExpression} */ (\n prom\n ).arguments[0]\n ) || {};\n\n if (!params?.length) {\n return false;\n }\n\n const {\n name: resolverName,\n } = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n params[0]\n );\n\n return hasNonEmptyResolverCall(body, resolverName);\n });\n};\n\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n};\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -11,37 +11,36 @@
|
|
|
11
11
|
"debug": "^4.3.4",
|
|
12
12
|
"escape-string-regexp": "^4.0.0",
|
|
13
13
|
"esquery": "^1.5.0",
|
|
14
|
-
"
|
|
15
|
-
"semver": "^7.6.0",
|
|
14
|
+
"semver": "^7.6.1",
|
|
16
15
|
"spdx-expression-parse": "^4.0.0"
|
|
17
16
|
},
|
|
18
17
|
"description": "JSDoc linting rules for ESLint.",
|
|
19
18
|
"devDependencies": {
|
|
20
|
-
"@babel/cli": "^7.24.
|
|
21
|
-
"@babel/core": "^7.24.
|
|
22
|
-
"@babel/eslint-parser": "^7.24.
|
|
19
|
+
"@babel/cli": "^7.24.5",
|
|
20
|
+
"@babel/core": "^7.24.5",
|
|
21
|
+
"@babel/eslint-parser": "^7.24.5",
|
|
23
22
|
"@babel/node": "^7.23.9",
|
|
24
23
|
"@babel/plugin-syntax-class-properties": "^7.12.13",
|
|
25
24
|
"@babel/plugin-transform-flow-strip-types": "^7.24.1",
|
|
26
|
-
"@babel/preset-env": "^7.24.
|
|
25
|
+
"@babel/preset-env": "^7.24.5",
|
|
27
26
|
"@es-joy/escodegen": "^3.5.1",
|
|
28
27
|
"@es-joy/jsdoc-eslint-parser": "^0.21.1",
|
|
29
28
|
"@hkdobrev/run-if-changed": "^0.3.1",
|
|
30
29
|
"@semantic-release/commit-analyzer": "^12.0.0",
|
|
31
|
-
"@semantic-release/github": "^10.0.
|
|
30
|
+
"@semantic-release/github": "^10.0.3",
|
|
32
31
|
"@semantic-release/npm": "^12.0.0",
|
|
33
|
-
"@types/chai": "^4.3.
|
|
32
|
+
"@types/chai": "^4.3.16",
|
|
34
33
|
"@types/debug": "^4.1.12",
|
|
35
|
-
"@types/eslint": "^8.56.
|
|
34
|
+
"@types/eslint": "^8.56.10",
|
|
36
35
|
"@types/esquery": "^1.5.3",
|
|
37
36
|
"@types/estree": "^1.0.5",
|
|
38
37
|
"@types/json-schema": "^7.0.15",
|
|
39
38
|
"@types/lodash.defaultsdeep": "^4.6.9",
|
|
40
39
|
"@types/mocha": "^10.0.6",
|
|
41
|
-
"@types/node": "^20.12.
|
|
40
|
+
"@types/node": "^20.12.11",
|
|
42
41
|
"@types/semver": "^7.5.8",
|
|
43
42
|
"@types/spdx-expression-parse": "^3.0.5",
|
|
44
|
-
"@typescript-eslint/parser": "^7.
|
|
43
|
+
"@typescript-eslint/parser": "^7.8.0",
|
|
45
44
|
"babel-plugin-add-module-exports": "^1.0.4",
|
|
46
45
|
"babel-plugin-istanbul": "^6.1.1",
|
|
47
46
|
"c8": "^9.1.0",
|
|
@@ -49,12 +48,12 @@
|
|
|
49
48
|
"chai": "^4.3.10",
|
|
50
49
|
"cross-env": "^7.0.3",
|
|
51
50
|
"decamelize": "^5.0.1",
|
|
52
|
-
"eslint": "9.
|
|
53
|
-
"eslint-config-canonical": "~42.8.
|
|
51
|
+
"eslint": "9.2.0",
|
|
52
|
+
"eslint-config-canonical": "~42.8.2",
|
|
54
53
|
"espree": "^10.0.1",
|
|
55
54
|
"gitdown": "^3.1.5",
|
|
56
|
-
"glob": "^10.3.
|
|
57
|
-
"globals": "^15.
|
|
55
|
+
"glob": "^10.3.13",
|
|
56
|
+
"globals": "^15.2.0",
|
|
58
57
|
"husky": "^9.0.11",
|
|
59
58
|
"jsdoc-type-pratt-parser": "^4.0.0",
|
|
60
59
|
"json-schema": "^0.4.0",
|
|
@@ -64,8 +63,8 @@
|
|
|
64
63
|
"open-editor": "^3.0.0",
|
|
65
64
|
"replace": "^1.2.2",
|
|
66
65
|
"rimraf": "^5.0.5",
|
|
67
|
-
"semantic-release": "^23.0.
|
|
68
|
-
"typescript": "5.3.
|
|
66
|
+
"semantic-release": "^23.0.8",
|
|
67
|
+
"typescript": "5.3.x"
|
|
69
68
|
},
|
|
70
69
|
"engines": {
|
|
71
70
|
"node": ">=18"
|
|
@@ -141,5 +140,5 @@
|
|
|
141
140
|
"test-cov": "cross-env TIMING=1 c8 --reporter text npm run test-no-cov",
|
|
142
141
|
"test-index": "npm run test-no-cov -- test/rules/index.js"
|
|
143
142
|
},
|
|
144
|
-
"version": "48.2.
|
|
143
|
+
"version": "48.2.6"
|
|
145
144
|
}
|
package/src/iterateJsdoc.js
CHANGED
|
@@ -19,9 +19,8 @@ const isNewPromiseExpression = (node) => {
|
|
|
19
19
|
* @returns {boolean}
|
|
20
20
|
*/
|
|
21
21
|
const isVoidPromise = (node) => {
|
|
22
|
-
return /** @type {import('@typescript-eslint/types').TSESTree.TSTypeReference} */ (
|
|
23
|
-
node
|
|
24
|
-
)?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';
|
|
22
|
+
return /** @type {import('@typescript-eslint/types').TSESTree.TSTypeReference} */ (node)?.typeArguments?.params?.[0]?.type === 'TSVoidKeyword'
|
|
23
|
+
|| /** @type {import('@typescript-eslint/types').TSESTree.TSTypeReference} */ (node)?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';
|
|
25
24
|
};
|
|
26
25
|
|
|
27
26
|
const undefinedKeywords = new Set([
|