eslint-plugin-jsdoc 46.8.0 → 46.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -680,8 +680,10 @@ const getBasicUtils = (context, {
680
680
  */
681
681
  const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAll, ruleConfig, indent) => {
682
682
  const ancestors = /** @type {import('eslint').Rule.Node[]} */context.getAncestors();
683
+
684
+ // istanbul ignore next -- Fallback to deprecated method
683
685
  const {
684
- sourceCode
686
+ sourceCode = context.getSourceCode()
685
687
  } = context;
686
688
  const utils = /** @type {Utils} */getBasicUtils(context, settings);
687
689
  const {
@@ -1846,8 +1848,9 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContext
1846
1848
  * @returns {void}
1847
1849
  */
1848
1850
  const callIterator = (context, node, jsdocNodes, state, lastCall) => {
1851
+ // istanbul ignore next -- Fallback to deprecated method
1849
1852
  const {
1850
- sourceCode
1853
+ sourceCode = context.getSourceCode()
1851
1854
  } = context;
1852
1855
  const {
1853
1856
  lines
@@ -1912,8 +1915,9 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContext
1912
1915
  return {
1913
1916
  // @ts-expect-error ESLint accepts
1914
1917
  create(context) {
1918
+ // istanbul ignore next -- Fallback to deprecated method
1915
1919
  const {
1916
- sourceCode
1920
+ sourceCode = context.getSourceCode()
1917
1921
  } = context;
1918
1922
  settings = getSettings(context);
1919
1923
  if (!settings) {
@@ -1973,8 +1977,9 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContext
1973
1977
  const checkFile = (iterator, ruleConfig) => {
1974
1978
  return {
1975
1979
  create(context) {
1980
+ // istanbul ignore next -- Fallback to deprecated method
1976
1981
  const {
1977
- sourceCode
1982
+ sourceCode = context.getSourceCode()
1978
1983
  } = context;
1979
1984
  const settings = getSettings(context);
1980
1985
  if (!settings) {
@@ -2065,8 +2070,10 @@ function iterateJsdoc(iterator, ruleConfig) {
2065
2070
  return iterateAllJsdocs(iterator, ruleConfig, hasObjectAny ? /** @type {ContextObject[]} */contexts : null, ruleConfig.matchContext).create(context);
2066
2071
  }
2067
2072
  }
2073
+
2074
+ // istanbul ignore next -- Fallback to deprecated method
2068
2075
  const {
2069
- sourceCode
2076
+ sourceCode = context.getSourceCode()
2070
2077
  } = context;
2071
2078
  const {
2072
2079
  lines
@@ -1 +1 @@
1
- {"version":3,"file":"iterateJsdoc.js","names":["_jsdocUtils","_interopRequireDefault","require","_jsdoccomment","_commentParser","_esquery","obj","__esModule","default","rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","end","column","line","start","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","String","type","isVirtualFunction","Boolean","hasATag","stringify","tagBlock","specRewire","block","commentStringify","reportJSDoc","msg","handler","data","fixer","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","descriptions","source","some","tokens","lineEnd","postDelimiter","postTag","name","description","desc","push","join","setTagDescription","matcher","setter","finalIdx","idx","getDescription","lastDescriptionLine","tagsBegun","length","setBlockDescription","descLines","startIdx","endIdx","info","delimiter","undefined","splice","setDescriptionLines","changeTag","src","entries","setTag","number","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","addTag","targetTagName","_jsdoc$tags","getFirstLine","firstLine","emptyTokens","prop","addLine","_jsdoc$source","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","_context$options$","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","tagMissingRequiredTypeOrNamepath","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","tagList","filter","filterAllTags","getAllTags","getTagsByType","hasOptionTag","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","findContext","contexts","comment","foundContext","cntxt","esquery","matches","parse","visitorKeys","contextStr","getSettings","_context$settings$jsd","_context$settings$jsd2","_context$settings$jsd3","_context$settings$jsd4","_context$settings$jsd5","_context$settings$jsd6","_context$settings$jsd7","_context$settings$jsd8","_context$settings$jsd9","_context$settings$jsd10","_context$settings$jsd11","_context$settings$jsd12","_context$settings$jsd13","_context$settings$jsd14","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","iterator","state","jsdocNde","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","selector","lastComment","settngs","exit","create","commentHandler","*:not(Program)","noTracking","has","nonComment","ste","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","allComms","iterateJsdoc","_ruleConfig$meta","metaType","TypeError","contextDefaults","contextSelected","matchContext","_context$options$2","_contexts","_contexts2","match","enforcedContexts","nonGlobalSettings","map","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import jsdocUtils from './jsdocUtils.js';\nimport {\n commentHandler,\n getJSDocComment,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport esquery from 'esquery';\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @typedef {import('@es-joy/jsdoccomment').JsdocBlockWithInline} JsdocBlockWithInline\n */\n\n/**\n * @typedef {{\n * disallowName?: string,\n * allowName?: string,\n * context?: string,\n * comment?: string,\n * tags?: string[],\n * replacement?: string,\n * minimum?: Integer,\n * message?: string,\n * forceRequireReturn?: boolean\n * }} ContextObject\n */\n/**\n * @typedef {string|ContextObject} Context\n */\n\n/**\n * @callback CheckJsdoc\n * @param {{\n * lastIndex?: Integer,\n * isFunctionContext?: boolean,\n * selector?: string,\n * comment?: string\n * }} info\n * @param {null|((jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean|undefined)} handler\n * @param {import('eslint').Rule.Node} node\n * @returns {void}\n */\n\n/**\n * @callback ForEachPreferredTag\n * @param {string} tagName\n * @param {(\n * matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n * targetTagName: string\n * ) => void} arrayHandler\n * @param {boolean} [skipReportingBlockedTag]\n * @returns {void}\n */\n\n/**\n * @callback ReportSettings\n * @param {string} message\n * @returns {void}\n */\n\n/**\n * @callback ParseClosureTemplateTag\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\n\n/**\n * @callback GetPreferredTagNameObject\n * @param {{\n * tagName: string\n * }} cfg\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @typedef {{\n * forEachPreferredTag: ForEachPreferredTag,\n * reportSettings: ReportSettings,\n * parseClosureTemplateTag: ParseClosureTemplateTag,\n * getPreferredTagNameObject: GetPreferredTagNameObject,\n * pathDoesNotBeginWith: import('./jsdocUtils.js').PathDoesNotBeginWith\n * }} BasicUtils\n */\n\n/**\n * @callback IsIteratingFunction\n * @returns {boolean}\n */\n\n/**\n * @callback IsVirtualFunction\n * @returns {boolean}\n */\n\n/**\n * @callback Stringify\n * @param {import('comment-parser').Block} tagBlock\n * @param {boolean} [specRewire]\n * @returns {string}\n */\n\n/**\n * @callback ReportJSDoc\n * @param {string} msg\n * @param {null|import('comment-parser').Spec|{line: Integer, column?: Integer}} [tag]\n * @param {(() => void)|null} [handler]\n * @param {boolean} [specRewire]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n */\n/* eslint-enable jsdoc/valid-types -- Old version */\n\n/**\n * @callback GetRegexFromString\n * @param {string} str\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\n\n/**\n * @callback GetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\n\n/**\n * @callback SetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback GetDescription\n * @returns {{\n * description: string,\n * descriptions: string[],\n * lastDescriptionLine: Integer\n * }}\n */\n\n/**\n * @callback SetBlockDescription\n * @param {(\n * info: {\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * },\n * seedTokens: (\n * tokens?: Partial<import('comment-parser').Tokens>\n * ) => import('comment-parser').Tokens,\n * descLines: string[]\n * ) => import('comment-parser').Line[]} setter\n * @returns {void}\n */\n/* eslint-enable jsdoc/no-undefined-types -- Bug */\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/* eslint-enable jsdoc/no-undefined-types -- TS */\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/* eslint-enable jsdoc/no-undefined-types -- TS */\n\n/**\n * @callback RemoveTag\n * @param {Integer} tagIndex\n * @param {{\n * removeEmptyBlock?: boolean,\n * tagSourceOffset?: Integer\n * }} [cfg]\n * @returns {void}\n */\n\n/**\n * @callback AddTag\n * @param {string} targetTagName\n * @param {Integer} [number]\n * @param {import('comment-parser').Tokens|{}} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback GetFirstLine\n * @returns {Integer|undefined}\n */\n\n/**\n * @typedef {(\n * tokens?: Partial<import('comment-parser').Tokens> | undefined\n * ) => import('comment-parser').Tokens} SeedTokens\n */\n/* eslint-enable jsdoc/no-undefined-types -- TS */\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/* eslint-enable jsdoc/no-undefined-types -- TS */\n\n/**\n * @callback AddLines\n * @param {Integer} tagIndex\n * @param {Integer} tagSourceOffset\n * @param {Integer} numLines\n * @returns {void}\n */\n\n/**\n * @callback MakeMultiline\n * @returns {void}\n */\n\n/**\n * @callback GetFunctionParameterNames\n * @param {boolean} [useDefaultObjectProperties]\n * @returns {import('./jsdocUtils.js').ParamNameInfo[]}\n */\n\n/**\n * @callback HasParams\n * @returns {Integer}\n */\n\n/**\n * @callback IsGenerator\n * @returns {boolean}\n */\n\n/**\n * @callback IsConstructor\n * @returns {boolean}\n */\n\n/**\n * @callback GetJsdocTagsDeep\n * @param {string} tagName\n * @returns {false|{\n * idx: Integer,\n * name: string,\n * type: string\n * }[]}\n */\n\n/**\n * @callback GetPreferredTagName\n * @param {{\n * tagName: string,\n * skipReportingBlockedTag?: boolean,\n * allowObjectReturn?: boolean,\n * defaultMessage?: string\n * }} cfg\n * @returns {string|undefined|false|{\n * message: string;\n * replacement?: string|undefined;\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @callback IsValidTag\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\n\n/**\n * @callback HasATag\n * @param {string[]} names\n * @returns {boolean}\n */\n\n/**\n * @callback HasTag\n * @param {string} name\n * @returns {boolean}\n */\n\n/**\n * @callback ComparePaths\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\n\n/**\n * @callback DropPathSegmentQuotes\n * @param {string} name\n * @returns {string}\n */\n\n/**\n * @callback AvoidDocs\n * @returns {boolean}\n */\n\n/**\n * @callback TagMightHaveNamePositionTypePosition\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} [otherModeMaps]\n * @returns {boolean|{otherMode: true}}\n */\n\n/**\n * @callback TagMustHave\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback TagMissingRequiredTypeOrNamepath\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback IsNamepathX\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetTagStructureForMode\n * @param {import('./jsdocUtils.js').ParserMode} mde\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\n\n/**\n * @callback MayBeUndefinedTypeTag\n * @param {import('comment-parser').Spec} tag\n * @returns {boolean}\n */\n\n/**\n * @callback HasValueOrExecutorHasNonEmptyResolveValue\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} [allBranches]\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldReturnValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasThrowValue\n * @returns {boolean}\n */\n\n/**\n * @callback IsAsync\n * @returns {boolean|undefined}\n */\n\n/**\n * @callback GetTags\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\n\n/**\n * @callback GetPresentTags\n * @param {string[]} tagList\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterTags\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterAllTags\n * @param {(tag: (import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)) => boolean} filter\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\n\n/**\n * @callback GetTagsByType\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n * tagsWithNames: import('comment-parser').Spec[],\n * tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\n\n/**\n * @callback HasOptionTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetClassNode\n * @returns {Node|null}\n */\n\n/**\n * @callback GetClassJsdoc\n * @returns {null|JsdocBlockWithInline}\n */\n\n/**\n * @callback ClassHasTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback FindContext\n * @param {Context[]} contexts\n * @param {string|undefined} comment\n * @returns {{\n * foundContext: Context|undefined,\n * contextStr: string\n * }}\n */\n\n/**\n * @typedef {BasicUtils & {\n * isIteratingFunction: IsIteratingFunction,\n * isVirtualFunction: IsVirtualFunction,\n * stringify: Stringify,\n * reportJSDoc: ReportJSDoc,\n * getRegexFromString: GetRegexFromString,\n * getTagDescription: GetTagDescription,\n * setTagDescription: SetTagDescription,\n * getDescription: GetDescription,\n * setBlockDescription: SetBlockDescription,\n * setDescriptionLines: SetDescriptionLines,\n * changeTag: ChangeTag,\n * setTag: SetTag,\n * removeTag: RemoveTag,\n * addTag: AddTag,\n * getFirstLine: GetFirstLine,\n * seedTokens: SeedTokens,\n * emptyTokens: EmptyTokens,\n * addLine: AddLine,\n * addLines: AddLines,\n * makeMultiline: MakeMultiline,\n * flattenRoots: import('./jsdocUtils.js').FlattenRoots,\n * getFunctionParameterNames: GetFunctionParameterNames,\n * hasParams: HasParams,\n * isGenerator: IsGenerator,\n * isConstructor: IsConstructor,\n * getJsdocTagsDeep: GetJsdocTagsDeep,\n * getPreferredTagName: GetPreferredTagName,\n * isValidTag: IsValidTag,\n * hasATag: HasATag,\n * hasTag: HasTag,\n * comparePaths: ComparePaths,\n * dropPathSegmentQuotes: DropPathSegmentQuotes,\n * avoidDocs: AvoidDocs,\n * tagMightHaveNamePosition: TagMightHaveNamePositionTypePosition,\n * tagMightHaveTypePosition: TagMightHaveNamePositionTypePosition,\n * tagMustHaveNamePosition: TagMustHave,\n * tagMustHaveTypePosition: TagMustHave,\n * tagMissingRequiredTypeOrNamepath: TagMissingRequiredTypeOrNamepath,\n * isNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNamepath: IsNamepathX,\n * getTagStructureForMode: GetTagStructureForMode,\n * mayBeUndefinedTypeTag: MayBeUndefinedTypeTag,\n * hasValueOrExecutorHasNonEmptyResolveValue: HasValueOrExecutorHasNonEmptyResolveValue,\n * hasYieldValue: HasYieldValue,\n * hasYieldReturnValue: HasYieldReturnValue,\n * hasThrowValue: HasThrowValue,\n * isAsync: IsAsync,\n * getTags: GetTags,\n * getPresentTags: GetPresentTags,\n * filterTags: FilterTags,\n * filterAllTags: FilterAllTags,\n * getTagsByType: GetTagsByType,\n * hasOptionTag: HasOptionTag,\n * getClassNode: GetClassNode,\n * getClassJsdoc: GetClassJsdoc,\n * classHasTag: ClassHasTag,\n * findContext: FindContext\n * }} Utils\n */\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n * @typedef {import('eslint').Rule.RuleMetaData} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n * @typedef {{\n * globalTags: {},\n * hasDuplicates: {\n * [key: string]: boolean\n * },\n * selectorMap: {\n * [selector: string]: {\n * [comment: string]: Integer\n * }\n * },\n * hasTag: {\n * [key: string]: boolean\n * },\n * hasNonComment: number,\n * hasNonCommentBeforeTag: {\n * [key: string]: boolean|number\n * }\n * }} StateObject\n */\n/* eslint-enable jsdoc/valid-types -- Old version */\n\n/**\n * The Node AST as supplied by the parser.\n * @typedef {import('eslint').Rule.Node} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {{\n * tagNamePreference?: import('./jsdocUtils.js').TagNamePreference,\n * mode?: import('./jsdocUtils.js').ParserMode\n * }} cfg\n * @returns {BasicUtils}\n */\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n /** @type {BasicUtils} */\n const utils = {};\n\n /** @type {ReportSettings} */\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n /** @type {ParseClosureTemplateTag} */\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n /** @type {GetPreferredTagNameObject} */\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(\n context,\n /** @type {import('./jsdocUtils.js').ParserMode} */ (mode),\n tagName,\n tagNamePreference,\n );\n const isObject = ret && typeof ret === 'object';\n if (ret === false || (isObject && !ret.replacement)) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\n/**\n * @callback Report\n * @param {string} message\n * @param {import('eslint').Rule.ReportFixer|null} [fix]\n * @param {null|\n * {line?: Integer, column?: Integer}|\n * import('comment-parser').Spec & {line?: Integer}\n * } [jsdocLoc]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n * @returns {void}\n */\n/* eslint-enable jsdoc/valid-types -- Old version of pratt */\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 {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 iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = /** @type {import('eslint').Rule.Node[]} */ (context.getAncestors());\n const {\n sourceCode,\n } = context;\n\n const utils = /** @type {Utils} */ (getBasicUtils(context, settings));\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(String(node && node.type));\n };\n\n /** @type {IsVirtualFunction} */\n utils.isVirtualFunction = () => {\n return Boolean(iteratingAll) && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n /** @type {Stringify} */\n utils.stringify = (tagBlock, specRewire) => {\n let block;\n if (specRewire) {\n block = rewireSpecs(tagBlock);\n }\n\n return commentStringify(/** @type {import('comment-parser').Block} */ (\n specRewire ? block : tagBlock));\n };\n\n /** @type {ReportJSDoc} */\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? /** @type {import('eslint').Rule.ReportFixer} */ (\n fixer,\n ) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/u);\n if (lastLineBreakPos > -1) {\n return fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]);\n }\n\n return fixer.removeRange(\n (/\\s/u).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n );\n }\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n /** @type {GetRegexFromString} */\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n /** @type {GetTagDescription} */\n utils.getTagDescription = (tg, returnArray) => {\n /**\n * @type {string[]}\n */\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return returnArray ? descriptions : descriptions.join('\\n');\n };\n\n /** @type {SetTagDescription} */\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {GetDescription} */\n utils.getDescription = () => {\n /** @type {string[]} */\n const descriptions = [];\n let lastDescriptionLine = 0;\n let tagsBegun = false;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (tag) {\n tagsBegun = true;\n }\n\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n if (!tagsBegun && description) {\n descriptions.push(description);\n }\n\n return true;\n }\n\n if (!tagsBegun && (idx || description)) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n descriptions,\n lastDescriptionLine,\n };\n };\n\n /** @type {SetBlockDescription} */\n utils.setBlockDescription = (setter) => {\n /** @type {string[]} */\n const descLines = [];\n /**\n * @type {undefined|Integer}\n */\n let startIdx;\n /**\n * @type {undefined|Integer}\n */\n let endIdx;\n\n /**\n * @type {undefined|{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n let info;\n\n jsdoc.source.some(({\n tokens: {\n description,\n start,\n delimiter,\n postDelimiter,\n tag,\n end,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n descLines.push(description);\n return false;\n });\n\n /* istanbul ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n /** @type {Integer} */ (startIdx),\n /** @type {Integer} */ (endIdx) - /** @type {Integer} */ (startIdx),\n ...setter(\n /**\n * @type {{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n (info),\n seedTokens,\n descLines,\n ),\n );\n }\n };\n\n /** @type {SetDescriptionLines} */\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n // istanbul ignore if -- 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 // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end: ending,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n /* istanbul ignore if -- Currently want to clear entirely if removing tags */\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\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @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 // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n };\n\n /** @type {MakeMultiline} */\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n /**\n * @type {import('./jsdocUtils.js').FlattenRoots}\n */\n utils.flattenRoots = jsdocUtils.flattenRoots;\n\n /** @type {GetFunctionParameterNames} */\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n /** @type {HasParams} */\n utils.hasParams = () => {\n return jsdocUtils.hasParams(/** @type {Node} */ (node));\n };\n\n /** @type {IsGenerator} */\n utils.isGenerator = () => {\n return node !== null && Boolean(\n /**\n * @type {import('estree').FunctionDeclaration|\n * import('estree').FunctionExpression}\n */ (node).generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n /** @type {import('estree').FunctionDeclaration} */\n (\n /**\n * @type {import('estree').ExportNamedDeclaration|\n * import('estree').ExportDefaultDeclaration}\n */ (node).declaration\n ).generator,\n );\n };\n\n /** @type {IsConstructor} */\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(/** @type {Node} */ (node));\n };\n\n /** @type {GetJsdocTagsDeep} */\n utils.getJsdocTagsDeep = (tagName) => {\n const name = /** @type {string|false} */ (utils.getPreferredTagName({\n tagName,\n }));\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n /** @type {GetPreferredTagName} */\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n /** @type {IsValidTag} */\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n /** @type {HasATag} */\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n /** @type {HasTag} */\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n /** @type {ComparePaths} */\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n /** @type {DropPathSegmentQuotes} */\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n /** @type {AvoidDocs} */\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc,\n node,\n context,\n /** @type {import('json-schema').JSONSchema4|import('json-schema').JSONSchema4[]} */ (\n ruleConfig.meta.schema\n ),\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n /** @type {TagMightHaveNamePositionTypePosition} */\n utils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */ (\n method\n )\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n /** @type {TagMissingRequiredTypeOrNamepath} */\n utils.tagMissingRequiredTypeOrNamepath = (tagName, otherModeMaps) => {\n const result = jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName);\n if (!result) {\n return false;\n }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n ]) {\n /** @type {TagMustHave} */\n utils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'isNamepathReferencingTag',\n 'isNamepathOrUrlReferencingTag',\n 'tagMightHaveNamepath',\n ]) {\n /** @type {IsNamepathX} */\n utils[\n /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */ (\n method\n )] = (tagName) => {\n return jsdocUtils[\n /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */\n (method)\n ](tagName);\n };\n }\n\n /** @type {GetTagStructureForMode} */\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n /** @type {MayBeUndefinedTypeTag} */\n utils.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n /** @type {HasValueOrExecutorHasNonEmptyResolveValue} */\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(\n /** @type {Node} */ (node), anyPromiseAsReturn, allBranches,\n );\n };\n\n /** @type {HasYieldValue} */\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(/** @type {Node} */ (node).type)) {\n return jsdocUtils.hasYieldValue(\n /** @type {import('estree').Declaration|import('estree').Expression} */ (\n /** @type {import('estree').ExportNamedDeclaration|import('estree').ExportDefaultDeclaration} */\n (node).declaration\n ),\n );\n }\n\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node));\n };\n\n /** @type {HasYieldReturnValue} */\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node), true);\n };\n\n /** @type {HasThrowValue} */\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n /** @type {IsAsync} */\n utils.isAsync = () => {\n return 'async' in /** @type {Node} */ (node) && node.async;\n };\n\n /** @type {GetTags} */\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n /** @type {GetPresentTags} */\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n /** @type {FilterTags} */\n utils.filterTags = (filter) => {\n return jsdoc.tags.filter((tag) => {\n return filter(tag);\n });\n };\n\n /** @type {FilterAllTags} */\n utils.filterAllTags = (filter) => {\n const tags = jsdocUtils.getAllTags(jsdoc);\n return tags.filter((tag) => {\n return filter(tag);\n });\n };\n\n /** @type {GetTagsByType} */\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags);\n };\n\n /** @type {HasOptionTag} */\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n /** @type {GetClassNode} */\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) ?? null;\n };\n\n /** @type {GetClassJsdoc} */\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n /** @type {ClassHasTag} */\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return classJsdoc !== null && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n /** @type {ForEachPreferredTag} */\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = /** @type {string|false} */ (\n utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n })\n );\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(\n /**\n * @type {import('@es-joy/jsdoccomment').JsdocTagWithInline}\n */ (\n matchingJsdocTag\n ), targetTagName,\n );\n }\n };\n\n /** @type {FindContext} */\n utils.findContext = (contexts, comment) => {\n const foundContext = contexts.find((cntxt) => {\n return typeof cntxt === 'string' ?\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n ) :\n (!cntxt.context || cntxt.context === 'any' ||\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt.context),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n )) && comment === cntxt.comment;\n });\n\n const contextStr = typeof foundContext === 'object' ?\n foundContext.context ?? 'any' :\n String(foundContext);\n\n return {\n contextStr,\n foundContext,\n };\n };\n\n return utils;\n};\n\n/**\n * @typedef {{\n * [key: string]: false|string|{\n * message: string,\n * replacement?: false|string\n * skipRootChecking?: boolean\n * }\n * }} PreferredTypes\n */\n/**\n * @typedef {{\n * [key: string]: {\n * name?: \"text\"|\"namepath-defining\"|\"namepath-referencing\"|false,\n * type?: boolean|string[],\n * required?: (\"name\"|\"type\"|\"typeOrNameRequired\")[]\n * }\n * }} StructuredTags\n */\n/**\n * Settings from ESLint types.\n * @typedef {{\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * mode: import('./jsdocUtils.js').ParserMode,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * [name: string]: any,\n * contexts?: Context[]\n * }} Settings\n */\n/* eslint-enable jsdoc/valid-types -- Old version */\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @returns {Settings|false}\n */\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // `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 canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: /** @type {Error} */ (error).message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n * @callback MakeReport\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('estree').Node} commentNode\n * @returns {Report}\n */\n\n/** @type {MakeReport} */\nconst makeReport = (context, commentNode) => {\n /** @type {Report} */\n const report = (message, fix = null, jsdocLoc = null, data = undefined) => {\n /* eslint-enable jsdoc/valid-types -- Old version */\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = /** @type {import('comment-parser').Spec & {line?: Integer}} */ (\n jsdocLoc\n ).source[0].number;\n }\n\n const lineNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.line +\n /** @type {Integer} */ (jsdocLoc.line);\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\n if ('column' in jsdocLoc && typeof jsdocLoc.column === 'number') {\n const colNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent?: string,\n * info?: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state?: StateObject,\n * globalState?: Map<string, Map<string, string>>,\n * jsdoc?: JsdocBlockWithInline,\n * jsdocNode?: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node?: Node,\n * allComments?: import('estree').Node[]\n * report?: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: BasicUtils,\n * }\n * ) => any } JsdocVisitorBasic\n */\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent: string,\n * info: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state: StateObject,\n * globalState: Map<string, Map<string, string>>,\n * jsdoc: JsdocBlockWithInline,\n * jsdocNode: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node: Node|null,\n * allComments?: import('estree').Node[]\n * report: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/valid-types -- Old version */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\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 iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n jsdoc,\n jsdocNode: /**\n * @type {import('eslint').Rule.Node & {\n * range: [number, number];}}\n */ (jsdocNde),\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\n/**\n * @param {string[]} lines\n * @param {import('estree').Comment} jsdocNode\n * @returns {[indent: string, jsdoc: JsdocBlockWithInline]}\n */\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.line - 1\n ];\n const indnt = sourceLine.charAt(0).repeat(\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.column,\n );\n\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node & {\n * range: [number, number]\n * }, state: StateObject}} NonCommentArgs\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils.js').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {true} [checkPrivate] Whether to check `@private` blocks (normally exempted)\n * @property {true} [checkInternal] Whether to check `@internal` blocks (normally exempted)\n * @property {true} [checkFile] Whether to iterates over all JSDoc blocks regardless of attachment\n * @property {true} [nonGlobalSettings] Whether to avoid relying on settings for global contexts\n * @property {true} [noTracking] Whether to disable the tracking of visited comment nodes (as\n * non-tracked may conduct further actions)\n * @property {true} [matchContext] Whether the rule expects contexts to be based on a match option\n * @property {(args: {\n * context: import('eslint').Rule.RuleContext,\n * state: StateObject,\n * settings: Settings,\n * utils: BasicUtils\n * }) => void} [exit] Handler to be executed upon exiting iteration of program AST\n * @property {(nca: NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param {ContextObject[]|null} [contexts] The `contexts` containing relevant `comment` info.\n * @param {boolean} [additiveCommentContexts] If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n /** @type {import('@es-joy/jsdoccomment').CommentHandler} */\n let handler;\n\n /** @type {Settings|false} */\n let settings;\n\n /**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {Node|null} node\n * @param {import('estree').Comment[]} jsdocNodes\n * @param {StateObject} state\n * @param {boolean} [lastCall]\n * @returns {void}\n */\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const {\n sourceCode,\n } = context;\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, /** @type {Settings} */ (settings));\n for (const jsdocNode of jsdocNodes) {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(\n /** @type {import('estree').Node} */\n (jsdocNde),\n ))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of /** @type {ContextObject[]} */ (contexts).entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n /** @type {Node} */\n (node),\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n const settngs = /** @type {Settings} */ (settings);\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n settings: settngs,\n state,\n utils,\n });\n }\n };\n\n return {\n // @ts-expect-error ESLint accepts\n create (context) {\n const {\n sourceCode,\n } = context;\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n /**\n * @param {import('eslint').Rule.Node & {\n * range: [Integer, Integer];\n * }} node\n * @returns {void}\n */\n '*:not(Program)' (node) {\n const commentNode = getJSDocComment(\n sourceCode, node, /** @type {Settings} */ (settings),\n );\n if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n const ste = /** @type {StateObject} */ (state);\n ruleConfig.nonComment({\n node,\n state: ste,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n /** @type {import('estree').Comment} */\n (commentNode),\n ], /** @type {StateObject} */ (state));\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(\n context,\n null,\n untrackedJSdoc,\n /** @type {StateObject} */\n (state),\n true,\n );\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitorBasic} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const {\n sourceCode,\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 // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(\n /** @type {JsdocVisitorBasic} */ (iterator),\n ruleConfig,\n );\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n /** @type {import('eslint').Rule.RuleModule} */\n return {\n /**\n * The entrypoint for the JSDoc rule.\n * @param {import('eslint').Rule.RuleContext} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {import('eslint').Rule.RuleListener}\n * a listener with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n /**\n * @type {Context[]|undefined}\n */\n let contexts;\n /* eslint-enable jsdoc/valid-types -- Old version */\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 const {\n sourceCode,\n } = context;\n const {\n lines,\n } = sourceCode;\n\n /** @type {Partial<StateObject>} */\n const state = {};\n /* eslint-enable jsdoc/no-undefined-types -- TS */\n\n /** @type {CheckJsdoc} */\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines,\n /** @type {import('estree').Comment} */\n (jsdocNode),\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info,\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n /** @type {StateObject} */\n (state),\n );\n };\n\n /** @type {import('eslint').Rule.RuleListener} */\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (typeof ruleConfig.exit === 'function') {\n contextObject['Program:exit'] = () => {\n const ste = /** @type {StateObject} */ (state);\n\n // @ts-expect-error `utils` not needed at this point\n /** @type {Required<RuleConfig>} */ (ruleConfig).exit({\n context,\n settings,\n state: ste,\n });\n /* eslint-enable jsdoc/no-undefined-types -- Bug */\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAKA,IAAAE,cAAA,GAAAF,OAAA;AAIA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAA8B,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;;AAEA;AACA;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;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM;EACJG,WAAW;EACXC;AACF,CAAC,GAAGC,mBAAI;;AAER;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAAC,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,aAAa,GAAGA,CAACC,OAAO,EAAE;EAC9BC,iBAAiB;EACjBC;AACF,CAAC,KAAK;EACJ;EACA,MAAMC,KAAK,GAAG,CAAC,CAAC;;EAEhB;EACAA,KAAK,CAACC,cAAc,GAAIC,OAAO,IAAK;IAClCL,OAAO,CAACM,MAAM,CAAC;MACbC,GAAG,EAAE;QACHC,GAAG,EAAE;UACHC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR,CAAC;QACDC,KAAK,EAAE;UACLF,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR;MACF,CAAC;MACDL;IACF,CAAC,CAAC;EACJ,CAAC;;EAED;EACAF,KAAK,CAACS,uBAAuB,GAAIC,GAAG,IAAK;IACvC,OAAOC,mBAAU,CAACF,uBAAuB,CAACC,GAAG,CAAC;EAChD,CAAC;EAEDV,KAAK,CAACY,oBAAoB,GAAGD,mBAAU,CAACC,oBAAoB;;EAE5D;EACAZ,KAAK,CAACa,yBAAyB,GAAG,CAAC;IACjCC;EACF,CAAC,KAAK;IACJ,MAAMC,GAAG,GAAGJ,mBAAU,CAACK,mBAAmB,CACxCnB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M,CAAC;MACbiD,IAAI;MACJmM,GAAG;MACHnP,GAAG;MACHF,OAAO;MACPmB,IAAI,EAAEiO;IACR,CAAC,CAAC;EACJ,CAAC;EAED,OAAOnP,MAAM;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMwP,OAAO,GAAGA,CACd5J,IAAI,EACJpE,MAAM,EAAEL,KAAK,EACbI,UAAU,EAAE7B,OAAO,EAAE0B,SAAS,EAAEF,IAAI,EAAEG,QAAQ,EAC9CM,UAAU,EAAE8N,QAAQ,EAAEC,KAAK,EAAEpO,YAAY,KACtC;EACH,MAAMqO,QAAQ,GAAG,sBAAwBvO,SAAU;EACnD,MAAMpB,MAAM,GAAGkP,UAAU,CACvBxP,OAAO,EACP;EACCiQ,QACH,CAAC;EAED,MAAM9P,KAAK,GAAGoB,QAAQ,CACpBC,IAAI,EACJC,KAAK,EACL;EACCC,SAAS,EACVC,QAAQ,EACRrB,MAAM,EACNN,OAAO,EACP4B,YAAY,EACZC,UAAU,EACVC,MACF,CAAC;EAED,IACE,CAACD,UAAU,CAACqO,aAAa,IAAIvO,QAAQ,CAACqN,cAAc,IACpD7O,KAAK,CAAC0J,MAAM,CAAC,UAAU,CAAC,EACxB;IACA;EACF;EAEA,IACE,CAAChI,UAAU,CAACsO,YAAY,IAAIxO,QAAQ,CAACoN,aAAa,KAEhD5O,KAAK,CAAC0J,MAAM,CAAC,SAAS,CAAC,IACvBpI,KAAK,CAACwF,IAAI,CACPkF,MAAM,CAAC,CAAC;IACPtL;EACF,CAAC,KAAK;IACJ,OAAOA,GAAG,KAAK,QAAQ;EACzB,CAAC,CAAC,CACD8D,IAAI,CAAC,CAAC;IACLM;EACF,CAAC,KAAK;IACJ,OAAOA,WAAW,KAAK,SAAS;EAClC,CAAC,CAAC,CACL,EACD;IACA;EACF;EAEA8K,QAAQ,CAAC;IACP/P,OAAO;IACPH,WAAW;IACXiC,MAAM;IACNoE,IAAI;IACJzE,KAAK;IACLC,SAAS;IAAE;AACf;AACA;AACA;IAAoBuO,QAAS;IACzBzO,IAAI;IACJlB,MAAM;IACNqB,QAAQ;IACRM,UAAU;IACV+N,KAAK;IACL7P;EACF,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAMiQ,iBAAiB,GAAG,SAAAA,CAAUzH,KAAK,EAAEjH,SAAS,EAAE;EACpD,MAAM2O,UAAU,GAAG1H,KAAK,CACtB;EACCjH,SAAS,CAACnB,GAAG,CAAEI,KAAK,CAACD,IAAI,GAAG,CAAC,CAC/B;EACD,MAAM4P,KAAK,GAAGD,UAAU,CAACpM,MAAM,CAAC,CAAC,CAAC,CAACsM,MAAM,EACvC;EACC7O,SAAS,CAACnB,GAAG,CAAEI,KAAK,CAACF,MACxB,CAAC;EAED,MAAM+P,IAAI,GAAG,IAAAxD,0BAAY,EAACtL,SAAS,EAAE,EAAE,CAAC;EAExC,OAAO,CACL4O,KAAK,EAAEE,IAAI,CACZ;AACH,CAAC;;AAED;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAGA,CAACV,QAAQ,EAAElO,UAAU,EAAE0L,QAAQ,EAAEmD,uBAAuB,KAAK;EACpF,MAAMC,aAAa,GAAG,IAAIC,GAAG,CAAC,CAAC;;EAE/B;EACA,IAAItN,OAAO;;EAEX;EACA,IAAI3B,QAAQ;;EAEZ;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMkP,YAAY,GAAGA,CAAC7Q,OAAO,EAAEwB,IAAI,EAAEsP,UAAU,EAAEd,KAAK,EAAEe,QAAQ,KAAK;IACnE,MAAM;MACJ9O;IACF,CAAC,GAAGjC,OAAO;IACX,MAAM;MACJ2I;IACF,CAAC,GAAG1G,UAAU;IAEd,MAAM9B,KAAK,GAAGJ,aAAa,CAACC,OAAO,EAAE,uBAAyB2B,QAAS,CAAC;IACxE,KAAK,MAAMD,SAAS,IAAIoP,UAAU,EAAE;MAClC,MAAMb,QAAQ,GAAG,sBAAwBvO,SAAU;MACnD,IAAI,CAAE,YAAY,CAAEsC,IAAI,CAAC/B,UAAU,CAACyB,OAAO,EACzC;MACCuM,QACH,CAAC,CAAC,EAAE;QACF;MACF;MAEA,MAAM,CACJnO,MAAM,EACNL,KAAK,CACN,GAAG2O,iBAAiB,CACnBzH,KAAK,EAAEjH,SACT,CAAC;MAED,IAAIgP,uBAAuB,EAAE;QAC3B,KAAK,MAAM,CACTjL,GAAG,EACH;UACE+H;QACF,CAAC,CACF,IAAI,8BAAgCD,QAAQ,CAAE9G,OAAO,CAAC,CAAC,EAAE;UACxD,IAAI+G,OAAO,IAAIlK,OAAO,CAACkK,OAAO,EAAE/L,KAAK,CAAC,KAAK,KAAK,EAAE;YAChD;UACF;UAEAqO,OAAO,CACL;YACEtC,OAAO;YACPtG,SAAS,EAAEzB,GAAG;YACduL,QAAQ,EAAExP,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB;UAClB,CAAC,EACDb,MAAM,EACNL,KAAK,EACLI,UAAU,EACV7B,OAAO,EACP0B,SAAS,EACT;UACCF,IAAI,EACL;UACCG,QAAQ,EACTM,UAAU,EACV8N,QAAQ,EACRC,KAAK,EACL,IACF,CAAC;QACH;QAEA;MACF;MAEA,IAAIiB,WAAW;MACf,IAAI/J,SAAS;MACb;MACA,IAAIqG,QAAQ,IAAIA,QAAQ,CAACnC,KAAK,CAAC,CAAC;QAC9BoC;MACF,CAAC,EAAE/H,GAAG,KAAK;QACTwL,WAAW,GAAGzD,OAAO;QACrBtG,SAAS,GAAGzB,GAAG;QAEf,OAAO+H,OAAO,IAAIlK,OAAO,CAACkK,OAAO,EAAE/L,KAAK,CAAC,KAAK,KAAK;MACrD,CAAC,CAAC,EAAE;QACF;MACF;MAEAqO,OAAO,CACLmB,WAAW,GAAG;QACZzD,OAAO,EAAEyD,WAAW;QACpB/J,SAAS;QACT8J,QAAQ,EAAExP,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB;MAClB,CAAC,GAAG;QACFuE,SAAS;QACT8J,QAAQ,EAAExP,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB;MAClB,CAAC,EACDb,MAAM,EACNL,KAAK,EACLI,UAAU,EACV7B,OAAO,EACP0B,SAAS,EACTF,IAAI,EACJ;MACCG,QAAQ,EACTM,UAAU,EACV8N,QAAQ,EACRC,KAAK,EACL,IACF,CAAC;IACH;IAEA,MAAMkB,OAAO,GAAG,uBAAyBvP,QAAS;IAElD,IAAIoP,QAAQ,IAAIlP,UAAU,CAACsP,IAAI,EAAE;MAC/BtP,UAAU,CAACsP,IAAI,CAAC;QACdnR,OAAO;QACP2B,QAAQ,EAAEuP,OAAO;QACjBlB,KAAK;QACL7P;MACF,CAAC,CAAC;IACJ;EACF,CAAC;EAED,OAAO;IACL;IACAiR,MAAMA,CAAEpR,OAAO,EAAE;MACf,MAAM;QACJiC;MACF,CAAC,GAAGjC,OAAO;MACX2B,QAAQ,GAAGqM,WAAW,CAAChO,OAAO,CAAC;MAC/B,IAAI,CAAC2B,QAAQ,EAAE;QACb,OAAO,CAAC,CAAC;MACX;MAEA,IAAI4L,QAAQ,EAAE;QACZjK,OAAO,GAAG,IAAA+N,4BAAc,EAAC1P,QAAQ,CAAC;MACpC;MAEA,MAAMqO,KAAK,GAAG,CAAC,CAAC;MAEhB,OAAO;QACL;AACR;AACA;AACA;AACA;AACA;QACQ,gBAAgBsB,CAAE9P,IAAI,EAAE;UACtB,MAAMiO,WAAW,GAAG,IAAA1C,6BAAe,EACjC9K,UAAU,EAAET,IAAI,EAAE,uBAAyBG,QAC7C,CAAC;UACD,IAAI,CAACE,UAAU,CAAC0P,UAAU,IAAIZ,aAAa,CAACa,GAAG,CAAC/B,WAAW,CAAC,EAAE;YAC5D;UACF;UAEA,IAAI,CAACA,WAAW,EAAE;YAChB,IAAI5N,UAAU,CAAC4P,UAAU,EAAE;cACzB,MAAMC,GAAG,GAAG,0BAA4B1B,KAAM;cAC9CnO,UAAU,CAAC4P,UAAU,CAAC;gBACpBjQ,IAAI;gBACJwO,KAAK,EAAE0B;cACT,CAAC,CAAC;YACJ;YAEA;UACF;UAEAf,aAAa,CAACgB,GAAG,CAAClC,WAAW,CAAC;UAC9BoB,YAAY,CAAC7Q,OAAO,EAAEwB,IAAI,EAAE,CAC1B;UACCiO,WAAW,CACb,EAAE,0BAA4BO,KAAM,CAAC;QACxC,CAAC;QACD,cAAc4B,CAAA,EAAI;UAChB,MAAMC,WAAW,GAAG5P,UAAU,CAAC6P,cAAc,CAAC,CAAC;UAC/C,MAAMC,cAAc,GAAGF,WAAW,CAAC1F,MAAM,CAAE3K,IAAI,IAAK;YAClD,OAAO,CAACmP,aAAa,CAACa,GAAG,CAAChQ,IAAI,CAAC;UACjC,CAAC,CAAC;UAEFqP,YAAY,CACV7Q,OAAO,EACP,IAAI,EACJ+R,cAAc,EACd;UACC/B,KAAK,EACN,IACF,CAAC;QACH;MACF,CAAC;IACH,CAAC;IACDxF,IAAI,EAAE3I,UAAU,CAAC2I;EACnB,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMwH,SAAS,GAAGA,CAACjC,QAAQ,EAAElO,UAAU,KAAK;EAC1C,OAAO;IACLuP,MAAMA,CAAEpR,OAAO,EAAE;MACf,MAAM;QACJiC;MACF,CAAC,GAAGjC,OAAO;MACX,MAAM2B,QAAQ,GAAGqM,WAAW,CAAChO,OAAO,CAAC;MACrC,IAAI,CAAC2B,QAAQ,EAAE;QACb,OAAO,CAAC,CAAC;MACX;MAEA,OAAO;QACL,cAAciQ,CAAA,EAAI;UAChB,MAAMK,QAAQ,GAAG,sBAAwBhQ,UAAU,CAAC6P,cAAc,CAAC,CAAE;UACrE,MAAM3R,KAAK,GAAGJ,aAAa,CAACC,OAAO,EAAE2B,QAAQ,CAAC;UAE9CoO,QAAQ,CAAC;YACP8B,WAAW,EAAE,sCAAwCI,QAAS;YAC9DjS,OAAO;YACPwP,UAAU;YACV7N,QAAQ;YACRM,UAAU;YACV9B;UACF,CAAC,CAAC;QACJ;MACF,CAAC;IACH,CAAC;IACDqK,IAAI,EAAE3I,UAAU,CAAC2I;EACnB,CAAC;AACH,CAAC;AAQD;AACA;AACA;AACA;AACA;AACe,SAAS0H,YAAYA,CAAEnC,QAAQ,EAAElO,UAAU,EAAE;EAAA,IAAAsQ,gBAAA;EAC1D,MAAMC,QAAQ,GAAGvQ,UAAU,aAAVA,UAAU,gBAAAsQ,gBAAA,GAAVtQ,UAAU,CAAE2I,IAAI,cAAA2H,gBAAA,uBAAhBA,gBAAA,CAAkBxP,IAAI;EACvC,IAAI,CAACyP,QAAQ,IAAI,CAAC,CAChB,SAAS,EAAE,YAAY,EAAE,QAAQ,CAClC,CAAC3P,QAAQ,CAAC2P,QAAQ,CAAC,EAAE;IACpB,MAAM,IAAIC,SAAS,CAAC,wFAAwF,CAAC;EAC/G;EAEA,IAAI,OAAOtC,QAAQ,KAAK,UAAU,EAAE;IAClC,MAAM,IAAIsC,SAAS,CAAC,2CAA2C,CAAC;EAClE;EAEA,IAAIxQ,UAAU,CAACmQ,SAAS,EAAE;IACxB,OAAOA,SAAS,EACd,gCAAkCjC,QAAQ,EAC1ClO,UACF,CAAC;EACH;EAEA,IAAIA,UAAU,CAAC4O,gBAAgB,EAAE;IAC/B,OAAOA,gBAAgB,CAACV,QAAQ,EAAElO,UAAU,CAAC;EAC/C;;EAEA;EACA,OAAO;IACL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACIuP,MAAMA,CAAEpR,OAAO,EAAE;MACf,MAAM2B,QAAQ,GAAGqM,WAAW,CAAChO,OAAO,CAAC;MACrC,IAAI,CAAC2B,QAAQ,EAAE;QACb,OAAO,CAAC,CAAC;MACX;;MAEA;AACN;AACA;MACM,IAAI4L,QAAQ;MACZ;MACA,IAAI1L,UAAU,CAACyQ,eAAe,IAAIzQ,UAAU,CAAC0Q,eAAe,IAAI1Q,UAAU,CAAC2Q,YAAY,EAAE;QAAA,IAAAC,kBAAA,EAAAC,SAAA,EAAAC,UAAA;QACvFpF,QAAQ,GAAG1L,UAAU,CAAC2Q,YAAY,KAAAC,kBAAA,GAAIzS,OAAO,CAAC2K,OAAO,CAAC,CAAC,CAAC,cAAA8H,kBAAA,eAAlBA,kBAAA,CAAoBG,KAAK,GAC7D5S,OAAO,CAAC2K,OAAO,CAAC,CAAC,CAAC,CAACiI,KAAK,GACxB9R,mBAAU,CAAC+R,gBAAgB,CAAC7S,OAAO,EAAE6B,UAAU,CAACyQ,eAAe,EAAEzQ,UAAU,CAACiR,iBAAiB,GAAG,CAAC,CAAC,GAAGnR,QAAQ,CAAC;QAEhH,IAAI4L,QAAQ,EAAE;UACZA,QAAQ,GAAGA,QAAQ,CAACwF,GAAG,CAAExT,GAAG,IAAK;YAC/B,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAI,CAACA,GAAG,CAACS,OAAO,EAAE;cAC3C,OAAO;gBACL,GAAGT,GAAG;gBACNS,OAAO,EAAE;cACX,CAAC;YACH;YAEA,OAAOT,GAAG;UACZ,CAAC,CAAC;QACJ;QAEA,MAAMyT,WAAW,IAAAN,SAAA,GAAGnF,QAAQ,cAAAmF,SAAA,uBAARA,SAAA,CAAUjQ,QAAQ,CAAC,KAAK,CAAC;QAC7C,MAAMwQ,YAAY,GAAG,CAACD,WAAW,MAAAL,UAAA,GAAIpF,QAAQ,cAAAoF,UAAA,uBAARA,UAAA,CAAUjG,IAAI,CAAEwG,IAAI,IAAK;UAC5D,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;YAC5B,OAAO,KAAK;UACd;UAEA,OAAO,CAAAA,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAElT,OAAO,MAAK,KAAK;QAChC,CAAC,CAAC;QACF,IAAIgT,WAAW,IAAIC,YAAY,EAAE;UAC/B,OAAOxC,gBAAgB,CACrBV,QAAQ,EACRlO,UAAU,EACVoR,YAAY,GAAG,8BAAgC1F,QAAQ,GAAI,IAAI,EAC/D1L,UAAU,CAAC2Q,YACb,CAAC,CAACpB,MAAM,CAACpR,OAAO,CAAC;QACnB;MACF;MAEA,MAAM;QACJiC;MACF,CAAC,GAAGjC,OAAO;MACX,MAAM;QACJ2I;MACF,CAAC,GAAG1G,UAAU;;MAEd;MACA,MAAM+N,KAAK,GAAG,CAAC,CAAC;MAChB;;MAEA;MACA,MAAMmD,UAAU,GAAGA,CAACjN,IAAI,EAAE5C,OAAO,EAAE9B,IAAI,KAAK;QAC1C,MAAME,SAAS,GAAG,IAAAqL,6BAAe,EAAC9K,UAAU,EAAET,IAAI,EAAEG,QAAQ,CAAC;QAC7D,IAAI,CAACD,SAAS,EAAE;UACd;QACF;QAEA,MAAM,CACJI,MAAM,EACNL,KAAK,CACN,GAAG2O,iBAAiB,CACnBzH,KAAK,EACL;QACCjH,SACH,CAAC;QAED;QACE;QACA;QACA;QACA4B,OAAO,IAAIA,OAAO,CAAC7B,KAAK,CAAC,KAAK,KAAK,EACnC;UACA;QACF;QAEAqO,OAAO,CACL5J,IAAI,EACJpE,MAAM,EACNL,KAAK,EACLI,UAAU,EACV7B,OAAO,EACP0B,SAAS,EACTF,IAAI,EACJG,QAAQ,EACRM,UAAU,EACV8N,QAAQ,EACR;QACCC,KACH,CAAC;MACH,CAAC;;MAED;MACA,IAAIoD,aAAa,GAAG,CAAC,CAAC;MAEtB,IAAI7F,QAAQ,KACV1L,UAAU,CAACyQ,eAAe,IAAIzQ,UAAU,CAAC0Q,eAAe,IAAI1Q,UAAU,CAAC2Q,YAAY,CACpF,EAAE;QACDY,aAAa,GAAGtS,mBAAU,CAACuS,gBAAgB,CACzC9F,QAAQ,EACR4F,UAAU,EACV,IAAA9B,4BAAc,EAAC1P,QAAQ,CACzB,CAAC;MACH,CAAC,MAAM;QACL,KAAK,MAAMuG,IAAI,IAAI,CACjB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,CACpB,EAAE;UACDkL,aAAa,CAAClL,IAAI,CAAC,GAAGiL,UAAU,CAACG,IAAI,CAAC,IAAI,EAAE;YAC1CtC,QAAQ,EAAE9I;UACZ,CAAC,EAAE,IAAI,CAAC;QACV;MACF;MAEA,IAAI,OAAOrG,UAAU,CAACsP,IAAI,KAAK,UAAU,EAAE;QACzCiC,aAAa,CAAC,cAAc,CAAC,GAAG,MAAM;UACpC,MAAM1B,GAAG,GAAG,0BAA4B1B,KAAM;;UAE9C;UACA;UAAqCnO,UAAU,CAAEsP,IAAI,CAAC;YACpDnR,OAAO;YACP2B,QAAQ;YACRqO,KAAK,EAAE0B;UACT,CAAC,CAAC;UACF;QACF,CAAC;MACH;;MAEA,OAAO0B,aAAa;IACtB,CAAC;IACD5I,IAAI,EAAE3I,UAAU,CAAC2I;EACnB,CAAC;AACH"}
1
+ {"version":3,"file":"iterateJsdoc.js","names":["_jsdocUtils","_interopRequireDefault","require","_jsdoccomment","_commentParser","_esquery","obj","__esModule","default","rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","end","column","line","start","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","String","type","isVirtualFunction","Boolean","hasATag","stringify","tagBlock","specRewire","block","commentStringify","reportJSDoc","msg","handler","data","fixer","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","descriptions","source","some","tokens","lineEnd","postDelimiter","postTag","name","description","desc","push","join","setTagDescription","matcher","setter","finalIdx","idx","getDescription","lastDescriptionLine","tagsBegun","length","setBlockDescription","descLines","startIdx","endIdx","info","delimiter","undefined","splice","setDescriptionLines","changeTag","src","entries","setTag","number","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","addTag","targetTagName","_jsdoc$tags","getFirstLine","firstLine","emptyTokens","prop","addLine","_jsdoc$source","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","_context$options$","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","tagMissingRequiredTypeOrNamepath","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","tagList","filter","filterAllTags","getAllTags","getTagsByType","hasOptionTag","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","findContext","contexts","comment","foundContext","cntxt","esquery","matches","parse","visitorKeys","contextStr","getSettings","_context$settings$jsd","_context$settings$jsd2","_context$settings$jsd3","_context$settings$jsd4","_context$settings$jsd5","_context$settings$jsd6","_context$settings$jsd7","_context$settings$jsd8","_context$settings$jsd9","_context$settings$jsd10","_context$settings$jsd11","_context$settings$jsd12","_context$settings$jsd13","_context$settings$jsd14","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","iterator","state","jsdocNde","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","selector","lastComment","settngs","exit","create","commentHandler","*:not(Program)","noTracking","has","nonComment","ste","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","allComms","iterateJsdoc","_ruleConfig$meta","metaType","TypeError","contextDefaults","contextSelected","matchContext","_context$options$2","_contexts","_contexts2","match","enforcedContexts","nonGlobalSettings","map","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import jsdocUtils from './jsdocUtils.js';\nimport {\n commentHandler,\n getJSDocComment,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport esquery from 'esquery';\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @typedef {import('@es-joy/jsdoccomment').JsdocBlockWithInline} JsdocBlockWithInline\n */\n\n/**\n * @typedef {{\n * disallowName?: string,\n * allowName?: string,\n * context?: string,\n * comment?: string,\n * tags?: string[],\n * replacement?: string,\n * minimum?: Integer,\n * message?: string,\n * forceRequireReturn?: boolean\n * }} ContextObject\n */\n/**\n * @typedef {string|ContextObject} Context\n */\n\n/**\n * @callback CheckJsdoc\n * @param {{\n * lastIndex?: Integer,\n * isFunctionContext?: boolean,\n * selector?: string,\n * comment?: string\n * }} info\n * @param {null|((jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean|undefined)} handler\n * @param {import('eslint').Rule.Node} node\n * @returns {void}\n */\n\n/**\n * @callback ForEachPreferredTag\n * @param {string} tagName\n * @param {(\n * matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n * targetTagName: string\n * ) => void} arrayHandler\n * @param {boolean} [skipReportingBlockedTag]\n * @returns {void}\n */\n\n/**\n * @callback ReportSettings\n * @param {string} message\n * @returns {void}\n */\n\n/**\n * @callback ParseClosureTemplateTag\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\n\n/**\n * @callback GetPreferredTagNameObject\n * @param {{\n * tagName: string\n * }} cfg\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @typedef {{\n * forEachPreferredTag: ForEachPreferredTag,\n * reportSettings: ReportSettings,\n * parseClosureTemplateTag: ParseClosureTemplateTag,\n * getPreferredTagNameObject: GetPreferredTagNameObject,\n * pathDoesNotBeginWith: import('./jsdocUtils.js').PathDoesNotBeginWith\n * }} BasicUtils\n */\n\n/**\n * @callback IsIteratingFunction\n * @returns {boolean}\n */\n\n/**\n * @callback IsVirtualFunction\n * @returns {boolean}\n */\n\n/**\n * @callback Stringify\n * @param {import('comment-parser').Block} tagBlock\n * @param {boolean} [specRewire]\n * @returns {string}\n */\n\n/**\n * @callback ReportJSDoc\n * @param {string} msg\n * @param {null|import('comment-parser').Spec|{line: Integer, column?: Integer}} [tag]\n * @param {(() => void)|null} [handler]\n * @param {boolean} [specRewire]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n */\n/* eslint-enable jsdoc/valid-types -- Old version */\n\n/**\n * @callback GetRegexFromString\n * @param {string} str\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\n\n/**\n * @callback GetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\n\n/**\n * @callback SetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback GetDescription\n * @returns {{\n * description: string,\n * descriptions: string[],\n * lastDescriptionLine: Integer\n * }}\n */\n\n/**\n * @callback SetBlockDescription\n * @param {(\n * info: {\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * },\n * seedTokens: (\n * tokens?: Partial<import('comment-parser').Tokens>\n * ) => import('comment-parser').Tokens,\n * descLines: string[]\n * ) => import('comment-parser').Line[]} setter\n * @returns {void}\n */\n/* eslint-enable jsdoc/no-undefined-types -- Bug */\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/* eslint-enable jsdoc/no-undefined-types -- TS */\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/* eslint-enable jsdoc/no-undefined-types -- TS */\n\n/**\n * @callback RemoveTag\n * @param {Integer} tagIndex\n * @param {{\n * removeEmptyBlock?: boolean,\n * tagSourceOffset?: Integer\n * }} [cfg]\n * @returns {void}\n */\n\n/**\n * @callback AddTag\n * @param {string} targetTagName\n * @param {Integer} [number]\n * @param {import('comment-parser').Tokens|{}} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback GetFirstLine\n * @returns {Integer|undefined}\n */\n\n/**\n * @typedef {(\n * tokens?: Partial<import('comment-parser').Tokens> | undefined\n * ) => import('comment-parser').Tokens} SeedTokens\n */\n/* eslint-enable jsdoc/no-undefined-types -- TS */\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/* eslint-enable jsdoc/no-undefined-types -- TS */\n\n/**\n * @callback AddLines\n * @param {Integer} tagIndex\n * @param {Integer} tagSourceOffset\n * @param {Integer} numLines\n * @returns {void}\n */\n\n/**\n * @callback MakeMultiline\n * @returns {void}\n */\n\n/**\n * @callback GetFunctionParameterNames\n * @param {boolean} [useDefaultObjectProperties]\n * @returns {import('./jsdocUtils.js').ParamNameInfo[]}\n */\n\n/**\n * @callback HasParams\n * @returns {Integer}\n */\n\n/**\n * @callback IsGenerator\n * @returns {boolean}\n */\n\n/**\n * @callback IsConstructor\n * @returns {boolean}\n */\n\n/**\n * @callback GetJsdocTagsDeep\n * @param {string} tagName\n * @returns {false|{\n * idx: Integer,\n * name: string,\n * type: string\n * }[]}\n */\n\n/**\n * @callback GetPreferredTagName\n * @param {{\n * tagName: string,\n * skipReportingBlockedTag?: boolean,\n * allowObjectReturn?: boolean,\n * defaultMessage?: string\n * }} cfg\n * @returns {string|undefined|false|{\n * message: string;\n * replacement?: string|undefined;\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @callback IsValidTag\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\n\n/**\n * @callback HasATag\n * @param {string[]} names\n * @returns {boolean}\n */\n\n/**\n * @callback HasTag\n * @param {string} name\n * @returns {boolean}\n */\n\n/**\n * @callback ComparePaths\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\n\n/**\n * @callback DropPathSegmentQuotes\n * @param {string} name\n * @returns {string}\n */\n\n/**\n * @callback AvoidDocs\n * @returns {boolean}\n */\n\n/**\n * @callback TagMightHaveNamePositionTypePosition\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} [otherModeMaps]\n * @returns {boolean|{otherMode: true}}\n */\n\n/**\n * @callback TagMustHave\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback TagMissingRequiredTypeOrNamepath\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback IsNamepathX\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetTagStructureForMode\n * @param {import('./jsdocUtils.js').ParserMode} mde\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\n\n/**\n * @callback MayBeUndefinedTypeTag\n * @param {import('comment-parser').Spec} tag\n * @returns {boolean}\n */\n\n/**\n * @callback HasValueOrExecutorHasNonEmptyResolveValue\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} [allBranches]\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldReturnValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasThrowValue\n * @returns {boolean}\n */\n\n/**\n * @callback IsAsync\n * @returns {boolean|undefined}\n */\n\n/**\n * @callback GetTags\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\n\n/**\n * @callback GetPresentTags\n * @param {string[]} tagList\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterTags\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterAllTags\n * @param {(tag: (import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)) => boolean} filter\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\n\n/**\n * @callback GetTagsByType\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n * tagsWithNames: import('comment-parser').Spec[],\n * tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\n\n/**\n * @callback HasOptionTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetClassNode\n * @returns {Node|null}\n */\n\n/**\n * @callback GetClassJsdoc\n * @returns {null|JsdocBlockWithInline}\n */\n\n/**\n * @callback ClassHasTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback FindContext\n * @param {Context[]} contexts\n * @param {string|undefined} comment\n * @returns {{\n * foundContext: Context|undefined,\n * contextStr: string\n * }}\n */\n\n/**\n * @typedef {BasicUtils & {\n * isIteratingFunction: IsIteratingFunction,\n * isVirtualFunction: IsVirtualFunction,\n * stringify: Stringify,\n * reportJSDoc: ReportJSDoc,\n * getRegexFromString: GetRegexFromString,\n * getTagDescription: GetTagDescription,\n * setTagDescription: SetTagDescription,\n * getDescription: GetDescription,\n * setBlockDescription: SetBlockDescription,\n * setDescriptionLines: SetDescriptionLines,\n * changeTag: ChangeTag,\n * setTag: SetTag,\n * removeTag: RemoveTag,\n * addTag: AddTag,\n * getFirstLine: GetFirstLine,\n * seedTokens: SeedTokens,\n * emptyTokens: EmptyTokens,\n * addLine: AddLine,\n * addLines: AddLines,\n * makeMultiline: MakeMultiline,\n * flattenRoots: import('./jsdocUtils.js').FlattenRoots,\n * getFunctionParameterNames: GetFunctionParameterNames,\n * hasParams: HasParams,\n * isGenerator: IsGenerator,\n * isConstructor: IsConstructor,\n * getJsdocTagsDeep: GetJsdocTagsDeep,\n * getPreferredTagName: GetPreferredTagName,\n * isValidTag: IsValidTag,\n * hasATag: HasATag,\n * hasTag: HasTag,\n * comparePaths: ComparePaths,\n * dropPathSegmentQuotes: DropPathSegmentQuotes,\n * avoidDocs: AvoidDocs,\n * tagMightHaveNamePosition: TagMightHaveNamePositionTypePosition,\n * tagMightHaveTypePosition: TagMightHaveNamePositionTypePosition,\n * tagMustHaveNamePosition: TagMustHave,\n * tagMustHaveTypePosition: TagMustHave,\n * tagMissingRequiredTypeOrNamepath: TagMissingRequiredTypeOrNamepath,\n * isNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNamepath: IsNamepathX,\n * getTagStructureForMode: GetTagStructureForMode,\n * mayBeUndefinedTypeTag: MayBeUndefinedTypeTag,\n * hasValueOrExecutorHasNonEmptyResolveValue: HasValueOrExecutorHasNonEmptyResolveValue,\n * hasYieldValue: HasYieldValue,\n * hasYieldReturnValue: HasYieldReturnValue,\n * hasThrowValue: HasThrowValue,\n * isAsync: IsAsync,\n * getTags: GetTags,\n * getPresentTags: GetPresentTags,\n * filterTags: FilterTags,\n * filterAllTags: FilterAllTags,\n * getTagsByType: GetTagsByType,\n * hasOptionTag: HasOptionTag,\n * getClassNode: GetClassNode,\n * getClassJsdoc: GetClassJsdoc,\n * classHasTag: ClassHasTag,\n * findContext: FindContext\n * }} Utils\n */\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n * @typedef {import('eslint').Rule.RuleMetaData} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n * @typedef {{\n * globalTags: {},\n * hasDuplicates: {\n * [key: string]: boolean\n * },\n * selectorMap: {\n * [selector: string]: {\n * [comment: string]: Integer\n * }\n * },\n * hasTag: {\n * [key: string]: boolean\n * },\n * hasNonComment: number,\n * hasNonCommentBeforeTag: {\n * [key: string]: boolean|number\n * }\n * }} StateObject\n */\n/* eslint-enable jsdoc/valid-types -- Old version */\n\n/**\n * The Node AST as supplied by the parser.\n * @typedef {import('eslint').Rule.Node} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {{\n * tagNamePreference?: import('./jsdocUtils.js').TagNamePreference,\n * mode?: import('./jsdocUtils.js').ParserMode\n * }} cfg\n * @returns {BasicUtils}\n */\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n /** @type {BasicUtils} */\n const utils = {};\n\n /** @type {ReportSettings} */\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n /** @type {ParseClosureTemplateTag} */\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n /** @type {GetPreferredTagNameObject} */\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(\n context,\n /** @type {import('./jsdocUtils.js').ParserMode} */ (mode),\n tagName,\n tagNamePreference,\n );\n const isObject = ret && typeof ret === 'object';\n if (ret === false || (isObject && !ret.replacement)) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\n/**\n * @callback Report\n * @param {string} message\n * @param {import('eslint').Rule.ReportFixer|null} [fix]\n * @param {null|\n * {line?: Integer, column?: Integer}|\n * import('comment-parser').Spec & {line?: Integer}\n * } [jsdocLoc]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n * @returns {void}\n */\n/* eslint-enable jsdoc/valid-types -- Old version of pratt */\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 {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 iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = /** @type {import('eslint').Rule.Node[]} */ (context.getAncestors());\n\n // istanbul ignore next -- Fallback to deprecated method\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n\n const utils = /** @type {Utils} */ (getBasicUtils(context, settings));\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(String(node && node.type));\n };\n\n /** @type {IsVirtualFunction} */\n utils.isVirtualFunction = () => {\n return Boolean(iteratingAll) && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n /** @type {Stringify} */\n utils.stringify = (tagBlock, specRewire) => {\n let block;\n if (specRewire) {\n block = rewireSpecs(tagBlock);\n }\n\n return commentStringify(/** @type {import('comment-parser').Block} */ (\n specRewire ? block : tagBlock));\n };\n\n /** @type {ReportJSDoc} */\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? /** @type {import('eslint').Rule.ReportFixer} */ (\n fixer,\n ) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/u);\n if (lastLineBreakPos > -1) {\n return fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]);\n }\n\n return fixer.removeRange(\n (/\\s/u).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n );\n }\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n /** @type {GetRegexFromString} */\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n /** @type {GetTagDescription} */\n utils.getTagDescription = (tg, returnArray) => {\n /**\n * @type {string[]}\n */\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return returnArray ? descriptions : descriptions.join('\\n');\n };\n\n /** @type {SetTagDescription} */\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {GetDescription} */\n utils.getDescription = () => {\n /** @type {string[]} */\n const descriptions = [];\n let lastDescriptionLine = 0;\n let tagsBegun = false;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (tag) {\n tagsBegun = true;\n }\n\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n if (!tagsBegun && description) {\n descriptions.push(description);\n }\n\n return true;\n }\n\n if (!tagsBegun && (idx || description)) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n descriptions,\n lastDescriptionLine,\n };\n };\n\n /** @type {SetBlockDescription} */\n utils.setBlockDescription = (setter) => {\n /** @type {string[]} */\n const descLines = [];\n /**\n * @type {undefined|Integer}\n */\n let startIdx;\n /**\n * @type {undefined|Integer}\n */\n let endIdx;\n\n /**\n * @type {undefined|{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n let info;\n\n jsdoc.source.some(({\n tokens: {\n description,\n start,\n delimiter,\n postDelimiter,\n tag,\n end,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n descLines.push(description);\n return false;\n });\n\n /* istanbul ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n /** @type {Integer} */ (startIdx),\n /** @type {Integer} */ (endIdx) - /** @type {Integer} */ (startIdx),\n ...setter(\n /**\n * @type {{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n (info),\n seedTokens,\n descLines,\n ),\n );\n }\n };\n\n /** @type {SetDescriptionLines} */\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n // istanbul ignore if -- 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 // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end: ending,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n /* istanbul ignore if -- Currently want to clear entirely if removing tags */\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\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @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 // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n };\n\n /** @type {MakeMultiline} */\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n /**\n * @type {import('./jsdocUtils.js').FlattenRoots}\n */\n utils.flattenRoots = jsdocUtils.flattenRoots;\n\n /** @type {GetFunctionParameterNames} */\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n /** @type {HasParams} */\n utils.hasParams = () => {\n return jsdocUtils.hasParams(/** @type {Node} */ (node));\n };\n\n /** @type {IsGenerator} */\n utils.isGenerator = () => {\n return node !== null && Boolean(\n /**\n * @type {import('estree').FunctionDeclaration|\n * import('estree').FunctionExpression}\n */ (node).generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n /** @type {import('estree').FunctionDeclaration} */\n (\n /**\n * @type {import('estree').ExportNamedDeclaration|\n * import('estree').ExportDefaultDeclaration}\n */ (node).declaration\n ).generator,\n );\n };\n\n /** @type {IsConstructor} */\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(/** @type {Node} */ (node));\n };\n\n /** @type {GetJsdocTagsDeep} */\n utils.getJsdocTagsDeep = (tagName) => {\n const name = /** @type {string|false} */ (utils.getPreferredTagName({\n tagName,\n }));\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n /** @type {GetPreferredTagName} */\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n /** @type {IsValidTag} */\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n /** @type {HasATag} */\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n /** @type {HasTag} */\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n /** @type {ComparePaths} */\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n /** @type {DropPathSegmentQuotes} */\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n /** @type {AvoidDocs} */\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc,\n node,\n context,\n /** @type {import('json-schema').JSONSchema4|import('json-schema').JSONSchema4[]} */ (\n ruleConfig.meta.schema\n ),\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n /** @type {TagMightHaveNamePositionTypePosition} */\n utils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */ (\n method\n )\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n /** @type {TagMissingRequiredTypeOrNamepath} */\n utils.tagMissingRequiredTypeOrNamepath = (tagName, otherModeMaps) => {\n const result = jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName);\n if (!result) {\n return false;\n }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n ]) {\n /** @type {TagMustHave} */\n utils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'isNamepathReferencingTag',\n 'isNamepathOrUrlReferencingTag',\n 'tagMightHaveNamepath',\n ]) {\n /** @type {IsNamepathX} */\n utils[\n /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */ (\n method\n )] = (tagName) => {\n return jsdocUtils[\n /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */\n (method)\n ](tagName);\n };\n }\n\n /** @type {GetTagStructureForMode} */\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n /** @type {MayBeUndefinedTypeTag} */\n utils.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n /** @type {HasValueOrExecutorHasNonEmptyResolveValue} */\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(\n /** @type {Node} */ (node), anyPromiseAsReturn, allBranches,\n );\n };\n\n /** @type {HasYieldValue} */\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(/** @type {Node} */ (node).type)) {\n return jsdocUtils.hasYieldValue(\n /** @type {import('estree').Declaration|import('estree').Expression} */ (\n /** @type {import('estree').ExportNamedDeclaration|import('estree').ExportDefaultDeclaration} */\n (node).declaration\n ),\n );\n }\n\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node));\n };\n\n /** @type {HasYieldReturnValue} */\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node), true);\n };\n\n /** @type {HasThrowValue} */\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n /** @type {IsAsync} */\n utils.isAsync = () => {\n return 'async' in /** @type {Node} */ (node) && node.async;\n };\n\n /** @type {GetTags} */\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n /** @type {GetPresentTags} */\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n /** @type {FilterTags} */\n utils.filterTags = (filter) => {\n return jsdoc.tags.filter((tag) => {\n return filter(tag);\n });\n };\n\n /** @type {FilterAllTags} */\n utils.filterAllTags = (filter) => {\n const tags = jsdocUtils.getAllTags(jsdoc);\n return tags.filter((tag) => {\n return filter(tag);\n });\n };\n\n /** @type {GetTagsByType} */\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags);\n };\n\n /** @type {HasOptionTag} */\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n /** @type {GetClassNode} */\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) ?? null;\n };\n\n /** @type {GetClassJsdoc} */\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n /** @type {ClassHasTag} */\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return classJsdoc !== null && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n /** @type {ForEachPreferredTag} */\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = /** @type {string|false} */ (\n utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n })\n );\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(\n /**\n * @type {import('@es-joy/jsdoccomment').JsdocTagWithInline}\n */ (\n matchingJsdocTag\n ), targetTagName,\n );\n }\n };\n\n /** @type {FindContext} */\n utils.findContext = (contexts, comment) => {\n const foundContext = contexts.find((cntxt) => {\n return typeof cntxt === 'string' ?\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n ) :\n (!cntxt.context || cntxt.context === 'any' ||\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt.context),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n )) && comment === cntxt.comment;\n });\n\n const contextStr = typeof foundContext === 'object' ?\n foundContext.context ?? 'any' :\n String(foundContext);\n\n return {\n contextStr,\n foundContext,\n };\n };\n\n return utils;\n};\n\n/**\n * @typedef {{\n * [key: string]: false|string|{\n * message: string,\n * replacement?: false|string\n * skipRootChecking?: boolean\n * }\n * }} PreferredTypes\n */\n/**\n * @typedef {{\n * [key: string]: {\n * name?: \"text\"|\"namepath-defining\"|\"namepath-referencing\"|false,\n * type?: boolean|string[],\n * required?: (\"name\"|\"type\"|\"typeOrNameRequired\")[]\n * }\n * }} StructuredTags\n */\n/**\n * Settings from ESLint types.\n * @typedef {{\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * mode: import('./jsdocUtils.js').ParserMode,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * [name: string]: any,\n * contexts?: Context[]\n * }} Settings\n */\n/* eslint-enable jsdoc/valid-types -- Old version */\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @returns {Settings|false}\n */\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // `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 canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: /** @type {Error} */ (error).message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n * @callback MakeReport\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('estree').Node} commentNode\n * @returns {Report}\n */\n\n/** @type {MakeReport} */\nconst makeReport = (context, commentNode) => {\n /** @type {Report} */\n const report = (message, fix = null, jsdocLoc = null, data = undefined) => {\n /* eslint-enable jsdoc/valid-types -- Old version */\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = /** @type {import('comment-parser').Spec & {line?: Integer}} */ (\n jsdocLoc\n ).source[0].number;\n }\n\n const lineNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.line +\n /** @type {Integer} */ (jsdocLoc.line);\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\n if ('column' in jsdocLoc && typeof jsdocLoc.column === 'number') {\n const colNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent?: string,\n * info?: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state?: StateObject,\n * globalState?: Map<string, Map<string, string>>,\n * jsdoc?: JsdocBlockWithInline,\n * jsdocNode?: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node?: Node,\n * allComments?: import('estree').Node[]\n * report?: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: BasicUtils,\n * }\n * ) => any } JsdocVisitorBasic\n */\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent: string,\n * info: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state: StateObject,\n * globalState: Map<string, Map<string, string>>,\n * jsdoc: JsdocBlockWithInline,\n * jsdocNode: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node: Node|null,\n * allComments?: import('estree').Node[]\n * report: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/valid-types -- Old version */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\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 iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n jsdoc,\n jsdocNode: /**\n * @type {import('eslint').Rule.Node & {\n * range: [number, number];}}\n */ (jsdocNde),\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\n/**\n * @param {string[]} lines\n * @param {import('estree').Comment} jsdocNode\n * @returns {[indent: string, jsdoc: JsdocBlockWithInline]}\n */\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.line - 1\n ];\n const indnt = sourceLine.charAt(0).repeat(\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.column,\n );\n\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node & {\n * range: [number, number]\n * }, state: StateObject}} NonCommentArgs\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils.js').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {true} [checkPrivate] Whether to check `@private` blocks (normally exempted)\n * @property {true} [checkInternal] Whether to check `@internal` blocks (normally exempted)\n * @property {true} [checkFile] Whether to iterates over all JSDoc blocks regardless of attachment\n * @property {true} [nonGlobalSettings] Whether to avoid relying on settings for global contexts\n * @property {true} [noTracking] Whether to disable the tracking of visited comment nodes (as\n * non-tracked may conduct further actions)\n * @property {true} [matchContext] Whether the rule expects contexts to be based on a match option\n * @property {(args: {\n * context: import('eslint').Rule.RuleContext,\n * state: StateObject,\n * settings: Settings,\n * utils: BasicUtils\n * }) => void} [exit] Handler to be executed upon exiting iteration of program AST\n * @property {(nca: NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param {ContextObject[]|null} [contexts] The `contexts` containing relevant `comment` info.\n * @param {boolean} [additiveCommentContexts] If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n /** @type {import('@es-joy/jsdoccomment').CommentHandler} */\n let handler;\n\n /** @type {Settings|false} */\n let settings;\n\n /**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {Node|null} node\n * @param {import('estree').Comment[]} jsdocNodes\n * @param {StateObject} state\n * @param {boolean} [lastCall]\n * @returns {void}\n */\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n // istanbul ignore next -- Fallback to deprecated method\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, /** @type {Settings} */ (settings));\n for (const jsdocNode of jsdocNodes) {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(\n /** @type {import('estree').Node} */\n (jsdocNde),\n ))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of /** @type {ContextObject[]} */ (contexts).entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n /** @type {Node} */\n (node),\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n const settngs = /** @type {Settings} */ (settings);\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n settings: settngs,\n state,\n utils,\n });\n }\n };\n\n return {\n // @ts-expect-error ESLint accepts\n create (context) {\n // istanbul ignore next -- Fallback to deprecated method\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n /**\n * @param {import('eslint').Rule.Node & {\n * range: [Integer, Integer];\n * }} node\n * @returns {void}\n */\n '*:not(Program)' (node) {\n const commentNode = getJSDocComment(\n sourceCode, node, /** @type {Settings} */ (settings),\n );\n if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n const ste = /** @type {StateObject} */ (state);\n ruleConfig.nonComment({\n node,\n state: ste,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n /** @type {import('estree').Comment} */\n (commentNode),\n ], /** @type {StateObject} */ (state));\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(\n context,\n null,\n untrackedJSdoc,\n /** @type {StateObject} */\n (state),\n true,\n );\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitorBasic} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n // istanbul ignore next -- Fallback to deprecated method\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComms = /** @type {unknown} */ (sourceCode.getAllComments());\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments: /** @type {import('estree').Node[]} */ (allComms),\n context,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(\n /** @type {JsdocVisitorBasic} */ (iterator),\n ruleConfig,\n );\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n /** @type {import('eslint').Rule.RuleModule} */\n return {\n /**\n * The entrypoint for the JSDoc rule.\n * @param {import('eslint').Rule.RuleContext} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {import('eslint').Rule.RuleListener}\n * a listener with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n /**\n * @type {Context[]|undefined}\n */\n let contexts;\n /* eslint-enable jsdoc/valid-types -- Old version */\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 // istanbul ignore next -- Fallback to deprecated method\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n /** @type {Partial<StateObject>} */\n const state = {};\n /* eslint-enable jsdoc/no-undefined-types -- TS */\n\n /** @type {CheckJsdoc} */\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines,\n /** @type {import('estree').Comment} */\n (jsdocNode),\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info,\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n /** @type {StateObject} */\n (state),\n );\n };\n\n /** @type {import('eslint').Rule.RuleListener} */\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (typeof ruleConfig.exit === 'function') {\n contextObject['Program:exit'] = () => {\n const ste = /** @type {StateObject} */ (state);\n\n // @ts-expect-error `utils` not needed at this point\n /** @type {Required<RuleConfig>} */ (ruleConfig).exit({\n context,\n settings,\n state: ste,\n });\n /* eslint-enable jsdoc/no-undefined-types -- Bug */\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAKA,IAAAE,cAAA,GAAAF,OAAA;AAIA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAA8B,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;;AAEA;AACA;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;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM;EACJG,WAAW;EACXC;AACF,CAAC,GAAGC,mBAAI;;AAER;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAAC,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,aAAa,GAAGA,CAACC,OAAO,EAAE;EAC9BC,iBAAiB;EACjBC;AACF,CAAC,KAAK;EACJ;EACA,MAAMC,KAAK,GAAG,CAAC,CAAC;;EAEhB;EACAA,KAAK,CAACC,cAAc,GAAIC,OAAO,IAAK;IAClCL,OAAO,CAACM,MAAM,CAAC;MACbC,GAAG,EAAE;QACHC,GAAG,EAAE;UACHC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR,CAAC;QACDC,KAAK,EAAE;UACLF,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR;MACF,CAAC;MACDL;IACF,CAAC,CAAC;EACJ,CAAC;;EAED;EACAF,KAAK,CAACS,uBAAuB,GAAIC,GAAG,IAAK;IACvC,OAAOC,mBAAU,CAACF,uBAAuB,CAACC,GAAG,CAAC;EAChD,CAAC;EAEDV,KAAK,CAACY,oBAAoB,GAAGD,mBAAU,CAACC,oBAAoB;;EAE5D;EACAZ,KAAK,CAACa,yBAAyB,GAAG,CAAC;IACjCC;EACF,CAAC,KAAK;IACJ,MAAMC,GAAG,GAAGJ,mBAAU,CAACK,mBAAmB,CACxCnB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GqP,SAAS;MAC9B;IACF;IAEA9P,OAAO,CAACM,MAAM,CAAC;MACbkD,IAAI;MACJmM,GAAG;MACHpP,GAAG;MACHF,OAAO;MACPmB,IAAI,EAAEkO;IACR,CAAC,CAAC;EACJ,CAAC;EAED,OAAOpP,MAAM;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMyP,OAAO,GAAGA,CACd5J,IAAI,EACJrE,MAAM,EAAEL,KAAK,EACbI,UAAU,EAAE7B,OAAO,EAAE0B,SAAS,EAAEF,IAAI,EAAEG,QAAQ,EAC9CM,UAAU,EAAE+N,QAAQ,EAAEC,KAAK,EAAErO,YAAY,KACtC;EACH,MAAMsO,QAAQ,GAAG,sBAAwBxO,SAAU;EACnD,MAAMpB,MAAM,GAAGmP,UAAU,CACvBzP,OAAO,EACP;EACCkQ,QACH,CAAC;EAED,MAAM/P,KAAK,GAAGoB,QAAQ,CACpBC,IAAI,EACJC,KAAK,EACL;EACCC,SAAS,EACVC,QAAQ,EACRrB,MAAM,EACNN,OAAO,EACP4B,YAAY,EACZC,UAAU,EACVC,MACF,CAAC;EAED,IACE,CAACD,UAAU,CAACsO,aAAa,IAAIxO,QAAQ,CAACsN,cAAc,IACpD9O,KAAK,CAAC2J,MAAM,CAAC,UAAU,CAAC,EACxB;IACA;EACF;EAEA,IACE,CAACjI,UAAU,CAACuO,YAAY,IAAIzO,QAAQ,CAACqN,aAAa,KAEhD7O,KAAK,CAAC2J,MAAM,CAAC,SAAS,CAAC,IACvBrI,KAAK,CAACyF,IAAI,CACPkF,MAAM,CAAC,CAAC;IACP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"}
@@ -29,7 +29,7 @@ const extractParagraphs = text => {
29
29
  const extractSentences = (text, abbreviationsRegex) => {
30
30
  const txt = text
31
31
  // Remove all {} tags.
32
- .replaceAll(/\{[\s\S]*?\}\s*/gu, '')
32
+ .replaceAll(/(?<!^)\{[\s\S]*?\}\s*/gu, '')
33
33
 
34
34
  // Remove custom abbreviations
35
35
  .replace(abbreviationsRegex, '');
@@ -1 +1 @@
1
- {"version":3,"file":"requireDescriptionCompleteSentence.js","names":["_iterateJsdoc","_interopRequireDefault","require","_escapeStringRegexp","obj","__esModule","default","otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replaceAll","replace","sentenceEndGrouping","puncts","matchAll","map","sentEnd","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","paragraphs","filter","Boolean","paragraph","parIdx","sentences","fix","fixer","getText","pop","RegExp","escapeStringRegexp","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","_default","iterateJsdoc","context","jsdoc","utils","abbreviations","options","length","abbreviation","join","getDescription","indices","match","index","reverse","forEachPreferredTag","matchingJsdocTag","desc","name","getTagDescription","trim","tagsWithNames","getTagsByType","tags","tagsWithoutNames","filterTags","tagName","has","hasOptionTag","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type","exports","module"],"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport escapeStringRegexp from 'escape-string-regexp';\n\nconst otherDescriptiveTags = new Set([\n // 'copyright' and 'see' might be good addition, but as the former may be\n // sensitive text, and the latter may have just a link, they are not\n // included by default\n 'summary', 'file', 'fileoverview', 'overview', 'classdesc', 'todo',\n 'deprecated', 'throws', 'exception', 'yields', 'yield',\n]);\n\n/**\n * @param {string} text\n * @returns {string[]}\n */\nconst extractParagraphs = (text) => {\n return text.split(/(?<![;:])\\n\\n/u);\n};\n\n/**\n * @param {string} text\n * @param {string|RegExp} abbreviationsRegex\n * @returns {string[]}\n */\nconst extractSentences = (text, abbreviationsRegex) => {\n const txt = text\n // Remove all {} tags.\n .replaceAll(/\\{[\\s\\S]*?\\}\\s*/gu, '')\n\n // Remove custom abbreviations\n .replace(abbreviationsRegex, '');\n\n const sentenceEndGrouping = /([.?!])(?:\\s+|$)/ug;\n\n const puncts = [\n ...txt.matchAll(sentenceEndGrouping),\n ].map((sentEnd) => {\n return sentEnd[0];\n });\n\n return txt\n .split(/[.?!](?:\\s+|$)/u)\n\n // Re-add the dot.\n .map((sentence, idx) => {\n return !puncts[idx] && /^\\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;\n });\n};\n\n/**\n * @param {string} text\n * @returns {boolean}\n */\nconst isNewLinePrecededByAPeriod = (text) => {\n /** @type {boolean} */\n let lastLineEndsSentence;\n\n const lines = text.split('\\n');\n\n return !lines.some((line) => {\n if (lastLineEndsSentence === false && /^[A-Z][a-z]/u.test(line)) {\n return true;\n }\n\n lastLineEndsSentence = /[.:?!|]$/u.test(line);\n\n return false;\n });\n};\n\n/**\n * @param {string} str\n * @returns {boolean}\n */\nconst isCapitalized = (str) => {\n return str[0] === str[0].toUpperCase();\n};\n\n/**\n * @param {string} str\n * @returns {boolean}\n */\nconst isTable = (str) => {\n return str.charAt(0) === '|';\n};\n\n/**\n * @param {string} str\n * @returns {string}\n */\nconst capitalize = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\n/**\n * @param {string} description\n * @param {import('../iterateJsdoc.js').Report} reportOrig\n * @param {import('eslint').Rule.Node} jsdocNode\n * @param {string|RegExp} abbreviationsRegex\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('comment-parser').Spec|{\n * line: import('../iterateJsdoc.js').Integer\n * }} tag\n * @param {boolean} newlineBeforeCapsAssumesBadSentenceEnd\n * @returns {boolean}\n */\nconst validateDescription = (\n description, reportOrig, jsdocNode, abbreviationsRegex,\n sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd,\n) => {\n if (!description || (/^\\n+$/u).test(description)) {\n return false;\n }\n\n const paragraphs = extractParagraphs(description).filter(Boolean);\n\n return paragraphs.some((paragraph, parIdx) => {\n const sentences = extractSentences(paragraph, abbreviationsRegex);\n\n const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n let text = sourceCode.getText(jsdocNode);\n\n if (!/[.:?!]$/u.test(paragraph)) {\n const line = paragraph.split('\\n').filter(Boolean).pop();\n text = text.replace(new RegExp(`${escapeStringRegexp(\n /** @type {string} */\n (line),\n )}$`, 'mu'), `${line}.`);\n }\n\n for (const sentence of sentences.filter((sentence_) => {\n return !(/^\\s*$/u).test(sentence_) && !isCapitalized(sentence_) &&\n !isTable(sentence_);\n })) {\n const beginning = sentence.split('\\n')[0];\n\n if ('tag' in tag && tag.tag) {\n const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'u');\n\n text = text.replace(reg, (_$0, $1) => {\n return $1 + capitalize(beginning);\n });\n } else {\n text = text.replace(new RegExp('((?:[.?!]|\\\\*|\\\\})\\\\s*)' + escapeStringRegexp(beginning), 'u'), '$1' + capitalize(beginning));\n }\n }\n\n return fixer.replaceText(jsdocNode, text);\n };\n\n /**\n * @param {string} msg\n * @param {import('eslint').Rule.ReportFixer | null | undefined} fixer\n * @param {{\n * line?: number | undefined;\n * column?: number | undefined;\n * } | (import('comment-parser').Spec & {\n * line?: number | undefined;\n * column?: number | undefined;\n * })} tagObj\n * @returns {void}\n */\n const report = (msg, fixer, tagObj) => {\n if ('line' in tagObj) {\n /**\n * @type {{\n * line: number;\n * }}\n */ (tagObj).line += parIdx * 2;\n } else {\n /** @type {import('comment-parser').Spec} */ (\n tagObj\n ).source[0].number += parIdx * 2;\n }\n\n // Avoid errors if old column doesn't exist here\n tagObj.column = 0;\n reportOrig(msg, fixer, tagObj);\n };\n\n if (sentences.some((sentence) => {\n return (/^[.?!]$/u).test(sentence);\n })) {\n report('Sentences must be more than punctuation.', null, tag);\n }\n\n if (sentences.some((sentence) => {\n return !(/^\\s*$/u).test(sentence) && !isCapitalized(sentence) && !isTable(sentence);\n })) {\n report('Sentences should start with an uppercase character.', fix, tag);\n }\n\n const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, '');\n\n if (!/(?:[.?!|]|```)\\s*$/u.test(paragraphNoAbbreviations)) {\n report('Sentences must end with a period.', fix, tag);\n return true;\n }\n\n if (newlineBeforeCapsAssumesBadSentenceEnd && !isNewLinePrecededByAPeriod(paragraphNoAbbreviations)) {\n report('A line of text is started with an uppercase character, but the preceding line does not end the sentence.', null, tag);\n\n return true;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n sourceCode,\n context,\n jsdoc,\n report,\n jsdocNode,\n utils,\n}) => {\n const /** @type {{abbreviations: string[], newlineBeforeCapsAssumesBadSentenceEnd: boolean}} */ {\n abbreviations = [],\n newlineBeforeCapsAssumesBadSentenceEnd = false,\n } = context.options[0] || {};\n\n const abbreviationsRegex = abbreviations.length ?\n new RegExp('\\\\b' + abbreviations.map((abbreviation) => {\n return escapeStringRegexp(abbreviation.replaceAll(/\\.$/ug, '') + '.');\n }).join('|') + '(?:$|\\\\s)', 'gu') :\n '';\n\n let {\n description,\n } = utils.getDescription();\n\n const indices = [\n ...description.matchAll(/```[\\s\\S]*```/gu),\n ].map((match) => {\n const {\n index,\n } = match;\n const [\n {\n length,\n },\n ] = match;\n return {\n index,\n length,\n };\n }).reverse();\n\n for (const {\n index,\n length,\n } of indices) {\n description = description.slice(0, index) +\n description.slice(/** @type {import('../iterateJsdoc.js').Integer} */ (\n index\n ) + length);\n }\n\n if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {\n line: jsdoc.source[0].number + 1,\n }, newlineBeforeCapsAssumesBadSentenceEnd)) {\n return;\n }\n\n utils.forEachPreferredTag('description', (matchingJsdocTag) => {\n const desc = `${matchingJsdocTag.name} ${utils.getTagDescription(matchingJsdocTag)}`.trim();\n validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);\n }, true);\n\n const {\n tagsWithNames,\n } = utils.getTagsByType(jsdoc.tags);\n const tagsWithoutNames = utils.filterTags(({\n tag: tagName,\n }) => {\n return otherDescriptiveTags.has(tagName) ||\n utils.hasOptionTag(tagName) && !tagsWithNames.some(({\n tag,\n }) => {\n // If user accidentally adds tags with names (or like `returns`\n // get parsed as having names), do not add to this list\n return tag === tagName;\n });\n });\n\n tagsWithNames.some((tag) => {\n const desc = /** @type {string} */ (\n utils.getTagDescription(tag)\n ).replace(/^- /u, '').trimEnd();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = `${tag.name} ${utils.getTagDescription(tag)}`.trim();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-description-complete-sentence.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n abbreviations: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n newlineBeforeCapsAssumesBadSentenceEnd: {\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"requireDescriptionCompleteSentence.js","names":["_iterateJsdoc","_interopRequireDefault","require","_escapeStringRegexp","obj","__esModule","default","otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replaceAll","replace","sentenceEndGrouping","puncts","matchAll","map","sentEnd","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","paragraphs","filter","Boolean","paragraph","parIdx","sentences","fix","fixer","getText","pop","RegExp","escapeStringRegexp","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","_default","iterateJsdoc","context","jsdoc","utils","abbreviations","options","length","abbreviation","join","getDescription","indices","match","index","reverse","forEachPreferredTag","matchingJsdocTag","desc","name","getTagDescription","trim","tagsWithNames","getTagsByType","tags","tagsWithoutNames","filterTags","tagName","has","hasOptionTag","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type","exports","module"],"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport escapeStringRegexp from 'escape-string-regexp';\n\nconst otherDescriptiveTags = new Set([\n // 'copyright' and 'see' might be good addition, but as the former may be\n // sensitive text, and the latter may have just a link, they are not\n // included by default\n 'summary', 'file', 'fileoverview', 'overview', 'classdesc', 'todo',\n 'deprecated', 'throws', 'exception', 'yields', 'yield',\n]);\n\n/**\n * @param {string} text\n * @returns {string[]}\n */\nconst extractParagraphs = (text) => {\n return text.split(/(?<![;:])\\n\\n/u);\n};\n\n/**\n * @param {string} text\n * @param {string|RegExp} abbreviationsRegex\n * @returns {string[]}\n */\nconst extractSentences = (text, abbreviationsRegex) => {\n const txt = text\n // Remove all {} tags.\n .replaceAll(/(?<!^)\\{[\\s\\S]*?\\}\\s*/gu, '')\n\n // Remove custom abbreviations\n .replace(abbreviationsRegex, '');\n\n const sentenceEndGrouping = /([.?!])(?:\\s+|$)/ug;\n\n const puncts = [\n ...txt.matchAll(sentenceEndGrouping),\n ].map((sentEnd) => {\n return sentEnd[0];\n });\n\n return txt\n .split(/[.?!](?:\\s+|$)/u)\n\n // Re-add the dot.\n .map((sentence, idx) => {\n return !puncts[idx] && /^\\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;\n });\n};\n\n/**\n * @param {string} text\n * @returns {boolean}\n */\nconst isNewLinePrecededByAPeriod = (text) => {\n /** @type {boolean} */\n let lastLineEndsSentence;\n\n const lines = text.split('\\n');\n\n return !lines.some((line) => {\n if (lastLineEndsSentence === false && /^[A-Z][a-z]/u.test(line)) {\n return true;\n }\n\n lastLineEndsSentence = /[.:?!|]$/u.test(line);\n\n return false;\n });\n};\n\n/**\n * @param {string} str\n * @returns {boolean}\n */\nconst isCapitalized = (str) => {\n return str[0] === str[0].toUpperCase();\n};\n\n/**\n * @param {string} str\n * @returns {boolean}\n */\nconst isTable = (str) => {\n return str.charAt(0) === '|';\n};\n\n/**\n * @param {string} str\n * @returns {string}\n */\nconst capitalize = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\n/**\n * @param {string} description\n * @param {import('../iterateJsdoc.js').Report} reportOrig\n * @param {import('eslint').Rule.Node} jsdocNode\n * @param {string|RegExp} abbreviationsRegex\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('comment-parser').Spec|{\n * line: import('../iterateJsdoc.js').Integer\n * }} tag\n * @param {boolean} newlineBeforeCapsAssumesBadSentenceEnd\n * @returns {boolean}\n */\nconst validateDescription = (\n description, reportOrig, jsdocNode, abbreviationsRegex,\n sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd,\n) => {\n if (!description || (/^\\n+$/u).test(description)) {\n return false;\n }\n\n const paragraphs = extractParagraphs(description).filter(Boolean);\n\n return paragraphs.some((paragraph, parIdx) => {\n const sentences = extractSentences(paragraph, abbreviationsRegex);\n\n const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n let text = sourceCode.getText(jsdocNode);\n\n if (!/[.:?!]$/u.test(paragraph)) {\n const line = paragraph.split('\\n').filter(Boolean).pop();\n text = text.replace(new RegExp(`${escapeStringRegexp(\n /** @type {string} */\n (line),\n )}$`, 'mu'), `${line}.`);\n }\n\n for (const sentence of sentences.filter((sentence_) => {\n return !(/^\\s*$/u).test(sentence_) && !isCapitalized(sentence_) &&\n !isTable(sentence_);\n })) {\n const beginning = sentence.split('\\n')[0];\n\n if ('tag' in tag && tag.tag) {\n const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'u');\n\n text = text.replace(reg, (_$0, $1) => {\n return $1 + capitalize(beginning);\n });\n } else {\n text = text.replace(new RegExp('((?:[.?!]|\\\\*|\\\\})\\\\s*)' + escapeStringRegexp(beginning), 'u'), '$1' + capitalize(beginning));\n }\n }\n\n return fixer.replaceText(jsdocNode, text);\n };\n\n /**\n * @param {string} msg\n * @param {import('eslint').Rule.ReportFixer | null | undefined} fixer\n * @param {{\n * line?: number | undefined;\n * column?: number | undefined;\n * } | (import('comment-parser').Spec & {\n * line?: number | undefined;\n * column?: number | undefined;\n * })} tagObj\n * @returns {void}\n */\n const report = (msg, fixer, tagObj) => {\n if ('line' in tagObj) {\n /**\n * @type {{\n * line: number;\n * }}\n */ (tagObj).line += parIdx * 2;\n } else {\n /** @type {import('comment-parser').Spec} */ (\n tagObj\n ).source[0].number += parIdx * 2;\n }\n\n // Avoid errors if old column doesn't exist here\n tagObj.column = 0;\n reportOrig(msg, fixer, tagObj);\n };\n\n if (sentences.some((sentence) => {\n return (/^[.?!]$/u).test(sentence);\n })) {\n report('Sentences must be more than punctuation.', null, tag);\n }\n\n if (sentences.some((sentence) => {\n return !(/^\\s*$/u).test(sentence) && !isCapitalized(sentence) && !isTable(sentence);\n })) {\n report('Sentences should start with an uppercase character.', fix, tag);\n }\n\n const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, '');\n\n if (!/(?:[.?!|]|```)\\s*$/u.test(paragraphNoAbbreviations)) {\n report('Sentences must end with a period.', fix, tag);\n return true;\n }\n\n if (newlineBeforeCapsAssumesBadSentenceEnd && !isNewLinePrecededByAPeriod(paragraphNoAbbreviations)) {\n report('A line of text is started with an uppercase character, but the preceding line does not end the sentence.', null, tag);\n\n return true;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n sourceCode,\n context,\n jsdoc,\n report,\n jsdocNode,\n utils,\n}) => {\n const /** @type {{abbreviations: string[], newlineBeforeCapsAssumesBadSentenceEnd: boolean}} */ {\n abbreviations = [],\n newlineBeforeCapsAssumesBadSentenceEnd = false,\n } = context.options[0] || {};\n\n const abbreviationsRegex = abbreviations.length ?\n new RegExp('\\\\b' + abbreviations.map((abbreviation) => {\n return escapeStringRegexp(abbreviation.replaceAll(/\\.$/ug, '') + '.');\n }).join('|') + '(?:$|\\\\s)', 'gu') :\n '';\n\n let {\n description,\n } = utils.getDescription();\n\n const indices = [\n ...description.matchAll(/```[\\s\\S]*```/gu),\n ].map((match) => {\n const {\n index,\n } = match;\n const [\n {\n length,\n },\n ] = match;\n return {\n index,\n length,\n };\n }).reverse();\n\n for (const {\n index,\n length,\n } of indices) {\n description = description.slice(0, index) +\n description.slice(/** @type {import('../iterateJsdoc.js').Integer} */ (\n index\n ) + length);\n }\n\n if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {\n line: jsdoc.source[0].number + 1,\n }, newlineBeforeCapsAssumesBadSentenceEnd)) {\n return;\n }\n\n utils.forEachPreferredTag('description', (matchingJsdocTag) => {\n const desc = `${matchingJsdocTag.name} ${utils.getTagDescription(matchingJsdocTag)}`.trim();\n validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);\n }, true);\n\n const {\n tagsWithNames,\n } = utils.getTagsByType(jsdoc.tags);\n const tagsWithoutNames = utils.filterTags(({\n tag: tagName,\n }) => {\n return otherDescriptiveTags.has(tagName) ||\n utils.hasOptionTag(tagName) && !tagsWithNames.some(({\n tag,\n }) => {\n // If user accidentally adds tags with names (or like `returns`\n // get parsed as having names), do not add to this list\n return tag === tagName;\n });\n });\n\n tagsWithNames.some((tag) => {\n const desc = /** @type {string} */ (\n utils.getTagDescription(tag)\n ).replace(/^- /u, '').trimEnd();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = `${tag.name} ${utils.getTagDescription(tag)}`.trim();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-description-complete-sentence.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n abbreviations: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n newlineBeforeCapsAssumesBadSentenceEnd: {\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -235,8 +235,9 @@ const getOptions = (context, settings) => {
235
235
  /** @type {import('eslint').Rule.RuleModule} */
236
236
  var _default = {
237
237
  create(context) {
238
+ // istanbul ignore next -- Fallback to deprecated method
238
239
  const {
239
- sourceCode
240
+ sourceCode = context.getSourceCode()
240
241
  } = context;
241
242
  const settings = (0, _iterateJsdoc.getSettings)(context);
242
243
  if (!settings) {
@@ -1 +1 @@
1
- {"version":3,"file":"requireJsdoc.js","names":["_exportParser","_interopRequireDefault","require","_iterateJsdoc","_jsdocUtils","_jsdoccomment","obj","__esModule","default","OPTIONS_SCHEMA","additionalProperties","properties","checkConstructors","type","checkGetters","anyOf","enum","checkSetters","contexts","items","context","inlineCommentBlock","minLineCount","enableFixer","exemptEmptyConstructors","exemptEmptyFunctions","fixerMessage","publicOnly","oneOf","ancestorsOnly","cjs","esm","window","ArrowFunctionExpression","ClassDeclaration","ClassExpression","FunctionDeclaration","FunctionExpression","MethodDefinition","getOption","baseObject","option","key","options","getOptions","settings","undefined","baseObj","prop","Object","keys","opt","_default","create","sourceCode","getSettings","opts","requireOption","checkJsDoc","info","_handler","node","some","ctxt","count","underMinLine","_sourceCode$getText$m","getText","match","length","contextMinLineCount","find","ctx","selector","jsDocNode","getJSDocComment","jsdocUtils","exemptSpeciaMethods","description","inlineTags","problems","source","tags","isFunctionContext","isConstructor","functionParameterNames","getFunctionParameterNames","hasReturnValue","fix","fixer","lines","minLines","maxLines","baseNode","getReducedASTNode","decorator","getDecorator","indent","getIndent","text","loc","start","column","contxt","insertion","repeat","slice","insertTextBefore","report","end","line","messageId","Boolean","initModuleExports","initWindow","exported","exportParser","isUncommentedExport","hasOption","getContextObject","enforcedContexts","includes","parent","value","meta","docs","category","recommended","url","fixable","messages","missingJsDoc","schema","exports","module"],"sources":["../../src/rules/requireJsdoc.js"],"sourcesContent":["import exportParser from '../exportParser.js';\nimport {\n getSettings,\n} from '../iterateJsdoc.js';\nimport jsdocUtils from '../jsdocUtils.js';\nimport {\n getDecorator,\n getJSDocComment,\n getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/**\n * @typedef {{\n * ancestorsOnly: boolean,\n * esm: boolean,\n * initModuleExports: boolean,\n * initWindow: boolean\n * }} RequireJsdocOpts\n */\n\n/** @type {import('json-schema').JSONSchema4} */\nconst OPTIONS_SCHEMA = {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n enum: [\n 'no-setter',\n ],\n type: 'string',\n },\n ],\n default: true,\n },\n checkSetters: {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n enum: [\n 'no-getter',\n ],\n type: 'string',\n },\n ],\n default: true,\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n minLineCount: {\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n default: true,\n type: 'boolean',\n },\n exemptEmptyConstructors: {\n default: false,\n type: 'boolean',\n },\n exemptEmptyFunctions: {\n default: false,\n type: 'boolean',\n },\n fixerMessage: {\n default: '',\n type: 'string',\n },\n minLineCount: {\n type: 'integer',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n require: {\n additionalProperties: false,\n default: {},\n properties: {\n ArrowFunctionExpression: {\n default: false,\n type: 'boolean',\n },\n ClassDeclaration: {\n default: false,\n type: 'boolean',\n },\n ClassExpression: {\n default: false,\n type: 'boolean',\n },\n FunctionDeclaration: {\n default: true,\n type: 'boolean',\n },\n FunctionExpression: {\n default: false,\n type: 'boolean',\n },\n MethodDefinition: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('json-schema').JSONSchema4Object} baseObject\n * @param {string} option\n * @param {string} key\n * @returns {boolean|undefined}\n */\nconst getOption = (context, baseObject, option, key) => {\n if (context.options[0] && option in context.options[0] &&\n // Todo: boolean shouldn't be returning property, but\n // tests currently require\n (typeof context.options[0][option] === 'boolean' ||\n key in context.options[0][option])\n ) {\n return context.options[0][option][key];\n }\n\n return /** @type {{[key: string]: {default?: boolean|undefined}}} */ (\n baseObject.properties\n )[key].default;\n /* eslint-enable jsdoc/valid-types -- Old version */\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('../iterateJsdoc.js').Settings} settings\n * @returns {{\n * contexts: (string|{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * })[],\n * enableFixer: boolean,\n * exemptEmptyConstructors: boolean,\n * exemptEmptyFunctions: boolean,\n * fixerMessage: string,\n * minLineCount: undefined|import('../iterateJsdoc.js').Integer,\n * publicOnly: boolean|{[key: string]: boolean|undefined}\n * require: {[key: string]: boolean|undefined}\n * }}\n */\nconst getOptions = (context, settings) => {\n /* eslint-enable jsdoc/valid-types -- Old version */\n const {\n publicOnly,\n contexts = settings.contexts || [],\n exemptEmptyConstructors = true,\n exemptEmptyFunctions = false,\n enableFixer = true,\n fixerMessage = '',\n minLineCount = undefined,\n } = context.options[0] || {};\n\n return {\n contexts,\n enableFixer,\n exemptEmptyConstructors,\n exemptEmptyFunctions,\n fixerMessage,\n minLineCount,\n publicOnly: ((baseObj) => {\n if (!publicOnly) {\n return false;\n }\n\n /** @type {{[key: string]: boolean|undefined}} */\n const properties = {};\n /* eslint-enable jsdoc/valid-types -- Old version */\n for (const prop of Object.keys(\n /** @type {import('json-schema').JSONSchema4Object} */ (\n /** @type {import('json-schema').JSONSchema4Object} */ (\n baseObj\n ).properties),\n )) {\n const opt = getOption(\n context,\n /** @type {import('json-schema').JSONSchema4Object} */ (baseObj),\n 'publicOnly',\n prop,\n );\n\n properties[prop] = opt;\n }\n\n return properties;\n })(\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n OPTIONS_SCHEMA.properties\n ).publicOnly\n ).oneOf\n )[1],\n ),\n require: ((baseObj) => {\n /** @type {{[key: string]: boolean|undefined}} */\n const properties = {};\n /* eslint-enable jsdoc/valid-types -- Old version */\n for (const prop of Object.keys(\n /** @type {import('json-schema').JSONSchema4Object} */ (\n /** @type {import('json-schema').JSONSchema4Object} */ (\n baseObj\n ).properties),\n )) {\n const opt = getOption(\n context,\n /** @type {import('json-schema').JSONSchema4Object} */\n (baseObj),\n 'require',\n prop,\n );\n properties[prop] = opt;\n }\n\n return properties;\n })(\n /** @type {import('json-schema').JSONSchema4Object} */\n (OPTIONS_SCHEMA.properties).require,\n ),\n };\n};\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n create (context) {\n const {\n sourceCode,\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const opts = getOptions(context, settings);\n\n const {\n require: requireOption,\n contexts,\n exemptEmptyFunctions,\n exemptEmptyConstructors,\n enableFixer,\n fixerMessage,\n minLineCount,\n } = opts;\n\n const publicOnly =\n\n /**\n * @type {{\n * [key: string]: boolean | undefined;\n * }}\n */ (\n opts.publicOnly\n );\n /* eslint-enable jsdoc/valid-types -- Old version */\n\n /**\n * @type {import('../iterateJsdoc.js').CheckJsdoc}\n */\n const checkJsDoc = (info, _handler, node) => {\n if (\n // Optimize\n minLineCount !== undefined || contexts.some((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n const {\n minLineCount: count,\n } = ctxt;\n return count !== undefined;\n })\n ) {\n /**\n * @param {undefined|import('../iterateJsdoc.js').Integer} count\n */\n const underMinLine = (count) => {\n return count !== undefined && count >\n (sourceCode.getText(node).match(/\\n/gu)?.length ?? 0) + 1;\n };\n\n if (underMinLine(minLineCount)) {\n return;\n }\n\n const {\n minLineCount: contextMinLineCount,\n } =\n /**\n * @type {{\n * context: string;\n * inlineCommentBlock: boolean;\n * minLineCount: number;\n * }}\n */ (contexts.find((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n const {\n context: ctx,\n } = ctxt;\n return ctx === (info.selector || node.type);\n })) || {};\n if (underMinLine(contextMinLineCount)) {\n return;\n }\n }\n\n const jsDocNode = getJSDocComment(sourceCode, node, settings);\n\n if (jsDocNode) {\n return;\n }\n\n // For those who have options configured against ANY constructors (or\n // setters or getters) being reported\n if (jsdocUtils.exemptSpeciaMethods(\n {\n description: '',\n inlineTags: [],\n problems: [],\n source: [],\n tags: [],\n },\n node,\n context,\n [\n OPTIONS_SCHEMA,\n ],\n )) {\n return;\n }\n\n if (\n // Avoid reporting param-less, return-less functions (when\n // `exemptEmptyFunctions` option is set)\n exemptEmptyFunctions && info.isFunctionContext ||\n\n // Avoid reporting param-less, return-less constructor methods (when\n // `exemptEmptyConstructors` option is set)\n exemptEmptyConstructors && jsdocUtils.isConstructor(node)\n ) {\n const functionParameterNames = jsdocUtils.getFunctionParameterNames(node);\n if (!functionParameterNames.length && !jsdocUtils.hasReturnValue(node)) {\n return;\n }\n }\n\n const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n /** @type {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Decorator} */\n let baseNode = getReducedASTNode(node, sourceCode);\n\n const decorator = getDecorator(baseNode);\n if (decorator) {\n baseNode = decorator;\n }\n\n const indent = jsdocUtils.getIndent({\n text: sourceCode.getText(\n /** @type {import('eslint').Rule.Node} */ (baseNode),\n /** @type {import('eslint').AST.SourceLocation} */\n (\n /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n ).start.column,\n ),\n });\n\n const {\n inlineCommentBlock,\n } =\n /**\n * @type {{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * }}\n */ (contexts.find((contxt) => {\n if (typeof contxt === 'string') {\n return false;\n }\n\n const {\n context: ctxt,\n } = contxt;\n return ctxt === node.type;\n })) || {};\n const insertion = (inlineCommentBlock ?\n `/** ${fixerMessage}` :\n `/**\\n${indent}*${fixerMessage}\\n${indent}`) +\n `*/${'\\n'.repeat(lines)}${indent.slice(0, -1)}`;\n\n return fixer.insertTextBefore(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n insertion,\n );\n };\n\n const report = () => {\n const {\n start,\n } = /** @type {import('eslint').AST.SourceLocation} */ (node.loc);\n const loc = {\n end: {\n column: 0,\n line: start.line + 1,\n },\n start,\n };\n context.report({\n fix: enableFixer ? fix : null,\n loc,\n messageId: 'missingJsDoc',\n node,\n });\n };\n\n if (publicOnly) {\n /** @type {RequireJsdocOpts} */\n const opt = {\n ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n esm: Boolean(publicOnly?.esm ?? true),\n initModuleExports: Boolean(publicOnly?.cjs ?? true),\n initWindow: Boolean(publicOnly?.window ?? false),\n };\n const exported = exportParser.isUncommentedExport(node, sourceCode, opt, settings);\n\n if (exported) {\n report();\n }\n } else {\n report();\n }\n };\n /* eslint-enable complexity -- Temporary */\n\n /**\n * @param {string} prop\n * @returns {boolean}\n */\n const hasOption = (prop) => {\n return requireOption[prop] || contexts.some((ctxt) => {\n return typeof ctxt === 'object' ? ctxt.context === prop : ctxt === prop;\n });\n };\n\n return {\n ...jsdocUtils.getContextObject(\n jsdocUtils.enforcedContexts(context, [], settings),\n checkJsDoc,\n ),\n ArrowFunctionExpression (node) {\n if (!hasOption('ArrowFunctionExpression')) {\n return;\n }\n\n if (\n [\n 'VariableDeclarator', 'AssignmentExpression', 'ExportDefaultDeclaration',\n ].includes(node.parent.type) ||\n [\n 'Property', 'ObjectProperty', 'ClassProperty', 'PropertyDefinition',\n ].includes(node.parent.type) &&\n node ===\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.PropertyDefinition\n * }\n */\n (node.parent).value\n ) {\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n }\n },\n\n ClassDeclaration (node) {\n if (!hasOption('ClassDeclaration')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: false,\n }, null, node);\n },\n\n ClassExpression (node) {\n if (!hasOption('ClassExpression')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: false,\n }, null, node);\n },\n\n FunctionDeclaration (node) {\n if (!hasOption('FunctionDeclaration')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n },\n\n FunctionExpression (node) {\n if (!hasOption('FunctionExpression')) {\n return;\n }\n\n if (\n [\n 'VariableDeclarator', 'AssignmentExpression', 'ExportDefaultDeclaration',\n ].includes(node.parent.type) ||\n [\n 'Property', 'ObjectProperty', 'ClassProperty', 'PropertyDefinition',\n ].includes(node.parent.type) &&\n node ===\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.PropertyDefinition\n * }\n */\n (node.parent).value\n ) {\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n }\n },\n\n MethodDefinition (node) {\n if (!hasOption('MethodDefinition')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: true,\n selector: 'MethodDefinition',\n }, null, /** @type {import('eslint').Rule.Node} */ (node.value));\n },\n };\n },\n meta: {\n docs: {\n category: 'Stylistic Issues',\n description: 'Require JSDoc comments',\n recommended: true,\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-jsdoc.md#repos-sticky-header',\n },\n\n fixable: 'code',\n\n messages: {\n missingJsDoc: 'Missing JSDoc comment.',\n },\n\n schema: [\n OPTIONS_SCHEMA,\n ],\n\n type: 'suggestion',\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"requireJsdoc.js","names":["_exportParser","_interopRequireDefault","require","_iterateJsdoc","_jsdocUtils","_jsdoccomment","obj","__esModule","default","OPTIONS_SCHEMA","additionalProperties","properties","checkConstructors","type","checkGetters","anyOf","enum","checkSetters","contexts","items","context","inlineCommentBlock","minLineCount","enableFixer","exemptEmptyConstructors","exemptEmptyFunctions","fixerMessage","publicOnly","oneOf","ancestorsOnly","cjs","esm","window","ArrowFunctionExpression","ClassDeclaration","ClassExpression","FunctionDeclaration","FunctionExpression","MethodDefinition","getOption","baseObject","option","key","options","getOptions","settings","undefined","baseObj","prop","Object","keys","opt","_default","create","sourceCode","getSourceCode","getSettings","opts","requireOption","checkJsDoc","info","_handler","node","some","ctxt","count","underMinLine","_sourceCode$getText$m","getText","match","length","contextMinLineCount","find","ctx","selector","jsDocNode","getJSDocComment","jsdocUtils","exemptSpeciaMethods","description","inlineTags","problems","source","tags","isFunctionContext","isConstructor","functionParameterNames","getFunctionParameterNames","hasReturnValue","fix","fixer","lines","minLines","maxLines","baseNode","getReducedASTNode","decorator","getDecorator","indent","getIndent","text","loc","start","column","contxt","insertion","repeat","slice","insertTextBefore","report","end","line","messageId","Boolean","initModuleExports","initWindow","exported","exportParser","isUncommentedExport","hasOption","getContextObject","enforcedContexts","includes","parent","value","meta","docs","category","recommended","url","fixable","messages","missingJsDoc","schema","exports","module"],"sources":["../../src/rules/requireJsdoc.js"],"sourcesContent":["import exportParser from '../exportParser.js';\nimport {\n getSettings,\n} from '../iterateJsdoc.js';\nimport jsdocUtils from '../jsdocUtils.js';\nimport {\n getDecorator,\n getJSDocComment,\n getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/**\n * @typedef {{\n * ancestorsOnly: boolean,\n * esm: boolean,\n * initModuleExports: boolean,\n * initWindow: boolean\n * }} RequireJsdocOpts\n */\n\n/** @type {import('json-schema').JSONSchema4} */\nconst OPTIONS_SCHEMA = {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n enum: [\n 'no-setter',\n ],\n type: 'string',\n },\n ],\n default: true,\n },\n checkSetters: {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n enum: [\n 'no-getter',\n ],\n type: 'string',\n },\n ],\n default: true,\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n minLineCount: {\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n default: true,\n type: 'boolean',\n },\n exemptEmptyConstructors: {\n default: false,\n type: 'boolean',\n },\n exemptEmptyFunctions: {\n default: false,\n type: 'boolean',\n },\n fixerMessage: {\n default: '',\n type: 'string',\n },\n minLineCount: {\n type: 'integer',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n require: {\n additionalProperties: false,\n default: {},\n properties: {\n ArrowFunctionExpression: {\n default: false,\n type: 'boolean',\n },\n ClassDeclaration: {\n default: false,\n type: 'boolean',\n },\n ClassExpression: {\n default: false,\n type: 'boolean',\n },\n FunctionDeclaration: {\n default: true,\n type: 'boolean',\n },\n FunctionExpression: {\n default: false,\n type: 'boolean',\n },\n MethodDefinition: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('json-schema').JSONSchema4Object} baseObject\n * @param {string} option\n * @param {string} key\n * @returns {boolean|undefined}\n */\nconst getOption = (context, baseObject, option, key) => {\n if (context.options[0] && option in context.options[0] &&\n // Todo: boolean shouldn't be returning property, but\n // tests currently require\n (typeof context.options[0][option] === 'boolean' ||\n key in context.options[0][option])\n ) {\n return context.options[0][option][key];\n }\n\n return /** @type {{[key: string]: {default?: boolean|undefined}}} */ (\n baseObject.properties\n )[key].default;\n /* eslint-enable jsdoc/valid-types -- Old version */\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('../iterateJsdoc.js').Settings} settings\n * @returns {{\n * contexts: (string|{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * })[],\n * enableFixer: boolean,\n * exemptEmptyConstructors: boolean,\n * exemptEmptyFunctions: boolean,\n * fixerMessage: string,\n * minLineCount: undefined|import('../iterateJsdoc.js').Integer,\n * publicOnly: boolean|{[key: string]: boolean|undefined}\n * require: {[key: string]: boolean|undefined}\n * }}\n */\nconst getOptions = (context, settings) => {\n /* eslint-enable jsdoc/valid-types -- Old version */\n const {\n publicOnly,\n contexts = settings.contexts || [],\n exemptEmptyConstructors = true,\n exemptEmptyFunctions = false,\n enableFixer = true,\n fixerMessage = '',\n minLineCount = undefined,\n } = context.options[0] || {};\n\n return {\n contexts,\n enableFixer,\n exemptEmptyConstructors,\n exemptEmptyFunctions,\n fixerMessage,\n minLineCount,\n publicOnly: ((baseObj) => {\n if (!publicOnly) {\n return false;\n }\n\n /** @type {{[key: string]: boolean|undefined}} */\n const properties = {};\n /* eslint-enable jsdoc/valid-types -- Old version */\n for (const prop of Object.keys(\n /** @type {import('json-schema').JSONSchema4Object} */ (\n /** @type {import('json-schema').JSONSchema4Object} */ (\n baseObj\n ).properties),\n )) {\n const opt = getOption(\n context,\n /** @type {import('json-schema').JSONSchema4Object} */ (baseObj),\n 'publicOnly',\n prop,\n );\n\n properties[prop] = opt;\n }\n\n return properties;\n })(\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n OPTIONS_SCHEMA.properties\n ).publicOnly\n ).oneOf\n )[1],\n ),\n require: ((baseObj) => {\n /** @type {{[key: string]: boolean|undefined}} */\n const properties = {};\n /* eslint-enable jsdoc/valid-types -- Old version */\n for (const prop of Object.keys(\n /** @type {import('json-schema').JSONSchema4Object} */ (\n /** @type {import('json-schema').JSONSchema4Object} */ (\n baseObj\n ).properties),\n )) {\n const opt = getOption(\n context,\n /** @type {import('json-schema').JSONSchema4Object} */\n (baseObj),\n 'require',\n prop,\n );\n properties[prop] = opt;\n }\n\n return properties;\n })(\n /** @type {import('json-schema').JSONSchema4Object} */\n (OPTIONS_SCHEMA.properties).require,\n ),\n };\n};\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n create (context) {\n // istanbul ignore next -- Fallback to deprecated method\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const opts = getOptions(context, settings);\n\n const {\n require: requireOption,\n contexts,\n exemptEmptyFunctions,\n exemptEmptyConstructors,\n enableFixer,\n fixerMessage,\n minLineCount,\n } = opts;\n\n const publicOnly =\n\n /**\n * @type {{\n * [key: string]: boolean | undefined;\n * }}\n */ (\n opts.publicOnly\n );\n /* eslint-enable jsdoc/valid-types -- Old version */\n\n /**\n * @type {import('../iterateJsdoc.js').CheckJsdoc}\n */\n const checkJsDoc = (info, _handler, node) => {\n if (\n // Optimize\n minLineCount !== undefined || contexts.some((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n const {\n minLineCount: count,\n } = ctxt;\n return count !== undefined;\n })\n ) {\n /**\n * @param {undefined|import('../iterateJsdoc.js').Integer} count\n */\n const underMinLine = (count) => {\n return count !== undefined && count >\n (sourceCode.getText(node).match(/\\n/gu)?.length ?? 0) + 1;\n };\n\n if (underMinLine(minLineCount)) {\n return;\n }\n\n const {\n minLineCount: contextMinLineCount,\n } =\n /**\n * @type {{\n * context: string;\n * inlineCommentBlock: boolean;\n * minLineCount: number;\n * }}\n */ (contexts.find((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n const {\n context: ctx,\n } = ctxt;\n return ctx === (info.selector || node.type);\n })) || {};\n if (underMinLine(contextMinLineCount)) {\n return;\n }\n }\n\n const jsDocNode = getJSDocComment(sourceCode, node, settings);\n\n if (jsDocNode) {\n return;\n }\n\n // For those who have options configured against ANY constructors (or\n // setters or getters) being reported\n if (jsdocUtils.exemptSpeciaMethods(\n {\n description: '',\n inlineTags: [],\n problems: [],\n source: [],\n tags: [],\n },\n node,\n context,\n [\n OPTIONS_SCHEMA,\n ],\n )) {\n return;\n }\n\n if (\n // Avoid reporting param-less, return-less functions (when\n // `exemptEmptyFunctions` option is set)\n exemptEmptyFunctions && info.isFunctionContext ||\n\n // Avoid reporting param-less, return-less constructor methods (when\n // `exemptEmptyConstructors` option is set)\n exemptEmptyConstructors && jsdocUtils.isConstructor(node)\n ) {\n const functionParameterNames = jsdocUtils.getFunctionParameterNames(node);\n if (!functionParameterNames.length && !jsdocUtils.hasReturnValue(node)) {\n return;\n }\n }\n\n const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n /** @type {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Decorator} */\n let baseNode = getReducedASTNode(node, sourceCode);\n\n const decorator = getDecorator(baseNode);\n if (decorator) {\n baseNode = decorator;\n }\n\n const indent = jsdocUtils.getIndent({\n text: sourceCode.getText(\n /** @type {import('eslint').Rule.Node} */ (baseNode),\n /** @type {import('eslint').AST.SourceLocation} */\n (\n /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n ).start.column,\n ),\n });\n\n const {\n inlineCommentBlock,\n } =\n /**\n * @type {{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * }}\n */ (contexts.find((contxt) => {\n if (typeof contxt === 'string') {\n return false;\n }\n\n const {\n context: ctxt,\n } = contxt;\n return ctxt === node.type;\n })) || {};\n const insertion = (inlineCommentBlock ?\n `/** ${fixerMessage}` :\n `/**\\n${indent}*${fixerMessage}\\n${indent}`) +\n `*/${'\\n'.repeat(lines)}${indent.slice(0, -1)}`;\n\n return fixer.insertTextBefore(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n insertion,\n );\n };\n\n const report = () => {\n const {\n start,\n } = /** @type {import('eslint').AST.SourceLocation} */ (node.loc);\n const loc = {\n end: {\n column: 0,\n line: start.line + 1,\n },\n start,\n };\n context.report({\n fix: enableFixer ? fix : null,\n loc,\n messageId: 'missingJsDoc',\n node,\n });\n };\n\n if (publicOnly) {\n /** @type {RequireJsdocOpts} */\n const opt = {\n ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n esm: Boolean(publicOnly?.esm ?? true),\n initModuleExports: Boolean(publicOnly?.cjs ?? true),\n initWindow: Boolean(publicOnly?.window ?? false),\n };\n const exported = exportParser.isUncommentedExport(node, sourceCode, opt, settings);\n\n if (exported) {\n report();\n }\n } else {\n report();\n }\n };\n /* eslint-enable complexity -- Temporary */\n\n /**\n * @param {string} prop\n * @returns {boolean}\n */\n const hasOption = (prop) => {\n return requireOption[prop] || contexts.some((ctxt) => {\n return typeof ctxt === 'object' ? ctxt.context === prop : ctxt === prop;\n });\n };\n\n return {\n ...jsdocUtils.getContextObject(\n jsdocUtils.enforcedContexts(context, [], settings),\n checkJsDoc,\n ),\n ArrowFunctionExpression (node) {\n if (!hasOption('ArrowFunctionExpression')) {\n return;\n }\n\n if (\n [\n 'VariableDeclarator', 'AssignmentExpression', 'ExportDefaultDeclaration',\n ].includes(node.parent.type) ||\n [\n 'Property', 'ObjectProperty', 'ClassProperty', 'PropertyDefinition',\n ].includes(node.parent.type) &&\n node ===\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.PropertyDefinition\n * }\n */\n (node.parent).value\n ) {\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n }\n },\n\n ClassDeclaration (node) {\n if (!hasOption('ClassDeclaration')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: false,\n }, null, node);\n },\n\n ClassExpression (node) {\n if (!hasOption('ClassExpression')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: false,\n }, null, node);\n },\n\n FunctionDeclaration (node) {\n if (!hasOption('FunctionDeclaration')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n },\n\n FunctionExpression (node) {\n if (!hasOption('FunctionExpression')) {\n return;\n }\n\n if (\n [\n 'VariableDeclarator', 'AssignmentExpression', 'ExportDefaultDeclaration',\n ].includes(node.parent.type) ||\n [\n 'Property', 'ObjectProperty', 'ClassProperty', 'PropertyDefinition',\n ].includes(node.parent.type) &&\n node ===\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.PropertyDefinition\n * }\n */\n (node.parent).value\n ) {\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n }\n },\n\n MethodDefinition (node) {\n if (!hasOption('MethodDefinition')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: true,\n selector: 'MethodDefinition',\n }, null, /** @type {import('eslint').Rule.Node} */ (node.value));\n },\n };\n },\n meta: {\n docs: {\n category: 'Stylistic Issues',\n description: 'Require JSDoc comments',\n recommended: true,\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-jsdoc.md#repos-sticky-header',\n },\n\n fixable: 'code',\n\n messages: {\n missingJsDoc: 'Missing JSDoc comment.',\n },\n\n schema: [\n OPTIONS_SCHEMA,\n ],\n\n type: 'suggestion',\n },\n};\n"],"mappings":"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"}
@@ -94,8 +94,9 @@ var _default = (0, _iterateJsdoc.default)(({
94
94
  initModuleExports: Boolean((publicOnly === null || publicOnly === void 0 ? void 0 : publicOnly.cjs) ?? true),
95
95
  initWindow: Boolean((publicOnly === null || publicOnly === void 0 ? void 0 : publicOnly.window) ?? false)
96
96
  };
97
+ // istanbul ignore next -- Fallback to deprecated method
97
98
  const {
98
- sourceCode
99
+ sourceCode = context.getSourceCode()
99
100
  } = context;
100
101
  const exported = _exportParser.default.isUncommentedExport( /** @type {import('eslint').Rule.Node} */node, sourceCode, opt, settings);
101
102
  if (!exported) {
@@ -1 +1 @@
1
- {"version":3,"file":"requireReturns.js","names":["_exportParser","_interopRequireDefault","require","_iterateJsdoc","obj","__esModule","default","canSkip","utils","hasATag","avoidDocs","_default","iterateJsdoc","info","comment","node","report","settings","context","contexts","enableFixer","forceRequireReturn","forceReturnsWithAsync","publicOnly","options","forceRequireReturnContext","foundContext","findContext","tagName","getPreferredTagName","tags","getTags","length","iteratingFunction","isIteratingFunction","tag","missingReturnTag","shouldReport","opt","ancestorsOnly","Boolean","esm","initModuleExports","cjs","initWindow","window","sourceCode","exported","exportParser","isUncommentedExport","isVirtualFunction","isAsync","hasTag","hasValueOrExecutorHasNonEmptyResolveValue","reportJSDoc","addTag","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","properties","checkConstructors","type","checkGetters","items","anyOf","exemptedBy","oneOf","exports","module"],"sources":["../../src/rules/requireReturns.js"],"sourcesContent":["import exportParser from '../exportParser.js';\nimport iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * We can skip checking for a return value, in case the documentation is inherited\n * or the method is either a constructor or an abstract method.\n *\n * In either of these cases the return value is optional or not defined.\n * @param {import('../iterateJsdoc.js').Utils} utils\n * a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean}\n * true in case deep checking can be skipped; otherwise false.\n */\nconst canSkip = (utils) => {\n return utils.hasATag([\n // inheritdoc implies that all documentation is inherited\n // see https://jsdoc.app/tags-inheritdoc.html\n //\n // Abstract methods are by definition incomplete,\n // so it is not an error if it declares a return value but does not implement it.\n 'abstract',\n 'virtual',\n\n // Constructors do not have a return value by definition (https://jsdoc.app/tags-class.html)\n // So we can bail out here, too.\n 'class',\n 'constructor',\n\n // Return type is specified by type in @type\n 'type',\n\n // This seems to imply a class as well\n 'interface',\n ]) ||\n utils.avoidDocs();\n};\n\nexport default iterateJsdoc(({\n info: {\n comment,\n },\n node,\n report,\n settings,\n utils,\n context,\n}) => {\n const {\n contexts,\n enableFixer = false,\n forceRequireReturn = false,\n forceReturnsWithAsync = false,\n publicOnly = false,\n } = context.options[0] || {};\n\n // A preflight check. We do not need to run a deep check\n // in case the @returns comment is optional or undefined.\n if (canSkip(utils)) {\n return;\n }\n\n /** @type {boolean|undefined} */\n let forceRequireReturnContext;\n if (contexts) {\n const {\n foundContext,\n } = utils.findContext(contexts, comment);\n if (typeof foundContext === 'object') {\n forceRequireReturnContext = foundContext.forceRequireReturn;\n }\n }\n\n const tagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'returns',\n }));\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n }\n\n const iteratingFunction = utils.isIteratingFunction();\n\n // In case the code returns something, we expect a return value in JSDoc.\n const [\n tag,\n ] = tags;\n const missingReturnTag = typeof tag === 'undefined' || tag === null;\n\n const shouldReport = () => {\n if (!missingReturnTag) {\n return false;\n }\n\n if (publicOnly) {\n /** @type {import('./requireJsdoc.js').RequireJsdocOpts} */\n const opt = {\n ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n esm: Boolean(publicOnly?.esm ?? true),\n initModuleExports: Boolean(publicOnly?.cjs ?? true),\n initWindow: Boolean(publicOnly?.window ?? false),\n };\n const {\n sourceCode,\n } = context;\n const exported = exportParser.isUncommentedExport(\n /** @type {import('eslint').Rule.Node} */ (node), sourceCode, opt, settings,\n );\n\n if (!exported) {\n return false;\n }\n }\n\n if ((forceRequireReturn || forceRequireReturnContext) && (\n iteratingFunction || utils.isVirtualFunction()\n )) {\n return true;\n }\n\n const isAsync = !iteratingFunction && utils.hasTag('async') ||\n iteratingFunction && utils.isAsync();\n\n if (forceReturnsWithAsync && isAsync) {\n return true;\n }\n\n return iteratingFunction && utils.hasValueOrExecutorHasNonEmptyResolveValue(\n forceReturnsWithAsync,\n );\n };\n\n if (shouldReport()) {\n utils.reportJSDoc(`Missing JSDoc @${tagName} declaration.`, null, enableFixer ? () => {\n utils.addTag(tagName);\n } : null);\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that returns are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-returns.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: false,\n type: 'boolean',\n },\n checkGetters: {\n default: true,\n type: 'boolean',\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n forceRequireReturn: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n type: 'boolean',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n forceRequireReturn: {\n default: false,\n type: 'boolean',\n },\n forceReturnsWithAsync: {\n default: false,\n type: 'boolean',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"requireReturns.js","names":["_exportParser","_interopRequireDefault","require","_iterateJsdoc","obj","__esModule","default","canSkip","utils","hasATag","avoidDocs","_default","iterateJsdoc","info","comment","node","report","settings","context","contexts","enableFixer","forceRequireReturn","forceReturnsWithAsync","publicOnly","options","forceRequireReturnContext","foundContext","findContext","tagName","getPreferredTagName","tags","getTags","length","iteratingFunction","isIteratingFunction","tag","missingReturnTag","shouldReport","opt","ancestorsOnly","Boolean","esm","initModuleExports","cjs","initWindow","window","sourceCode","getSourceCode","exported","exportParser","isUncommentedExport","isVirtualFunction","isAsync","hasTag","hasValueOrExecutorHasNonEmptyResolveValue","reportJSDoc","addTag","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","properties","checkConstructors","type","checkGetters","items","anyOf","exemptedBy","oneOf","exports","module"],"sources":["../../src/rules/requireReturns.js"],"sourcesContent":["import exportParser from '../exportParser.js';\nimport iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * We can skip checking for a return value, in case the documentation is inherited\n * or the method is either a constructor or an abstract method.\n *\n * In either of these cases the return value is optional or not defined.\n * @param {import('../iterateJsdoc.js').Utils} utils\n * a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean}\n * true in case deep checking can be skipped; otherwise false.\n */\nconst canSkip = (utils) => {\n return utils.hasATag([\n // inheritdoc implies that all documentation is inherited\n // see https://jsdoc.app/tags-inheritdoc.html\n //\n // Abstract methods are by definition incomplete,\n // so it is not an error if it declares a return value but does not implement it.\n 'abstract',\n 'virtual',\n\n // Constructors do not have a return value by definition (https://jsdoc.app/tags-class.html)\n // So we can bail out here, too.\n 'class',\n 'constructor',\n\n // Return type is specified by type in @type\n 'type',\n\n // This seems to imply a class as well\n 'interface',\n ]) ||\n utils.avoidDocs();\n};\n\nexport default iterateJsdoc(({\n info: {\n comment,\n },\n node,\n report,\n settings,\n utils,\n context,\n}) => {\n const {\n contexts,\n enableFixer = false,\n forceRequireReturn = false,\n forceReturnsWithAsync = false,\n publicOnly = false,\n } = context.options[0] || {};\n\n // A preflight check. We do not need to run a deep check\n // in case the @returns comment is optional or undefined.\n if (canSkip(utils)) {\n return;\n }\n\n /** @type {boolean|undefined} */\n let forceRequireReturnContext;\n if (contexts) {\n const {\n foundContext,\n } = utils.findContext(contexts, comment);\n if (typeof foundContext === 'object') {\n forceRequireReturnContext = foundContext.forceRequireReturn;\n }\n }\n\n const tagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'returns',\n }));\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n }\n\n const iteratingFunction = utils.isIteratingFunction();\n\n // In case the code returns something, we expect a return value in JSDoc.\n const [\n tag,\n ] = tags;\n const missingReturnTag = typeof tag === 'undefined' || tag === null;\n\n const shouldReport = () => {\n if (!missingReturnTag) {\n return false;\n }\n\n if (publicOnly) {\n /** @type {import('./requireJsdoc.js').RequireJsdocOpts} */\n const opt = {\n ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n esm: Boolean(publicOnly?.esm ?? true),\n initModuleExports: Boolean(publicOnly?.cjs ?? true),\n initWindow: Boolean(publicOnly?.window ?? false),\n };\n // istanbul ignore next -- Fallback to deprecated method\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const exported = exportParser.isUncommentedExport(\n /** @type {import('eslint').Rule.Node} */ (node), sourceCode, opt, settings,\n );\n\n if (!exported) {\n return false;\n }\n }\n\n if ((forceRequireReturn || forceRequireReturnContext) && (\n iteratingFunction || utils.isVirtualFunction()\n )) {\n return true;\n }\n\n const isAsync = !iteratingFunction && utils.hasTag('async') ||\n iteratingFunction && utils.isAsync();\n\n if (forceReturnsWithAsync && isAsync) {\n return true;\n }\n\n return iteratingFunction && utils.hasValueOrExecutorHasNonEmptyResolveValue(\n forceReturnsWithAsync,\n );\n };\n\n if (shouldReport()) {\n utils.reportJSDoc(`Missing JSDoc @${tagName} declaration.`, null, enableFixer ? () => {\n utils.addTag(tagName);\n } : null);\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that returns are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-returns.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: false,\n type: 'boolean',\n },\n checkGetters: {\n default: true,\n type: 'boolean',\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n forceRequireReturn: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n type: 'boolean',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n forceRequireReturn: {\n default: false,\n type: 'boolean',\n },\n forceReturnsWithAsync: {\n default: false,\n type: 'boolean',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -140,5 +140,5 @@
140
140
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
141
141
  "test-index": "npm run test-no-cov -- test/rules/index.js"
142
142
  },
143
- "version": "46.8.0"
143
+ "version": "46.8.2"
144
144
  }