eslint-plugin-jsdoc 63.0.11 → 63.0.12
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/WarnSettings.cjs +8 -1
- package/dist/WarnSettings.cjs.map +1 -1
- package/dist/alignTransform.cjs +10 -6
- package/dist/alignTransform.cjs.map +1 -1
- package/dist/buildForbidRuleDefinition.cjs +10 -3
- package/dist/buildForbidRuleDefinition.cjs.map +1 -1
- package/dist/buildRejectOrPreferRuleDefinition.cjs +14 -7
- package/dist/buildRejectOrPreferRuleDefinition.cjs.map +1 -1
- package/dist/defaultTagOrder.cjs +8 -1
- package/dist/defaultTagOrder.cjs.map +1 -1
- package/dist/exportParser.cjs +14 -6
- package/dist/exportParser.cjs.map +1 -1
- package/dist/generateDocs.cjs +44 -36
- package/dist/generateDocs.cjs.map +1 -1
- package/dist/generateOptions.cjs +18 -15
- package/dist/generateOptions.cjs.map +1 -1
- package/dist/generateRule.cjs +24 -24
- package/dist/generateRule.cjs.map +1 -1
- package/dist/generateRuleTypes.cjs +9 -6
- package/dist/generateRuleTypes.cjs.map +1 -1
- package/dist/getDefaultTagStructureForMode.cjs +8 -1
- package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
- package/dist/getJsdocProcessorPlugin.cjs +28 -20
- package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
- package/dist/index-cjs.cjs +159 -152
- package/dist/index-cjs.cjs.map +1 -1
- package/dist/index-esm.cjs +27 -16
- package/dist/index-esm.cjs.map +1 -1
- package/dist/index.cjs +172 -159
- package/dist/index.cjs.map +1 -1
- package/dist/iterateJsdoc.cjs +32 -22
- package/dist/iterateJsdoc.cjs.map +1 -1
- package/dist/jsdocUtils.cjs +86 -18
- package/dist/jsdocUtils.cjs.map +1 -1
- package/dist/rules/checkAccess.cjs +10 -2
- package/dist/rules/checkAccess.cjs.map +1 -1
- package/dist/rules/checkAlignment.cjs +10 -2
- package/dist/rules/checkAlignment.cjs.map +1 -1
- package/dist/rules/checkExamples.cjs +15 -6
- package/dist/rules/checkExamples.cjs.map +1 -1
- package/dist/rules/checkIndentation.cjs +9 -2
- package/dist/rules/checkIndentation.cjs.map +1 -1
- package/dist/rules/checkLineAlignment.cjs +14 -6
- package/dist/rules/checkLineAlignment.cjs.map +1 -1
- package/dist/rules/checkParamNames.cjs +9 -2
- package/dist/rules/checkParamNames.cjs.map +1 -1
- package/dist/rules/checkPropertyNames.cjs +9 -2
- package/dist/rules/checkPropertyNames.cjs.map +1 -1
- package/dist/rules/checkSyntax.cjs +10 -2
- package/dist/rules/checkSyntax.cjs.map +1 -1
- package/dist/rules/checkTagNames.cjs +11 -4
- package/dist/rules/checkTagNames.cjs.map +1 -1
- package/dist/rules/checkTemplateNames.cjs +20 -12
- package/dist/rules/checkTemplateNames.cjs.map +1 -1
- package/dist/rules/checkTypes.cjs +10 -4
- package/dist/rules/checkTypes.cjs.map +1 -1
- package/dist/rules/checkValues.cjs +17 -9
- package/dist/rules/checkValues.cjs.map +1 -1
- package/dist/rules/convertToJsdocComments.cjs +19 -13
- package/dist/rules/convertToJsdocComments.cjs.map +1 -1
- package/dist/rules/emptyTags.cjs +10 -2
- package/dist/rules/emptyTags.cjs.map +1 -1
- package/dist/rules/escapeInlineTags.cjs +10 -2
- package/dist/rules/escapeInlineTags.cjs.map +1 -1
- package/dist/rules/implementsOnClasses.cjs +10 -2
- package/dist/rules/implementsOnClasses.cjs.map +1 -1
- package/dist/rules/importsAsDependencies.cjs +20 -12
- package/dist/rules/importsAsDependencies.cjs.map +1 -1
- package/dist/rules/informativeDocs.cjs +12 -4
- package/dist/rules/informativeDocs.cjs.map +1 -1
- package/dist/rules/linesBeforeBlock.cjs +9 -2
- package/dist/rules/linesBeforeBlock.cjs.map +1 -1
- package/dist/rules/matchDescription.cjs +9 -2
- package/dist/rules/matchDescription.cjs.map +1 -1
- package/dist/rules/matchName.cjs +10 -2
- package/dist/rules/matchName.cjs.map +1 -1
- package/dist/rules/multilineBlocks.cjs +9 -2
- package/dist/rules/multilineBlocks.cjs.map +1 -1
- package/dist/rules/noBadBlocks.cjs +11 -4
- package/dist/rules/noBadBlocks.cjs.map +1 -1
- package/dist/rules/noBlankBlockDescriptions.cjs +10 -2
- package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
- package/dist/rules/noBlankBlocks.cjs +10 -2
- package/dist/rules/noBlankBlocks.cjs.map +1 -1
- package/dist/rules/noDefaults.cjs +10 -2
- package/dist/rules/noDefaults.cjs.map +1 -1
- package/dist/rules/noMissingSyntax.cjs +9 -2
- package/dist/rules/noMissingSyntax.cjs.map +1 -1
- package/dist/rules/noMultiAsterisks.cjs +10 -2
- package/dist/rules/noMultiAsterisks.cjs.map +1 -1
- package/dist/rules/noRestrictedSyntax.cjs +9 -2
- package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
- package/dist/rules/noTypes.cjs +9 -2
- package/dist/rules/noTypes.cjs.map +1 -1
- package/dist/rules/noUndefinedTypes.cjs +21 -13
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/dist/rules/preferImportTag.cjs +28 -21
- package/dist/rules/preferImportTag.cjs.map +1 -1
- package/dist/rules/requireAsteriskPrefix.cjs +10 -2
- package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
- package/dist/rules/requireDescription.cjs +9 -2
- package/dist/rules/requireDescription.cjs.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.cjs +15 -7
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
- package/dist/rules/requireExample.cjs +10 -2
- package/dist/rules/requireExample.cjs.map +1 -1
- package/dist/rules/requireFileOverview.cjs +10 -2
- package/dist/rules/requireFileOverview.cjs.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.cjs +10 -2
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
- package/dist/rules/requireJsdoc.cjs +24 -17
- package/dist/rules/requireJsdoc.cjs.map +1 -1
- package/dist/rules/requireParam.cjs +9 -2
- package/dist/rules/requireParam.cjs.map +1 -1
- package/dist/rules/requireParamDescription.cjs +10 -2
- package/dist/rules/requireParamDescription.cjs.map +1 -1
- package/dist/rules/requireParamName.cjs +10 -2
- package/dist/rules/requireParamName.cjs.map +1 -1
- package/dist/rules/requireParamType.cjs +10 -2
- package/dist/rules/requireParamType.cjs.map +1 -1
- package/dist/rules/requireProperty.cjs +10 -2
- package/dist/rules/requireProperty.cjs.map +1 -1
- package/dist/rules/requirePropertyDescription.cjs +10 -2
- package/dist/rules/requirePropertyDescription.cjs.map +1 -1
- package/dist/rules/requirePropertyName.cjs +10 -2
- package/dist/rules/requirePropertyName.cjs.map +1 -1
- package/dist/rules/requirePropertyType.cjs +10 -2
- package/dist/rules/requirePropertyType.cjs.map +1 -1
- package/dist/rules/requireRejects.cjs +9 -2
- package/dist/rules/requireRejects.cjs.map +1 -1
- package/dist/rules/requireReturns.cjs +11 -4
- package/dist/rules/requireReturns.cjs.map +1 -1
- package/dist/rules/requireReturnsCheck.cjs +15 -8
- package/dist/rules/requireReturnsCheck.cjs.map +1 -1
- package/dist/rules/requireReturnsDescription.cjs +10 -2
- package/dist/rules/requireReturnsDescription.cjs.map +1 -1
- package/dist/rules/requireReturnsType.cjs +10 -2
- package/dist/rules/requireReturnsType.cjs.map +1 -1
- package/dist/rules/requireTags.cjs +9 -2
- package/dist/rules/requireTags.cjs.map +1 -1
- package/dist/rules/requireTemplate.cjs +13 -5
- package/dist/rules/requireTemplate.cjs.map +1 -1
- package/dist/rules/requireThrows.cjs +9 -2
- package/dist/rules/requireThrows.cjs.map +1 -1
- package/dist/rules/requireYields.cjs +9 -2
- package/dist/rules/requireYields.cjs.map +1 -1
- package/dist/rules/requireYieldsCheck.cjs +9 -2
- package/dist/rules/requireYieldsCheck.cjs.map +1 -1
- package/dist/rules/sortTags.cjs +12 -4
- package/dist/rules/sortTags.cjs.map +1 -1
- package/dist/rules/tagLines.cjs +9 -2
- package/dist/rules/tagLines.cjs.map +1 -1
- package/dist/rules/textEscaping.cjs +9 -2
- package/dist/rules/textEscaping.cjs.map +1 -1
- package/dist/rules/tsMethodSignatureStyle.cjs +18 -10
- package/dist/rules/tsMethodSignatureStyle.cjs.map +1 -1
- package/dist/rules/tsNoEmptyObjectType.cjs +13 -5
- package/dist/rules/tsNoEmptyObjectType.cjs.map +1 -1
- package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs +16 -8
- package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +1 -1
- package/dist/rules/tsPreferFunctionType.cjs +16 -8
- package/dist/rules/tsPreferFunctionType.cjs.map +1 -1
- package/dist/rules/typeFormatting.cjs +17 -9
- package/dist/rules/typeFormatting.cjs.map +1 -1
- package/dist/rules/validTypes.cjs +18 -10
- package/dist/rules/validTypes.cjs.map +1 -1
- package/dist/tagNames.cjs +9 -4
- package/dist/tagNames.cjs.map +1 -1
- package/dist/utils/hasReturnValue.cjs +8 -1
- package/dist/utils/hasReturnValue.cjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterateJsdoc.cjs","names":["*:not(Program)","Program:exit"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import * as 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 * isNameOrNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNameOrNamepath: IsNamepathX,\n * tagMightHaveName: IsNamepathX\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 {((fixer: import('eslint').Rule.RuleFixer) => import('eslint').Rule.Fix|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 * postDelims: 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 {Partial<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 * @param {boolean} [ignoreInterfacedParameters]\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 * @param {boolean} [exemptSpecialMethods]\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 getInlineTags\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: number | undefined; column?: number | undefined;\n * })[]}\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 * isIteratingFunctionOrVariable: 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 * isNameOrNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNameOrNamepath: IsNamepathX,\n * tagMightHaveName: 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 * getInlineTags: getInlineTags,\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/**\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: boolean,\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 * foundTypedefValues: string[]\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 mode,\n tagNamePreference,\n}) => {\n /** @type {BasicUtils} */\n const utils = {};\n\n for (const method of [\n 'isNameOrNamepathDefiningTag',\n 'isNamepathReferencingTag',\n 'isNamepathOrUrlReferencingTag',\n 'tagMightHaveNameOrNamepath',\n 'tagMightHaveName',\n 'tagMightHaveNamepath',\n ]) {\n /** @type {IsNamepathX} */\n utils[\n /** @type {\"isNameOrNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNameOrNamepath\"|\"tagMightHaveName\"} */ (\n method\n )] = (tagName) => {\n return jsdocUtils[\n /** @type {\"isNameOrNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNameOrNamepath\"|\"tagMightHaveName\"} */\n (method)\n ](tagName);\n };\n }\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.getPreferredTagNameSimple(\n tagName,\n /** @type {import('./jsdocUtils.js').ParserMode} */ (mode),\n tagNamePreference,\n context,\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/core').RuleFixer|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 5 */\n ) :\n (\n // @ts-expect-error ESLint 8\n context.getAncestors()\n )) :\n []);\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n\n const utils = /** @type {Utils} */ (getBasicUtils(context, settings));\n\n const {\n augmentsExtendsReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n maxLines,\n minLines,\n mode,\n overrideReplacesDocs,\n tagNamePreference,\n } = settings;\n\n const functionTypes = [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'MethodDefinition',\n ];\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunction = () => {\n return !iteratingAll || functionTypes.includes(String(node?.type));\n };\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunctionOrVariable = () => {\n if (utils.isIteratingFunction()) {\n return true;\n }\n\n /** @type {import('estree').VariableDeclarator[]} */\n const declarations = node?.type === 'VariableDeclaration' ?\n node.declarations :\n (node?.type === 'ExportNamedDeclaration' && node.declaration?.type === 'VariableDeclaration' ?\n node.declaration.declarations :\n []);\n\n return declarations.some(({\n init,\n }) => {\n return functionTypes.includes(String(init?.type));\n });\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 const extraFix = handler(fixer);\n\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]*$/v);\n if (lastLineBreakPos > -1) {\n return [\n fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]),\n /* c8 ignore next 2 -- Guard */\n ...(extraFix ? [\n extraFix,\n ] : []),\n ];\n }\n\n return [\n fixer.removeRange(\n (/\\s/v).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n ),\n /* c8 ignore next 2 -- Guard */\n ...(extraFix ? [\n extraFix,\n ] : []),\n ];\n }\n\n return [\n fixer.replaceText(jsdocNode, replacement),\n ...(extraFix ? [\n extraFix,\n ] : []),\n ];\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 return jsdocUtils.getTagDescription(tg, returnArray);\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 end,\n tag,\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 /** @type {string[]} */\n const postDelims = [];\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 delimiter,\n description,\n end,\n postDelimiter,\n start,\n tag,\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 postDelims.push(postDelimiter);\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 postDelims,\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 end,\n tag,\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 end: ending,\n tag,\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 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\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 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\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 description,\n lineEnd,\n name,\n postDelimiter,\n tag,\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, ignoreInterfacedParameters) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties, ignoreInterfacedParameters);\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 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\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 = (args) => {\n return jsdocUtils.getPreferredTagName(\n jsdoc, {\n ...args,\n context,\n mode,\n report,\n tagNamePreference,\n },\n );\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 exemptSpecialMethods = true,\n ) => {\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 (exemptSpecialMethods && 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 /** @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 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\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 jsdocUtils.getTags(jsdoc, tagName);\n };\n\n /** @type {GetPresentTags} */\n utils.getPresentTags = (tagList) => {\n return jsdocUtils.filterTags(jsdoc, (tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n /** @type {FilterTags} */\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc, (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 utils.getInlineTags = () => {\n return jsdocUtils.getInlineTags(jsdoc);\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 ].toReversed().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) => {\n return jsdocUtils.forEachPreferredTag(\n jsdoc, tagName, arrayHandler, {\n context,\n mode,\n report,\n skipReportingBlockedTag,\n tagNamePreference,\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 * unifyParentAndChildTypeChecks?: boolean\n * }\n * }} PreferredTypes\n */\n/**\n * @typedef {{\n * [key: string]: {\n * name?: \"text\"|\"name-defining\"|\"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 * contexts?: Context[],\n * augmentsExtendsReplacesDocs?: boolean,\n * ignoreReplacesDocs?: boolean,\n * implementsReplacesDocs?: boolean,\n * overrideReplacesDocs?: boolean,\n * ignoreInternal?: boolean,\n * ignorePrivate?: boolean,\n * exemptDestructuredRootsFromChecks?: boolean,\n * skipInvokedExpressionsForCommentFinding?: boolean\n * }} Settings\n */\n\n/**\n * @typedef {{\n * settings?: {\n * jsdoc?: {\n * ignorePrivate: boolean,\n * ignoreInternal: boolean,\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * overrideReplacesDocs: boolean,\n * ignoreReplacesDocs: boolean,\n * implementsReplacesDocs: boolean,\n * augmentsExtendsReplacesDocs: boolean,\n * exemptDestructuredRootsFromChecks: boolean,\n * skipInvokedExpressionsForCommentFinding: boolean,\n * mode: import('./jsdocUtils.js').ParserMode,\n * contexts: Context[],\n * }\n * }\n * }} JSDocSettings\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext & JSDocSettings} context\n * @returns {Settings|false}\n */\nconst getSettings = (context) => {\n /* eslint-disable perfectionist/sort-objects */\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 skipInvokedExpressionsForCommentFinding:\n Boolean(context.settings.jsdoc?.skipInvokedExpressionsForCommentFinding),\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 /* eslint-enable perfectionist/sort-objects */\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 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 * ) => void } 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 * ) => void } 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 jsdocUtils\n .filterTags(jsdoc, ({\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\n let indentChar = sourceLine.charAt(0);\n if (indentChar !== ' ' && indentChar !== '\\t') {\n indentChar = ' ';\n }\n\n const indnt = indentChar.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, 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 {(context: import('eslint').Rule.RuleContext) => import('eslint').Rule.RuleContext} [modifyContext] Modify the rule's context object\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 /** @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 // @ts-expect-error ESLint < 10\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/v).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 create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler({\n ...settings,\n mode: settings.mode === 'permissive' ? 'typescript' : settings.mode,\n });\n }\n\n const trackedJsdocs = new Set();\n const state = {};\n\n return {\n /**\n * @param {import('eslint').Rule.Node} 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 = /** @type {import('estree').Comment[]} */ (\n sourceCode.getAllComments()\n );\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 // @ts-expect-error ESLint < 10\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\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 'layout', 'problem', 'suggestion',\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} ctx\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 (ctx) {\n const context = ruleConfig.modifyContext ?\n ruleConfig.modifyContext(ctx) :\n ctx;\n\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 // @ts-expect-error ESLint < 10\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({\n ...settings,\n mode: settings.mode === 'permissive' ? 'typescript' : settings.mode,\n }),\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\nexport {\n parseComment,\n} from '@es-joy/jsdoccomment';\n"],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,iBAAiB;AAC7C,SACE,cAAc,EACd,eAAe,EACf,YAAY,QACP,sBAAsB;AAC7B,SACE,SAAS,IAAI,gBAAgB,EAC7B,IAAI,QACC,gBAAgB;AACvB,OAAO,OAAO,MAAM,SAAS;;AAE7B;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;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;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;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;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;;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;AACA;AACA;AACA;AACA;;AAEA,MAAM;EACJ,WAAW;EACX;AACF,CAAC,GAAG,IAAI;;AAER;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;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE;EAC9B,IAAI;EACJ;AACF,CAAC,KAAK;EACJ;EACA,MAAM,KAAK,GAAG,CAAC,CAAC;EAEhB,KAAK,MAAM,MAAM,IAAI,CACnB,6BAA6B,EAC7B,0BAA0B,EAC1B,+BAA+B,EAC/B,4BAA4B,EAC5B,kBAAkB,EAClB,sBAAsB,CACvB,EAAE;IACD;IACA,KAAK,EACH;IACE,MAAM,EACN,GAAI,OAAO,IAAK;MAClB,OAAO,UAAU,EACf;MACC,MAAM,EACR,CAAC,OAAO,CAAC;IACZ,CAAC;EACH;;EAEA;EACA,KAAK,CAAC,cAAc,GAAI,OAAO,IAAK;IAClC,OAAO,CAAC,MAAM,CAAC;MACb,GAAG,EAAE;QACH,GAAG,EAAE;UACH,MAAM,EAAE,CAAC;UACT,IAAI,EAAE;QACR,CAAC;QACD,KAAK,EAAE;UACL,MAAM,EAAE,CAAC;UACT,IAAI,EAAE;QACR;MACF,CAAC;MACD;IACF,CAAC,CAAC;EACJ,CAAC;;EAED;EACA,KAAK,CAAC,uBAAuB,GAAI,GAAG,IAAK;IACvC,OAAO,UAAU,CAAC,uBAAuB,CAAC,G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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"iterateJsdoc.cjs","names":["util","commentStringify","getJSDocComment","parseComment","esquery","commentHandler","*:not(Program)","Program:exit"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import * as 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 * isNameOrNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNameOrNamepath: IsNamepathX,\n * tagMightHaveName: IsNamepathX\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 {((fixer: import('eslint').Rule.RuleFixer) => import('eslint').Rule.Fix|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 * postDelims: 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 {Partial<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 * @param {boolean} [ignoreInterfacedParameters]\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 * @param {boolean} [exemptSpecialMethods]\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 getInlineTags\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: number | undefined; column?: number | undefined;\n * })[]}\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 * isIteratingFunctionOrVariable: 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 * isNameOrNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNameOrNamepath: IsNamepathX,\n * tagMightHaveName: 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 * getInlineTags: getInlineTags,\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/**\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: boolean,\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 * foundTypedefValues: string[]\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 mode,\n tagNamePreference,\n}) => {\n /** @type {BasicUtils} */\n const utils = {};\n\n for (const method of [\n 'isNameOrNamepathDefiningTag',\n 'isNamepathReferencingTag',\n 'isNamepathOrUrlReferencingTag',\n 'tagMightHaveNameOrNamepath',\n 'tagMightHaveName',\n 'tagMightHaveNamepath',\n ]) {\n /** @type {IsNamepathX} */\n utils[\n /** @type {\"isNameOrNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNameOrNamepath\"|\"tagMightHaveName\"} */ (\n method\n )] = (tagName) => {\n return jsdocUtils[\n /** @type {\"isNameOrNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNameOrNamepath\"|\"tagMightHaveName\"} */\n (method)\n ](tagName);\n };\n }\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.getPreferredTagNameSimple(\n tagName,\n /** @type {import('./jsdocUtils.js').ParserMode} */ (mode),\n tagNamePreference,\n context,\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/core').RuleFixer|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 5 */\n ) :\n (\n // @ts-expect-error ESLint 8\n context.getAncestors()\n )) :\n []);\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n\n const utils = /** @type {Utils} */ (getBasicUtils(context, settings));\n\n const {\n augmentsExtendsReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n maxLines,\n minLines,\n mode,\n overrideReplacesDocs,\n tagNamePreference,\n } = settings;\n\n const functionTypes = [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'MethodDefinition',\n ];\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunction = () => {\n return !iteratingAll || functionTypes.includes(String(node?.type));\n };\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunctionOrVariable = () => {\n if (utils.isIteratingFunction()) {\n return true;\n }\n\n /** @type {import('estree').VariableDeclarator[]} */\n const declarations = node?.type === 'VariableDeclaration' ?\n node.declarations :\n (node?.type === 'ExportNamedDeclaration' && node.declaration?.type === 'VariableDeclaration' ?\n node.declaration.declarations :\n []);\n\n return declarations.some(({\n init,\n }) => {\n return functionTypes.includes(String(init?.type));\n });\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 const extraFix = handler(fixer);\n\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]*$/v);\n if (lastLineBreakPos > -1) {\n return [\n fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]),\n /* c8 ignore next 2 -- Guard */\n ...(extraFix ? [\n extraFix,\n ] : []),\n ];\n }\n\n return [\n fixer.removeRange(\n (/\\s/v).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n ),\n /* c8 ignore next 2 -- Guard */\n ...(extraFix ? [\n extraFix,\n ] : []),\n ];\n }\n\n return [\n fixer.replaceText(jsdocNode, replacement),\n ...(extraFix ? [\n extraFix,\n ] : []),\n ];\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 return jsdocUtils.getTagDescription(tg, returnArray);\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 end,\n tag,\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 /** @type {string[]} */\n const postDelims = [];\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 delimiter,\n description,\n end,\n postDelimiter,\n start,\n tag,\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 postDelims.push(postDelimiter);\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 postDelims,\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 end,\n tag,\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 end: ending,\n tag,\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 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\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 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\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 description,\n lineEnd,\n name,\n postDelimiter,\n tag,\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, ignoreInterfacedParameters) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties, ignoreInterfacedParameters);\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 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\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 = (args) => {\n return jsdocUtils.getPreferredTagName(\n jsdoc, {\n ...args,\n context,\n mode,\n report,\n tagNamePreference,\n },\n );\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 exemptSpecialMethods = true,\n ) => {\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 (exemptSpecialMethods && 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 /** @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 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\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 jsdocUtils.getTags(jsdoc, tagName);\n };\n\n /** @type {GetPresentTags} */\n utils.getPresentTags = (tagList) => {\n return jsdocUtils.filterTags(jsdoc, (tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n /** @type {FilterTags} */\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc, (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 utils.getInlineTags = () => {\n return jsdocUtils.getInlineTags(jsdoc);\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 ].toReversed().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) => {\n return jsdocUtils.forEachPreferredTag(\n jsdoc, tagName, arrayHandler, {\n context,\n mode,\n report,\n skipReportingBlockedTag,\n tagNamePreference,\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 * unifyParentAndChildTypeChecks?: boolean\n * }\n * }} PreferredTypes\n */\n/**\n * @typedef {{\n * [key: string]: {\n * name?: \"text\"|\"name-defining\"|\"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 * contexts?: Context[],\n * augmentsExtendsReplacesDocs?: boolean,\n * ignoreReplacesDocs?: boolean,\n * implementsReplacesDocs?: boolean,\n * overrideReplacesDocs?: boolean,\n * ignoreInternal?: boolean,\n * ignorePrivate?: boolean,\n * exemptDestructuredRootsFromChecks?: boolean,\n * skipInvokedExpressionsForCommentFinding?: boolean\n * }} Settings\n */\n\n/**\n * @typedef {{\n * settings?: {\n * jsdoc?: {\n * ignorePrivate: boolean,\n * ignoreInternal: boolean,\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * overrideReplacesDocs: boolean,\n * ignoreReplacesDocs: boolean,\n * implementsReplacesDocs: boolean,\n * augmentsExtendsReplacesDocs: boolean,\n * exemptDestructuredRootsFromChecks: boolean,\n * skipInvokedExpressionsForCommentFinding: boolean,\n * mode: import('./jsdocUtils.js').ParserMode,\n * contexts: Context[],\n * }\n * }\n * }} JSDocSettings\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext & JSDocSettings} context\n * @returns {Settings|false}\n */\nconst getSettings = (context) => {\n /* eslint-disable perfectionist/sort-objects */\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 skipInvokedExpressionsForCommentFinding:\n Boolean(context.settings.jsdoc?.skipInvokedExpressionsForCommentFinding),\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 /* eslint-enable perfectionist/sort-objects */\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 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 * ) => void } 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 * ) => void } 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 jsdocUtils\n .filterTags(jsdoc, ({\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\n let indentChar = sourceLine.charAt(0);\n if (indentChar !== ' ' && indentChar !== '\\t') {\n indentChar = ' ';\n }\n\n const indnt = indentChar.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, 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 {(context: import('eslint').Rule.RuleContext) => import('eslint').Rule.RuleContext} [modifyContext] Modify the rule's context object\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 /** @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 // @ts-expect-error ESLint < 10\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/v).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 create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler({\n ...settings,\n mode: settings.mode === 'permissive' ? 'typescript' : settings.mode,\n });\n }\n\n const trackedJsdocs = new Set();\n const state = {};\n\n return {\n /**\n * @param {import('eslint').Rule.Node} 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 = /** @type {import('estree').Comment[]} */ (\n sourceCode.getAllComments()\n );\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 // @ts-expect-error ESLint < 10\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\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 'layout', 'problem', 'suggestion',\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} ctx\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 (ctx) {\n const context = ruleConfig.modifyContext ?\n ruleConfig.modifyContext(ctx) :\n ctx;\n\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 // @ts-expect-error ESLint < 10\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({\n ...settings,\n mode: settings.mode === 'permissive' ? 'typescript' : settings.mode,\n }),\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\nexport {\n parseComment,\n} from '@es-joy/jsdoccomment';\n"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AAKA;AAIA;AAA8B;AAAA;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;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;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;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;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;;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;AA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","ignoreList":[]}
|