eslint-plugin-jsdoc 50.2.1 → 50.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -252,11 +252,15 @@ const validateParameterNamesDeep = (targetTagName, _allowExtraTrailingParamDocs,
252
252
  return false;
253
253
  });
254
254
  };
255
+ const allowedNodes = ['ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction',
256
+ // Add this to above defaults
257
+ 'TSMethodSignature'];
255
258
  var _default = exports.default = (0, _iterateJsdoc.default)(({
256
259
  context,
257
260
  jsdoc,
258
261
  report,
259
- utils
262
+ utils,
263
+ node
260
264
  }) => {
261
265
  const {
262
266
  allowExtraTrailingParamDocs,
@@ -268,6 +272,15 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
268
272
  disableExtraPropertyReporting = false,
269
273
  disableMissingParamChecks = false
270
274
  } = context.options[0] || {};
275
+
276
+ // Although we might just remove global settings contexts from applying to
277
+ // this rule (as they can cause problems with `getFunctionParameterNames`
278
+ // checks if they are not functions but say variables), the user may
279
+ // instead wish to narrow contexts in those settings, so this check
280
+ // is still useful
281
+ if (!allowedNodes.includes( /** @type {import('estree').Node} */node.type)) {
282
+ return;
283
+ }
271
284
  const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);
272
285
  const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');
273
286
  if (!jsdocParameterNamesDeep || !jsdocParameterNamesDeep.length) {
@@ -283,9 +296,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
283
296
  }
284
297
  validateParameterNamesDeep(targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report);
285
298
  }, {
286
- contextDefaults: ['ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction',
287
- // Add this to above defaults
288
- 'TSMethodSignature'],
299
+ contextDefaults: allowedNodes,
289
300
  meta: {
290
301
  docs: {
291
302
  description: 'Ensures that parameter names in JSDoc match those in the function declaration.',
@@ -1 +1 @@
1
- {"version":3,"file":"checkParamNames.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","validateParameterNames","targetTagName","allowExtraTrailingParamDocs","checkDestructured","checkRestProperty","checkTypesRegex","disableExtraPropertyReporting","disableMissingParamChecks","enableFixer","functionParameterNames","jsdoc","utils","report","paramTags","Object","entries","tags","filter","tag","paramTagsNonNested","name","includes","dotted","thisOffset","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","Number","reportJSDoc","removeTag","functionParameterName","trim","Array","isArray","actualName","expectedName","type","search","parameterName","names","properties","hasPropertyRest","rests","annotationParamName","undefined","tagName","expectedNames","map","actualNames","paramTag","actualTypes","missingProperties","notCheckingNames","notCheckingName","startsWith","actualNameIdx","findIndex","comparePaths","missingIndex","pathDoesNotBeginWith","line","source","number","length","push","tagPlacement","hasMissing","missingProperty","extraProperties","match","prop","split","extraProperty","funcParamName","item","_item$","usedExpectedNames","a","toString","usedInOrder","every","restElement","join","validateParameterNamesDeep","_allowExtraTrailingParamDocs","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","_default","exports","iterateJsdoc","context","checkTypesPattern","useDefaultObjectProperties","options","getRegexFromString","jsdocParameterNamesDeep","getJsdocTagsDeep","getFunctionParameterNames","getPreferredTagName","isError","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","module"],"sources":["../../src/rules/checkParamNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} allowExtraTrailingParamDocs\n * @param {boolean} checkDestructured\n * @param {boolean} checkRestProperty\n * @param {RegExp} checkTypesRegex\n * @param {boolean} disableExtraPropertyReporting\n * @param {boolean} disableMissingParamChecks\n * @param {boolean} enableFixer\n * @param {import('../jsdocUtils.js').ParamNameInfo[]} functionParameterNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {import('../iterateJsdoc.js').Report} report\n * @returns {boolean}\n */\nconst validateParameterNames = (\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n disableMissingParamChecks,\n enableFixer,\n functionParameterNames, jsdoc, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([\n , tag,\n ]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n let thisOffset = 0;\n\n // eslint-disable-next-line complexity\n return paramTags.some(([\n , tag,\n ], index) => {\n /** @type {import('../iterateJsdoc.js').Integer} */\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = Number(tgsIndex);\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n let functionParameterName = functionParameterNames[index - dotted + thisOffset];\n if (functionParameterName === 'this' && tag.name.trim() !== 'this') {\n ++thisOffset;\n functionParameterName = functionParameterNames[index - dotted + thisOffset];\n }\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n if (\n typeof functionParameterName === 'object' &&\n 'name' in functionParameterName &&\n Array.isArray(functionParameterName.name)\n ) {\n const actualName = tag.name.trim();\n const expectedName = functionParameterName.name[index];\n if (actualName === expectedName) {\n thisOffset--;\n return false;\n }\n report(\n `Expected @${targetTagName} name to be \"${expectedName}\". Got \"${actualName}\".`,\n null,\n tag,\n );\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [\n parameterName,\n {\n names: properties,\n hasPropertyRest,\n rests,\n annotationParamName,\n },\n ] =\n /**\n * @type {[string | undefined, import('../jsdocUtils.js').FlattendRootInfo & {\n * annotationParamName?: string | undefined;\n }]} */ (functionParameterName);\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n\n /** @type {string[]} */\n const notCheckingNames = [];\n\n for (const [\n idx,\n name,\n ] of expectedNames.entries()) {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n continue;\n }\n\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const missingIndex = actualNames.findIndex((actualName) => {\n return utils.pathDoesNotBeginWith(name, actualName);\n });\n const line = tag.source[0].number - 1 + (missingIndex > -1 ? missingIndex : actualNames.length);\n missingProperties.push({\n name,\n tagPlacement: {\n line: line === 0 ? 1 : line,\n },\n });\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n for (const {\n tagPlacement,\n name: missingProperty,\n } of missingProperties) {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tagPlacement);\n }\n }\n\n if (!hasPropertyRest || checkRestProperty) {\n /** @type {[string, import('comment-parser').Spec][]} */\n const extraProperties = [];\n for (const [\n idx,\n name,\n ] of actualNames.entries()) {\n const match = name.startsWith(tag.name.trim() + '.');\n if (\n match && !expectedNames.some(\n utils.comparePaths(name),\n ) && !utils.comparePaths(name)(tag.name) &&\n (!disableExtraPropertyReporting || properties.some((prop) => {\n return prop.split('.').length >= name.split('.').length - 1;\n }))\n ) {\n extraProperties.push([\n name, paramTags[idx][1],\n ]);\n }\n }\n\n if (extraProperties.length) {\n for (const [\n extraProperty,\n tg,\n ] of extraProperties) {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n }\n\n return true;\n }\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {\n name,\n } = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([\n , {\n name,\n },\n ]) => {\n return name.trim();\n });\n\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (/**\n * @type {[string|undefined, (import('../jsdocUtils.js').FlattendRootInfo & {\n * annotationParamName?: string,\n })]} */ (item)?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).filter((item) => {\n return item !== 'this';\n });\n\n // When disableMissingParamChecks is true tag names can be omitted.\n // Report when the tag names do not match the expected names or they are used out of order.\n if (disableMissingParamChecks) {\n const usedExpectedNames = expectedNames.map(a => a?.toString()).filter(expectedName => expectedName && actualNames.includes(expectedName));\n const usedInOrder = actualNames.every((actualName, idx) => actualName === usedExpectedNames[idx]);\n if (usedInOrder) {\n return false;\n }\n }\n\n report(\n `Expected @${targetTagName} names to be \"${\n expectedNames.map((expectedName) => {\n return typeof expectedName === 'object' &&\n 'name' in expectedName &&\n expectedName.restElement\n ? '...' + expectedName.name\n : expectedName;\n }).join(', ')\n }\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {boolean} _allowExtraTrailingParamDocs\n * @param {{\n * name: string,\n * idx: import('../iterateJsdoc.js').Integer\n * }[]} jsdocParameterNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {Function} report\n * @returns {boolean}\n */\nconst validateParameterNamesDeep = (\n targetTagName, _allowExtraTrailingParamDocs,\n jsdocParameterNames, jsdoc, report,\n) => {\n /** @type {string} */\n let lastRealParameter;\n\n return jsdocParameterNames.some(({\n name: jsdocParameterName,\n idx,\n }) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = false,\n useDefaultObjectProperties = false,\n disableExtraPropertyReporting = false,\n disableMissingParamChecks = false,\n } = context.options[0] || {};\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep || !jsdocParameterNamesDeep.length) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n\n const targetTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'param',\n }));\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n disableMissingParamChecks,\n enableFixer,\n functionParameterNames,\n jsdoc,\n utils,\n report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,\n );\n}, {\n contextDefaults: [\n 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction',\n // Add this to above defaults\n 'TSMethodSignature'\n ],\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-param-names.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n disableExtraPropertyReporting: {\n type: 'boolean',\n },\n disableMissingParamChecks: {\n type: 'boolean',\n },\n enableFixer: {\n type: 'boolean',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"checkParamNames.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","validateParameterNames","targetTagName","allowExtraTrailingParamDocs","checkDestructured","checkRestProperty","checkTypesRegex","disableExtraPropertyReporting","disableMissingParamChecks","enableFixer","functionParameterNames","jsdoc","utils","report","paramTags","Object","entries","tags","filter","tag","paramTagsNonNested","name","includes","dotted","thisOffset","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","Number","reportJSDoc","removeTag","functionParameterName","trim","Array","isArray","actualName","expectedName","type","search","parameterName","names","properties","hasPropertyRest","rests","annotationParamName","undefined","tagName","expectedNames","map","actualNames","paramTag","actualTypes","missingProperties","notCheckingNames","notCheckingName","startsWith","actualNameIdx","findIndex","comparePaths","missingIndex","pathDoesNotBeginWith","line","source","number","length","push","tagPlacement","hasMissing","missingProperty","extraProperties","match","prop","split","extraProperty","funcParamName","item","_item$","usedExpectedNames","a","toString","usedInOrder","every","restElement","join","validateParameterNamesDeep","_allowExtraTrailingParamDocs","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","allowedNodes","_default","exports","iterateJsdoc","context","node","checkTypesPattern","useDefaultObjectProperties","options","getRegexFromString","jsdocParameterNamesDeep","getJsdocTagsDeep","getFunctionParameterNames","getPreferredTagName","isError","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","module"],"sources":["../../src/rules/checkParamNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} allowExtraTrailingParamDocs\n * @param {boolean} checkDestructured\n * @param {boolean} checkRestProperty\n * @param {RegExp} checkTypesRegex\n * @param {boolean} disableExtraPropertyReporting\n * @param {boolean} disableMissingParamChecks\n * @param {boolean} enableFixer\n * @param {import('../jsdocUtils.js').ParamNameInfo[]} functionParameterNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {import('../iterateJsdoc.js').Report} report\n * @returns {boolean}\n */\nconst validateParameterNames = (\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n disableMissingParamChecks,\n enableFixer,\n functionParameterNames, jsdoc, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([\n , tag,\n ]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n let thisOffset = 0;\n\n // eslint-disable-next-line complexity\n return paramTags.some(([\n , tag,\n ], index) => {\n /** @type {import('../iterateJsdoc.js').Integer} */\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = Number(tgsIndex);\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n let functionParameterName = functionParameterNames[index - dotted + thisOffset];\n if (functionParameterName === 'this' && tag.name.trim() !== 'this') {\n ++thisOffset;\n functionParameterName = functionParameterNames[index - dotted + thisOffset];\n }\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n if (\n typeof functionParameterName === 'object' &&\n 'name' in functionParameterName &&\n Array.isArray(functionParameterName.name)\n ) {\n const actualName = tag.name.trim();\n const expectedName = functionParameterName.name[index];\n if (actualName === expectedName) {\n thisOffset--;\n return false;\n }\n report(\n `Expected @${targetTagName} name to be \"${expectedName}\". Got \"${actualName}\".`,\n null,\n tag,\n );\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [\n parameterName,\n {\n names: properties,\n hasPropertyRest,\n rests,\n annotationParamName,\n },\n ] =\n /**\n * @type {[string | undefined, import('../jsdocUtils.js').FlattendRootInfo & {\n * annotationParamName?: string | undefined;\n }]} */ (functionParameterName);\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n\n /** @type {string[]} */\n const notCheckingNames = [];\n\n for (const [\n idx,\n name,\n ] of expectedNames.entries()) {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n continue;\n }\n\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const missingIndex = actualNames.findIndex((actualName) => {\n return utils.pathDoesNotBeginWith(name, actualName);\n });\n const line = tag.source[0].number - 1 + (missingIndex > -1 ? missingIndex : actualNames.length);\n missingProperties.push({\n name,\n tagPlacement: {\n line: line === 0 ? 1 : line,\n },\n });\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n for (const {\n tagPlacement,\n name: missingProperty,\n } of missingProperties) {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tagPlacement);\n }\n }\n\n if (!hasPropertyRest || checkRestProperty) {\n /** @type {[string, import('comment-parser').Spec][]} */\n const extraProperties = [];\n for (const [\n idx,\n name,\n ] of actualNames.entries()) {\n const match = name.startsWith(tag.name.trim() + '.');\n if (\n match && !expectedNames.some(\n utils.comparePaths(name),\n ) && !utils.comparePaths(name)(tag.name) &&\n (!disableExtraPropertyReporting || properties.some((prop) => {\n return prop.split('.').length >= name.split('.').length - 1;\n }))\n ) {\n extraProperties.push([\n name, paramTags[idx][1],\n ]);\n }\n }\n\n if (extraProperties.length) {\n for (const [\n extraProperty,\n tg,\n ] of extraProperties) {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n }\n\n return true;\n }\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {\n name,\n } = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([\n , {\n name,\n },\n ]) => {\n return name.trim();\n });\n\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (/**\n * @type {[string|undefined, (import('../jsdocUtils.js').FlattendRootInfo & {\n * annotationParamName?: string,\n })]} */ (item)?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).filter((item) => {\n return item !== 'this';\n });\n\n // When disableMissingParamChecks is true tag names can be omitted.\n // Report when the tag names do not match the expected names or they are used out of order.\n if (disableMissingParamChecks) {\n const usedExpectedNames = expectedNames.map(a => a?.toString()).filter(expectedName => expectedName && actualNames.includes(expectedName));\n const usedInOrder = actualNames.every((actualName, idx) => actualName === usedExpectedNames[idx]);\n if (usedInOrder) {\n return false;\n }\n }\n\n report(\n `Expected @${targetTagName} names to be \"${\n expectedNames.map((expectedName) => {\n return typeof expectedName === 'object' &&\n 'name' in expectedName &&\n expectedName.restElement\n ? '...' + expectedName.name\n : expectedName;\n }).join(', ')\n }\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {boolean} _allowExtraTrailingParamDocs\n * @param {{\n * name: string,\n * idx: import('../iterateJsdoc.js').Integer\n * }[]} jsdocParameterNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {Function} report\n * @returns {boolean}\n */\nconst validateParameterNamesDeep = (\n targetTagName, _allowExtraTrailingParamDocs,\n jsdocParameterNames, jsdoc, report,\n) => {\n /** @type {string} */\n let lastRealParameter;\n\n return jsdocParameterNames.some(({\n name: jsdocParameterName,\n idx,\n }) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nconst allowedNodes = [\n 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction',\n // Add this to above defaults\n 'TSMethodSignature'\n];\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n node,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = false,\n useDefaultObjectProperties = false,\n disableExtraPropertyReporting = false,\n disableMissingParamChecks = false,\n } = context.options[0] || {};\n\n // Although we might just remove global settings contexts from applying to\n // this rule (as they can cause problems with `getFunctionParameterNames`\n // checks if they are not functions but say variables), the user may\n // instead wish to narrow contexts in those settings, so this check\n // is still useful\n if (!allowedNodes.includes(/** @type {import('estree').Node} */ (node).type)) {\n return;\n }\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep || !jsdocParameterNamesDeep.length) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n\n const targetTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'param',\n }));\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n disableMissingParamChecks,\n enableFixer,\n functionParameterNames,\n jsdoc,\n utils,\n report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,\n );\n}, {\n contextDefaults: allowedNodes,\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-param-names.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n disableExtraPropertyReporting: {\n type: 'boolean',\n },\n disableMissingParamChecks: {\n type: 'boolean',\n },\n enableFixer: {\n type: 'boolean',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMG,sBAAsB,GAAGA,CAC7BC,aAAa,EACbC,2BAA2B,EAC3BC,iBAAiB,EACjBC,iBAAiB,EACjBC,eAAe,EACfC,6BAA6B,EAC7BC,yBAAyB,EACzBC,WAAW,EACXC,sBAAsB,EAAEC,KAAK,EAAEC,KAAK,EAAEC,MAAM,KACzC;EACH,MAAMC,SAAS,GAAGC,MAAM,CAACC,OAAO,CAACL,KAAK,CAACM,IAAI,CAAC,CAACC,MAAM,CAAC,CAAC,GACjDC,GAAG,CACN,KAAK;IACJ,OAAOA,GAAG,CAACA,GAAG,KAAKjB,aAAa;EAClC,CAAC,CAAC;EACF,MAAMkB,kBAAkB,GAAGN,SAAS,CAACI,MAAM,CAAC,CAAC,GACzCC,GAAG,CACN,KAAK;IACJ,OAAO,CAACA,GAAG,CAACE,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC;EAChC,CAAC,CAAC;EAEF,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,UAAU,GAAG,CAAC;;EAElB;EACA,OAAOV,SAAS,CAACW,IAAI,CAAC,CAAC,GACnBN,GAAG,CACN,EAAEO,KAAK,KAAK;IACX;IACA,IAAIC,SAAS;IACb,MAAMC,WAAW,GAAGd,SAAS,CAACe,IAAI,CAAC,CAAC,CAClCC,QAAQ,EACRC,EAAE,CACH,EAAEC,GAAG,KAAK;MACTL,SAAS,GAAGM,MAAM,CAACH,QAAQ,CAAC;MAE5B,OAAOC,EAAE,CAACV,IAAI,KAAKF,GAAG,CAACE,IAAI,IAAIW,GAAG,KAAKN,KAAK;IAC9C,CAAC,CAAC;IACF,IAAIE,WAAW,EAAE;MACfhB,KAAK,CAACsB,WAAW,CAAC,cAAchC,aAAa,KAAKiB,GAAG,CAACE,IAAI,GAAG,EAAEO,WAAW,CAAC,CAAC,CAAC,EAAEnB,WAAW,GAAG,MAAM;QACjGG,KAAK,CAACuB,SAAS,CAACR,SAAS,CAAC;MAC5B,CAAC,GAAG,IAAI,CAAC;MAET,OAAO,IAAI;IACb;IAEA,IAAIR,GAAG,CAACE,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;MAC1BC,MAAM,EAAE;MAER,OAAO,KAAK;IACd;IAEA,IAAIa,qBAAqB,GAAG1B,sBAAsB,CAACgB,KAAK,GAAGH,MAAM,GAAGC,UAAU,CAAC;IAC/E,IAAIY,qBAAqB,KAAK,MAAM,IAAIjB,GAAG,CAACE,IAAI,CAACgB,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE;MAClE,EAAEb,UAAU;MACZY,qBAAqB,GAAG1B,sBAAsB,CAACgB,KAAK,GAAGH,MAAM,GAAGC,UAAU,CAAC;IAC7E;IAEA,IAAI,CAACY,qBAAqB,EAAE;MAC1B,IAAIjC,2BAA2B,EAAE;QAC/B,OAAO,KAAK;MACd;MAEAU,MAAM,CACJ,IAAIX,aAAa,KAAKiB,GAAG,CAACE,IAAI,kDAAkD,EAChF,IAAI,EACJF,GACF,CAAC;MAED,OAAO,IAAI;IACb;IACA,IACE,OAAOiB,qBAAqB,KAAK,QAAQ,IACvC,MAAM,IAAIA,qBAAqB,IAC/BE,KAAK,CAACC,OAAO,CAACH,qBAAqB,CAACf,IAAI,CAAC,EAC3C;MACA,MAAMmB,UAAU,GAAGrB,GAAG,CAACE,IAAI,CAACgB,IAAI,CAAC,CAAC;MAClC,MAAMI,YAAY,GAAGL,qBAAqB,CAACf,IAAI,CAACK,KAAK,CAAC;MACtD,IAAIc,UAAU,KAAKC,YAAY,EAAE;QAC/BjB,UAAU,EAAE;QACZ,OAAO,KAAK;MACd;MACAX,MAAM,CACJ,aAAaX,aAAa,gBAAgBuC,YAAY,WAAWD,UAAU,IAAI,EAC/E,IAAI,EACJrB,GACF,CAAC;MACD,OAAO,IAAI;IACb;IAEA,IAAImB,KAAK,CAACC,OAAO,CAACH,qBAAqB,CAAC,EAAE;MACxC,IAAI,CAAChC,iBAAiB,EAAE;QACtB,OAAO,KAAK;MACd;MAEA,IAAIe,GAAG,CAACuB,IAAI,IAAIvB,GAAG,CAACuB,IAAI,CAACC,MAAM,CAACrC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE;QACvD,OAAO,KAAK;MACd;MAEA,MAAM,CACJsC,aAAa,EACb;QACEC,KAAK,EAAEC,UAAU;QACjBC,eAAe;QACfC,KAAK;QACLC;MACF,CAAC,CACF;MACC;AACR;AACA;AACA;MAAkBb,qBAAsB;MAClC,IAAIa,mBAAmB,KAAKC,SAAS,EAAE;QACrC,MAAM7B,IAAI,GAAGF,GAAG,CAACE,IAAI,CAACgB,IAAI,CAAC,CAAC;QAC5B,IAAIhB,IAAI,KAAK4B,mBAAmB,EAAE;UAChCpC,MAAM,CAAC,IAAIX,aAAa,KAAKmB,IAAI,oCAAoC4B,mBAAmB,GAAG,EAAE,IAAI,EAAE9B,GAAG,CAAC;QACzG;MACF;MAEA,MAAMgC,OAAO,GAAGP,aAAa,KAAKM,SAAS,GAAG/B,GAAG,CAACE,IAAI,CAACgB,IAAI,CAAC,CAAC,GAAGO,aAAa;MAC7E,MAAMQ,aAAa,GAAGN,UAAU,CAACO,GAAG,CAAEhC,IAAI,IAAK;QAC7C,OAAO,GAAG8B,OAAO,IAAI9B,IAAI,EAAE;MAC7B,CAAC,CAAC;MACF,MAAMiC,WAAW,GAAGxC,SAAS,CAACuC,GAAG,CAAC,CAAC,GAC/BE,QAAQ,CACX,KAAK;QACJ,OAAOA,QAAQ,CAAClC,IAAI,CAACgB,IAAI,CAAC,CAAC;MAC7B,CAAC,CAAC;MACF,MAAMmB,WAAW,GAAG1C,SAAS,CAACuC,GAAG,CAAC,CAAC,GAC/BE,QAAQ,CACX,KAAK;QACJ,OAAOA,QAAQ,CAACb,IAAI;MACtB,CAAC,CAAC;MAEF,MAAMe,iBAAiB,GAAG,EAAE;;MAE5B;MACA,MAAMC,gBAAgB,GAAG,EAAE;MAE3B,KAAK,MAAM,CACT1B,GAAG,EACHX,IAAI,CACL,IAAI+B,aAAa,CAACpC,OAAO,CAAC,CAAC,EAAE;QAC5B,IAAI0C,gBAAgB,CAACjC,IAAI,CAAEkC,eAAe,IAAK;UAC7C,OAAOtC,IAAI,CAACuC,UAAU,CAACD,eAAe,CAAC;QACzC,CAAC,CAAC,EAAE;UACF;QACF;QAEA,MAAME,aAAa,GAAGP,WAAW,CAACQ,SAAS,CAAEtB,UAAU,IAAK;UAC1D,OAAO5B,KAAK,CAACmD,YAAY,CAAC1C,IAAI,CAAC,CAACmB,UAAU,CAAC;QAC7C,CAAC,CAAC;QACF,IAAIqB,aAAa,KAAK,CAAC,CAAC,EAAE;UACxB,IAAI,CAACxD,iBAAiB,IAAI2C,KAAK,CAAChB,GAAG,CAAC,EAAE;YACpC;UACF;UAEA,MAAMgC,YAAY,GAAGV,WAAW,CAACQ,SAAS,CAAEtB,UAAU,IAAK;YACzD,OAAO5B,KAAK,CAACqD,oBAAoB,CAAC5C,IAAI,EAAEmB,UAAU,CAAC;UACrD,CAAC,CAAC;UACF,MAAM0B,IAAI,GAAG/C,GAAG,CAACgD,MAAM,CAAC,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC,IAAIJ,YAAY,GAAG,CAAC,CAAC,GAAGA,YAAY,GAAGV,WAAW,CAACe,MAAM,CAAC;UAC/FZ,iBAAiB,CAACa,IAAI,CAAC;YACrBjD,IAAI;YACJkD,YAAY,EAAE;cACZL,IAAI,EAAEA,IAAI,KAAK,CAAC,GAAG,CAAC,GAAGA;YACzB;UACF,CAAC,CAAC;QACJ,CAAC,MAAM,IAAIV,WAAW,CAACK,aAAa,CAAC,CAAClB,MAAM,CAACrC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAIkD,WAAW,CAACK,aAAa,CAAC,KAAK,EAAE,EAAE;UACzGH,gBAAgB,CAACY,IAAI,CAACjD,IAAI,CAAC;QAC7B;MACF;MAEA,MAAMmD,UAAU,GAAGf,iBAAiB,CAACY,MAAM;MAC3C,IAAIG,UAAU,EAAE;QACd,KAAK,MAAM;UACTD,YAAY;UACZlD,IAAI,EAAEoD;QACR,CAAC,IAAIhB,iBAAiB,EAAE;UACtB5C,MAAM,CAAC,YAAYX,aAAa,KAAKuE,eAAe,GAAG,EAAE,IAAI,EAAEF,YAAY,CAAC;QAC9E;MACF;MAEA,IAAI,CAACxB,eAAe,IAAI1C,iBAAiB,EAAE;QACzC;QACA,MAAMqE,eAAe,GAAG,EAAE;QAC1B,KAAK,MAAM,CACT1C,GAAG,EACHX,IAAI,CACL,IAAIiC,WAAW,CAACtC,OAAO,CAAC,CAAC,EAAE;UAC1B,MAAM2D,KAAK,GAAGtD,IAAI,CAACuC,UAAU,CAACzC,GAAG,CAACE,IAAI,CAACgB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;UACpD,IACEsC,KAAK,IAAI,CAACvB,aAAa,CAAC3B,IAAI,CAC1Bb,KAAK,CAACmD,YAAY,CAAC1C,IAAI,CACzB,CAAC,IAAI,CAACT,KAAK,CAACmD,YAAY,CAAC1C,IAAI,CAAC,CAACF,GAAG,CAACE,IAAI,CAAC,KACvC,CAACd,6BAA6B,IAAIuC,UAAU,CAACrB,IAAI,CAAEmD,IAAI,IAAK;YAC3D,OAAOA,IAAI,CAACC,KAAK,CAAC,GAAG,CAAC,CAACR,MAAM,IAAIhD,IAAI,CAACwD,KAAK,CAAC,GAAG,CAAC,CAACR,MAAM,GAAG,CAAC;UAC7D,CAAC,CAAC,CAAC,EACH;YACAK,eAAe,CAACJ,IAAI,CAAC,CACnBjD,IAAI,EAAEP,SAAS,CAACkB,GAAG,CAAC,CAAC,CAAC,CAAC,CACxB,CAAC;UACJ;QACF;QAEA,IAAI0C,eAAe,CAACL,MAAM,EAAE;UAC1B,KAAK,MAAM,CACTS,aAAa,EACb/C,EAAE,CACH,IAAI2C,eAAe,EAAE;YACpB7D,MAAM,CAAC,IAAIX,aAAa,KAAK4E,aAAa,uBAAuB3D,GAAG,CAACE,IAAI,EAAE,EAAE,IAAI,EAAEU,EAAE,CAAC;UACxF;UAEA,OAAO,IAAI;QACb;MACF;MAEA,OAAOyC,UAAU;IACnB;IAEA,IAAIO,aAAa;IACjB,IAAI,OAAO3C,qBAAqB,KAAK,QAAQ,EAAE;MAC7C,MAAM;QACJf;MACF,CAAC,GAAGe,qBAAqB;MACzB2C,aAAa,GAAG1D,IAAI;IACtB,CAAC,MAAM;MACL0D,aAAa,GAAG3C,qBAAqB;IACvC;IAEA,IAAI2C,aAAa,KAAK5D,GAAG,CAACE,IAAI,CAACgB,IAAI,CAAC,CAAC,EAAE;MACrC;MACA,MAAMiB,WAAW,GAAGlC,kBAAkB,CAACiC,GAAG,CAAC,CAAC,GACxC;QACAhC;MACF,CAAC,CACF,KAAK;QACJ,OAAOA,IAAI,CAACgB,IAAI,CAAC,CAAC;MACpB,CAAC,CAAC;MAEF,MAAMe,aAAa,GAAG1C,sBAAsB,CAAC2C,GAAG,CAAC,CAAC2B,IAAI,EAAEhD,GAAG,KAAK;QAAA,IAAAiD,MAAA;QAC9D;QAAI;AACZ;AACA;AACA;QAAuBD,IAAI,aAAJA,IAAI,gBAAAC,MAAA,GAAJD,IAAI,CAAI,CAAC,CAAC,cAAAC,MAAA,eAAXA,MAAA,CAAapC,KAAK,EAAE;UAChC,OAAOS,WAAW,CAACtB,GAAG,CAAC;QACzB;QAEA,OAAOgD,IAAI;MACb,CAAC,CAAC,CAAC9D,MAAM,CAAE8D,IAAI,IAAK;QAClB,OAAOA,IAAI,KAAK,MAAM;MACxB,CAAC,CAAC;;MAEF;MACA;MACA,IAAIxE,yBAAyB,EAAE;QAC7B,MAAM0E,iBAAiB,GAAG9B,aAAa,CAACC,GAAG,CAAC8B,CAAC,IAAIA,CAAC,aAADA,CAAC,uBAADA,CAAC,CAAEC,QAAQ,CAAC,CAAC,CAAC,CAAClE,MAAM,CAACuB,YAAY,IAAIA,YAAY,IAAIa,WAAW,CAAChC,QAAQ,CAACmB,YAAY,CAAC,CAAC;QAC1I,MAAM4C,WAAW,GAAG/B,WAAW,CAACgC,KAAK,CAAC,CAAC9C,UAAU,EAAER,GAAG,KAAKQ,UAAU,KAAK0C,iBAAiB,CAAClD,GAAG,CAAC,CAAC;QACjG,IAAIqD,WAAW,EAAE;UACf,OAAO,KAAK;QACd;MACF;MAEAxE,MAAM,CACJ,aAAaX,aAAa,iBACxBkD,aAAa,CAACC,GAAG,CAAEZ,YAAY,IAAK;QAClC,OAAO,OAAOA,YAAY,KAAK,QAAQ,IACrC,MAAM,IAAIA,YAAY,IACtBA,YAAY,CAAC8C,WAAW,GACtB,KAAK,GAAG9C,YAAY,CAACpB,IAAI,GACzBoB,YAAY;MAClB,CAAC,CAAC,CAAC+C,IAAI,CAAC,IAAI,CAAC,WACJlC,WAAW,CAACkC,IAAI,CAAC,IAAI,CAAC,IAAI,EACrC,IAAI,EACJrE,GACF,CAAC;MAED,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMsE,0BAA0B,GAAGA,CACjCvF,aAAa,EAAEwF,4BAA4B,EAC3CC,mBAAmB,EAAEhF,KAAK,EAAEE,MAAM,KAC/B;EACH;EACA,IAAI+E,iBAAiB;EAErB,OAAOD,mBAAmB,CAAClE,IAAI,CAAC,CAAC;IAC/BJ,IAAI,EAAEwE,kBAAkB;IACxB7D;EACF,CAAC,KAAK;IACJ,MAAM8D,cAAc,GAAGD,kBAAkB,CAACvE,QAAQ,CAAC,GAAG,CAAC;IAEvD,IAAIwE,cAAc,EAAE;MAClB,IAAI,CAACF,iBAAiB,EAAE;QACtB/E,MAAM,CAAC,IAAIX,aAAa,uBAAuB2F,kBAAkB,uCAAuC,EAAE,IAAI,EAAElF,KAAK,CAACM,IAAI,CAACe,GAAG,CAAC,CAAC;QAEhI,OAAO,IAAI;MACb;MAEA,IAAI+D,gBAAgB,GAAGF,kBAAkB,CAACG,KAAK,CAAC,CAAC,EAAEH,kBAAkB,CAACI,OAAO,CAAC,GAAG,CAAC,CAAC;MAEnF,IAAIF,gBAAgB,CAACG,QAAQ,CAAC,IAAI,CAAC,EAAE;QACnCH,gBAAgB,GAAGA,gBAAgB,CAACC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MAClD;MAEA,IAAID,gBAAgB,KAAKH,iBAAiB,EAAE;QAC1C/E,MAAM,CACJ,IAAIX,aAAa,uBAAuB2F,kBAAkB,uBAAuBE,gBAAgB,KAAK,GACtG,iDAAiDH,iBAAiB,KAAK,EACvE,IAAI,EACJjF,KAAK,CAACM,IAAI,CAACe,GAAG,CAChB,CAAC;QAED,OAAO,IAAI;MACb;IACF,CAAC,MAAM;MACL4D,iBAAiB,GAAGC,kBAAkB;IACxC;IAEA,OAAO,KAAK;EACd,CAAC,CAAC;AACJ,CAAC;AAED,MAAMM,YAAY,GAAG,CACnB,yBAAyB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,mBAAmB;AACzF;AACA,mBAAmB,CACtB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAArG,OAAA,GAEa,IAAAsG,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACP5F,KAAK;EACLE,MAAM;EACND,KAAK;EACL4F;AACF,CAAC,KAAK;EACJ,MAAM;IACJrG,2BAA2B;IAC3BC,iBAAiB,GAAG,IAAI;IACxBC,iBAAiB,GAAG,KAAK;IACzBoG,iBAAiB,GAAG,gEAAgE;IACpFhG,WAAW,GAAG,KAAK;IACnBiG,0BAA0B,GAAG,KAAK;IAClCnG,6BAA6B,GAAG,KAAK;IACrCC,yBAAyB,GAAG;EAC9B,CAAC,GAAG+F,OAAO,CAACI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;;EAE5B;EACA;EACA;EACA;EACA;EACA,IAAI,CAACR,YAAY,CAAC7E,QAAQ,EAAC,oCAAsCkF,IAAI,CAAE9D,IAAI,CAAC,EAAE;IAC5E;EACF;EAEA,MAAMpC,eAAe,GAAGM,KAAK,CAACgG,kBAAkB,CAACH,iBAAiB,CAAC;EAEnE,MAAMI,uBAAuB,GAAGjG,KAAK,CAACkG,gBAAgB,CAAC,OAAO,CAAC;EAC/D,IAAI,CAACD,uBAAuB,IAAI,CAACA,uBAAuB,CAACxC,MAAM,EAAE;IAC/D;EACF;EAEA,MAAM3D,sBAAsB,GAAGE,KAAK,CAACmG,yBAAyB,CAACL,0BAA0B,CAAC;EAE1F,MAAMxG,aAAa,GAAG,qBAAuBU,KAAK,CAACoG,mBAAmB,CAAC;IACrE7D,OAAO,EAAE;EACX,CAAC,CAAE;EACH,MAAM8D,OAAO,GAAGhH,sBAAsB,CACpCC,aAAa,EACbC,2BAA2B,EAC3BC,iBAAiB,EACjBC,iBAAiB,EACjBC,eAAe,EACfC,6BAA6B,EAC7BC,yBAAyB,EACzBC,WAAW,EACXC,sBAAsB,EACtBC,KAAK,EACLC,KAAK,EACLC,MACF,CAAC;EAED,IAAIoG,OAAO,IAAI,CAAC7G,iBAAiB,EAAE;IACjC;EACF;EAEAqF,0BAA0B,CACxBvF,aAAa,EAAEC,2BAA2B,EAAE0G,uBAAuB,EAAElG,KAAK,EAAEE,MAC9E,CAAC;AACH,CAAC,EAAE;EACDqG,eAAe,EAAEf,YAAY;EAC7BgB,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,gFAAgF;MAC7FC,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3B3E,UAAU,EAAE;QACV3C,2BAA2B,EAAE;UAC3BuC,IAAI,EAAE;QACR,CAAC;QACDtC,iBAAiB,EAAE;UACjBsC,IAAI,EAAE;QACR,CAAC;QACDrC,iBAAiB,EAAE;UACjBqC,IAAI,EAAE;QACR,CAAC;QACD+D,iBAAiB,EAAE;UACjB/D,IAAI,EAAE;QACR,CAAC;QACDnC,6BAA6B,EAAE;UAC7BmC,IAAI,EAAE;QACR,CAAC;QACDlC,yBAAyB,EAAE;UACzBkC,IAAI,EAAE;QACR,CAAC;QACDjC,WAAW,EAAE;UACXiC,IAAI,EAAE;QACR,CAAC;QACDgE,0BAA0B,EAAE;UAC1BhE,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAgF,MAAA,CAAArB,OAAA,GAAAA,OAAA,CAAArG,OAAA","ignoreList":[]}
package/package.json CHANGED
@@ -152,5 +152,5 @@
152
152
  "test-cov": "cross-env TIMING=1 c8 --reporter text npm run test-no-cov",
153
153
  "test-index": "npm run test-no-cov -- test/rules/index.js"
154
154
  },
155
- "version": "50.2.1"
155
+ "version": "50.2.2"
156
156
  }
@@ -354,11 +354,18 @@ const validateParameterNamesDeep = (
354
354
  });
355
355
  };
356
356
 
357
+ const allowedNodes = [
358
+ 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction',
359
+ // Add this to above defaults
360
+ 'TSMethodSignature'
361
+ ];
362
+
357
363
  export default iterateJsdoc(({
358
364
  context,
359
365
  jsdoc,
360
366
  report,
361
367
  utils,
368
+ node,
362
369
  }) => {
363
370
  const {
364
371
  allowExtraTrailingParamDocs,
@@ -371,6 +378,15 @@ export default iterateJsdoc(({
371
378
  disableMissingParamChecks = false,
372
379
  } = context.options[0] || {};
373
380
 
381
+ // Although we might just remove global settings contexts from applying to
382
+ // this rule (as they can cause problems with `getFunctionParameterNames`
383
+ // checks if they are not functions but say variables), the user may
384
+ // instead wish to narrow contexts in those settings, so this check
385
+ // is still useful
386
+ if (!allowedNodes.includes(/** @type {import('estree').Node} */ (node).type)) {
387
+ return;
388
+ }
389
+
374
390
  const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);
375
391
 
376
392
  const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');
@@ -406,11 +422,7 @@ export default iterateJsdoc(({
406
422
  targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,
407
423
  );
408
424
  }, {
409
- contextDefaults: [
410
- 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction',
411
- // Add this to above defaults
412
- 'TSMethodSignature'
413
- ],
425
+ contextDefaults: allowedNodes,
414
426
  meta: {
415
427
  docs: {
416
428
  description: 'Ensures that parameter names in JSDoc match those in the function declaration.',