eslint-plugin-jsdoc 51.0.4 → 51.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -193,17 +193,17 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
193
193
|
}) : []).concat(extraTypes).concat(typedefDeclarations).concat(importTags).concat(definedTypes).concat(/** @type {string[]} */definedPreferredTypes).concat((() => {
|
|
194
194
|
// Other methods are not in scope, but we need them, and we grab them here
|
|
195
195
|
if (node?.type === 'MethodDefinition') {
|
|
196
|
-
return /** @type {import('estree').ClassBody} */node.parent.body.
|
|
196
|
+
return /** @type {import('estree').ClassBody} */node.parent.body.flatMap(methodOrProp => {
|
|
197
197
|
if (methodOrProp.type === 'MethodDefinition') {
|
|
198
198
|
// eslint-disable-next-line unicorn/no-lonely-if -- Pattern
|
|
199
199
|
if (methodOrProp.key.type === 'Identifier') {
|
|
200
|
-
return methodOrProp.key.name;
|
|
200
|
+
return [methodOrProp.key.name, `${/** @type {import('estree').ClassDeclaration} */node.parent?.parent?.id?.name}.${methodOrProp.key.name}`];
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
if (methodOrProp.type === 'PropertyDefinition') {
|
|
204
204
|
// eslint-disable-next-line unicorn/no-lonely-if -- Pattern
|
|
205
205
|
if (methodOrProp.key.type === 'Identifier') {
|
|
206
|
-
return methodOrProp.key.name;
|
|
206
|
+
return [methodOrProp.key.name, `${/** @type {import('estree').ClassDeclaration} */node.parent?.parent?.id?.name}.${methodOrProp.key.name}`];
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
209
|
/* c8 ignore next 2 -- Not yet built */
|
|
@@ -270,23 +270,46 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
270
270
|
parsedType,
|
|
271
271
|
tag
|
|
272
272
|
} of tagsWithTypes) {
|
|
273
|
-
(0, _jsdoccomment.traverse)(parsedType, nde => {
|
|
273
|
+
(0, _jsdoccomment.traverse)(parsedType, (nde, parentNode) => {
|
|
274
|
+
/**
|
|
275
|
+
* @type {import('jsdoc-type-pratt-parser').NameResult & {
|
|
276
|
+
* _parent?: import('jsdoc-type-pratt-parser').NonRootResult
|
|
277
|
+
* }}
|
|
278
|
+
*/
|
|
279
|
+
// eslint-disable-next-line canonical/id-match -- Avoid clashes
|
|
280
|
+
nde._parent = parentNode;
|
|
274
281
|
const {
|
|
275
282
|
type,
|
|
276
283
|
value
|
|
277
284
|
} = /** @type {import('jsdoc-type-pratt-parser').NameResult} */nde;
|
|
285
|
+
let val = value;
|
|
286
|
+
|
|
287
|
+
/** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */
|
|
288
|
+
let currNode = nde;
|
|
289
|
+
do {
|
|
290
|
+
currNode =
|
|
291
|
+
/**
|
|
292
|
+
* @type {import('jsdoc-type-pratt-parser').NameResult & {
|
|
293
|
+
* _parent?: import('jsdoc-type-pratt-parser').NonRootResult
|
|
294
|
+
* }}
|
|
295
|
+
*/
|
|
296
|
+
currNode._parent;
|
|
297
|
+
if (currNode && 'right' in currNode && currNode.right?.type === 'JsdocTypeProperty') {
|
|
298
|
+
val = val + '.' + currNode.right.value;
|
|
299
|
+
}
|
|
300
|
+
} while (currNode?.type === 'JsdocTypeNamePath');
|
|
278
301
|
if (type === 'JsdocTypeName') {
|
|
279
302
|
const structuredTypes = structuredTags[tag.tag]?.type;
|
|
280
|
-
if (!allDefinedTypes.has(
|
|
303
|
+
if (!allDefinedTypes.has(val) && (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))) {
|
|
281
304
|
if (!disableReporting) {
|
|
282
|
-
report(`The type '${
|
|
305
|
+
report(`The type '${val}' is undefined.`, null, tag);
|
|
283
306
|
}
|
|
284
|
-
} else if (markVariablesAsUsed && !extraTypes.includes(
|
|
307
|
+
} else if (markVariablesAsUsed && !extraTypes.includes(val)) {
|
|
285
308
|
if (sourceCode.markVariableAsUsed) {
|
|
286
|
-
sourceCode.markVariableAsUsed(
|
|
309
|
+
sourceCode.markVariableAsUsed(val);
|
|
287
310
|
/* c8 ignore next 3 */
|
|
288
311
|
} else {
|
|
289
|
-
context.markVariableAsUsed(
|
|
312
|
+
context.markVariableAsUsed(val);
|
|
290
313
|
}
|
|
291
314
|
}
|
|
292
315
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noUndefinedTypes.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","comments","getAllComments","comment","test","value","commentNode","parseComment","typedefDeclarations","flatMap","doc","tags","tag","isNamepathDefiningTag","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","trim","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","allDefinedTypes","concat","body","methodOrProp","key","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","tagsWithTypes","traverse","nde","structuredTypes","Array","isArray","includes","markVariableAsUsed","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean\n * }}\n */ {\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const comments = sourceCode.getAllComments()\n .filter((comment) => {\n return (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const typedefDeclarations = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdoc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).map(({\n name,\n }) => {\n return name;\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.map((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return methodOrProp.key.name;\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return methodOrProp.key.name;\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 2 */\n sourceCode.getScope(node)) ||\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n traverse(parsedType, (nde) => {\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(value) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(value))\n ) {\n if (!disableReporting) {\n report(`The type '${value}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(value)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(value);\n /* c8 ignore next 3 */\n } else {\n context.markVariableAsUsed(value);\n }\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\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":"noUndefinedTypes.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","comments","getAllComments","comment","test","value","commentNode","parseComment","typedefDeclarations","flatMap","doc","tags","tag","isNamepathDefiningTag","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","trim","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","allDefinedTypes","concat","body","methodOrProp","key","id","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","right","structuredTypes","Array","isArray","includes","markVariableAsUsed","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean\n * }}\n */ {\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const comments = sourceCode.getAllComments()\n .filter((comment) => {\n return (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const typedefDeclarations = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdoc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).map(({\n name,\n }) => {\n return name;\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 2 */\n sourceCode.getScope(node)) ||\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (currNode && 'right' in currNode && currNode.right?.type === 'JsdocTypeProperty') {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))\n ) {\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 3 */\n } else {\n context.markVariableAsUsed(val);\n }\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
"url": "http://gajus.com"
|
|
6
6
|
},
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@es-joy/jsdoccomment": "~0.
|
|
8
|
+
"@es-joy/jsdoccomment": "~0.51.1",
|
|
9
9
|
"are-docs-informative": "^0.0.2",
|
|
10
10
|
"comment-parser": "1.4.1",
|
|
11
11
|
"debug": "^4.4.1",
|
|
12
12
|
"escape-string-regexp": "^4.0.0",
|
|
13
|
-
"espree": "^10.
|
|
13
|
+
"espree": "^10.4.0",
|
|
14
14
|
"esquery": "^1.6.0",
|
|
15
15
|
"parse-imports-exports": "^0.2.4",
|
|
16
16
|
"semver": "^7.7.2",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@babel/cli": "^7.27.2",
|
|
22
22
|
"@babel/core": "^7.27.4",
|
|
23
|
-
"@babel/eslint-parser": "^7.27.
|
|
23
|
+
"@babel/eslint-parser": "^7.27.5",
|
|
24
24
|
"@babel/node": "^7.27.1",
|
|
25
25
|
"@babel/plugin-syntax-class-properties": "^7.12.13",
|
|
26
26
|
"@babel/plugin-transform-flow-strip-types": "^7.27.1",
|
|
@@ -36,39 +36,39 @@
|
|
|
36
36
|
"@types/eslint": "^9.6.1",
|
|
37
37
|
"@types/espree": "^10.1.0",
|
|
38
38
|
"@types/esquery": "^1.5.4",
|
|
39
|
-
"@types/estree": "^1.0.
|
|
39
|
+
"@types/estree": "^1.0.8",
|
|
40
40
|
"@types/json-schema": "^7.0.15",
|
|
41
41
|
"@types/lodash.defaultsdeep": "^4.6.9",
|
|
42
42
|
"@types/mocha": "^10.0.10",
|
|
43
|
-
"@types/node": "^
|
|
43
|
+
"@types/node": "^24.0.3",
|
|
44
44
|
"@types/semver": "^7.7.0",
|
|
45
45
|
"@types/spdx-expression-parse": "^3.0.5",
|
|
46
|
-
"@typescript-eslint/types": "^8.
|
|
46
|
+
"@typescript-eslint/types": "^8.34.1",
|
|
47
47
|
"babel-plugin-add-module-exports": "^1.0.4",
|
|
48
48
|
"babel-plugin-istanbul": "^7.0.0",
|
|
49
|
-
"babel-plugin-transform-import-meta": "^2.3.
|
|
49
|
+
"babel-plugin-transform-import-meta": "^2.3.3",
|
|
50
50
|
"c8": "^10.1.3",
|
|
51
51
|
"camelcase": "^8.0.0",
|
|
52
52
|
"chai": "^5.2.0",
|
|
53
53
|
"cross-env": "^7.0.3",
|
|
54
54
|
"decamelize": "^6.0.0",
|
|
55
|
-
"eslint": "9.
|
|
55
|
+
"eslint": "9.29.0",
|
|
56
56
|
"eslint-config-canonical": "~44.9.5",
|
|
57
57
|
"gitdown": "^4.1.1",
|
|
58
|
-
"glob": "^11.0.
|
|
58
|
+
"glob": "^11.0.3",
|
|
59
59
|
"globals": "^16.2.0",
|
|
60
60
|
"husky": "^9.1.7",
|
|
61
61
|
"jsdoc-type-pratt-parser": "^4.1.0",
|
|
62
62
|
"json-schema": "^0.4.0",
|
|
63
|
-
"lint-staged": "^16.1.
|
|
63
|
+
"lint-staged": "^16.1.2",
|
|
64
64
|
"lodash.defaultsdeep": "^4.6.1",
|
|
65
|
-
"mocha": "^11.
|
|
65
|
+
"mocha": "^11.7.0",
|
|
66
66
|
"open-editor": "^5.1.0",
|
|
67
67
|
"replace": "^1.2.2",
|
|
68
68
|
"rimraf": "^6.0.1",
|
|
69
69
|
"semantic-release": "^24.2.5",
|
|
70
70
|
"typescript": "5.8.3",
|
|
71
|
-
"typescript-eslint": "^8.
|
|
71
|
+
"typescript-eslint": "^8.34.1"
|
|
72
72
|
},
|
|
73
73
|
"engines": {
|
|
74
74
|
"node": ">=20.11.0"
|
|
@@ -160,5 +160,5 @@
|
|
|
160
160
|
"test-cov": "cross-env TIMING=1 c8 --reporter text npm run test-no-cov",
|
|
161
161
|
"test-index": "npm run test-no-cov -- test/rules/index.js"
|
|
162
162
|
},
|
|
163
|
-
"version": "51.0.
|
|
163
|
+
"version": "51.0.6"
|
|
164
164
|
}
|
|
@@ -270,18 +270,28 @@ export default iterateJsdoc(({
|
|
|
270
270
|
.concat((() => {
|
|
271
271
|
// Other methods are not in scope, but we need them, and we grab them here
|
|
272
272
|
if (node?.type === 'MethodDefinition') {
|
|
273
|
-
return /** @type {import('estree').ClassBody} */ (node.parent).body.
|
|
273
|
+
return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {
|
|
274
274
|
if (methodOrProp.type === 'MethodDefinition') {
|
|
275
275
|
// eslint-disable-next-line unicorn/no-lonely-if -- Pattern
|
|
276
276
|
if (methodOrProp.key.type === 'Identifier') {
|
|
277
|
-
return
|
|
277
|
+
return [
|
|
278
|
+
methodOrProp.key.name,
|
|
279
|
+
`${/** @type {import('estree').ClassDeclaration} */ (
|
|
280
|
+
node.parent?.parent
|
|
281
|
+
)?.id?.name}.${methodOrProp.key.name}`,
|
|
282
|
+
];
|
|
278
283
|
}
|
|
279
284
|
}
|
|
280
285
|
|
|
281
286
|
if (methodOrProp.type === 'PropertyDefinition') {
|
|
282
287
|
// eslint-disable-next-line unicorn/no-lonely-if -- Pattern
|
|
283
288
|
if (methodOrProp.key.type === 'Identifier') {
|
|
284
|
-
return
|
|
289
|
+
return [
|
|
290
|
+
methodOrProp.key.name,
|
|
291
|
+
`${/** @type {import('estree').ClassDeclaration} */ (
|
|
292
|
+
node.parent?.parent
|
|
293
|
+
)?.id?.name}.${methodOrProp.key.name}`,
|
|
294
|
+
];
|
|
285
295
|
}
|
|
286
296
|
}
|
|
287
297
|
/* c8 ignore next 2 -- Not yet built */
|
|
@@ -374,26 +384,49 @@ export default iterateJsdoc(({
|
|
|
374
384
|
parsedType,
|
|
375
385
|
tag,
|
|
376
386
|
} of tagsWithTypes) {
|
|
377
|
-
traverse(parsedType, (nde) => {
|
|
387
|
+
traverse(parsedType, (nde, parentNode) => {
|
|
388
|
+
/**
|
|
389
|
+
* @type {import('jsdoc-type-pratt-parser').NameResult & {
|
|
390
|
+
* _parent?: import('jsdoc-type-pratt-parser').NonRootResult
|
|
391
|
+
* }}
|
|
392
|
+
*/
|
|
393
|
+
// eslint-disable-next-line canonical/id-match -- Avoid clashes
|
|
394
|
+
(nde)._parent = parentNode;
|
|
378
395
|
const {
|
|
379
396
|
type,
|
|
380
397
|
value,
|
|
381
398
|
} = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);
|
|
382
399
|
|
|
400
|
+
let val = value;
|
|
401
|
+
|
|
402
|
+
/** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */
|
|
403
|
+
let currNode = nde;
|
|
404
|
+
do {
|
|
405
|
+
currNode =
|
|
406
|
+
/**
|
|
407
|
+
* @type {import('jsdoc-type-pratt-parser').NameResult & {
|
|
408
|
+
* _parent?: import('jsdoc-type-pratt-parser').NonRootResult
|
|
409
|
+
* }}
|
|
410
|
+
*/ (currNode)._parent;
|
|
411
|
+
if (currNode && 'right' in currNode && currNode.right?.type === 'JsdocTypeProperty') {
|
|
412
|
+
val = val + '.' + currNode.right.value;
|
|
413
|
+
}
|
|
414
|
+
} while (currNode?.type === 'JsdocTypeNamePath');
|
|
415
|
+
|
|
383
416
|
if (type === 'JsdocTypeName') {
|
|
384
417
|
const structuredTypes = structuredTags[tag.tag]?.type;
|
|
385
|
-
if (!allDefinedTypes.has(
|
|
386
|
-
(!Array.isArray(structuredTypes) || !structuredTypes.includes(
|
|
418
|
+
if (!allDefinedTypes.has(val) &&
|
|
419
|
+
(!Array.isArray(structuredTypes) || !structuredTypes.includes(val))
|
|
387
420
|
) {
|
|
388
421
|
if (!disableReporting) {
|
|
389
|
-
report(`The type '${
|
|
422
|
+
report(`The type '${val}' is undefined.`, null, tag);
|
|
390
423
|
}
|
|
391
|
-
} else if (markVariablesAsUsed && !extraTypes.includes(
|
|
424
|
+
} else if (markVariablesAsUsed && !extraTypes.includes(val)) {
|
|
392
425
|
if (sourceCode.markVariableAsUsed) {
|
|
393
|
-
sourceCode.markVariableAsUsed(
|
|
426
|
+
sourceCode.markVariableAsUsed(val);
|
|
394
427
|
/* c8 ignore next 3 */
|
|
395
428
|
} else {
|
|
396
|
-
context.markVariableAsUsed(
|
|
429
|
+
context.markVariableAsUsed(val);
|
|
397
430
|
}
|
|
398
431
|
}
|
|
399
432
|
}
|