eslint-plugin-jsdoc 62.9.0 → 63.0.0

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.
@@ -116,7 +116,7 @@ export type HasATag = (names: string[]) => boolean;
116
116
  export type HasTag = (name: string) => boolean;
117
117
  export type ComparePaths = (name: string) => (otherPathName: string) => boolean;
118
118
  export type DropPathSegmentQuotes = (name: string) => string;
119
- export type AvoidDocs = () => boolean;
119
+ export type AvoidDocs = (exemptSpecialMethods?: boolean | undefined) => boolean;
120
120
  export type TagMightHaveNamePositionTypePosition = (tagName: string, otherModeMaps?: import("./getDefaultTagStructureForMode.js").TagStructure[] | undefined) => boolean | {
121
121
  otherMode: true;
122
122
  };
@@ -226,7 +226,7 @@ const getSymbol = function (node, globals, scope, opt) {
226
226
  prop.value, globals, scope, opts);
227
227
  /* c8 ignore next 8 */
228
228
  if (propVal) {
229
- val.props[/** @type {import('estree').PrivateIdentifier} */
229
+ val.props[/** @type {import('estree').Identifier} */
230
230
  (/** @type {import('estree').Property} */prop.key).name] = propVal;
231
231
  }
232
232
  }
@@ -1 +1 @@
1
- {"version":3,"file":"exportParser.cjs","names":["_jsdoccomment","require","_debug","_interopRequireDefault","e","__esModule","default","debug","debugModule","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","val","prototype","left","right","method","body","key","parent","obj","object","propertySymbol","property","computed","propertyValue","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","nde","id","valueSymbol","initVariables","declaration","expression","childNode","declarations","initWindow","kind","mapVariables","isExport","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","ancestorsOnly","Boolean","init","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","ignorableNestedTypes","getExportAncestor","idx","ignorableIfDeep","has","canBeExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","pval","isNodeExported","moduleExports","module","exports","initModuleExports","esm","parseRecursive","globalVars","parse","ast","accessibilityNodes","isPrivate","accessibility","undefined","isUncommentedExport","sourceCode","settings","exportNode","findJSDocComment","parseResult","_default"],"sources":["../src/exportParser.js"],"sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\n/**\n * @typedef {{\n * value: string\n * }} ValueObject\n */\n\n/**\n * @typedef {{\n * type?: string,\n * value?: ValueObject|import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node,\n * props: {\n * [key: string]: CreatedNode|null,\n * },\n * special?: true,\n * globalVars?: CreatedNode,\n * exported?: boolean,\n * ANONYMOUS_DEFAULT?: import('eslint').Rule.Node\n * }} CreatedNode\n */\n\n/**\n * @returns {CreatedNode}\n */\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\n/**\n * @param {CreatedNode|null} symbol\n * @returns {string|null}\n */\nconst getSymbolValue = function (symbol) {\n /* c8 ignore next 3 */\n if (!symbol) {\n return null;\n }\n\n /* c8 ignore else */\n if (symbol.type === 'literal') {\n return /** @type {ValueObject} */ (symbol.value).value;\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return null;\n};\n\n/**\n *\n * @param {import('estree').Identifier} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} opts\n * @returns {CreatedNode|null}\n */\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {\n value: node.name,\n };\n\n return identifierLiteral;\n }\n\n /* c8 ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* c8 ignore next 3 */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\n/**\n * @callback CreateSymbol\n * @param {import('eslint').Rule.Node|null} node\n * @param {CreatedNode} globals\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null} value\n * @param {CreatedNode} [scope]\n * @param {boolean|SymbolOptions} [isGlobal]\n * @returns {CreatedNode|null}\n */\n\n/** @type {CreateSymbol} */\nlet createSymbol; // eslint-disable-line prefer-const\n\n/**\n * @typedef {{\n * simpleIdentifier?: boolean\n * }} SymbolOptions\n */\n\n/**\n *\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} [opt]\n * @returns {CreatedNode|null}\n */\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* c8 ignore next */\n switch (node.type) {\n /* c8 ignore next 4 -- No longer needed? */\n case 'ArrowFunctionExpression':\n\n // Fallthrough\n case 'ClassDeclaration':\n\n case 'FunctionDeclaration':\n\n case 'FunctionExpression':\n case 'TSEnumDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n scope,\n opts,\n );\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n // StaticBlock\n if (!('key' in method)) {\n continue;\n }\n\n val.props[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ] = createNode();\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].type = 'object';\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].value = /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').MethodDefinition} */ (method).value\n );\n }\n\n val.type = 'object';\n val.value = node.parent;\n\n return val;\n }\n\n case 'ClassExpression': {\n return getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.body),\n globals,\n scope,\n opts,\n );\n }\n\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.object),\n globals,\n scope,\n opts,\n );\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.property),\n globals,\n scope,\n {\n simpleIdentifier: !node.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* c8 ignore else */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n /* c8 ignore next 11 */\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n debug(`MemberExpression: Missing property ${\n /** @type {import('estree').PrivateIdentifier} */ (node.property).name\n }`);\n /* c8 ignore next 2 */\n return null;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n\n // typescript-eslint, espree, acorn, etc.\n 'SpreadElement',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').Property} */\n (prop).value\n ),\n globals,\n scope,\n opts,\n );\n /* c8 ignore next 8 */\n if (propVal) {\n val.props[\n /** @type {import('estree').PrivateIdentifier} */\n (\n /** @type {import('estree').Property} */ (prop).key\n ).name\n ] = propVal;\n }\n }\n\n return val;\n }\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return null;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {string} name\n * @param {CreatedNode|null} value\n * @param {CreatedNode} globals\n * @param {boolean|SymbolOptions|undefined} isGlobal\n * @returns {void}\n */\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n /* c8 ignore next 3 */\n if (!node) {\n return null;\n }\n\n let symbol;\n switch (node.type) {\n case 'ClassDeclaration':\n /* c8 ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'FunctionDeclaration': case 'TSEnumDeclaration':\n /* c8 ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'TSInterfaceDeclaration': case 'TSTypeAliasDeclaration': {\n const nde = /** @type {import('estree').ClassDeclaration} */ (node);\n /* c8 ignore else */\n if (nde.id && nde.id.type === 'Identifier') {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.id),\n globals,\n node,\n globals,\n );\n }\n /* c8 ignore next 3 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n break;\n }\n\n case 'Identifier': {\n const nde = /** @type {import('estree').Identifier} */ (node);\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* c8 ignore else */\n if (valueSymbol) {\n createBlockSymbol(block, nde.name, valueSymbol, globals, isGlobal);\n\n return block.props[nde.name];\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n debug('Identifier: Missing value symbol for %s', nde.name);\n } else {\n createBlockSymbol(block, nde.name, createNode(), globals, isGlobal);\n\n return block.props[nde.name];\n }\n /* c8 ignore next 3 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n break;\n }\n\n case 'MemberExpression': {\n const nde = /** @type {import('estree').MemberExpression} */ (node);\n symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.object), globals, block,\n );\n\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.property),\n globals,\n block,\n {\n simpleIdentifier: !nde.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (value), globals, block,\n ), globals, isGlobal);\n return symbol.props[propertyValue];\n }\n\n debug(\n 'MemberExpression: Missing symbol: %s',\n /** @type {import('estree').Identifier} */ (\n nde.property\n ).name,\n );\n break;\n }\n }\n\n return null;\n};\n\n/**\n * Creates variables from variable definitions\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {void}\n */\nconst initVariables = function (node, globals, opts) {\n switch (node.type) {\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n null,\n globals,\n );\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[\n /** @type {import('estree').Identifier} */\n (declaration.id).name\n ] = symbol;\n }\n }\n\n break;\n }\n }\n};\n\n/**\n * Populates variable maps using AST\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {true} [isExport]\n * @returns {boolean}\n */\nconst mapVariables = function (node, globals, opt, isExport) {\n /* c8 ignore next */\n const opts = opt || {};\n /* c8 ignore next */\n switch (node.type) {\n case 'AssignmentExpression': {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n );\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(\n /** @type {import('eslint').Rule.Node|null} */ (node.id),\n globals,\n /** @type {import('eslint').Rule.Node} */ (node.body),\n globals,\n );\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n if (symbol) {\n symbol.exported = true;\n /* c8 ignore next 6 */\n } else {\n // if (!node.id) {\n globals.ANONYMOUS_DEFAULT = /** @type {import('eslint').Rule.Node} */ (\n node.declaration\n );\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n true,\n );\n } else {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n /* c8 ignore next 3 */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (specifier),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.local),\n globals,\n globals,\n );\n /* c8 ignore next 3 */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'FunctionDeclaration':\n\n case 'TSTypeAliasDeclaration': {\n /* c8 ignore next 10 */\n if (/** @type {import('estree').Identifier} */ (node.id).type === 'Identifier') {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.id),\n globals,\n node,\n globals,\n true,\n );\n }\n\n break;\n }\n\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = Boolean(opts.initWindow && node.kind === 'var' && globals.props.window);\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (declaration.init),\n globals,\n isGlobal,\n );\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n default: {\n /* c8 ignore next */\n return false;\n }\n }\n\n return true;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode|ValueObject|string|undefined|\n * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} block\n * @param {(CreatedNode|ValueObject|string|\n * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node)[]} [cache]\n * @returns {boolean}\n */\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n typeof block === 'object' &&\n 'type' in block &&\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n if (typeof block !== 'object') {\n return false;\n }\n\n const props = ('props' in block && block.props) || ('body' in block && block.body);\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* c8 ignore next 5 */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set([\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n]);\nconst ignorableNestedTypes = new Set([\n 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {import('eslint').Rule.Node|false}\n */\nconst getExportAncestor = function (nde) {\n /** @type {import('eslint').Rule.Node|null} */\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canBeExportedByAncestorType = new Set([\n 'ClassProperty',\n 'Method',\n 'PropertyDefinition',\n 'TSMethodSignature',\n 'TSPropertySignature',\n]);\n\nconst canExportChildrenType = new Set([\n 'ClassBody',\n 'ClassDeclaration',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'TSTypeAliasDeclaration',\n 'TSTypeLiteral',\n 'TSTypeParameterInstantiation',\n 'TSTypeReference',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {false|import('eslint').Rule.Node}\n */\nconst isExportByAncestor = function (nde) {\n if (!canBeExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode[]} [cache] Currently unused\n * @returns {boolean}\n */\nconst findExportedNode = function (block, node, cache) {\n /* c8 ignore next 3 */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {\n props,\n } = block;\n for (const propval of Object.values(props)) {\n const pval = /** @type {CreatedNode} */ (propval);\n blockCache.push(pval);\n if (pval.exported && (node === pval.value || findNode(node, pval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {boolean}\n */\nconst isNodeExported = function (node, globals, opt) {\n const moduleExports = globals.props.module?.props?.exports;\n if (\n opt.initModuleExports && moduleExports && findNode(node, moduleExports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globalVars\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {boolean}\n */\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} ast\n * @param {import('eslint').Rule.Node} node\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {CreatedNode}\n */\nconst parse = function (ast, node, opt) {\n /* c8 ignore next 6 */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n props: {},\n };\n};\n\nconst accessibilityNodes = new Set([\n 'MethodDefinition',\n 'PropertyDefinition',\n]);\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @returns {boolean}\n */\nconst isPrivate = (node) => {\n return accessibilityNodes.has(node.type) &&\n (\n 'accessibility' in node &&\n node.accessibility !== 'public' && node.accessibility !== undefined\n ) ||\n 'key' in node &&\n node.key.type === 'PrivateIdentifier';\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {import('./iterateJsdoc.js').Settings} settings\n * @returns {boolean}\n */\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n if (isPrivate(node) ||\n node.parent && isPrivate(node.parent)) {\n return false;\n }\n\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const ast = /** @type {unknown} */ (sourceCode.ast);\n\n const parseResult = parse(\n /** @type {import('eslint').Rule.Node} */\n (ast),\n node,\n opt,\n );\n\n return isNodeExported(\n node, /** @type {CreatedNode} */ (parseResult.globalVars), opt,\n );\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAGA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAgC,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEhC,MAAMG,KAAK,GAAG,IAAAC,cAAW,EAAC,oBAAoB,CAAC;;AAE/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAMC,UAAU,GAAG,SAAAA,CAAA,EAAY;EAC7B,OAAO;IACLC,KAAK,EAAE,CAAC;EACV,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMC,cAAc,GAAG,SAAAA,CAAUC,MAAM,EAAE;EACvC;EACA,IAAI,CAACA,MAAM,EAAE;IACX,OAAO,IAAI;EACb;;EAEA;EACA,IAAIA,MAAM,CAACC,IAAI,KAAK,SAAS,EAAE;IAC7B,OAAO,0BAA4BD,MAAM,CAACE,KAAK,CAAEA,KAAK;EACxD;EACA;EACA;EACA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,aAAa,GAAG,SAAAA,CAAUC,IAAI,EAAEC,OAAO,EAAEC,KAAK,EAAEC,IAAI,EAAE;EAC1D,IAAIA,IAAI,CAACC,gBAAgB,EAAE;IACzB;IACA,MAAMC,iBAAiB,GAAGZ,UAAU,CAAC,CAAC;IACtCY,iBAAiB,CAACR,IAAI,GAAG,SAAS;IAClCQ,iBAAiB,CAACP,KAAK,GAAG;MACxBA,KAAK,EAAEE,IAAI,CAACM;IACd,CAAC;IAED,OAAOD,iBAAiB;EAC1B;;EAEA;EACA,MAAME,KAAK,GAAGL,KAAK,IAAID,OAAO;;EAE9B;EACA,IAAIM,KAAK,CAACb,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC,EAAE;IAC1B,OAAOC,KAAK,CAACb,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC;EAC/B;;EAEA;EACA;EACA,IAAIL,OAAO,CAACP,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC,EAAE;IAC5B,OAAOL,OAAO,CAACP,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC;EACjC;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAIE,YAAY,CAAC,CAAC;;AAElB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,SAAS,GAAG,SAAAA,CAAUT,IAAI,EAAEC,OAAO,EAAEC,KAAK,EAAEQ,GAAG,EAAE;EACrD,MAAMP,IAAI,GAAGO,GAAG,IAAI,CAAC,CAAC;EACtB;EACA,QAAQV,IAAI,CAACH,IAAI;IACf;IACA,KAAK,yBAAyB;;IAE9B;IACA,KAAK,kBAAkB;IAEvB,KAAK,qBAAqB;IAE1B,KAAK,oBAAoB;IACzB,KAAK,mBAAmB;IACxB,KAAK,wBAAwB;IAC7B,KAAK,wBAAwB;MAAE;QAC7B,MAAMc,GAAG,GAAGlB,UAAU,CAAC,CAAC;QACxBkB,GAAG,CAACjB,KAAK,CAACkB,SAAS,GAAGnB,UAAU,CAAC,CAAC;QAClCkB,GAAG,CAACjB,KAAK,CAACkB,SAAS,CAACf,IAAI,GAAG,QAAQ;QACnCc,GAAG,CAACd,IAAI,GAAG,QAAQ;QACnBc,GAAG,CAACb,KAAK,GAAGE,IAAI;QAEhB,OAAOW,GAAG;MACZ;IAEA,KAAK,sBAAsB;MAAE;QAC3B,OAAOH,YAAY,CACnB;QACGR,IAAI,CAACa,IAAI,EACVZ,OAAO,EACP;QACCD,IAAI,CAACc,KAAK,EACXZ,KAAK,EACLC,IACF,CAAC;MACH;IAEA,KAAK,WAAW;MAAE;QAChB,MAAMQ,GAAG,GAAGlB,UAAU,CAAC,CAAC;QACxB,KAAK,MAAMsB,MAAM,IAAIf,IAAI,CAACgB,IAAI,EAAE;UAC9B;UACA,IAAI,EAAE,KAAK,IAAID,MAAM,CAAC,EAAE;YACtB;UACF;UAEAJ,GAAG,CAACjB,KAAK,CACT,0CAA2C,CACzC,gDACIqB,MAAM,CACNE,GAAG,EACLX,IAAI,CACP,GAAGb,UAAU,CAAC,CAAC;UAChB;UAA6CkB,GAAG,CAACjB,KAAK,CACtD,0CAA2C,CACzC,gDACIqB,MAAM,CACNE,GAAG,EACLX,IAAI,CACP,CAACT,IAAI,GAAG,QAAQ;UACjB;UAA6Cc,GAAG,CAACjB,KAAK,CACtD,0CAA2C,CACzC,gDACIqB,MAAM,CACNE,GAAG,EACLX,IAAI,CACP,CAACR,KAAK,GAAG;UACV,gDAAkDiB,MAAM,CAAEjB,KACzD;QACH;QAEAa,GAAG,CAACd,IAAI,GAAG,QAAQ;QACnBc,GAAG,CAACb,KAAK,GAAGE,IAAI,CAACkB,MAAM;QAEvB,OAAOP,GAAG;MACZ;IAEA,KAAK,iBAAiB;MAAE;QACtB,OAAOF,SAAS,CAChB;QACGT,IAAI,CAACgB,IAAI,EACVf,OAAO,EACPC,KAAK,EACLC,IACF,CAAC;MACH;IAEA,KAAK,YAAY;MAAE;QACjB,OAAOJ,aAAa,CAACC,IAAI,EAAEC,OAAO,EAAEC,KAAK,EAAEC,IAAI,CAAC;MAClD;IAEA,KAAK,SAAS;MAAE;QACd,MAAMQ,GAAG,GAAGlB,UAAU,CAAC,CAAC;QACxBkB,GAAG,CAACd,IAAI,GAAG,SAAS;QACpBc,GAAG,CAACb,KAAK,GAAGE,IAAI;QAEhB,OAAOW,GAAG;MACZ;IAEA,KAAK,kBAAkB;MAAE;QACvB,MAAMQ,GAAG,GAAGV,SAAS,CACrB;QACGT,IAAI,CAACoB,MAAM,EACZnB,OAAO,EACPC,KAAK,EACLC,IACF,CAAC;QACD,MAAMkB,cAAc,GAAGZ,SAAS,CAChC;QACGT,IAAI,CAACsB,QAAQ,EACdrB,OAAO,EACPC,KAAK,EACL;UACEE,gBAAgB,EAAE,CAACJ,IAAI,CAACuB;QAC1B,CACF,CAAC;QACD,MAAMC,aAAa,GAAG7B,cAAc,CAAC0B,cAAc,CAAC;;QAEpD;QACA,IAAIF,GAAG,IAAIK,aAAa,IAAIL,GAAG,CAACzB,KAAK,CAAC8B,aAAa,CAAC,EAAE;UACpD,MAAMjB,KAAK,GAAGY,GAAG,CAACzB,KAAK,CAAC8B,aAAa,CAAC;UAEtC,OAAOjB,KAAK;QACd;QACA;QACA;AACN;AACA;AACA;AACA;AACA;QAEM;QACAhB,KAAK,CAAC,uCACN,iDAAmDS,IAAI,CAACsB,QAAQ,CAAEhB,IAAI,EACpE,CAAC;QACH;QACA,OAAO,IAAI;MACb;IAEA,KAAK,kBAAkB;MAAE;QACvB,MAAMK,GAAG,GAAGlB,UAAU,CAAC,CAAC;QACxBkB,GAAG,CAACd,IAAI,GAAG,QAAQ;QACnB,KAAK,MAAM4B,IAAI,IAAIzB,IAAI,CAAC0B,UAAU,EAAE;UAClC,IAAI;UACJ;UACE,4BAA4B;UAE5B;UACA,eAAe,CAChB,CAACC,QAAQ,CAACF,IAAI,CAAC5B,IAAI,CAAC,EAAE;YACrB;UACF;UAEA,MAAM+B,OAAO,GAAGnB,SAAS,CACzB;UACE;UACGgB,IAAI,CAAE3B,KAAK,EAEdG,OAAO,EACPC,KAAK,EACLC,IACF,CAAC;UACD;UACA,IAAIyB,OAAO,EAAE;YACXjB,GAAG,CAACjB,KAAK,CACT;YACE,CACA,wCAA0C+B,IAAI,CAAER,GAAG,EACjDX,IAAI,CACP,GAAGsB,OAAO;UACb;QACF;QAEA,OAAOjB,GAAG;MACZ;EACF;EACA;EACA;EACA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMkB,iBAAiB,GAAG,SAAAA,CAAUtB,KAAK,EAAED,IAAI,EAAER,KAAK,EAAEG,OAAO,EAAE6B,QAAQ,EAAE;EACzEvB,KAAK,CAACb,KAAK,CAACY,IAAI,CAAC,GAAGR,KAAK;EACzB,IAAIgC,QAAQ,IAAI7B,OAAO,CAACP,KAAK,CAACqC,MAAM,IAAI9B,OAAO,CAACP,KAAK,CAACqC,MAAM,CAACC,OAAO,EAAE;IACpE/B,OAAO,CAACP,KAAK,CAACqC,MAAM,CAACrC,KAAK,CAACY,IAAI,CAAC,GAAGR,KAAK;EAC1C;AACF,CAAC;AAEDU,YAAY,GAAG,SAAAA,CAAUR,IAAI,EAAEC,OAAO,EAAEH,KAAK,EAAEI,KAAK,EAAE4B,QAAQ,EAAE;EAC9D,MAAMvB,KAAK,GAAGL,KAAK,IAAID,OAAO;EAC9B;EACA,IAAI,CAACD,IAAI,EAAE;IACT,OAAO,IAAI;EACb;EAEA,IAAIJ,MAAM;EACV,QAAQI,IAAI,CAACH,IAAI;IACf,KAAK,kBAAkB;IACrB;IACA;IACA;IACF,KAAK,qBAAqB;IAAE,KAAK,mBAAmB;IAClD;IACA;IACA;IACF,KAAK,wBAAwB;IAAE,KAAK,wBAAwB;MAAE;QAC5D,MAAMoC,GAAG,GAAG,gDAAkDjC,IAAK;QACnE;QACA,IAAIiC,GAAG,CAACC,EAAE,IAAID,GAAG,CAACC,EAAE,CAACrC,IAAI,KAAK,YAAY,EAAE;UAC1C,OAAOW,YAAY,CACnB,yCAA2CyB,GAAG,CAACC,EAAE,EAC/CjC,OAAO,EACPD,IAAI,EACJC,OACF,CAAC;QACH;QACA;QACA;QACA;MACF;IAEA,KAAK,YAAY;MAAE;QACjB,MAAMgC,GAAG,GAAG,0CAA4CjC,IAAK;QAC7D,IAAIF,KAAK,EAAE;UACT,MAAMqC,WAAW,GAAG1B,SAAS,CAACX,KAAK,EAAEG,OAAO,EAAEM,KAAK,CAAC;UACpD;UACA,IAAI4B,WAAW,EAAE;YACfN,iBAAiB,CAACtB,KAAK,EAAE0B,GAAG,CAAC3B,IAAI,EAAE6B,WAAW,EAAElC,OAAO,EAAE6B,QAAQ,CAAC;YAElE,OAAOvB,KAAK,CAACb,KAAK,CAACuC,GAAG,CAAC3B,IAAI,CAAC;UAC9B;UACA;UACA;UACAf,KAAK,CAAC,yCAAyC,EAAE0C,GAAG,CAAC3B,IAAI,CAAC;QAC5D,CAAC,MAAM;UACLuB,iBAAiB,CAACtB,KAAK,EAAE0B,GAAG,CAAC3B,IAAI,EAAEb,UAAU,CAAC,CAAC,EAAEQ,OAAO,EAAE6B,QAAQ,CAAC;UAEnE,OAAOvB,KAAK,CAACb,KAAK,CAACuC,GAAG,CAAC3B,IAAI,CAAC;QAC9B;QACA;QACA;QACA;MACF;IAEA,KAAK,kBAAkB;MAAE;QACvB,MAAM2B,GAAG,GAAG,gDAAkDjC,IAAK;QACnEJ,MAAM,GAAGa,SAAS,CAClB,yCAA2CwB,GAAG,CAACb,MAAM,EAAGnB,OAAO,EAAEM,KACjE,CAAC;QAED,MAAMc,cAAc,GAAGZ,SAAS,CAChC,yCAA2CwB,GAAG,CAACX,QAAQ,EACrDrB,OAAO,EACPM,KAAK,EACL;UACEH,gBAAgB,EAAE,CAAC6B,GAAG,CAACV;QACzB,CACF,CAAC;QACD,MAAMC,aAAa,GAAG7B,cAAc,CAAC0B,cAAc,CAAC;QACpD,IAAIzB,MAAM,IAAI4B,aAAa,EAAE;UAC3BK,iBAAiB,CAACjC,MAAM,EAAE4B,aAAa,EAAEf,SAAS,CAClD;UACGX,KAAK,EAAGG,OAAO,EAAEM,KACpB,CAAC,EAAEN,OAAO,EAAE6B,QAAQ,CAAC;UACrB,OAAOlC,MAAM,CAACF,KAAK,CAAC8B,aAAa,CAAC;QACpC;QAEAjC,KAAK,CACH,sCAAsC,EACtC,0CACE0C,GAAG,CAACX,QAAQ,CACZhB,IACJ,CAAC;QACD;MACF;EACF;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM8B,aAAa,GAAG,SAAAA,CAAUpC,IAAI,EAAEC,OAAO,EAAEE,IAAI,EAAE;EACnD,QAAQH,IAAI,CAACH,IAAI;IACf,KAAK,wBAAwB;MAAE;QAC7B,IAAIG,IAAI,CAACqC,WAAW,EAAE;UACpBD,aAAa,CACb;UACGpC,IAAI,CAACqC,WAAW,EACjBpC,OAAO,EACPE,IACF,CAAC;QACH;QAEA;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1BiC,aAAa,CACb;QACGpC,IAAI,CAACsC,UAAU,EAChBrC,OAAO,EACPE,IACF,CAAC;QACD;MACF;IAEA,KAAK,SAAS;MAAE;QACd,KAAK,MAAMoC,SAAS,IAAIvC,IAAI,CAACgB,IAAI,EAAE;UACjCoB,aAAa,CACb;UACGG,SAAS,EACVtC,OAAO,EACPE,IACF,CAAC;QACH;QAEA;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1B,KAAK,MAAMkC,WAAW,IAAIrC,IAAI,CAACwC,YAAY,EAAE;UAC7C;UACE,MAAM5C,MAAM,GAAGY,YAAY,CAC3B;UACG6B,WAAW,CAACH,EAAE,EACfjC,OAAO,EACP,IAAI,EACJA,OACF,CAAC;UACD,IAAIE,IAAI,CAACsC,UAAU,IAAIzC,IAAI,CAAC0C,IAAI,KAAK,KAAK,IAAIzC,OAAO,CAACP,KAAK,CAACqC,MAAM,EAAE;YACpE;YACE9B,OAAO,CAACP,KAAK,CAACqC,MAAM,CAACrC,KAAK,CAC1B;YACG2C,WAAW,CAACH,EAAE,CAAE5B,IAAI,CACtB,GAAGV,MAAM;UACZ;QACF;QAEA;MACF;EACF;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM+C,YAAY,GAAG,SAAAA,CAAU3C,IAAI,EAAEC,OAAO,EAAES,GAAG,EAAEkC,QAAQ,EAAE;EAC3D;EACA,MAAMzC,IAAI,GAAGO,GAAG,IAAI,CAAC,CAAC;EACtB;EACA,QAAQV,IAAI,CAACH,IAAI;IACf,KAAK,sBAAsB;MAAE;QAC3BW,YAAY,CACZ;QACGR,IAAI,CAACa,IAAI,EACVZ,OAAO,EACP;QACCD,IAAI,CAACc,KACR,CAAC;QACD;MACF;IAEA,KAAK,kBAAkB;MAAE;QACvBN,YAAY,CACZ,8CAAgDR,IAAI,CAACkC,EAAE,EACrDjC,OAAO,EACP,yCAA2CD,IAAI,CAACgB,IAAI,EACpDf,OACF,CAAC;QACD;MACF;IAEA,KAAK,0BAA0B;MAAE;QAC/B,MAAML,MAAM,GAAGY,YAAY,CAC3B;QACGR,IAAI,CAACqC,WAAW,EACjBpC,OAAO,EACP;QACCD,IAAI,CAACqC,WACR,CAAC;QACD,IAAIzC,MAAM,EAAE;UACVA,MAAM,CAACiD,QAAQ,GAAG,IAAI;UACtB;QACF,CAAC,MAAM;UACP;UACE5C,OAAO,CAAC6C,iBAAiB,GAAG;UAC1B9C,IAAI,CAACqC,WACN;QACH;QAEA;MACF;IAEA,KAAK,wBAAwB;MAAE;QAC7B,IAAIrC,IAAI,CAACqC,WAAW,EAAE;UACpB,IAAIrC,IAAI,CAACqC,WAAW,CAACxC,IAAI,KAAK,qBAAqB,EAAE;YACnD8C,YAAY,CACZ;YACG3C,IAAI,CAACqC,WAAW,EACjBpC,OAAO,EACPE,IAAI,EACJ,IACF,CAAC;UACH,CAAC,MAAM;YACL,MAAMP,MAAM,GAAGY,YAAY,CAC3B;YACGR,IAAI,CAACqC,WAAW,EACjBpC,OAAO,EACP;YACCD,IAAI,CAACqC,WACR,CAAC;YACD;YACA,IAAIzC,MAAM,EAAE;cACVA,MAAM,CAACiD,QAAQ,GAAG,IAAI;YACxB;UACF;QACF;QAEA,KAAK,MAAME,SAAS,IAAI/C,IAAI,CAACgD,UAAU,EAAE;UACvCL,YAAY,CACZ;UACGI,SAAS,EACV9C,OAAO,EACPE,IACF,CAAC;QACH;QAEA;MACF;IAEA,KAAK,iBAAiB;MAAE;QACtB,MAAMP,MAAM,GAAGa,SAAS,CACxB;QACGT,IAAI,CAACiD,KAAK,EACXhD,OAAO,EACPA,OACF,CAAC;QACD;QACA,IAAIL,MAAM,EAAE;UACVA,MAAM,CAACiD,QAAQ,GAAG,IAAI;QACxB;QAEA;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1BF,YAAY,CACZ;QACG3C,IAAI,CAACsC,UAAU,EAChBrC,OAAO,EACPE,IACF,CAAC;QACD;MACF;IAEA,KAAK,qBAAqB;IAE1B,KAAK,wBAAwB;MAAE;QAC/B;QACE,IAAI,0CAA4CH,IAAI,CAACkC,EAAE,CAAErC,IAAI,KAAK,YAAY,EAAE;UAC9EW,YAAY,CACZ;UACGR,IAAI,CAACkC,EAAE,EACRjC,OAAO,EACPD,IAAI,EACJC,OAAO,EACP,IACF,CAAC;QACH;QAEA;MACF;IAEA,KAAK,SAAS;MAAE;QACd,IAAIE,IAAI,CAAC+C,aAAa,EAAE;UACtB,OAAO,KAAK;QACd;QAEA,KAAK,MAAMX,SAAS,IAAIvC,IAAI,CAACgB,IAAI,EAAE;UACjC2B,YAAY,CACZ;UACGJ,SAAS,EACVtC,OAAO,EACPE,IACF,CAAC;QACH;QAEA;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1B,KAAK,MAAMkC,WAAW,IAAIrC,IAAI,CAACwC,YAAY,EAAE;UAC3C,MAAMV,QAAQ,GAAGqB,OAAO,CAAChD,IAAI,CAACsC,UAAU,IAAIzC,IAAI,CAAC0C,IAAI,KAAK,KAAK,IAAIzC,OAAO,CAACP,KAAK,CAACqC,MAAM,CAAC;UACxF,MAAMnC,MAAM,GAAGY,YAAY,CAC3B;UACG6B,WAAW,CAACH,EAAE,EACfjC,OAAO,EACP;UACCoC,WAAW,CAACe,IAAI,EACjBnD,OAAO,EACP6B,QACF,CAAC;UACD,IAAIlC,MAAM,IAAIgD,QAAQ,EAAE;YACtBhD,MAAM,CAACiD,QAAQ,GAAG,IAAI;UACxB;QACF;QAEA;MACF;IAEA;MAAS;QACT;QACE,OAAO,KAAK;MACd;EACF;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMQ,QAAQ,GAAG,SAAAA,CAAUrD,IAAI,EAAEO,KAAK,EAAE+C,KAAK,EAAE;EAC7C,IAAIC,UAAU,GAAGD,KAAK,IAAI,EAAE;EAC5B,IAAI,CAAC/C,KAAK,IAAIgD,UAAU,CAAC5B,QAAQ,CAACpB,KAAK,CAAC,EAAE;IACxC,OAAO,KAAK;EACd;EAEAgD,UAAU,GAAGA,UAAU,CAACC,KAAK,CAAC,CAAC;EAC/BD,UAAU,CAACE,IAAI,CAAClD,KAAK,CAAC;EAEtB,IACE,OAAOA,KAAK,KAAK,QAAQ,IACzB,MAAM,IAAIA,KAAK,KACdA,KAAK,CAACV,IAAI,KAAK,QAAQ,IAAIU,KAAK,CAACV,IAAI,KAAK,kBAAkB,CAAC,IAC9DU,KAAK,CAACT,KAAK,KAAKE,IAAI,EACpB;IACA,OAAO,IAAI;EACb;EAEA,IAAI,OAAOO,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAO,KAAK;EACd;EAEA,MAAMb,KAAK,GAAI,OAAO,IAAIa,KAAK,IAAIA,KAAK,CAACb,KAAK,IAAM,MAAM,IAAIa,KAAK,IAAIA,KAAK,CAACS,IAAK;EAClF,KAAK,MAAM0C,OAAO,IAAIC,MAAM,CAACC,MAAM,CAAClE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;IAChD,IAAImE,KAAK,CAACC,OAAO,CAACJ,OAAO,CAAC,EAAE;MAC1B;MACA,IAAIA,OAAO,CAACK,IAAI,CAAEpD,GAAG,IAAK;QACxB,OAAO0C,QAAQ,CAACrD,IAAI,EAAEW,GAAG,EAAE4C,UAAU,CAAC;MACxC,CAAC,CAAC,EAAE;QACF,OAAO,IAAI;MACb;IACF,CAAC,MAAM,IAAIF,QAAQ,CAACrD,IAAI,EAAE0D,OAAO,EAAEH,UAAU,CAAC,EAAE;MAC9C,OAAO,IAAI;IACb;EACF;EAEA,OAAO,KAAK;AACd,CAAC;AAED,MAAMS,WAAW,GAAG,IAAIC,GAAG,CAAC,CAC1B,0BAA0B,EAAE,wBAAwB,CACrD,CAAC;AACF,MAAMC,oBAAoB,GAAG,IAAID,GAAG,CAAC,CACnC,yBAAyB,EAAE,qBAAqB,EAAE,oBAAoB,CACvE,CAAC;;AAEF;AACA;AACA;AACA;AACA,MAAME,iBAAiB,GAAG,SAAAA,CAAUlC,GAAG,EAAE;EACvC;EACA,IAAIjC,IAAI,GAAGiC,GAAG;EACd,IAAImC,GAAG,GAAG,CAAC;EACX,MAAMC,eAAe,GAAGH,oBAAoB,CAACI,GAAG,CAACrC,GAAG,EAAEpC,IAAI,CAAC;EAC3D,OAAOG,IAAI,EAAE;IACX;IACA,IAAIoE,GAAG,IAAI,CAAC,IAAIC,eAAe,EAAE;MAC/B;IACF;IAEA,IAAIL,WAAW,CAACM,GAAG,CAACtE,IAAI,CAACH,IAAI,CAAC,EAAE;MAC9B,OAAOG,IAAI;IACb;IAEAA,IAAI,GAAGA,IAAI,CAACkB,MAAM;IAClBkD,GAAG,EAAE;EACP;EAEA,OAAO,KAAK;AACd,CAAC;AAED,MAAMG,2BAA2B,GAAG,IAAIN,GAAG,CAAC,CAC1C,eAAe,EACf,QAAQ,EACR,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,CACtB,CAAC;AAEF,MAAMO,qBAAqB,GAAG,IAAIP,GAAG,CAAC,CACpC,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,EACf,8BAA8B,EAC9B,iBAAiB,CAClB,CAAC;;AAEF;AACA;AACA;AACA;AACA,MAAMQ,kBAAkB,GAAG,SAAAA,CAAUxC,GAAG,EAAE;EACxC,IAAI,CAACsC,2BAA2B,CAACD,GAAG,CAACrC,GAAG,CAACpC,IAAI,CAAC,EAAE;IAC9C,OAAO,KAAK;EACd;EAEA,IAAIG,IAAI,GAAGiC,GAAG,CAACf,MAAM;EACrB,OAAOlB,IAAI,EAAE;IACX,IAAIgE,WAAW,CAACM,GAAG,CAACtE,IAAI,CAACH,IAAI,CAAC,EAAE;MAC9B,OAAOG,IAAI;IACb;IAEA,IAAI,CAACwE,qBAAqB,CAACF,GAAG,CAACtE,IAAI,CAACH,IAAI,CAAC,EAAE;MACzC,OAAO,KAAK;IACd;IAEAG,IAAI,GAAGA,IAAI,CAACkB,MAAM;EACpB;EAEA,OAAO,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMwD,gBAAgB,GAAG,SAAAA,CAAUnE,KAAK,EAAEP,IAAI,EAAEsD,KAAK,EAAE;EACrD;EACA,IAAI/C,KAAK,KAAK,IAAI,EAAE;IAClB,OAAO,KAAK;EACd;EAEA,MAAMgD,UAAU,GAAGD,KAAK,IAAI,EAAE;EAC9B,MAAM;IACJ5D;EACF,CAAC,GAAGa,KAAK;EACT,KAAK,MAAMmD,OAAO,IAAIC,MAAM,CAACC,MAAM,CAAClE,KAAK,CAAC,EAAE;IAC1C,MAAMiF,IAAI,GAAG,0BAA4BjB,OAAQ;IACjDH,UAAU,CAACE,IAAI,CAACkB,IAAI,CAAC;IACrB,IAAIA,IAAI,CAAC9B,QAAQ,KAAK7C,IAAI,KAAK2E,IAAI,CAAC7E,KAAK,IAAIuD,QAAQ,CAACrD,IAAI,EAAE2E,IAAI,CAAC7E,KAAK,CAAC,CAAC,EAAE;MACxE,OAAO,IAAI;IACb;;IAEA;IACA;EACF;EAEA,OAAO,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM8E,cAAc,GAAG,SAAAA,CAAU5E,IAAI,EAAEC,OAAO,EAAES,GAAG,EAAE;EACnD,MAAMmE,aAAa,GAAG5E,OAAO,CAACP,KAAK,CAACoF,MAAM,EAAEpF,KAAK,EAAEqF,OAAO;EAC1D,IACErE,GAAG,CAACsE,iBAAiB,IAAIH,aAAa,IAAIxB,QAAQ,CAACrD,IAAI,EAAE6E,aAAa,CAAC,EACvE;IACA,OAAO,IAAI;EACb;EAEA,IAAInE,GAAG,CAAC+B,UAAU,IAAIxC,OAAO,CAACP,KAAK,CAACqC,MAAM,IAAIsB,QAAQ,CAACrD,IAAI,EAAEC,OAAO,CAACP,KAAK,CAACqC,MAAM,CAAC,EAAE;IAClF,OAAO,IAAI;EACb;EAEA,IAAIrB,GAAG,CAACuE,GAAG,IAAIP,gBAAgB,CAACzE,OAAO,EAAED,IAAI,CAAC,EAAE;IAC9C,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMkF,cAAc,GAAG,SAAAA,CAAUlF,IAAI,EAAEmF,UAAU,EAAEhF,IAAI,EAAE;EACvD;EACA,IAAIH,IAAI,CAACkB,MAAM,IAAIgE,cAAc,CAAClF,IAAI,CAACkB,MAAM,EAAEiE,UAAU,EAAEhF,IAAI,CAAC,EAAE;IAChE,OAAO,IAAI;EACb;EAEA,OAAOwC,YAAY,CAAC3C,IAAI,EAAEmF,UAAU,EAAEhF,IAAI,CAAC;AAC7C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMiF,KAAK,GAAG,SAAAA,CAAUC,GAAG,EAAErF,IAAI,EAAEU,GAAG,EAAE;EACtC;EACA,MAAMP,IAAI,GAAGO,GAAG,IAAI;IAClBwC,aAAa,EAAE,KAAK;IACpB+B,GAAG,EAAE,IAAI;IACTD,iBAAiB,EAAE,IAAI;IACvBvC,UAAU,EAAE;EACd,CAAC;EAED,MAAM0C,UAAU,GAAG1F,UAAU,CAAC,CAAC;EAC/B,IAAIU,IAAI,CAAC6E,iBAAiB,EAAE;IAC1BG,UAAU,CAACzF,KAAK,CAACoF,MAAM,GAAGrF,UAAU,CAAC,CAAC;IACtC0F,UAAU,CAACzF,KAAK,CAACoF,MAAM,CAACpF,KAAK,CAACqF,OAAO,GAAGtF,UAAU,CAAC,CAAC;IACpD0F,UAAU,CAACzF,KAAK,CAACqF,OAAO,GAAGI,UAAU,CAACzF,KAAK,CAACoF,MAAM,CAACpF,KAAK,CAACqF,OAAO;EAClE;EAEA,IAAI5E,IAAI,CAACsC,UAAU,EAAE;IACnB0C,UAAU,CAACzF,KAAK,CAACqC,MAAM,GAAGtC,UAAU,CAAC,CAAC;IACtC0F,UAAU,CAACzF,KAAK,CAACqC,MAAM,CAACC,OAAO,GAAG,IAAI;EACxC;EAEA,IAAI7B,IAAI,CAAC+C,aAAa,EAAE;IACtBgC,cAAc,CAAClF,IAAI,EAAEmF,UAAU,EAAEhF,IAAI,CAAC;EACxC,CAAC,MAAM;IACLiC,aAAa,CAACiD,GAAG,EAAEF,UAAU,EAAEhF,IAAI,CAAC;IACpCwC,YAAY,CAAC0C,GAAG,EAAEF,UAAU,EAAEhF,IAAI,CAAC;EACrC;EAEA,OAAO;IACLgF,UAAU;IACVzF,KAAK,EAAE,CAAC;EACV,CAAC;AACH,CAAC;AAED,MAAM4F,kBAAkB,GAAG,IAAIrB,GAAG,CAAC,CACjC,kBAAkB,EAClB,oBAAoB,CACrB,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA,MAAMsB,SAAS,GAAIvF,IAAI,IAAK;EAC1B,OAAOsF,kBAAkB,CAAChB,GAAG,CAACtE,IAAI,CAACH,IAAI,CAAC,IAEpC,eAAe,IAAIG,IAAI,IACvBA,IAAI,CAACwF,aAAa,KAAK,QAAQ,IAAIxF,IAAI,CAACwF,aAAa,KAAKC,SAC3D,IACH,KAAK,IAAIzF,IAAI,IACXA,IAAI,CAACiB,GAAG,CAACpB,IAAI,KAAK,mBAAmB;AACzC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM6F,mBAAmB,GAAG,SAAAA,CAAU1F,IAAI,EAAE2F,UAAU,EAAEjF,GAAG,EAAEkF,QAAQ,EAAE;EACrE;EACA;EACA,IAAIlF,GAAG,CAACuE,GAAG,EAAE;IACX,IAAIM,SAAS,CAACvF,IAAI,CAAC,IACjBA,IAAI,CAACkB,MAAM,IAAIqE,SAAS,CAACvF,IAAI,CAACkB,MAAM,CAAC,EAAE;MACvC,OAAO,KAAK;IACd;IAEA,MAAM2E,UAAU,GAAG1B,iBAAiB,CAACnE,IAAI,CAAC;;IAE1C;IACA,IAAI6F,UAAU,IAAI,CAAC,IAAAC,8BAAgB,EAACD,UAAU,EAAEF,UAAU,EAAEC,QAAQ,CAAC,EAAE;MACrE,OAAO,IAAI;IACb;;IAEA;AACJ;AACA;IACI,IACEnB,kBAAkB,CAACzE,IAAI,CAAC,IACxB,CAAC,IAAA8F,8BAAgB,EAAC9F,IAAI,EAAE2F,UAAU,EAAEC,QAAQ,CAAC,EAC7C;MACA,OAAO,IAAI;IACb;EACF;EAEA,MAAMP,GAAG,GAAG,sBAAwBM,UAAU,CAACN,GAAI;EAEnD,MAAMU,WAAW,GAAGX,KAAK,CACvB;EACCC,GAAG,EACJrF,IAAI,EACJU,GACF,CAAC;EAED,OAAOkE,cAAc,CACnB5E,IAAI,EAAE,0BAA4B+F,WAAW,CAACZ,UAAU,EAAGzE,GAC7D,CAAC;AACH,CAAC;AAAC,IAAAsF,QAAA,GAAAjB,OAAA,CAAAzF,OAAA,GAEa;EACboG,mBAAmB;EACnBN;AACF,CAAC;AAAAN,MAAA,CAAAC,OAAA,GAAAA,OAAA,CAAAzF,OAAA","ignoreList":[]}
1
+ {"version":3,"file":"exportParser.cjs","names":["_jsdoccomment","require","_debug","_interopRequireDefault","e","__esModule","default","debug","debugModule","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","val","prototype","left","right","method","body","key","parent","obj","object","propertySymbol","property","computed","propertyValue","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","nde","id","valueSymbol","initVariables","declaration","expression","childNode","declarations","initWindow","kind","mapVariables","isExport","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","ancestorsOnly","Boolean","init","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","ignorableNestedTypes","getExportAncestor","idx","ignorableIfDeep","has","canBeExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","pval","isNodeExported","moduleExports","module","exports","initModuleExports","esm","parseRecursive","globalVars","parse","ast","accessibilityNodes","isPrivate","accessibility","undefined","isUncommentedExport","sourceCode","settings","exportNode","findJSDocComment","parseResult","_default"],"sources":["../src/exportParser.js"],"sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\n/**\n * @typedef {{\n * value: string\n * }} ValueObject\n */\n\n/**\n * @typedef {{\n * type?: string,\n * value?: ValueObject|import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node,\n * props: {\n * [key: string]: CreatedNode|null,\n * },\n * special?: true,\n * globalVars?: CreatedNode,\n * exported?: boolean,\n * ANONYMOUS_DEFAULT?: import('eslint').Rule.Node\n * }} CreatedNode\n */\n\n/**\n * @returns {CreatedNode}\n */\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\n/**\n * @param {CreatedNode|null} symbol\n * @returns {string|null}\n */\nconst getSymbolValue = function (symbol) {\n /* c8 ignore next 3 */\n if (!symbol) {\n return null;\n }\n\n /* c8 ignore else */\n if (symbol.type === 'literal') {\n return /** @type {ValueObject} */ (symbol.value).value;\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return null;\n};\n\n/**\n *\n * @param {import('estree').Identifier} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} opts\n * @returns {CreatedNode|null}\n */\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {\n value: node.name,\n };\n\n return identifierLiteral;\n }\n\n /* c8 ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* c8 ignore next 3 */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\n/**\n * @callback CreateSymbol\n * @param {import('eslint').Rule.Node|null} node\n * @param {CreatedNode} globals\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null} value\n * @param {CreatedNode} [scope]\n * @param {boolean|SymbolOptions} [isGlobal]\n * @returns {CreatedNode|null}\n */\n\n/** @type {CreateSymbol} */\nlet createSymbol; // eslint-disable-line prefer-const\n\n/**\n * @typedef {{\n * simpleIdentifier?: boolean\n * }} SymbolOptions\n */\n\n/**\n *\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} [opt]\n * @returns {CreatedNode|null}\n */\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* c8 ignore next */\n switch (node.type) {\n /* c8 ignore next 4 -- No longer needed? */\n case 'ArrowFunctionExpression':\n\n // Fallthrough\n case 'ClassDeclaration':\n\n case 'FunctionDeclaration':\n\n case 'FunctionExpression':\n case 'TSEnumDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n scope,\n opts,\n );\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n // StaticBlock\n if (!('key' in method)) {\n continue;\n }\n\n val.props[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ] = createNode();\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].type = 'object';\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].value = /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').MethodDefinition} */ (method).value\n );\n }\n\n val.type = 'object';\n val.value = node.parent;\n\n return val;\n }\n\n case 'ClassExpression': {\n return getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.body),\n globals,\n scope,\n opts,\n );\n }\n\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.object),\n globals,\n scope,\n opts,\n );\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.property),\n globals,\n scope,\n {\n simpleIdentifier: !node.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* c8 ignore else */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n /* c8 ignore next 11 */\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n debug(`MemberExpression: Missing property ${\n /** @type {import('estree').PrivateIdentifier} */ (node.property).name\n }`);\n /* c8 ignore next 2 */\n return null;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n\n // typescript-eslint, espree, acorn, etc.\n 'SpreadElement',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').Property} */\n (prop).value\n ),\n globals,\n scope,\n opts,\n );\n /* c8 ignore next 8 */\n if (propVal) {\n val.props[\n /** @type {import('estree').Identifier} */\n (\n /** @type {import('estree').Property} */ (prop).key\n ).name\n ] = propVal;\n }\n }\n\n return val;\n }\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return null;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {string} name\n * @param {CreatedNode|null} value\n * @param {CreatedNode} globals\n * @param {boolean|SymbolOptions|undefined} isGlobal\n * @returns {void}\n */\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n /* c8 ignore next 3 */\n if (!node) {\n return null;\n }\n\n let symbol;\n switch (node.type) {\n case 'ClassDeclaration':\n /* c8 ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'FunctionDeclaration': case 'TSEnumDeclaration':\n /* c8 ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'TSInterfaceDeclaration': case 'TSTypeAliasDeclaration': {\n const nde = /** @type {import('estree').ClassDeclaration} */ (node);\n /* c8 ignore else */\n if (nde.id && nde.id.type === 'Identifier') {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.id),\n globals,\n node,\n globals,\n );\n }\n /* c8 ignore next 3 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n break;\n }\n\n case 'Identifier': {\n const nde = /** @type {import('estree').Identifier} */ (node);\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* c8 ignore else */\n if (valueSymbol) {\n createBlockSymbol(block, nde.name, valueSymbol, globals, isGlobal);\n\n return block.props[nde.name];\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n debug('Identifier: Missing value symbol for %s', nde.name);\n } else {\n createBlockSymbol(block, nde.name, createNode(), globals, isGlobal);\n\n return block.props[nde.name];\n }\n /* c8 ignore next 3 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n break;\n }\n\n case 'MemberExpression': {\n const nde = /** @type {import('estree').MemberExpression} */ (node);\n symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.object), globals, block,\n );\n\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.property),\n globals,\n block,\n {\n simpleIdentifier: !nde.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (value), globals, block,\n ), globals, isGlobal);\n return symbol.props[propertyValue];\n }\n\n debug(\n 'MemberExpression: Missing symbol: %s',\n /** @type {import('estree').Identifier} */ (\n nde.property\n ).name,\n );\n break;\n }\n }\n\n return null;\n};\n\n/**\n * Creates variables from variable definitions\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {void}\n */\nconst initVariables = function (node, globals, opts) {\n switch (node.type) {\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n null,\n globals,\n );\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[\n /** @type {import('estree').Identifier} */\n (declaration.id).name\n ] = symbol;\n }\n }\n\n break;\n }\n }\n};\n\n/**\n * Populates variable maps using AST\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {true} [isExport]\n * @returns {boolean}\n */\nconst mapVariables = function (node, globals, opt, isExport) {\n /* c8 ignore next */\n const opts = opt || {};\n /* c8 ignore next */\n switch (node.type) {\n case 'AssignmentExpression': {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n );\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(\n /** @type {import('eslint').Rule.Node|null} */ (node.id),\n globals,\n /** @type {import('eslint').Rule.Node} */ (node.body),\n globals,\n );\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n if (symbol) {\n symbol.exported = true;\n /* c8 ignore next 6 */\n } else {\n // if (!node.id) {\n globals.ANONYMOUS_DEFAULT = /** @type {import('eslint').Rule.Node} */ (\n node.declaration\n );\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n true,\n );\n } else {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n /* c8 ignore next 3 */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (specifier),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.local),\n globals,\n globals,\n );\n /* c8 ignore next 3 */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'FunctionDeclaration':\n\n case 'TSTypeAliasDeclaration': {\n /* c8 ignore next 10 */\n if (/** @type {import('estree').Identifier} */ (node.id).type === 'Identifier') {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.id),\n globals,\n node,\n globals,\n true,\n );\n }\n\n break;\n }\n\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = Boolean(opts.initWindow && node.kind === 'var' && globals.props.window);\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (declaration.init),\n globals,\n isGlobal,\n );\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n default: {\n /* c8 ignore next */\n return false;\n }\n }\n\n return true;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode|ValueObject|string|undefined|\n * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} block\n * @param {(CreatedNode|ValueObject|string|\n * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node)[]} [cache]\n * @returns {boolean}\n */\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n typeof block === 'object' &&\n 'type' in block &&\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n if (typeof block !== 'object') {\n return false;\n }\n\n const props = ('props' in block && block.props) || ('body' in block && block.body);\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* c8 ignore next 5 */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set([\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n]);\nconst ignorableNestedTypes = new Set([\n 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {import('eslint').Rule.Node|false}\n */\nconst getExportAncestor = function (nde) {\n /** @type {import('eslint').Rule.Node|null} */\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canBeExportedByAncestorType = new Set([\n 'ClassProperty',\n 'Method',\n 'PropertyDefinition',\n 'TSMethodSignature',\n 'TSPropertySignature',\n]);\n\nconst canExportChildrenType = new Set([\n 'ClassBody',\n 'ClassDeclaration',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'TSTypeAliasDeclaration',\n 'TSTypeLiteral',\n 'TSTypeParameterInstantiation',\n 'TSTypeReference',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {false|import('eslint').Rule.Node}\n */\nconst isExportByAncestor = function (nde) {\n if (!canBeExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode[]} [cache] Currently unused\n * @returns {boolean}\n */\nconst findExportedNode = function (block, node, cache) {\n /* c8 ignore next 3 */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {\n props,\n } = block;\n for (const propval of Object.values(props)) {\n const pval = /** @type {CreatedNode} */ (propval);\n blockCache.push(pval);\n if (pval.exported && (node === pval.value || findNode(node, pval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {boolean}\n */\nconst isNodeExported = function (node, globals, opt) {\n const moduleExports = globals.props.module?.props?.exports;\n if (\n opt.initModuleExports && moduleExports && findNode(node, moduleExports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globalVars\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {boolean}\n */\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} ast\n * @param {import('eslint').Rule.Node} node\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {CreatedNode}\n */\nconst parse = function (ast, node, opt) {\n /* c8 ignore next 6 */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n props: {},\n };\n};\n\nconst accessibilityNodes = new Set([\n 'MethodDefinition',\n 'PropertyDefinition',\n]);\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @returns {boolean}\n */\nconst isPrivate = (node) => {\n return accessibilityNodes.has(node.type) &&\n (\n 'accessibility' in node &&\n node.accessibility !== 'public' && node.accessibility !== undefined\n ) ||\n 'key' in node &&\n node.key.type === 'PrivateIdentifier';\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {import('./iterateJsdoc.js').Settings} settings\n * @returns {boolean}\n */\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n if (isPrivate(node) ||\n node.parent && isPrivate(node.parent)) {\n return false;\n }\n\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const ast = /** @type {unknown} */ (sourceCode.ast);\n\n const parseResult = parse(\n /** @type {import('eslint').Rule.Node} */\n (ast),\n node,\n opt,\n );\n\n return isNodeExported(\n node, /** @type {CreatedNode} */ (parseResult.globalVars), opt,\n );\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -344,6 +344,7 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
344
344
 
345
345
  /**
346
346
  * @callback AvoidDocs
347
+ * @param {boolean} [exemptSpecialMethods]
347
348
  * @returns {boolean}
348
349
  */
349
350
 
@@ -1292,11 +1293,11 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
1292
1293
  };
1293
1294
 
1294
1295
  /** @type {AvoidDocs} */
1295
- utils.avoidDocs = () => {
1296
+ utils.avoidDocs = (exemptSpecialMethods = true) => {
1296
1297
  if (ignoreReplacesDocs !== false && (utils.hasTag('ignore') || utils.classHasTag('ignore')) || overrideReplacesDocs !== false && (utils.hasTag('override') || utils.classHasTag('override')) || implementsReplacesDocs !== false && (utils.hasTag('implements') || utils.classHasTag('implements')) || augmentsExtendsReplacesDocs && (utils.hasATag(['augments', 'extends']) || utils.classHasTag('augments') || utils.classHasTag('extends'))) {
1297
1298
  return true;
1298
1299
  }
1299
- if (jsdocUtils.exemptSpeciaMethods(jsdoc, node, context, /** @type {import('json-schema').JSONSchema4|import('json-schema').JSONSchema4[]} */
1300
+ if (exemptSpecialMethods && jsdocUtils.exemptSpeciaMethods(jsdoc, node, context, /** @type {import('json-schema').JSONSchema4|import('json-schema').JSONSchema4[]} */
1300
1301
  ruleConfig.meta.schema)) {
1301
1302
  return true;
1302
1303
  }
@@ -1 +1 @@
1
- {"version":3,"file":"iterateJsdoc.cjs","names":["jsdocUtils","_interopRequireWildcard","require","_jsdoccomment","_commentParser","_esquery","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","mode","tagNamePreference","utils","method","tagName","reportSettings","message","report","loc","end","column","line","start","parseClosureTemplateTag","tag","pathDoesNotBeginWith","getPreferredTagNameObject","ret","getPreferredTagNameSimple","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","sc","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","augmentsExtendsReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","maxLines","minLines","overrideReplacesDocs","functionTypes","isIteratingFunction","includes","String","type","isIteratingFunctionOrVariable","declarations","declaration","some","init","isVirtualFunction","Boolean","hasATag","stringify","tagBlock","specRewire","block","commentStringify","reportJSDoc","msg","handler","data","fixer","extraFix","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","setTagDescription","matcher","setter","finalIdx","source","tokens","description","idx","getDescription","descriptions","lastDescriptionLine","tagsBegun","push","length","join","setBlockDescription","descLines","postDelims","startIdx","endIdx","info","delimiter","postDelimiter","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","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","lineEnd","name","postName","postTag","postType","trimEnd","flattenRoots","getFunctionParameterNames","useDefaultObjectProperties","ignoreInterfacedParameters","hasParams","isGenerator","generator","value","isConstructor","getJsdocTagsDeep","getPreferredTagName","args","isValidTag","definedTags","names","hasTag","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","otherModeMaps","result","otherResult","otherModeMap","otherMode","tagMissingRequiredTypeOrNamepath","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","getTags","tagList","filterTags","filter","filterAllTags","getAllTags","getInlineTags","getTagsByType","hasOptionTag","getClassNode","toReversed","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","skipReportingBlockedTag","findContext","contexts","comment","foundContext","cntxt","esquery","matches","parse","visitorKeys","contextStr","getSettings","ignorePrivate","ignoreInternal","Number","skipInvokedExpressionsForCommentFinding","preferredTypes","exemptDestructuredRootsFromChecks","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","iterator","state","jsdocNde","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indentChar","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","selector","lastComment","settngs","exit","create","commentHandler","*:not(Program)","noTracking","nonComment","ste","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","allComms","iterateJsdoc","metaType","TypeError","ctx","modifyContext","contextDefaults","contextSelected","matchContext","match","enforcedContexts","nonGlobalSettings","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import * as jsdocUtils from './jsdocUtils.js';\nimport {\n commentHandler,\n getJSDocComment,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport esquery from 'esquery';\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @typedef {import('@es-joy/jsdoccomment').JsdocBlockWithInline} JsdocBlockWithInline\n */\n\n/**\n * @typedef {{\n * disallowName?: string,\n * allowName?: string,\n * context?: string,\n * comment?: string,\n * tags?: string[],\n * replacement?: string,\n * minimum?: Integer,\n * message?: string,\n * forceRequireReturn?: boolean\n * }} ContextObject\n */\n/**\n * @typedef {string|ContextObject} Context\n */\n\n/**\n * @callback CheckJsdoc\n * @param {{\n * lastIndex?: Integer,\n * isFunctionContext?: boolean,\n * selector?: string,\n * comment?: string\n * }} info\n * @param {null|((jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean|undefined)} handler\n * @param {import('eslint').Rule.Node} node\n * @returns {void}\n */\n\n/**\n * @callback ForEachPreferredTag\n * @param {string} tagName\n * @param {(\n * matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n * targetTagName: string\n * ) => void} arrayHandler\n * @param {boolean} [skipReportingBlockedTag]\n * @returns {void}\n */\n\n/**\n * @callback ReportSettings\n * @param {string} message\n * @returns {void}\n */\n\n/**\n * @callback ParseClosureTemplateTag\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\n\n/**\n * @callback GetPreferredTagNameObject\n * @param {{\n * tagName: string\n * }} cfg\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @typedef {{\n * forEachPreferredTag: ForEachPreferredTag,\n * reportSettings: ReportSettings,\n * parseClosureTemplateTag: ParseClosureTemplateTag,\n * getPreferredTagNameObject: GetPreferredTagNameObject,\n * pathDoesNotBeginWith: import('./jsdocUtils.js').PathDoesNotBeginWith\n * isNameOrNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNameOrNamepath: IsNamepathX,\n * tagMightHaveName: IsNamepathX\n * }} BasicUtils\n */\n\n/**\n * @callback IsIteratingFunction\n * @returns {boolean}\n */\n\n/**\n * @callback IsVirtualFunction\n * @returns {boolean}\n */\n\n/**\n * @callback Stringify\n * @param {import('comment-parser').Block} tagBlock\n * @param {boolean} [specRewire]\n * @returns {string}\n */\n\n/**\n * @callback ReportJSDoc\n * @param {string} msg\n * @param {null|import('comment-parser').Spec|{line: Integer, column?: Integer}} [tag]\n * @param {((fixer: import('eslint').Rule.RuleFixer) => import('eslint').Rule.Fix|void)|null} [handler]\n * @param {boolean} [specRewire]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n */\n\n/**\n * @callback GetRegexFromString\n * @param {string} str\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\n\n/**\n * @callback GetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\n\n/**\n * @callback SetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback GetDescription\n * @returns {{\n * description: string,\n * descriptions: string[],\n * lastDescriptionLine: Integer\n * }}\n */\n\n/**\n * @callback SetBlockDescription\n * @param {(\n * info: {\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * },\n * seedTokens: (\n * tokens?: Partial<import('comment-parser').Tokens>\n * ) => import('comment-parser').Tokens,\n * descLines: string[],\n * postDelims: string[]\n * ) => import('comment-parser').Line[]} setter\n * @returns {void}\n */\n\n/**\n * @callback SetDescriptionLines\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback ChangeTag\n * @param {import('comment-parser').Spec} tag\n * @param {...Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback SetTag\n * @param {import('comment-parser').Spec & {\n * line: Integer\n * }} tag\n * @param {Partial<import('comment-parser').Tokens>} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback RemoveTag\n * @param {Integer} tagIndex\n * @param {{\n * removeEmptyBlock?: boolean,\n * tagSourceOffset?: Integer\n * }} [cfg]\n * @returns {void}\n */\n\n/**\n * @callback AddTag\n * @param {string} targetTagName\n * @param {Integer} [number]\n * @param {Partial<import('comment-parser').Tokens>} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback GetFirstLine\n * @returns {Integer|undefined}\n */\n\n/**\n * @typedef {(\n * tokens?: Partial<import('comment-parser').Tokens> | undefined\n * ) => import('comment-parser').Tokens} SeedTokens\n */\n\n/**\n * Sets tokens to empty string.\n * @callback EmptyTokens\n * @param {import('comment-parser').Tokens} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLine\n * @param {Integer} sourceIndex\n * @param {Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLines\n * @param {Integer} tagIndex\n * @param {Integer} tagSourceOffset\n * @param {Integer} numLines\n * @returns {void}\n */\n\n/**\n * @callback MakeMultiline\n * @returns {void}\n */\n\n/**\n * @callback GetFunctionParameterNames\n * @param {boolean} [useDefaultObjectProperties]\n * @param {boolean} [ignoreInterfacedParameters]\n * @returns {import('./jsdocUtils.js').ParamNameInfo[]}\n */\n\n/**\n * @callback HasParams\n * @returns {Integer}\n */\n\n/**\n * @callback IsGenerator\n * @returns {boolean}\n */\n\n/**\n * @callback IsConstructor\n * @returns {boolean}\n */\n\n/**\n * @callback GetJsdocTagsDeep\n * @param {string} tagName\n * @returns {false|{\n * idx: Integer,\n * name: string,\n * type: string\n * }[]}\n */\n\n/**\n * @callback GetPreferredTagName\n * @param {{\n * tagName: string,\n * skipReportingBlockedTag?: boolean,\n * allowObjectReturn?: boolean,\n * defaultMessage?: string\n * }} cfg\n * @returns {string|undefined|false|{\n * message: string;\n * replacement?: string|undefined;\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @callback IsValidTag\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\n\n/**\n * @callback HasATag\n * @param {string[]} names\n * @returns {boolean}\n */\n\n/**\n * @callback HasTag\n * @param {string} name\n * @returns {boolean}\n */\n\n/**\n * @callback ComparePaths\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\n\n/**\n * @callback DropPathSegmentQuotes\n * @param {string} name\n * @returns {string}\n */\n\n/**\n * @callback AvoidDocs\n * @returns {boolean}\n */\n\n/**\n * @callback TagMightHaveNamePositionTypePosition\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} [otherModeMaps]\n * @returns {boolean|{otherMode: true}}\n */\n\n/**\n * @callback TagMustHave\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback TagMissingRequiredTypeOrNamepath\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback IsNamepathX\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetTagStructureForMode\n * @param {import('./jsdocUtils.js').ParserMode} mde\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\n\n/**\n * @callback MayBeUndefinedTypeTag\n * @param {import('comment-parser').Spec} tag\n * @returns {boolean}\n */\n\n/**\n * @callback HasValueOrExecutorHasNonEmptyResolveValue\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} [allBranches]\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldReturnValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasThrowValue\n * @returns {boolean}\n */\n\n/**\n * @callback IsAsync\n * @returns {boolean|undefined}\n */\n\n/**\n * @callback GetTags\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\n\n/**\n * @callback GetPresentTags\n * @param {string[]} tagList\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterTags\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterAllTags\n * @param {(tag: (import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)) => boolean} filter\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\n\n/**\n * @callback getInlineTags\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: number | undefined; column?: number | undefined;\n * })[]}\n */\n\n/**\n * @callback GetTagsByType\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n * tagsWithNames: import('comment-parser').Spec[],\n * tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\n\n/**\n * @callback HasOptionTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetClassNode\n * @returns {Node|null}\n */\n\n/**\n * @callback GetClassJsdoc\n * @returns {null|JsdocBlockWithInline}\n */\n\n/**\n * @callback ClassHasTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback FindContext\n * @param {Context[]} contexts\n * @param {string|undefined} comment\n * @returns {{\n * foundContext: Context|undefined,\n * contextStr: string\n * }}\n */\n\n/**\n * @typedef {BasicUtils & {\n * isIteratingFunction: IsIteratingFunction,\n * isIteratingFunctionOrVariable: IsIteratingFunction,\n * isVirtualFunction: IsVirtualFunction,\n * stringify: Stringify,\n * reportJSDoc: ReportJSDoc,\n * getRegexFromString: GetRegexFromString,\n * getTagDescription: GetTagDescription,\n * setTagDescription: SetTagDescription,\n * getDescription: GetDescription,\n * setBlockDescription: SetBlockDescription,\n * setDescriptionLines: SetDescriptionLines,\n * changeTag: ChangeTag,\n * setTag: SetTag,\n * removeTag: RemoveTag,\n * addTag: AddTag,\n * getFirstLine: GetFirstLine,\n * seedTokens: SeedTokens,\n * emptyTokens: EmptyTokens,\n * addLine: AddLine,\n * addLines: AddLines,\n * makeMultiline: MakeMultiline,\n * flattenRoots: import('./jsdocUtils.js').FlattenRoots,\n * getFunctionParameterNames: GetFunctionParameterNames,\n * hasParams: HasParams,\n * isGenerator: IsGenerator,\n * isConstructor: IsConstructor,\n * getJsdocTagsDeep: GetJsdocTagsDeep,\n * getPreferredTagName: GetPreferredTagName,\n * isValidTag: IsValidTag,\n * hasATag: HasATag,\n * hasTag: HasTag,\n * comparePaths: ComparePaths,\n * dropPathSegmentQuotes: DropPathSegmentQuotes,\n * avoidDocs: AvoidDocs,\n * tagMightHaveNamePosition: TagMightHaveNamePositionTypePosition,\n * tagMightHaveTypePosition: TagMightHaveNamePositionTypePosition,\n * tagMustHaveNamePosition: TagMustHave,\n * tagMustHaveTypePosition: TagMustHave,\n * tagMissingRequiredTypeOrNamepath: TagMissingRequiredTypeOrNamepath,\n * isNameOrNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNameOrNamepath: IsNamepathX,\n * tagMightHaveName: IsNamepathX,\n * tagMightHaveNamepath: IsNamepathX,\n * getTagStructureForMode: GetTagStructureForMode,\n * mayBeUndefinedTypeTag: MayBeUndefinedTypeTag,\n * hasValueOrExecutorHasNonEmptyResolveValue: HasValueOrExecutorHasNonEmptyResolveValue,\n * hasYieldValue: HasYieldValue,\n * hasYieldReturnValue: HasYieldReturnValue,\n * hasThrowValue: HasThrowValue,\n * isAsync: IsAsync,\n * getTags: GetTags,\n * getPresentTags: GetPresentTags,\n * filterTags: FilterTags,\n * filterAllTags: FilterAllTags,\n * getInlineTags: getInlineTags,\n * getTagsByType: GetTagsByType,\n * hasOptionTag: HasOptionTag,\n * getClassNode: GetClassNode,\n * getClassJsdoc: GetClassJsdoc,\n * classHasTag: ClassHasTag,\n * findContext: FindContext\n * }} Utils\n */\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n/**\n * Should use ESLint rule's typing.\n * @typedef {import('eslint').Rule.RuleMetaData} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n * @typedef {{\n * globalTags: boolean,\n * hasDuplicates: {\n * [key: string]: boolean\n * },\n * selectorMap: {\n * [selector: string]: {\n * [comment: string]: Integer\n * }\n * },\n * hasTag: {\n * [key: string]: boolean\n * },\n * hasNonComment: number,\n * hasNonCommentBeforeTag: {\n * [key: string]: boolean|number\n * },\n * foundTypedefValues: string[]\n * }} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n * @typedef {import('eslint').Rule.Node} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {{\n * tagNamePreference?: import('./jsdocUtils.js').TagNamePreference,\n * mode?: import('./jsdocUtils.js').ParserMode\n * }} cfg\n * @returns {BasicUtils}\n */\nconst getBasicUtils = (context, {\n mode,\n tagNamePreference,\n}) => {\n /** @type {BasicUtils} */\n const utils = {};\n\n for (const method of [\n 'isNameOrNamepathDefiningTag',\n 'isNamepathReferencingTag',\n 'isNamepathOrUrlReferencingTag',\n 'tagMightHaveNameOrNamepath',\n 'tagMightHaveName',\n 'tagMightHaveNamepath',\n ]) {\n /** @type {IsNamepathX} */\n utils[\n /** @type {\"isNameOrNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNameOrNamepath\"|\"tagMightHaveName\"} */ (\n method\n )] = (tagName) => {\n return jsdocUtils[\n /** @type {\"isNameOrNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNameOrNamepath\"|\"tagMightHaveName\"} */\n (method)\n ](tagName);\n };\n }\n\n /** @type {ReportSettings} */\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n /** @type {ParseClosureTemplateTag} */\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n /** @type {GetPreferredTagNameObject} */\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagNameSimple(\n tagName,\n /** @type {import('./jsdocUtils.js').ParserMode} */ (mode),\n tagNamePreference,\n context,\n );\n const isObject = ret && typeof ret === 'object';\n if (ret === false || (isObject && !ret.replacement)) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\n/**\n * @callback Report\n * @param {string} message\n * @param {import('@eslint/core').RuleFixer|null} [fix]\n * @param {null|\n * {line?: Integer, column?: Integer}|\n * import('comment-parser').Spec & {line?: Integer}\n * } [jsdocLoc]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n * @returns {void}\n */\n\n/**\n * @param {Node|null} node\n * @param {JsdocBlockWithInline} jsdoc\n * @param {import('eslint').AST.Token} jsdocNode\n * @param {Settings} settings\n * @param {Report} report\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('eslint').SourceCode} sc\n * @param {boolean|undefined} iteratingAll\n * @param {RuleConfig} ruleConfig\n * @param {string} indent\n * @returns {Utils}\n */\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n sc,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = /** @type {import('eslint').Rule.Node[]} */ (node ?\n (sc.getAncestors ?\n (\n sc.getAncestors(node)\n /* c8 ignore next 5 */\n ) :\n (\n // @ts-expect-error ESLint 8\n context.getAncestors()\n )) :\n []);\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n\n const utils = /** @type {Utils} */ (getBasicUtils(context, settings));\n\n const {\n augmentsExtendsReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n maxLines,\n minLines,\n mode,\n overrideReplacesDocs,\n tagNamePreference,\n } = settings;\n\n const functionTypes = [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'MethodDefinition',\n ];\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunction = () => {\n return !iteratingAll || functionTypes.includes(String(node?.type));\n };\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunctionOrVariable = () => {\n if (utils.isIteratingFunction()) {\n return true;\n }\n\n /** @type {import('estree').VariableDeclarator[]} */\n const declarations = node?.type === 'VariableDeclaration' ?\n node.declarations :\n (node?.type === 'ExportNamedDeclaration' && node.declaration?.type === 'VariableDeclaration' ?\n node.declaration.declarations :\n []);\n\n return declarations.some(({\n init,\n }) => {\n return functionTypes.includes(String(init?.type));\n });\n };\n\n /** @type {IsVirtualFunction} */\n utils.isVirtualFunction = () => {\n return Boolean(iteratingAll) && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n /** @type {Stringify} */\n utils.stringify = (tagBlock, specRewire) => {\n let block;\n if (specRewire) {\n block = rewireSpecs(tagBlock);\n }\n\n return commentStringify(/** @type {import('comment-parser').Block} */ (\n specRewire ? block : tagBlock));\n };\n\n /** @type {ReportJSDoc} */\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? /** @type {import('eslint').Rule.ReportFixer} */ (\n fixer,\n ) => {\n const extraFix = handler(fixer);\n\n const replacement = utils.stringify(jsdoc, specRewire);\n\n if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/v);\n if (lastLineBreakPos > -1) {\n return [\n fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]),\n /* c8 ignore next 2 -- Guard */\n ...(extraFix ? [\n extraFix,\n ] : []),\n ];\n }\n\n return [\n fixer.removeRange(\n (/\\s/v).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n ),\n /* c8 ignore next 2 -- Guard */\n ...(extraFix ? [\n extraFix,\n ] : []),\n ];\n }\n\n return [\n fixer.replaceText(jsdocNode, replacement),\n ...(extraFix ? [\n extraFix,\n ] : []),\n ];\n } : null, tag, data);\n };\n\n /** @type {GetRegexFromString} */\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n /** @type {GetTagDescription} */\n utils.getTagDescription = (tg, returnArray) => {\n return jsdocUtils.getTagDescription(tg, returnArray);\n };\n\n /** @type {SetTagDescription} */\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {GetDescription} */\n utils.getDescription = () => {\n /** @type {string[]} */\n const descriptions = [];\n let lastDescriptionLine = 0;\n let tagsBegun = false;\n jsdoc.source.some(({\n tokens: {\n description,\n end,\n tag,\n },\n }, idx) => {\n if (tag) {\n tagsBegun = true;\n }\n\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n if (!tagsBegun && description) {\n descriptions.push(description);\n }\n\n return true;\n }\n\n if (!tagsBegun && (idx || description)) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n descriptions,\n lastDescriptionLine,\n };\n };\n\n /** @type {SetBlockDescription} */\n utils.setBlockDescription = (setter) => {\n /** @type {string[]} */\n const descLines = [];\n /** @type {string[]} */\n const postDelims = [];\n /**\n * @type {undefined|Integer}\n */\n let startIdx;\n /**\n * @type {undefined|Integer}\n */\n let endIdx;\n\n /**\n * @type {undefined|{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n let info;\n\n jsdoc.source.some(({\n tokens: {\n delimiter,\n description,\n end,\n postDelimiter,\n start,\n tag,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n postDelims.push(postDelimiter);\n descLines.push(description);\n return false;\n });\n\n /* c8 ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n /** @type {Integer} */ (startIdx),\n /** @type {Integer} */ (endIdx) - /** @type {Integer} */ (startIdx),\n ...setter(\n /**\n * @type {{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n (info),\n seedTokens,\n descLines,\n postDelims,\n ),\n );\n }\n };\n\n /** @type {SetDescriptionLines} */\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n end,\n tag,\n },\n }, idx) => {\n /* c8 ignore next 3 -- Already checked */\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {ChangeTag} */\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n /** @type {SetTag} */\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n number: tag.line,\n // Or tag.source[0].number?\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n /** @type {RemoveTag} */\n utils.removeTag = (tagIndex, {\n removeEmptyBlock = false,\n tagSourceOffset = 0,\n } = {}) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n /** @type {Integer|undefined} */\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n }) => {\n return number === srcNumber;\n });\n // c8 ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n end: ending,\n tag,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n if (\n spliceIdx === 0 && jsdoc.tags.length >= 2 ||\n !removeEmptyBlock && (end || delimiter === '/**')\n ) {\n const {\n tokens,\n } = jsdoc.source[spliceIdx];\n for (const item of [\n 'postDelimiter',\n 'tag',\n 'postTag',\n 'type',\n 'postType',\n 'name',\n 'postName',\n 'description',\n ]) {\n tokens[\n /**\n * @type {\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n * \"postTag\"|\"name\"|\"postName\"|\"description\"}\n */ (\n item\n )\n ] = '';\n }\n } else {\n jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n }\n\n lastIndex = sourceIndex;\n\n return true;\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect\n // missing tags, this step should be added here (so that, e.g.,\n // if accessing `jsdoc.tags`, such as to add a new tag, the\n // correct information will be available)\n };\n\n /** @type {AddTag} */\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n /** @type {GetFirstLine} */\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n /** @type {SeedTokens} */\n utils.seedTokens = seedTokens;\n\n /** @type {EmptyTokens} */\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[\n /**\n * @type {\"start\"|\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n * \"postTag\"|\"name\"|\"postName\"|\"description\"|\"end\"|\"lineEnd\"}\n */ (\n prop\n )\n ] = '';\n }\n };\n\n /** @type {AddLine} */\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n /** @type {AddLines} */\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n /** @type {Integer|undefined} */\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // c8 ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return false;\n });\n\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n };\n\n /** @type {MakeMultiline} */\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n description,\n lineEnd,\n name,\n postDelimiter,\n tag,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n } else /* c8 ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n /**\n * @type {import('./jsdocUtils.js').FlattenRoots}\n */\n utils.flattenRoots = jsdocUtils.flattenRoots;\n\n /** @type {GetFunctionParameterNames} */\n utils.getFunctionParameterNames = (useDefaultObjectProperties, ignoreInterfacedParameters) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties, ignoreInterfacedParameters);\n };\n\n /** @type {HasParams} */\n utils.hasParams = () => {\n return jsdocUtils.hasParams(/** @type {Node} */ (node));\n };\n\n /** @type {IsGenerator} */\n utils.isGenerator = () => {\n return node !== null && Boolean(\n /**\n * @type {import('estree').FunctionDeclaration|\n * import('estree').FunctionExpression}\n */ (node).generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n ].includes(node.type) &&\n /** @type {import('estree').FunctionDeclaration} */\n (\n /**\n * @type {import('estree').ExportNamedDeclaration|\n * import('estree').ExportDefaultDeclaration}\n */ (node).declaration\n )?.generator,\n );\n };\n\n /** @type {IsConstructor} */\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(/** @type {Node} */ (node));\n };\n\n /** @type {GetJsdocTagsDeep} */\n utils.getJsdocTagsDeep = (tagName) => {\n const name = /** @type {string|false} */ (utils.getPreferredTagName({\n tagName,\n }));\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n /** @type {GetPreferredTagName} */\n utils.getPreferredTagName = (args) => {\n return jsdocUtils.getPreferredTagName(\n jsdoc, {\n ...args,\n context,\n mode,\n report,\n tagNamePreference,\n },\n );\n };\n\n /** @type {IsValidTag} */\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n /** @type {HasATag} */\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n /** @type {HasTag} */\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n /** @type {ComparePaths} */\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n /** @type {DropPathSegmentQuotes} */\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n /** @type {AvoidDocs} */\n utils.avoidDocs = () => {\n 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 /** @type {GetTagStructureForMode} */\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n /** @type {MayBeUndefinedTypeTag} */\n utils.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n /** @type {HasValueOrExecutorHasNonEmptyResolveValue} */\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(\n /** @type {Node} */ (node), anyPromiseAsReturn, allBranches,\n );\n };\n\n /** @type {HasYieldValue} */\n utils.hasYieldValue = () => {\n if ([\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n ].includes(/** @type {Node} */ (node).type)) {\n return jsdocUtils.hasYieldValue(\n /** @type {import('estree').Declaration|import('estree').Expression} */ (\n /** @type {import('estree').ExportNamedDeclaration|import('estree').ExportDefaultDeclaration} */\n (node).declaration\n ),\n );\n }\n\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node));\n };\n\n /** @type {HasYieldReturnValue} */\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node), true);\n };\n\n /** @type {HasThrowValue} */\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n /** @type {IsAsync} */\n utils.isAsync = () => {\n return Boolean(node && 'async' in node && node.async);\n };\n\n /** @type {GetTags} */\n utils.getTags = (tagName) => {\n return jsdocUtils.getTags(jsdoc, tagName);\n };\n\n /** @type {GetPresentTags} */\n utils.getPresentTags = (tagList) => {\n return jsdocUtils.filterTags(jsdoc, (tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n /** @type {FilterTags} */\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc, (tag) => {\n return filter(tag);\n });\n };\n\n /** @type {FilterAllTags} */\n utils.filterAllTags = (filter) => {\n const tags = jsdocUtils.getAllTags(jsdoc);\n return tags.filter((tag) => {\n return filter(tag);\n });\n };\n\n utils.getInlineTags = () => {\n return jsdocUtils.getInlineTags(jsdoc);\n };\n\n /** @type {GetTagsByType} */\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags);\n };\n\n /** @type {HasOptionTag} */\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n /** @type {GetClassNode} */\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].toReversed().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) ?? null;\n };\n\n /** @type {GetClassJsdoc} */\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n /** @type {ClassHasTag} */\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return classJsdoc !== null && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n /** @type {ForEachPreferredTag} */\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag) => {\n return jsdocUtils.forEachPreferredTag(\n jsdoc, tagName, arrayHandler, {\n context,\n mode,\n report,\n skipReportingBlockedTag,\n tagNamePreference,\n },\n );\n };\n\n /** @type {FindContext} */\n utils.findContext = (contexts, comment) => {\n const foundContext = contexts.find((cntxt) => {\n return typeof cntxt === 'string' ?\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n ) :\n (!cntxt.context || cntxt.context === 'any' ||\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt.context),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n )) && comment === cntxt.comment;\n });\n\n const contextStr = typeof foundContext === 'object' ?\n foundContext.context ?? 'any' :\n String(foundContext);\n\n return {\n contextStr,\n foundContext,\n };\n };\n\n return utils;\n};\n\n/**\n * @typedef {{\n * [key: string]: false|string|{\n * message: string,\n * replacement?: false|string\n * skipRootChecking?: boolean\n * unifyParentAndChildTypeChecks?: boolean\n * }\n * }} PreferredTypes\n */\n/**\n * @typedef {{\n * [key: string]: {\n * name?: \"text\"|\"name-defining\"|\"namepath-defining\"|\"namepath-referencing\"|false,\n * type?: boolean|string[],\n * required?: (\"name\"|\"type\"|\"typeOrNameRequired\")[]\n * }\n * }} StructuredTags\n */\n/**\n * Settings from ESLint types.\n * @typedef {{\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * mode: import('./jsdocUtils.js').ParserMode,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * contexts?: Context[],\n * augmentsExtendsReplacesDocs?: boolean,\n * ignoreReplacesDocs?: boolean,\n * implementsReplacesDocs?: boolean,\n * overrideReplacesDocs?: boolean,\n * ignoreInternal?: boolean,\n * ignorePrivate?: boolean,\n * exemptDestructuredRootsFromChecks?: boolean,\n * skipInvokedExpressionsForCommentFinding?: boolean\n * }} Settings\n */\n\n/**\n * @typedef {{\n * settings?: {\n * jsdoc?: {\n * ignorePrivate: boolean,\n * ignoreInternal: boolean,\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * overrideReplacesDocs: boolean,\n * ignoreReplacesDocs: boolean,\n * implementsReplacesDocs: boolean,\n * augmentsExtendsReplacesDocs: boolean,\n * exemptDestructuredRootsFromChecks: boolean,\n * skipInvokedExpressionsForCommentFinding: boolean,\n * mode: import('./jsdocUtils.js').ParserMode,\n * contexts: Context[],\n * }\n * }\n * }} JSDocSettings\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext & JSDocSettings} context\n * @returns {Settings|false}\n */\nconst getSettings = (context) => {\n /* eslint-disable perfectionist/sort-objects */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n skipInvokedExpressionsForCommentFinding:\n Boolean(context.settings.jsdoc?.skipInvokedExpressionsForCommentFinding),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ?? 'typescript',\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\n };\n /* eslint-enable perfectionist/sort-objects */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: /** @type {Error} */ (error).message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n * @callback MakeReport\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('estree').Node} commentNode\n * @returns {Report}\n */\n\n/** @type {MakeReport} */\nconst makeReport = (context, commentNode) => {\n /** @type {Report} */\n const report = (message, fix = null, jsdocLoc = null, data = undefined) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = /** @type {import('comment-parser').Spec & {line?: Integer}} */ (\n jsdocLoc\n ).source[0].number;\n }\n\n const lineNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.line +\n /** @type {Integer} */ (jsdocLoc.line);\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n if ('column' in jsdocLoc && typeof jsdocLoc.column === 'number') {\n const colNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent?: string,\n * info?: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state?: StateObject,\n * globalState?: Map<string, Map<string, string>>,\n * jsdoc?: JsdocBlockWithInline,\n * jsdocNode?: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node?: Node,\n * allComments?: import('estree').Node[]\n * report?: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: BasicUtils,\n * }\n * ) => void } JsdocVisitorBasic\n */\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent: string,\n * info: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state: StateObject,\n * globalState: Map<string, Map<string, string>>,\n * jsdoc: JsdocBlockWithInline,\n * jsdocNode: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node: Node|null,\n * allComments?: import('estree').Node[]\n * report: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => void } JsdocVisitor\n */\n\n/**\n * @param {{\n * comment?: string,\n * lastIndex?: Integer,\n * selector?: string,\n * isFunctionContext?: boolean,\n * }} info\n * @param {string} indent\n * @param {JsdocBlockWithInline} jsdoc\n * @param {RuleConfig} ruleConfig\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('@es-joy/jsdoccomment').Token} jsdocNode\n * @param {Node|null} node\n * @param {Settings} settings\n * @param {import('eslint').SourceCode} sourceCode\n * @param {JsdocVisitor} iterator\n * @param {StateObject} state\n * @param {boolean} [iteratingAll]\n * @returns {void}\n */\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n const report = makeReport(\n context,\n /** @type {import('estree').Node} */\n (jsdocNde),\n );\n\n const utils = getUtils(\n node,\n jsdoc,\n /** @type {import('eslint').AST.Token} */\n (jsdocNode),\n settings,\n report,\n context,\n sourceCode,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdocUtils\n .filterTags(jsdoc, ({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n jsdoc,\n jsdocNode: /**\n * @type {import('eslint').Rule.Node & {\n * range: [number, number];}}\n */ (jsdocNde),\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\n/**\n * @param {string[]} lines\n * @param {import('estree').Comment} jsdocNode\n * @returns {[indent: string, jsdoc: JsdocBlockWithInline]}\n */\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.line - 1\n ];\n\n let indentChar = sourceLine.charAt(0);\n if (indentChar !== ' ' && indentChar !== '\\t') {\n indentChar = ' ';\n }\n\n const indnt = indentChar.repeat(\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.column,\n );\n\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils.js').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {(context: import('eslint').Rule.RuleContext) => import('eslint').Rule.RuleContext} [modifyContext] Modify the rule's context object\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {true} [checkPrivate] Whether to check `@private` blocks (normally exempted)\n * @property {true} [checkInternal] Whether to check `@internal` blocks (normally exempted)\n * @property {true} [checkFile] Whether to iterates over all JSDoc blocks regardless of attachment\n * @property {true} [nonGlobalSettings] Whether to avoid relying on settings for global contexts\n * @property {true} [noTracking] Whether to disable the tracking of visited comment nodes (as\n * non-tracked may conduct further actions)\n * @property {true} [matchContext] Whether the rule expects contexts to be based on a match option\n * @property {(args: {\n * context: import('eslint').Rule.RuleContext,\n * state: StateObject,\n * settings: Settings,\n * utils: BasicUtils\n * }) => void} [exit] Handler to be executed upon exiting iteration of program AST\n * @property {(nca: NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param {ContextObject[]|null} [contexts] The `contexts` containing relevant `comment` info.\n * @param {boolean} [additiveCommentContexts] If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n /** @type {import('@es-joy/jsdoccomment').CommentHandler} */\n let handler;\n\n /** @type {Settings|false} */\n let settings;\n\n /**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {Node|null} node\n * @param {import('estree').Comment[]} jsdocNodes\n * @param {StateObject} state\n * @param {boolean} [lastCall]\n * @returns {void}\n */\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, /** @type {Settings} */ (settings));\n for (const jsdocNode of jsdocNodes) {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n if (!(/^\\/\\*\\*\\s/v).test(sourceCode.getText(\n /** @type {import('estree').Node} */\n (jsdocNde),\n ))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of /** @type {ContextObject[]} */ (contexts).entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n /** @type {Node} */\n (node),\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n const settngs = /** @type {Settings} */ (settings);\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n settings: settngs,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler({\n ...settings,\n mode: settings.mode === 'permissive' ? 'typescript' : settings.mode,\n });\n }\n\n const state = {};\n\n return {\n /**\n * @param {import('eslint').Rule.Node} node\n * @returns {void}\n */\n '*:not(Program)' (node) {\n const commentNode = getJSDocComment(\n sourceCode, node, /** @type {Settings} */ (settings),\n );\n if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n const ste = /** @type {StateObject} */ (state);\n ruleConfig.nonComment({\n node,\n state: ste,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n /** @type {import('estree').Comment} */\n (commentNode),\n ], /** @type {StateObject} */ (state));\n },\n 'Program:exit' () {\n const allComments = /** @type {import('estree').Comment[]} */ (\n sourceCode.getAllComments()\n );\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(\n context,\n null,\n untrackedJSdoc,\n /** @type {StateObject} */\n (state),\n true,\n );\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitorBasic} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComms = /** @type {unknown} */ (sourceCode.getAllComments());\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments: /** @type {import('estree').Node[]} */ (allComms),\n context,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // dslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'layout', 'problem', 'suggestion',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(\n /** @type {JsdocVisitorBasic} */ (iterator),\n ruleConfig,\n );\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n /** @type {import('eslint').Rule.RuleModule} */\n return {\n /**\n * The entrypoint for the JSDoc rule.\n * @param {import('eslint').Rule.RuleContext} ctx\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {import('eslint').Rule.RuleListener}\n * a listener with parser callback function.\n */\n create (ctx) {\n const context = ruleConfig.modifyContext ?\n ruleConfig.modifyContext(ctx) :\n ctx;\n\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n /**\n * @type {Context[]|undefined}\n */\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults, ruleConfig.nonGlobalSettings ? {} : settings);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator,\n ruleConfig,\n hasObjectAny ? /** @type {ContextObject[]} */ (contexts) : null,\n ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n /** @type {Partial<StateObject>} */\n const state = {};\n\n /** @type {CheckJsdoc} */\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines,\n /** @type {import('estree').Comment} */\n (jsdocNode),\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info,\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n /** @type {StateObject} */\n (state),\n );\n };\n\n /** @type {import('eslint').Rule.RuleListener} */\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler({\n ...settings,\n mode: settings.mode === 'permissive' ? 'typescript' : settings.mode,\n }),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (typeof ruleConfig.exit === 'function') {\n contextObject['Program:exit'] = () => {\n const ste = /** @type {StateObject} */ (state);\n\n // @ts-expect-error `utils` not needed at this point\n /** @type {Required<RuleConfig>} */ (ruleConfig).exit({\n context,\n settings,\n state: ste,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n\nexport {\n parseComment,\n} from '@es-joy/jsdoccomment';\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAKA,IAAAE,cAAA,GAAAF,OAAA;AAIA,IAAAG,QAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAA8B,SAAAI,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAV,uBAAA,YAAAA,CAAAM,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM;EACJgB,WAAW;EACXC;AACF,CAAC,GAAGC,mBAAI;;AAER;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AA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","ignoreList":[]}
1
+ {"version":3,"file":"iterateJsdoc.cjs","names":["jsdocUtils","_interopRequireWildcard","require","_jsdoccomment","_commentParser","_esquery","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","mode","tagNamePreference","utils","method","tagName","reportSettings","message","report","loc","end","column","line","start","parseClosureTemplateTag","tag","pathDoesNotBeginWith","getPreferredTagNameObject","ret","getPreferredTagNameSimple","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","sc","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","augmentsExtendsReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","maxLines","minLines","overrideReplacesDocs","functionTypes","isIteratingFunction","includes","String","type","isIteratingFunctionOrVariable","declarations","declaration","some","init","isVirtualFunction","Boolean","hasATag","stringify","tagBlock","specRewire","block","commentStringify","reportJSDoc","msg","handler","data","fixer","extraFix","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","setTagDescription","matcher","setter","finalIdx","source","tokens","description","idx","getDescription","descriptions","lastDescriptionLine","tagsBegun","push","length","join","setBlockDescription","descLines","postDelims","startIdx","endIdx","info","delimiter","postDelimiter","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","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","lineEnd","name","postName","postTag","postType","trimEnd","flattenRoots","getFunctionParameterNames","useDefaultObjectProperties","ignoreInterfacedParameters","hasParams","isGenerator","generator","value","isConstructor","getJsdocTagsDeep","getPreferredTagName","args","isValidTag","definedTags","names","hasTag","comparePaths","dropPathSegmentQuotes","avoidDocs","exemptSpecialMethods","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","otherModeMaps","result","otherResult","otherModeMap","otherMode","tagMissingRequiredTypeOrNamepath","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","getTags","tagList","filterTags","filter","filterAllTags","getAllTags","getInlineTags","getTagsByType","hasOptionTag","getClassNode","toReversed","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","skipReportingBlockedTag","findContext","contexts","comment","foundContext","cntxt","esquery","matches","parse","visitorKeys","contextStr","getSettings","ignorePrivate","ignoreInternal","Number","skipInvokedExpressionsForCommentFinding","preferredTypes","exemptDestructuredRootsFromChecks","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","iterator","state","jsdocNde","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indentChar","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","selector","lastComment","settngs","exit","create","commentHandler","*:not(Program)","noTracking","nonComment","ste","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","allComms","iterateJsdoc","metaType","TypeError","ctx","modifyContext","contextDefaults","contextSelected","matchContext","match","enforcedContexts","nonGlobalSettings","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import * as jsdocUtils from './jsdocUtils.js';\nimport {\n commentHandler,\n getJSDocComment,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport esquery from 'esquery';\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @typedef {import('@es-joy/jsdoccomment').JsdocBlockWithInline} JsdocBlockWithInline\n */\n\n/**\n * @typedef {{\n * disallowName?: string,\n * allowName?: string,\n * context?: string,\n * comment?: string,\n * tags?: string[],\n * replacement?: string,\n * minimum?: Integer,\n * message?: string,\n * forceRequireReturn?: boolean\n * }} ContextObject\n */\n/**\n * @typedef {string|ContextObject} Context\n */\n\n/**\n * @callback CheckJsdoc\n * @param {{\n * lastIndex?: Integer,\n * isFunctionContext?: boolean,\n * selector?: string,\n * comment?: string\n * }} info\n * @param {null|((jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean|undefined)} handler\n * @param {import('eslint').Rule.Node} node\n * @returns {void}\n */\n\n/**\n * @callback ForEachPreferredTag\n * @param {string} tagName\n * @param {(\n * matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n * targetTagName: string\n * ) => void} arrayHandler\n * @param {boolean} [skipReportingBlockedTag]\n * @returns {void}\n */\n\n/**\n * @callback ReportSettings\n * @param {string} message\n * @returns {void}\n */\n\n/**\n * @callback ParseClosureTemplateTag\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\n\n/**\n * @callback GetPreferredTagNameObject\n * @param {{\n * tagName: string\n * }} cfg\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @typedef {{\n * forEachPreferredTag: ForEachPreferredTag,\n * reportSettings: ReportSettings,\n * parseClosureTemplateTag: ParseClosureTemplateTag,\n * getPreferredTagNameObject: GetPreferredTagNameObject,\n * pathDoesNotBeginWith: import('./jsdocUtils.js').PathDoesNotBeginWith\n * isNameOrNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNameOrNamepath: IsNamepathX,\n * tagMightHaveName: IsNamepathX\n * }} BasicUtils\n */\n\n/**\n * @callback IsIteratingFunction\n * @returns {boolean}\n */\n\n/**\n * @callback IsVirtualFunction\n * @returns {boolean}\n */\n\n/**\n * @callback Stringify\n * @param {import('comment-parser').Block} tagBlock\n * @param {boolean} [specRewire]\n * @returns {string}\n */\n\n/**\n * @callback ReportJSDoc\n * @param {string} msg\n * @param {null|import('comment-parser').Spec|{line: Integer, column?: Integer}} [tag]\n * @param {((fixer: import('eslint').Rule.RuleFixer) => import('eslint').Rule.Fix|void)|null} [handler]\n * @param {boolean} [specRewire]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n */\n\n/**\n * @callback GetRegexFromString\n * @param {string} str\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\n\n/**\n * @callback GetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\n\n/**\n * @callback SetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback GetDescription\n * @returns {{\n * description: string,\n * descriptions: string[],\n * lastDescriptionLine: Integer\n * }}\n */\n\n/**\n * @callback SetBlockDescription\n * @param {(\n * info: {\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * },\n * seedTokens: (\n * tokens?: Partial<import('comment-parser').Tokens>\n * ) => import('comment-parser').Tokens,\n * descLines: string[],\n * postDelims: string[]\n * ) => import('comment-parser').Line[]} setter\n * @returns {void}\n */\n\n/**\n * @callback SetDescriptionLines\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback ChangeTag\n * @param {import('comment-parser').Spec} tag\n * @param {...Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback SetTag\n * @param {import('comment-parser').Spec & {\n * line: Integer\n * }} tag\n * @param {Partial<import('comment-parser').Tokens>} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback RemoveTag\n * @param {Integer} tagIndex\n * @param {{\n * removeEmptyBlock?: boolean,\n * tagSourceOffset?: Integer\n * }} [cfg]\n * @returns {void}\n */\n\n/**\n * @callback AddTag\n * @param {string} targetTagName\n * @param {Integer} [number]\n * @param {Partial<import('comment-parser').Tokens>} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback GetFirstLine\n * @returns {Integer|undefined}\n */\n\n/**\n * @typedef {(\n * tokens?: Partial<import('comment-parser').Tokens> | undefined\n * ) => import('comment-parser').Tokens} SeedTokens\n */\n\n/**\n * Sets tokens to empty string.\n * @callback EmptyTokens\n * @param {import('comment-parser').Tokens} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLine\n * @param {Integer} sourceIndex\n * @param {Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLines\n * @param {Integer} tagIndex\n * @param {Integer} tagSourceOffset\n * @param {Integer} numLines\n * @returns {void}\n */\n\n/**\n * @callback MakeMultiline\n * @returns {void}\n */\n\n/**\n * @callback GetFunctionParameterNames\n * @param {boolean} [useDefaultObjectProperties]\n * @param {boolean} [ignoreInterfacedParameters]\n * @returns {import('./jsdocUtils.js').ParamNameInfo[]}\n */\n\n/**\n * @callback HasParams\n * @returns {Integer}\n */\n\n/**\n * @callback IsGenerator\n * @returns {boolean}\n */\n\n/**\n * @callback IsConstructor\n * @returns {boolean}\n */\n\n/**\n * @callback GetJsdocTagsDeep\n * @param {string} tagName\n * @returns {false|{\n * idx: Integer,\n * name: string,\n * type: string\n * }[]}\n */\n\n/**\n * @callback GetPreferredTagName\n * @param {{\n * tagName: string,\n * skipReportingBlockedTag?: boolean,\n * allowObjectReturn?: boolean,\n * defaultMessage?: string\n * }} cfg\n * @returns {string|undefined|false|{\n * message: string;\n * replacement?: string|undefined;\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @callback IsValidTag\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\n\n/**\n * @callback HasATag\n * @param {string[]} names\n * @returns {boolean}\n */\n\n/**\n * @callback HasTag\n * @param {string} name\n * @returns {boolean}\n */\n\n/**\n * @callback ComparePaths\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\n\n/**\n * @callback DropPathSegmentQuotes\n * @param {string} name\n * @returns {string}\n */\n\n/**\n * @callback AvoidDocs\n * @param {boolean} [exemptSpecialMethods]\n * @returns {boolean}\n */\n\n/**\n * @callback TagMightHaveNamePositionTypePosition\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} [otherModeMaps]\n * @returns {boolean|{otherMode: true}}\n */\n\n/**\n * @callback TagMustHave\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback TagMissingRequiredTypeOrNamepath\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback IsNamepathX\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetTagStructureForMode\n * @param {import('./jsdocUtils.js').ParserMode} mde\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\n\n/**\n * @callback MayBeUndefinedTypeTag\n * @param {import('comment-parser').Spec} tag\n * @returns {boolean}\n */\n\n/**\n * @callback HasValueOrExecutorHasNonEmptyResolveValue\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} [allBranches]\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldReturnValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasThrowValue\n * @returns {boolean}\n */\n\n/**\n * @callback IsAsync\n * @returns {boolean|undefined}\n */\n\n/**\n * @callback GetTags\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\n\n/**\n * @callback GetPresentTags\n * @param {string[]} tagList\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterTags\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterAllTags\n * @param {(tag: (import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)) => boolean} filter\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\n\n/**\n * @callback getInlineTags\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: number | undefined; column?: number | undefined;\n * })[]}\n */\n\n/**\n * @callback GetTagsByType\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n * tagsWithNames: import('comment-parser').Spec[],\n * tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\n\n/**\n * @callback HasOptionTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetClassNode\n * @returns {Node|null}\n */\n\n/**\n * @callback GetClassJsdoc\n * @returns {null|JsdocBlockWithInline}\n */\n\n/**\n * @callback ClassHasTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback FindContext\n * @param {Context[]} contexts\n * @param {string|undefined} comment\n * @returns {{\n * foundContext: Context|undefined,\n * contextStr: string\n * }}\n */\n\n/**\n * @typedef {BasicUtils & {\n * isIteratingFunction: IsIteratingFunction,\n * isIteratingFunctionOrVariable: IsIteratingFunction,\n * isVirtualFunction: IsVirtualFunction,\n * stringify: Stringify,\n * reportJSDoc: ReportJSDoc,\n * getRegexFromString: GetRegexFromString,\n * getTagDescription: GetTagDescription,\n * setTagDescription: SetTagDescription,\n * getDescription: GetDescription,\n * setBlockDescription: SetBlockDescription,\n * setDescriptionLines: SetDescriptionLines,\n * changeTag: ChangeTag,\n * setTag: SetTag,\n * removeTag: RemoveTag,\n * addTag: AddTag,\n * getFirstLine: GetFirstLine,\n * seedTokens: SeedTokens,\n * emptyTokens: EmptyTokens,\n * addLine: AddLine,\n * addLines: AddLines,\n * makeMultiline: MakeMultiline,\n * flattenRoots: import('./jsdocUtils.js').FlattenRoots,\n * getFunctionParameterNames: GetFunctionParameterNames,\n * hasParams: HasParams,\n * isGenerator: IsGenerator,\n * isConstructor: IsConstructor,\n * getJsdocTagsDeep: GetJsdocTagsDeep,\n * getPreferredTagName: GetPreferredTagName,\n * isValidTag: IsValidTag,\n * hasATag: HasATag,\n * hasTag: HasTag,\n * comparePaths: ComparePaths,\n * dropPathSegmentQuotes: DropPathSegmentQuotes,\n * avoidDocs: AvoidDocs,\n * tagMightHaveNamePosition: TagMightHaveNamePositionTypePosition,\n * tagMightHaveTypePosition: TagMightHaveNamePositionTypePosition,\n * tagMustHaveNamePosition: TagMustHave,\n * tagMustHaveTypePosition: TagMustHave,\n * tagMissingRequiredTypeOrNamepath: TagMissingRequiredTypeOrNamepath,\n * isNameOrNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNameOrNamepath: IsNamepathX,\n * tagMightHaveName: IsNamepathX,\n * tagMightHaveNamepath: IsNamepathX,\n * getTagStructureForMode: GetTagStructureForMode,\n * mayBeUndefinedTypeTag: MayBeUndefinedTypeTag,\n * hasValueOrExecutorHasNonEmptyResolveValue: HasValueOrExecutorHasNonEmptyResolveValue,\n * hasYieldValue: HasYieldValue,\n * hasYieldReturnValue: HasYieldReturnValue,\n * hasThrowValue: HasThrowValue,\n * isAsync: IsAsync,\n * getTags: GetTags,\n * getPresentTags: GetPresentTags,\n * filterTags: FilterTags,\n * filterAllTags: FilterAllTags,\n * getInlineTags: getInlineTags,\n * getTagsByType: GetTagsByType,\n * hasOptionTag: HasOptionTag,\n * getClassNode: GetClassNode,\n * getClassJsdoc: GetClassJsdoc,\n * classHasTag: ClassHasTag,\n * findContext: FindContext\n * }} Utils\n */\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n/**\n * Should use ESLint rule's typing.\n * @typedef {import('eslint').Rule.RuleMetaData} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n * @typedef {{\n * globalTags: boolean,\n * hasDuplicates: {\n * [key: string]: boolean\n * },\n * selectorMap: {\n * [selector: string]: {\n * [comment: string]: Integer\n * }\n * },\n * hasTag: {\n * [key: string]: boolean\n * },\n * hasNonComment: number,\n * hasNonCommentBeforeTag: {\n * [key: string]: boolean|number\n * },\n * foundTypedefValues: string[]\n * }} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n * @typedef {import('eslint').Rule.Node} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {{\n * tagNamePreference?: import('./jsdocUtils.js').TagNamePreference,\n * mode?: import('./jsdocUtils.js').ParserMode\n * }} cfg\n * @returns {BasicUtils}\n */\nconst getBasicUtils = (context, {\n mode,\n tagNamePreference,\n}) => {\n /** @type {BasicUtils} */\n const utils = {};\n\n for (const method of [\n 'isNameOrNamepathDefiningTag',\n 'isNamepathReferencingTag',\n 'isNamepathOrUrlReferencingTag',\n 'tagMightHaveNameOrNamepath',\n 'tagMightHaveName',\n 'tagMightHaveNamepath',\n ]) {\n /** @type {IsNamepathX} */\n utils[\n /** @type {\"isNameOrNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNameOrNamepath\"|\"tagMightHaveName\"} */ (\n method\n )] = (tagName) => {\n return jsdocUtils[\n /** @type {\"isNameOrNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNameOrNamepath\"|\"tagMightHaveName\"} */\n (method)\n ](tagName);\n };\n }\n\n /** @type {ReportSettings} */\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n /** @type {ParseClosureTemplateTag} */\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n /** @type {GetPreferredTagNameObject} */\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagNameSimple(\n tagName,\n /** @type {import('./jsdocUtils.js').ParserMode} */ (mode),\n tagNamePreference,\n context,\n );\n const isObject = ret && typeof ret === 'object';\n if (ret === false || (isObject && !ret.replacement)) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\n/**\n * @callback Report\n * @param {string} message\n * @param {import('@eslint/core').RuleFixer|null} [fix]\n * @param {null|\n * {line?: Integer, column?: Integer}|\n * import('comment-parser').Spec & {line?: Integer}\n * } [jsdocLoc]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n * @returns {void}\n */\n\n/**\n * @param {Node|null} node\n * @param {JsdocBlockWithInline} jsdoc\n * @param {import('eslint').AST.Token} jsdocNode\n * @param {Settings} settings\n * @param {Report} report\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('eslint').SourceCode} sc\n * @param {boolean|undefined} iteratingAll\n * @param {RuleConfig} ruleConfig\n * @param {string} indent\n * @returns {Utils}\n */\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n sc,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = /** @type {import('eslint').Rule.Node[]} */ (node ?\n (sc.getAncestors ?\n (\n sc.getAncestors(node)\n /* c8 ignore next 5 */\n ) :\n (\n // @ts-expect-error ESLint 8\n context.getAncestors()\n )) :\n []);\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n\n const utils = /** @type {Utils} */ (getBasicUtils(context, settings));\n\n const {\n augmentsExtendsReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n maxLines,\n minLines,\n mode,\n overrideReplacesDocs,\n tagNamePreference,\n } = settings;\n\n const functionTypes = [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'MethodDefinition',\n ];\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunction = () => {\n return !iteratingAll || functionTypes.includes(String(node?.type));\n };\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunctionOrVariable = () => {\n if (utils.isIteratingFunction()) {\n return true;\n }\n\n /** @type {import('estree').VariableDeclarator[]} */\n const declarations = node?.type === 'VariableDeclaration' ?\n node.declarations :\n (node?.type === 'ExportNamedDeclaration' && node.declaration?.type === 'VariableDeclaration' ?\n node.declaration.declarations :\n []);\n\n return declarations.some(({\n init,\n }) => {\n return functionTypes.includes(String(init?.type));\n });\n };\n\n /** @type {IsVirtualFunction} */\n utils.isVirtualFunction = () => {\n return Boolean(iteratingAll) && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n /** @type {Stringify} */\n utils.stringify = (tagBlock, specRewire) => {\n let block;\n if (specRewire) {\n block = rewireSpecs(tagBlock);\n }\n\n return commentStringify(/** @type {import('comment-parser').Block} */ (\n specRewire ? block : tagBlock));\n };\n\n /** @type {ReportJSDoc} */\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? /** @type {import('eslint').Rule.ReportFixer} */ (\n fixer,\n ) => {\n const extraFix = handler(fixer);\n\n const replacement = utils.stringify(jsdoc, specRewire);\n\n if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/v);\n if (lastLineBreakPos > -1) {\n return [\n fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]),\n /* c8 ignore next 2 -- Guard */\n ...(extraFix ? [\n extraFix,\n ] : []),\n ];\n }\n\n return [\n fixer.removeRange(\n (/\\s/v).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n ),\n /* c8 ignore next 2 -- Guard */\n ...(extraFix ? [\n extraFix,\n ] : []),\n ];\n }\n\n return [\n fixer.replaceText(jsdocNode, replacement),\n ...(extraFix ? [\n extraFix,\n ] : []),\n ];\n } : null, tag, data);\n };\n\n /** @type {GetRegexFromString} */\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n /** @type {GetTagDescription} */\n utils.getTagDescription = (tg, returnArray) => {\n return jsdocUtils.getTagDescription(tg, returnArray);\n };\n\n /** @type {SetTagDescription} */\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {GetDescription} */\n utils.getDescription = () => {\n /** @type {string[]} */\n const descriptions = [];\n let lastDescriptionLine = 0;\n let tagsBegun = false;\n jsdoc.source.some(({\n tokens: {\n description,\n end,\n tag,\n },\n }, idx) => {\n if (tag) {\n tagsBegun = true;\n }\n\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n if (!tagsBegun && description) {\n descriptions.push(description);\n }\n\n return true;\n }\n\n if (!tagsBegun && (idx || description)) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n descriptions,\n lastDescriptionLine,\n };\n };\n\n /** @type {SetBlockDescription} */\n utils.setBlockDescription = (setter) => {\n /** @type {string[]} */\n const descLines = [];\n /** @type {string[]} */\n const postDelims = [];\n /**\n * @type {undefined|Integer}\n */\n let startIdx;\n /**\n * @type {undefined|Integer}\n */\n let endIdx;\n\n /**\n * @type {undefined|{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n let info;\n\n jsdoc.source.some(({\n tokens: {\n delimiter,\n description,\n end,\n postDelimiter,\n start,\n tag,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n postDelims.push(postDelimiter);\n descLines.push(description);\n return false;\n });\n\n /* c8 ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n /** @type {Integer} */ (startIdx),\n /** @type {Integer} */ (endIdx) - /** @type {Integer} */ (startIdx),\n ...setter(\n /**\n * @type {{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n (info),\n seedTokens,\n descLines,\n postDelims,\n ),\n );\n }\n };\n\n /** @type {SetDescriptionLines} */\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n end,\n tag,\n },\n }, idx) => {\n /* c8 ignore next 3 -- Already checked */\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {ChangeTag} */\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n /** @type {SetTag} */\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n number: tag.line,\n // Or tag.source[0].number?\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n /** @type {RemoveTag} */\n utils.removeTag = (tagIndex, {\n removeEmptyBlock = false,\n tagSourceOffset = 0,\n } = {}) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n /** @type {Integer|undefined} */\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n }) => {\n return number === srcNumber;\n });\n // c8 ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n end: ending,\n tag,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n if (\n spliceIdx === 0 && jsdoc.tags.length >= 2 ||\n !removeEmptyBlock && (end || delimiter === '/**')\n ) {\n const {\n tokens,\n } = jsdoc.source[spliceIdx];\n for (const item of [\n 'postDelimiter',\n 'tag',\n 'postTag',\n 'type',\n 'postType',\n 'name',\n 'postName',\n 'description',\n ]) {\n tokens[\n /**\n * @type {\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n * \"postTag\"|\"name\"|\"postName\"|\"description\"}\n */ (\n item\n )\n ] = '';\n }\n } else {\n jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n }\n\n lastIndex = sourceIndex;\n\n return true;\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect\n // missing tags, this step should be added here (so that, e.g.,\n // if accessing `jsdoc.tags`, such as to add a new tag, the\n // correct information will be available)\n };\n\n /** @type {AddTag} */\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n /** @type {GetFirstLine} */\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n /** @type {SeedTokens} */\n utils.seedTokens = seedTokens;\n\n /** @type {EmptyTokens} */\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[\n /**\n * @type {\"start\"|\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n * \"postTag\"|\"name\"|\"postName\"|\"description\"|\"end\"|\"lineEnd\"}\n */ (\n prop\n )\n ] = '';\n }\n };\n\n /** @type {AddLine} */\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n /** @type {AddLines} */\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n /** @type {Integer|undefined} */\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // c8 ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return false;\n });\n\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n };\n\n /** @type {MakeMultiline} */\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n description,\n lineEnd,\n name,\n postDelimiter,\n tag,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n } else /* c8 ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n /**\n * @type {import('./jsdocUtils.js').FlattenRoots}\n */\n utils.flattenRoots = jsdocUtils.flattenRoots;\n\n /** @type {GetFunctionParameterNames} */\n utils.getFunctionParameterNames = (useDefaultObjectProperties, ignoreInterfacedParameters) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties, ignoreInterfacedParameters);\n };\n\n /** @type {HasParams} */\n utils.hasParams = () => {\n return jsdocUtils.hasParams(/** @type {Node} */ (node));\n };\n\n /** @type {IsGenerator} */\n utils.isGenerator = () => {\n return node !== null && Boolean(\n /**\n * @type {import('estree').FunctionDeclaration|\n * import('estree').FunctionExpression}\n */ (node).generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n ].includes(node.type) &&\n /** @type {import('estree').FunctionDeclaration} */\n (\n /**\n * @type {import('estree').ExportNamedDeclaration|\n * import('estree').ExportDefaultDeclaration}\n */ (node).declaration\n )?.generator,\n );\n };\n\n /** @type {IsConstructor} */\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(/** @type {Node} */ (node));\n };\n\n /** @type {GetJsdocTagsDeep} */\n utils.getJsdocTagsDeep = (tagName) => {\n const name = /** @type {string|false} */ (utils.getPreferredTagName({\n tagName,\n }));\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n /** @type {GetPreferredTagName} */\n utils.getPreferredTagName = (args) => {\n return jsdocUtils.getPreferredTagName(\n jsdoc, {\n ...args,\n context,\n mode,\n report,\n tagNamePreference,\n },\n );\n };\n\n /** @type {IsValidTag} */\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n /** @type {HasATag} */\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n /** @type {HasTag} */\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n /** @type {ComparePaths} */\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n /** @type {DropPathSegmentQuotes} */\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n /** @type {AvoidDocs} */\n utils.avoidDocs = (\n exemptSpecialMethods = true,\n ) => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (exemptSpecialMethods && jsdocUtils.exemptSpeciaMethods(\n jsdoc,\n node,\n context,\n /** @type {import('json-schema').JSONSchema4|import('json-schema').JSONSchema4[]} */ (\n ruleConfig.meta.schema\n ),\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n /** @type {TagMightHaveNamePositionTypePosition} */\n utils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */ (\n method\n )\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n /** @type {TagMissingRequiredTypeOrNamepath} */\n utils.tagMissingRequiredTypeOrNamepath = (tagName, otherModeMaps) => {\n const result = jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName);\n if (!result) {\n return false;\n }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n ]) {\n /** @type {TagMustHave} */\n utils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n /** @type {GetTagStructureForMode} */\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n /** @type {MayBeUndefinedTypeTag} */\n utils.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n /** @type {HasValueOrExecutorHasNonEmptyResolveValue} */\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(\n /** @type {Node} */ (node), anyPromiseAsReturn, allBranches,\n );\n };\n\n /** @type {HasYieldValue} */\n utils.hasYieldValue = () => {\n if ([\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n ].includes(/** @type {Node} */ (node).type)) {\n return jsdocUtils.hasYieldValue(\n /** @type {import('estree').Declaration|import('estree').Expression} */ (\n /** @type {import('estree').ExportNamedDeclaration|import('estree').ExportDefaultDeclaration} */\n (node).declaration\n ),\n );\n }\n\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node));\n };\n\n /** @type {HasYieldReturnValue} */\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node), true);\n };\n\n /** @type {HasThrowValue} */\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n /** @type {IsAsync} */\n utils.isAsync = () => {\n return Boolean(node && 'async' in node && node.async);\n };\n\n /** @type {GetTags} */\n utils.getTags = (tagName) => {\n return jsdocUtils.getTags(jsdoc, tagName);\n };\n\n /** @type {GetPresentTags} */\n utils.getPresentTags = (tagList) => {\n return jsdocUtils.filterTags(jsdoc, (tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n /** @type {FilterTags} */\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc, (tag) => {\n return filter(tag);\n });\n };\n\n /** @type {FilterAllTags} */\n utils.filterAllTags = (filter) => {\n const tags = jsdocUtils.getAllTags(jsdoc);\n return tags.filter((tag) => {\n return filter(tag);\n });\n };\n\n utils.getInlineTags = () => {\n return jsdocUtils.getInlineTags(jsdoc);\n };\n\n /** @type {GetTagsByType} */\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags);\n };\n\n /** @type {HasOptionTag} */\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n /** @type {GetClassNode} */\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].toReversed().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) ?? null;\n };\n\n /** @type {GetClassJsdoc} */\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n /** @type {ClassHasTag} */\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return classJsdoc !== null && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n /** @type {ForEachPreferredTag} */\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag) => {\n return jsdocUtils.forEachPreferredTag(\n jsdoc, tagName, arrayHandler, {\n context,\n mode,\n report,\n skipReportingBlockedTag,\n tagNamePreference,\n },\n );\n };\n\n /** @type {FindContext} */\n utils.findContext = (contexts, comment) => {\n const foundContext = contexts.find((cntxt) => {\n return typeof cntxt === 'string' ?\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n ) :\n (!cntxt.context || cntxt.context === 'any' ||\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt.context),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n )) && comment === cntxt.comment;\n });\n\n const contextStr = typeof foundContext === 'object' ?\n foundContext.context ?? 'any' :\n String(foundContext);\n\n return {\n contextStr,\n foundContext,\n };\n };\n\n return utils;\n};\n\n/**\n * @typedef {{\n * [key: string]: false|string|{\n * message: string,\n * replacement?: false|string\n * skipRootChecking?: boolean\n * unifyParentAndChildTypeChecks?: boolean\n * }\n * }} PreferredTypes\n */\n/**\n * @typedef {{\n * [key: string]: {\n * name?: \"text\"|\"name-defining\"|\"namepath-defining\"|\"namepath-referencing\"|false,\n * type?: boolean|string[],\n * required?: (\"name\"|\"type\"|\"typeOrNameRequired\")[]\n * }\n * }} StructuredTags\n */\n/**\n * Settings from ESLint types.\n * @typedef {{\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * mode: import('./jsdocUtils.js').ParserMode,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * contexts?: Context[],\n * augmentsExtendsReplacesDocs?: boolean,\n * ignoreReplacesDocs?: boolean,\n * implementsReplacesDocs?: boolean,\n * overrideReplacesDocs?: boolean,\n * ignoreInternal?: boolean,\n * ignorePrivate?: boolean,\n * exemptDestructuredRootsFromChecks?: boolean,\n * skipInvokedExpressionsForCommentFinding?: boolean\n * }} Settings\n */\n\n/**\n * @typedef {{\n * settings?: {\n * jsdoc?: {\n * ignorePrivate: boolean,\n * ignoreInternal: boolean,\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * overrideReplacesDocs: boolean,\n * ignoreReplacesDocs: boolean,\n * implementsReplacesDocs: boolean,\n * augmentsExtendsReplacesDocs: boolean,\n * exemptDestructuredRootsFromChecks: boolean,\n * skipInvokedExpressionsForCommentFinding: boolean,\n * mode: import('./jsdocUtils.js').ParserMode,\n * contexts: Context[],\n * }\n * }\n * }} JSDocSettings\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext & JSDocSettings} context\n * @returns {Settings|false}\n */\nconst getSettings = (context) => {\n /* eslint-disable perfectionist/sort-objects */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n skipInvokedExpressionsForCommentFinding:\n Boolean(context.settings.jsdoc?.skipInvokedExpressionsForCommentFinding),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ?? 'typescript',\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\n };\n /* eslint-enable perfectionist/sort-objects */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: /** @type {Error} */ (error).message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n * @callback MakeReport\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('estree').Node} commentNode\n * @returns {Report}\n */\n\n/** @type {MakeReport} */\nconst makeReport = (context, commentNode) => {\n /** @type {Report} */\n const report = (message, fix = null, jsdocLoc = null, data = undefined) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = /** @type {import('comment-parser').Spec & {line?: Integer}} */ (\n jsdocLoc\n ).source[0].number;\n }\n\n const lineNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.line +\n /** @type {Integer} */ (jsdocLoc.line);\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n if ('column' in jsdocLoc && typeof jsdocLoc.column === 'number') {\n const colNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent?: string,\n * info?: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state?: StateObject,\n * globalState?: Map<string, Map<string, string>>,\n * jsdoc?: JsdocBlockWithInline,\n * jsdocNode?: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node?: Node,\n * allComments?: import('estree').Node[]\n * report?: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: BasicUtils,\n * }\n * ) => void } JsdocVisitorBasic\n */\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent: string,\n * info: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state: StateObject,\n * globalState: Map<string, Map<string, string>>,\n * jsdoc: JsdocBlockWithInline,\n * jsdocNode: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node: Node|null,\n * allComments?: import('estree').Node[]\n * report: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => void } JsdocVisitor\n */\n\n/**\n * @param {{\n * comment?: string,\n * lastIndex?: Integer,\n * selector?: string,\n * isFunctionContext?: boolean,\n * }} info\n * @param {string} indent\n * @param {JsdocBlockWithInline} jsdoc\n * @param {RuleConfig} ruleConfig\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('@es-joy/jsdoccomment').Token} jsdocNode\n * @param {Node|null} node\n * @param {Settings} settings\n * @param {import('eslint').SourceCode} sourceCode\n * @param {JsdocVisitor} iterator\n * @param {StateObject} state\n * @param {boolean} [iteratingAll]\n * @returns {void}\n */\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n const report = makeReport(\n context,\n /** @type {import('estree').Node} */\n (jsdocNde),\n );\n\n const utils = getUtils(\n node,\n jsdoc,\n /** @type {import('eslint').AST.Token} */\n (jsdocNode),\n settings,\n report,\n context,\n sourceCode,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdocUtils\n .filterTags(jsdoc, ({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n jsdoc,\n jsdocNode: /**\n * @type {import('eslint').Rule.Node & {\n * range: [number, number];}}\n */ (jsdocNde),\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\n/**\n * @param {string[]} lines\n * @param {import('estree').Comment} jsdocNode\n * @returns {[indent: string, jsdoc: JsdocBlockWithInline]}\n */\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.line - 1\n ];\n\n let indentChar = sourceLine.charAt(0);\n if (indentChar !== ' ' && indentChar !== '\\t') {\n indentChar = ' ';\n }\n\n const indnt = indentChar.repeat(\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.column,\n );\n\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils.js').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {(context: import('eslint').Rule.RuleContext) => import('eslint').Rule.RuleContext} [modifyContext] Modify the rule's context object\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {true} [checkPrivate] Whether to check `@private` blocks (normally exempted)\n * @property {true} [checkInternal] Whether to check `@internal` blocks (normally exempted)\n * @property {true} [checkFile] Whether to iterates over all JSDoc blocks regardless of attachment\n * @property {true} [nonGlobalSettings] Whether to avoid relying on settings for global contexts\n * @property {true} [noTracking] Whether to disable the tracking of visited comment nodes (as\n * non-tracked may conduct further actions)\n * @property {true} [matchContext] Whether the rule expects contexts to be based on a match option\n * @property {(args: {\n * context: import('eslint').Rule.RuleContext,\n * state: StateObject,\n * settings: Settings,\n * utils: BasicUtils\n * }) => void} [exit] Handler to be executed upon exiting iteration of program AST\n * @property {(nca: NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param {ContextObject[]|null} [contexts] The `contexts` containing relevant `comment` info.\n * @param {boolean} [additiveCommentContexts] If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n /** @type {import('@es-joy/jsdoccomment').CommentHandler} */\n let handler;\n\n /** @type {Settings|false} */\n let settings;\n\n /**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {Node|null} node\n * @param {import('estree').Comment[]} jsdocNodes\n * @param {StateObject} state\n * @param {boolean} [lastCall]\n * @returns {void}\n */\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, /** @type {Settings} */ (settings));\n for (const jsdocNode of jsdocNodes) {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n if (!(/^\\/\\*\\*\\s/v).test(sourceCode.getText(\n /** @type {import('estree').Node} */\n (jsdocNde),\n ))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of /** @type {ContextObject[]} */ (contexts).entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n /** @type {Node} */\n (node),\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n const settngs = /** @type {Settings} */ (settings);\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n settings: settngs,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler({\n ...settings,\n mode: settings.mode === 'permissive' ? 'typescript' : settings.mode,\n });\n }\n\n const state = {};\n\n return {\n /**\n * @param {import('eslint').Rule.Node} node\n * @returns {void}\n */\n '*:not(Program)' (node) {\n const commentNode = getJSDocComment(\n sourceCode, node, /** @type {Settings} */ (settings),\n );\n if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n const ste = /** @type {StateObject} */ (state);\n ruleConfig.nonComment({\n node,\n state: ste,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n /** @type {import('estree').Comment} */\n (commentNode),\n ], /** @type {StateObject} */ (state));\n },\n 'Program:exit' () {\n const allComments = /** @type {import('estree').Comment[]} */ (\n sourceCode.getAllComments()\n );\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(\n context,\n null,\n untrackedJSdoc,\n /** @type {StateObject} */\n (state),\n true,\n );\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitorBasic} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComms = /** @type {unknown} */ (sourceCode.getAllComments());\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments: /** @type {import('estree').Node[]} */ (allComms),\n context,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // dslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'layout', 'problem', 'suggestion',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(\n /** @type {JsdocVisitorBasic} */ (iterator),\n ruleConfig,\n );\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n /** @type {import('eslint').Rule.RuleModule} */\n return {\n /**\n * The entrypoint for the JSDoc rule.\n * @param {import('eslint').Rule.RuleContext} ctx\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {import('eslint').Rule.RuleListener}\n * a listener with parser callback function.\n */\n create (ctx) {\n const context = ruleConfig.modifyContext ?\n ruleConfig.modifyContext(ctx) :\n ctx;\n\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n /**\n * @type {Context[]|undefined}\n */\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults, ruleConfig.nonGlobalSettings ? {} : settings);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator,\n ruleConfig,\n hasObjectAny ? /** @type {ContextObject[]} */ (contexts) : null,\n ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n /** @type {Partial<StateObject>} */\n const state = {};\n\n /** @type {CheckJsdoc} */\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines,\n /** @type {import('estree').Comment} */\n (jsdocNode),\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info,\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n /** @type {StateObject} */\n (state),\n );\n };\n\n /** @type {import('eslint').Rule.RuleListener} */\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler({\n ...settings,\n mode: settings.mode === 'permissive' ? 'typescript' : settings.mode,\n }),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (typeof ruleConfig.exit === 'function') {\n contextObject['Program:exit'] = () => {\n const ste = /** @type {StateObject} */ (state);\n\n // @ts-expect-error `utils` not needed at this point\n /** @type {Required<RuleConfig>} */ (ruleConfig).exit({\n context,\n settings,\n state: ste,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n\nexport {\n parseComment,\n} from '@es-joy/jsdoccomment';\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAKA,IAAAE,cAAA,GAAAF,OAAA;AAIA,IAAAG,QAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAA8B,SAAAI,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAV,uBAAA,YAAAA,CAAAM,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;EACJgB,WAAW;EACXC;AACF,CAAC,GAAGC,mBAAI;;AAER;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AA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","ignoreList":[]}
@@ -116,7 +116,7 @@ export type HasATag = (names: string[]) => boolean;
116
116
  export type HasTag = (name: string) => boolean;
117
117
  export type ComparePaths = (name: string) => (otherPathName: string) => boolean;
118
118
  export type DropPathSegmentQuotes = (name: string) => string;
119
- export type AvoidDocs = () => boolean;
119
+ export type AvoidDocs = (exemptSpecialMethods?: boolean | undefined) => boolean;
120
120
  export type TagMightHaveNamePositionTypePosition = (tagName: string, otherModeMaps?: import("./getDefaultTagStructureForMode.js").TagStructure[] | undefined) => boolean | {
121
121
  otherMode: true;
122
122
  };
@@ -21,7 +21,7 @@ const canSkip = utils => {
21
21
  // so it is not necessary to document that they throw an error.
22
22
  'abstract', 'virtual',
23
23
  // The designated type can itself document `@throws`
24
- 'type']) || utils.avoidDocs();
24
+ 'type']) || utils.avoidDocs(false);
25
25
  };
26
26
  var _default = exports.default = (0, _iterateJsdoc.default)(({
27
27
  report,
@@ -1 +1 @@
1
- {"version":3,"file":"requireThrows.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","canSkip","utils","hasATag","avoidDocs","_default","exports","iterateJsdoc","report","tagName","getPreferredTagName","tags","getTags","iteratingFunction","isIteratingFunction","tag","missingThrowsTag","shouldReport","type","trim","hasThrowValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","contexts","items","anyOf","comment","context","exemptedBy","module"],"sources":["../../src/rules/requireThrows.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * We can skip checking for a throws value, in case the documentation is inherited\n * or the method is either a constructor or an abstract method.\n * @param {import('../iterateJsdoc.js').Utils} utils a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean} 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 necessary to document that they throw an error.\n 'abstract',\n 'virtual',\n\n // The designated type can itself document `@throws`\n 'type',\n ]) ||\n utils.avoidDocs();\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n}) => {\n // A preflight check. We do not need to run a deep check for abstract\n // functions.\n if (canSkip(utils)) {\n return;\n }\n\n const tagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'throws',\n }));\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\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 missingThrowsTag = typeof tag === 'undefined' || tag === null;\n\n const shouldReport = () => {\n if (!missingThrowsTag) {\n if (tag.type.trim() === 'never' && iteratingFunction && utils.hasThrowValue()) {\n report(`JSDoc @${tagName} declaration set to \"never\" but throw value found.`);\n }\n\n return false;\n }\n\n return iteratingFunction && utils.hasThrowValue();\n };\n\n if (shouldReport()) {\n report(`Missing JSDoc @${tagName} declaration.`);\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that throw statements are documented with `@throws` tags.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n description: `Set this to an array of strings representing the AST context\n(or objects with optional \\`context\\` and \\`comment\\` properties) where you wish\nthe rule to be applied.\n\n\\`context\\` defaults to \\`any\\` and \\`comment\\` defaults to no specific comment context.\n\nOverrides the default contexts (\\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`). Set to \\`\"any\"\\` if you want\nthe rule to apply to any JSDoc block throughout your files (as is necessary\nfor finding function blocks not attached to a function declaration or\nexpression, i.e., \\`@callback\\` or \\`@function\\` (or its aliases \\`@func\\` or\n\\`@method\\`) (including those associated with an \\`@interface\\`).`,\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 },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n exemptedBy: {\n description: `Array of tags (e.g., \\`['type']\\`) whose presence on the\ndocument block avoids the need for a \\`@throws\\`. Defaults to an array\nwith \\`inheritdoc\\`. If you set this array, it will overwrite the default,\nso be sure to add back \\`inheritdoc\\` if you wish its presence to cause\nexemption of the rule.`,\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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","ignoreList":[]}
1
+ {"version":3,"file":"requireThrows.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","canSkip","utils","hasATag","avoidDocs","_default","exports","iterateJsdoc","report","tagName","getPreferredTagName","tags","getTags","iteratingFunction","isIteratingFunction","tag","missingThrowsTag","shouldReport","type","trim","hasThrowValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","contexts","items","anyOf","comment","context","exemptedBy","module"],"sources":["../../src/rules/requireThrows.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * We can skip checking for a throws value, in case the documentation is inherited\n * or the method is either a constructor or an abstract method.\n * @param {import('../iterateJsdoc.js').Utils} utils a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean} 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 necessary to document that they throw an error.\n 'abstract',\n 'virtual',\n\n // The designated type can itself document `@throws`\n 'type',\n ]) ||\n utils.avoidDocs(false);\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n}) => {\n // A preflight check. We do not need to run a deep check for abstract\n // functions.\n if (canSkip(utils)) {\n return;\n }\n\n const tagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'throws',\n }));\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\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 missingThrowsTag = typeof tag === 'undefined' || tag === null;\n\n const shouldReport = () => {\n if (!missingThrowsTag) {\n if (tag.type.trim() === 'never' && iteratingFunction && utils.hasThrowValue()) {\n report(`JSDoc @${tagName} declaration set to \"never\" but throw value found.`);\n }\n\n return false;\n }\n\n return iteratingFunction && utils.hasThrowValue();\n };\n\n if (shouldReport()) {\n report(`Missing JSDoc @${tagName} declaration.`);\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that throw statements are documented with `@throws` tags.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n description: `Set this to an array of strings representing the AST context\n(or objects with optional \\`context\\` and \\`comment\\` properties) where you wish\nthe rule to be applied.\n\n\\`context\\` defaults to \\`any\\` and \\`comment\\` defaults to no specific comment context.\n\nOverrides the default contexts (\\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`). Set to \\`\"any\"\\` if you want\nthe rule to apply to any JSDoc block throughout your files (as is necessary\nfor finding function blocks not attached to a function declaration or\nexpression, i.e., \\`@callback\\` or \\`@function\\` (or its aliases \\`@func\\` or\n\\`@method\\`) (including those associated with an \\`@interface\\`).`,\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 },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n exemptedBy: {\n description: `Array of tags (e.g., \\`['type']\\`) whose presence on the\ndocument block avoids the need for a \\`@throws\\`. Defaults to an array\nwith \\`inheritdoc\\`. If you set this array, it will overwrite the default,\nso be sure to add back \\`inheritdoc\\` if you wish its presence to cause\nexemption of the rule.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA,MAAMG,OAAO,GAAIC,KAAK,IAAK;EACzB,OAAOA,KAAK,CAACC,OAAO,CAAC;EACnB;EACA;EACA;EACA;EACA;EACA,UAAU,EACV,SAAS;EAET;EACA,MAAM,CACP,CAAC,IACAD,KAAK,CAACE,SAAS,CAAC,KAAK,CAAC;AAC1B,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAN,OAAA,GAEa,IAAAO,qBAAY,EAAC,CAAC;EAC3BC,MAAM;EACNN;AACF,CAAC,KAAK;EACJ;EACA;EACA,IAAID,OAAO,CAACC,KAAK,CAAC,EAAE;IAClB;EACF;EAEA,MAAMO,OAAO,GAAG,qBAAuBP,KAAK,CAACQ,mBAAmB,CAAC;IAC/DD,OAAO,EAAE;EACX,CAAC,CAAE;EACH,IAAI,CAACA,OAAO,EAAE;IACZ;EACF;EAEA,MAAME,IAAI,GAAGT,KAAK,CAACU,OAAO,CAACH,OAAO,CAAC;EACnC,MAAMI,iBAAiB,GAAGX,KAAK,CAACY,mBAAmB,CAAC,CAAC;;EAErD;EACA,MAAM,CACJC,GAAG,CACJ,GAAGJ,IAAI;EACR,MAAMK,gBAAgB,GAAG,OAAOD,GAAG,KAAK,WAAW,IAAIA,GAAG,KAAK,IAAI;EAEnE,MAAME,YAAY,GAAGA,CAAA,KAAM;IACzB,IAAI,CAACD,gBAAgB,EAAE;MACrB,IAAID,GAAG,CAACG,IAAI,CAACC,IAAI,CAAC,CAAC,KAAK,OAAO,IAAIN,iBAAiB,IAAIX,KAAK,CAACkB,aAAa,CAAC,CAAC,EAAE;QAC7EZ,MAAM,CAAC,UAAUC,OAAO,oDAAoD,CAAC;MAC/E;MAEA,OAAO,KAAK;IACd;IAEA,OAAOI,iBAAiB,IAAIX,KAAK,CAACkB,aAAa,CAAC,CAAC;EACnD,CAAC;EAED,IAAIH,YAAY,CAAC,CAAC,EAAE;IAClBT,MAAM,CAAC,kBAAkBC,OAAO,eAAe,CAAC;EAClD;AACF,CAAC,EAAE;EACDY,eAAe,EAAE,IAAI;EACrBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,oEAAoE;MACjFC,GAAG,EAAE;IACP,CAAC;IACDC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVC,QAAQ,EAAE;UACRL,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;UACtDM,KAAK,EAAE;YACLC,KAAK,EAAE,CACL;cACEb,IAAI,EAAE;YACR,CAAC,EACD;cACES,oBAAoB,EAAE,KAAK;cAC3BC,UAAU,EAAE;gBACVI,OAAO,EAAE;kBACPd,IAAI,EAAE;gBACR,CAAC;gBACDe,OAAO,EAAE;kBACPf,IAAI,EAAE;gBACR;cACF,CAAC;cACDA,IAAI,EAAE;YACR,CAAC;UAEL,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACDgB,UAAU,EAAE;UACVV,WAAW,EAAE;AACzB;AACA;AACA;AACA,uBAAuB;UACXM,KAAK,EAAE;YACLZ,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAiB,MAAA,CAAA7B,OAAA,GAAAA,OAAA,CAAAN,OAAA","ignoreList":[]}
package/package.json CHANGED
@@ -16,67 +16,67 @@
16
16
  "html-entities": "^2.6.0",
17
17
  "object-deep-merge": "^2.0.0",
18
18
  "parse-imports-exports": "^0.2.4",
19
- "semver": "^7.7.4",
19
+ "semver": "^7.8.0",
20
20
  "spdx-expression-parse": "^4.0.0",
21
21
  "to-valid-identifier": "^1.0.0"
22
22
  },
23
23
  "description": "JSDoc linting rules for ESLint.",
24
24
  "devDependencies": {
25
25
  "@arethetypeswrong/cli": "^0.18.2",
26
- "@babel/cli": "^7.28.6",
27
- "@babel/core": "8.0.0-rc.1",
28
- "@babel/eslint-parser": "8.0.0-rc.1",
29
- "@babel/plugin-transform-flow-strip-types": "8.0.0-rc.1",
30
- "@babel/preset-env": "8.0.0-rc.1",
26
+ "@babel/cli": "8.0.0-rc.5",
27
+ "@babel/core": "8.0.0-rc.5",
28
+ "@babel/eslint-parser": "8.0.0-rc.5",
29
+ "@babel/plugin-transform-flow-strip-types": "8.0.0-rc.5",
30
+ "@babel/preset-env": "8.0.0-rc.5",
31
31
  "@es-joy/escodegen": "^4.2.0",
32
32
  "@es-joy/jsdoc-eslint-parser": "^0.27.0",
33
- "@eslint/core": "^1.1.1",
33
+ "@eslint/core": "^1.2.1",
34
34
  "@hkdobrev/run-if-changed": "^0.6.3",
35
35
  "@rollup/plugin-node-resolve": "^16.0.3",
36
36
  "@semantic-release/commit-analyzer": "^13.0.1",
37
- "@semantic-release/github": "^12.0.6",
37
+ "@semantic-release/github": "^12.0.8",
38
38
  "@semantic-release/npm": "^13.1.5",
39
39
  "@types/chai": "^5.2.3",
40
40
  "@types/debug": "^4.1.13",
41
41
  "@types/esquery": "^1.5.4",
42
- "@types/estree": "^1.0.8",
42
+ "@types/estree": "^1.0.9",
43
43
  "@types/json-schema": "^7.0.15",
44
44
  "@types/mocha": "^10.0.10",
45
- "@types/node": "^25.5.0",
45
+ "@types/node": "^25.9.0",
46
46
  "@types/semver": "^7.7.1",
47
- "@types/spdx-expression-parse": "^3.0.5",
48
- "@typescript-eslint/types": "8.58.0",
47
+ "@types/spdx-expression-parse": "^4.0.0",
48
+ "@typescript-eslint/types": "8.59.4",
49
49
  "babel-plugin-add-module-exports": "^1.0.4",
50
- "babel-plugin-istanbul": "^7.0.1",
50
+ "babel-plugin-istanbul": "^8.0.0",
51
51
  "babel-plugin-transform-import-meta": "^2.3.3",
52
52
  "c8": "^11.0.0",
53
53
  "camelcase": "^9.0.0",
54
54
  "chai": "^6.2.2",
55
55
  "decamelize": "^6.0.1",
56
- "eslint": "10.1.0",
56
+ "eslint": "10.4.0",
57
57
  "eslint-config-canonical": "^47.4.2",
58
58
  "gitdown": "^4.1.1",
59
59
  "glob": "^13.0.6",
60
- "globals": "^17.4.0",
60
+ "globals": "^17.6.0",
61
61
  "husky": "^9.1.7",
62
62
  "jsdoc-type-pratt-parser": "^7.2.0",
63
63
  "json-schema": "^0.4.0",
64
64
  "json-schema-to-typescript": "^15.0.4",
65
- "lint-staged": "^16.4.0",
65
+ "lint-staged": "^17.0.5",
66
66
  "mocha": "^11.7.5",
67
67
  "open-editor": "^6.0.0",
68
- "playwright": "^1.59.0",
68
+ "playwright": "^1.60.0",
69
69
  "replace": "^1.2.2",
70
70
  "rimraf": "^6.1.3",
71
- "rollup": "^4.60.1",
71
+ "rollup": "^4.60.4",
72
72
  "semantic-release": "^25.0.3",
73
- "sinon": "^21.0.3",
73
+ "sinon": "^22.0.0",
74
74
  "ts-api-utils": "^2.5.0",
75
75
  "typescript": "5.9.3",
76
- "typescript-eslint": "8.58.0"
76
+ "typescript-eslint": "8.59.4"
77
77
  },
78
78
  "engines": {
79
- "node": "^20.19.0 || ^22.13.0 || >=24"
79
+ "node": "^22.13.0 || >=24"
80
80
  },
81
81
  "keywords": [
82
82
  "eslint",
@@ -158,18 +158,6 @@
158
158
  "run-if-changed": {
159
159
  "pnpm-lock.yaml": "pnpm run install-offline"
160
160
  },
161
- "pnpm": {
162
- "overrides": {
163
- "@types/eslint": "0.0.0-interferes-with-eslint-now",
164
- "eslint-scope": "9.1.0"
165
- },
166
- "ignoredBuiltDependencies": [
167
- "core-js",
168
- "core-js-pure",
169
- "re2",
170
- "unrs-resolver"
171
- ]
172
- },
173
161
  "scripts": {
174
162
  "ruleTypes": "node ./src/bin/generateRuleTypes.js",
175
163
  "tsc": "tsc",
@@ -182,7 +170,7 @@
182
170
  "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js && pnpm ruleTypes",
183
171
  "create-rule": "node ./src/bin/generateRule.js",
184
172
  "create-options": "node ./src/bin/generateOptions.js",
185
- "install-offline": "pnpm install --prefer-offline",
173
+ "install-offline": "CI=1 pnpm install --prefer-offline --no-frozen-lockfile",
186
174
  "lint": "eslint",
187
175
  "lint-fix": "eslint --fix",
188
176
  "prepare": "husky",
@@ -191,5 +179,5 @@
191
179
  "test-cov": "TIMING=1 c8 --reporter text pnpm run test-no-cov",
192
180
  "test-index": "pnpm run test-no-cov test/rules/index.js"
193
181
  },
194
- "version": "62.9.0"
182
+ "version": "63.0.0"
195
183
  }
@@ -282,7 +282,7 @@ const getSymbol = function (node, globals, scope, opt) {
282
282
  /* c8 ignore next 8 */
283
283
  if (propVal) {
284
284
  val.props[
285
- /** @type {import('estree').PrivateIdentifier} */
285
+ /** @type {import('estree').Identifier} */
286
286
  (
287
287
  /** @type {import('estree').Property} */ (prop).key
288
288
  ).name
@@ -337,6 +337,7 @@ import esquery from 'esquery';
337
337
 
338
338
  /**
339
339
  * @callback AvoidDocs
340
+ * @param {boolean} [exemptSpecialMethods]
340
341
  * @returns {boolean}
341
342
  */
342
343
 
@@ -1462,7 +1463,9 @@ const getUtils = (
1462
1463
  };
1463
1464
 
1464
1465
  /** @type {AvoidDocs} */
1465
- utils.avoidDocs = () => {
1466
+ utils.avoidDocs = (
1467
+ exemptSpecialMethods = true,
1468
+ ) => {
1466
1469
  if (
1467
1470
  ignoreReplacesDocs !== false &&
1468
1471
  (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||
@@ -1480,7 +1483,7 @@ const getUtils = (
1480
1483
  return true;
1481
1484
  }
1482
1485
 
1483
- if (jsdocUtils.exemptSpeciaMethods(
1486
+ if (exemptSpecialMethods && jsdocUtils.exemptSpeciaMethods(
1484
1487
  jsdoc,
1485
1488
  node,
1486
1489
  context,
@@ -19,7 +19,7 @@ const canSkip = (utils) => {
19
19
  // The designated type can itself document `@throws`
20
20
  'type',
21
21
  ]) ||
22
- utils.avoidDocs();
22
+ utils.avoidDocs(false);
23
23
  };
24
24
 
25
25
  export default iterateJsdoc(({