eslint-plugin-jsdoc 62.5.3 → 62.5.4
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.
|
@@ -161,7 +161,16 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
161
161
|
// we look to present tags instead
|
|
162
162
|
const templateTags = ancestorNodes.length ? ancestorNodes.flatMap(ancestorNode => {
|
|
163
163
|
return getTemplateTags(ancestorNode);
|
|
164
|
-
}) :
|
|
164
|
+
}) :
|
|
165
|
+
// We err on the side of being too aggressive; checking only
|
|
166
|
+
// present tags is not sufficient
|
|
167
|
+
comments.flatMap(doc => {
|
|
168
|
+
return doc.tags.filter(({
|
|
169
|
+
tag
|
|
170
|
+
}) => {
|
|
171
|
+
return tag === 'template';
|
|
172
|
+
});
|
|
173
|
+
});
|
|
165
174
|
const closureGenericTypes = templateTags.flatMap(tag => {
|
|
166
175
|
return utils.parseClosureTemplateTag(tag);
|
|
167
176
|
});
|
|
@@ -461,6 +470,10 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
461
470
|
})) {
|
|
462
471
|
return;
|
|
463
472
|
}
|
|
473
|
+
if (parent?.type === 'JsdocTypeInfer' && value === parent.element.value) {
|
|
474
|
+
allDefinedTypes.add(value);
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
464
477
|
if (!disableReporting) {
|
|
465
478
|
report(`The type '${val}' is undefined.`, null, tag);
|
|
466
479
|
}
|
|
@@ -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","globalTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","state","utils","foundTypedefValues","scopeManager","globalScope","checkUsedTypedefs","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","allComments","getAllComments","comments","comment","test","value","commentNode","parseComment","globals","flatMap","trim","split","concat","languageOptions","typedefs","doc","tags","tag","isNameOrNamepathDefiningTag","includes","typedefDeclarations","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","getNamespaceTypes","prefix","moduleDeclaration","body","item","declaration","id","prop","key","propName","nestedName","imports","closedTypes","allDefinedTypes","identifiers","globalItem","property","init","callee","methodOrProp","programBody","ast","statement","expression","left","object","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","definedNamesAndNamepaths","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","right","structuredTypes","rootNamespace","isNamespaceValid","Array","isArray","typeParameters","some","typeParam","markVariableAsUsed","exit","loc","typedef","message","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', 'Intl',\n];\n\nconst globalTypes = [\n 'globalThis', 'global', 'window', 'self',\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(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n}) => {\n /** @type {string[]} */\n const foundTypedefValues = [];\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 * checkUsedTypedefs: boolean\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean,\n * }}\n */ {\n checkUsedTypedefs = false,\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 allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefs = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag) && ![\n 'arg',\n 'argument',\n 'param',\n 'prop',\n 'property',\n ].includes(tag);\n });\n });\n\n const typedefDeclarations = typedefs\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 jsdc = parseComment(commentNode, '');\n\n return jsdc.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 /**\n * Recursively extracts types from a namespace declaration.\n * @param {string} prefix - The namespace prefix (e.g., \"MyNamespace\" or \"Outer.Inner\").\n * @param {import('@typescript-eslint/types').TSESTree.TSModuleDeclaration} moduleDeclaration - The module declaration node.\n * @returns {string[]} Array of fully qualified type names.\n */\n const getNamespaceTypes = (prefix, moduleDeclaration) => {\n /* c8 ignore next 3 -- Guard for ambient modules without body. */\n if (!moduleDeclaration.body || moduleDeclaration.body.type !== 'TSModuleBlock') {\n return [];\n }\n\n return moduleDeclaration.body.body.flatMap((item) => {\n /** @type {import('@typescript-eslint/types').TSESTree.ProgramStatement | import('@typescript-eslint/types').TSESTree.NamedExportDeclarations | null} */\n let declaration = item;\n\n if (item.type === 'ExportNamedDeclaration' && item.declaration) {\n declaration = item.declaration;\n }\n\n if (declaration.type === 'TSTypeAliasDeclaration' || declaration.type === 'ClassDeclaration') {\n /* c8 ignore next 4 -- Guard for anonymous class declarations. */\n if (!declaration.id) {\n return [];\n }\n\n return [\n `${prefix}.${declaration.id.name}`,\n ];\n }\n\n if (declaration.type === 'TSInterfaceDeclaration') {\n return [\n `${prefix}.${declaration.id.name}`,\n ...declaration.body.body.map((prop) => {\n // Only `TSPropertySignature` and `TSMethodSignature` have 'key'.\n if (prop.type !== 'TSPropertySignature' && prop.type !== 'TSMethodSignature') {\n return '';\n }\n\n // Key can be computed or a literal, only handle Identifier.\n if (prop.key.type !== 'Identifier') {\n return '';\n }\n\n const propName = prop.key.name;\n /* c8 ignore next -- `propName` is always truthy for Identifiers. */\n return propName ? `${prefix}.${declaration.id.name}.${propName}` : '';\n }).filter(Boolean),\n ];\n }\n\n // Handle nested namespaces.\n if (declaration.type === 'TSModuleDeclaration') {\n /* c8 ignore next -- Nested string-literal modules aren't valid TS syntax. */\n const nestedName = declaration.id?.type === 'Identifier' ? declaration.id.name : '';\n /* c8 ignore next 3 -- Guard. */\n if (!nestedName) {\n return [];\n }\n\n return [\n `${prefix}.${nestedName}`,\n ...getNamespaceTypes(`${prefix}.${nestedName}`, declaration),\n ];\n }\n\n // Fallback for unhandled declaration types (e.g., TSEnumDeclaration, FunctionDeclaration, etc.).\n return [];\n });\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n /** @type {Set<string>} */\n const closedTypes = new Set();\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 }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n closedTypes.add(name);\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'TSModuleDeclaration':\n closedTypes.add(name);\n return [\n name,\n ...getNamespaceTypes(name, globalItem),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n // Module scope names are also defined\n return [\n name,\n ];\n }\n\n return [\n name,\n ];\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((() => {\n // Detect static property assignments like `MyClass.Prop = ...`\n const programBody = /** @type {import('@typescript-eslint/types').TSESTree.Program} */ (\n sourceCode.ast\n ).body;\n\n return programBody.flatMap((statement) => {\n if (\n statement.type === 'ExpressionStatement' &&\n statement.expression.type === 'AssignmentExpression' &&\n statement.expression.left.type === 'MemberExpression' &&\n statement.expression.left.object.type === 'Identifier' &&\n statement.expression.left.property.type === 'Identifier' &&\n closedTypes.has(statement.expression.left.object.name)\n ) {\n return [\n `${statement.expression.left.object.name}.${statement.expression.left.property.name}`,\n ];\n }\n\n return [];\n });\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 3 */\n sourceCode.getScope(node)) ||\n // @ts-expect-error ESLint 8\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 definedNamesAndNamepaths = new Set(utils.filterTags(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n }).map(({\n name,\n }) => {\n return name;\n }));\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 // eslint-disable-next-line complexity -- Refactor\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 (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n !globalTypes.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty'\n ) {\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 const rootNamespace = val.split('.')[0];\n const isNamespaceValid = (definedTypes.includes(rootNamespace) || allDefinedTypes.has(rootNamespace)) &&\n !closedTypes.has(rootNamespace);\n\n if (!allDefinedTypes.has(val) &&\n !definedNamesAndNamepaths.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val)) && !isNamespaceValid\n ) {\n const parent =\n /**\n * @type {import('jsdoc-type-pratt-parser').RootResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (nde)._parent;\n if (parent?.type === 'JsdocTypeTypeParameter') {\n return;\n }\n\n if (parent?.type === 'JsdocTypeFunction' &&\n /** @type {import('jsdoc-type-pratt-parser').FunctionResult} */\n (parent)?.typeParameters?.some((typeParam) => {\n return value === typeParam.name.value;\n })\n ) {\n return;\n }\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 4 */\n } else {\n // @ts-expect-error ESLint 8\n context.markVariableAsUsed(val);\n }\n }\n\n if (checkUsedTypedefs && typedefDeclarations.includes(val)) {\n foundTypedefValues.push(val);\n }\n }\n });\n }\n\n state.foundTypedefValues = foundTypedefValues;\n}, {\n // We use this method rather than checking at end of handler above because\n // in that case, it is invoked too many times and would thus report errors\n // too many times.\n exit ({\n context,\n state,\n utils,\n }) {\n const {\n checkUsedTypedefs = false,\n } = context.options[0] || {};\n\n if (!checkUsedTypedefs) {\n return;\n }\n\n const allComments = context.sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return {\n doc: parseComment(commentNode, ''),\n loc: commentNode.loc,\n };\n });\n const typedefs = comments\n .flatMap(({\n doc,\n loc,\n }) => {\n const tags = doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n });\n if (!tags.length) {\n return [];\n }\n\n return {\n loc,\n tags,\n };\n });\n\n for (const typedef of typedefs) {\n if (\n !state.foundTypedefValues.includes(typedef.tags[0].name)\n ) {\n context.report({\n loc: /** @type {import('@eslint/core').SourceLocation} */ (typedef.loc),\n message: 'This typedef was not used within the file',\n });\n }\n }\n },\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`.',\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 checkUsedTypedefs: {\n description: 'Whether to check typedefs for use within the file',\n type: 'boolean',\n },\n definedTypes: {\n description: `This array can be populated to indicate other types which\nare automatically considered as defined (in addition to globals, etc.).\nDefaults to an empty array.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n description: `Whether to disable reporting of errors. Defaults to\n\\`false\\`. This may be set to \\`true\\` in order to take advantage of only\nmarking defined variables as used or checking used typedefs.`,\n type: 'boolean',\n },\n markVariablesAsUsed: {\n description: `Whether to mark variables as used for the purposes\nof the \\`no-unused-vars\\` rule when they are not found to be undefined.\nDefaults to \\`true\\`. May be set to \\`false\\` to enforce a practice of not\nimporting types unless used in code.`,\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","globalTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","state","utils","foundTypedefValues","scopeManager","globalScope","checkUsedTypedefs","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","allComments","getAllComments","comments","comment","test","value","commentNode","parseComment","globals","flatMap","trim","split","concat","languageOptions","typedefs","doc","tags","tag","isNameOrNamepathDefiningTag","includes","typedefDeclarations","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdc","templateTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","getNamespaceTypes","prefix","moduleDeclaration","body","item","declaration","id","prop","key","propName","nestedName","imports","closedTypes","allDefinedTypes","identifiers","globalItem","property","init","callee","methodOrProp","programBody","ast","statement","expression","left","object","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","definedNamesAndNamepaths","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","right","structuredTypes","rootNamespace","isNamespaceValid","Array","isArray","typeParameters","some","typeParam","element","markVariableAsUsed","exit","loc","typedef","message","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', 'Intl',\n];\n\nconst globalTypes = [\n 'globalThis', 'global', 'window', 'self',\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(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n}) => {\n /** @type {string[]} */\n const foundTypedefValues = [];\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 * checkUsedTypedefs: boolean\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean,\n * }}\n */ {\n checkUsedTypedefs = false,\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 allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefs = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag) && ![\n 'arg',\n 'argument',\n 'param',\n 'prop',\n 'property',\n ].includes(tag);\n });\n });\n\n const typedefDeclarations = typedefs\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 jsdc = parseComment(commentNode, '');\n\n return jsdc.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 // We err on the side of being too aggressive; checking only\n // present tags is not sufficient\n comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'template';\n });\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 /**\n * Recursively extracts types from a namespace declaration.\n * @param {string} prefix - The namespace prefix (e.g., \"MyNamespace\" or \"Outer.Inner\").\n * @param {import('@typescript-eslint/types').TSESTree.TSModuleDeclaration} moduleDeclaration - The module declaration node.\n * @returns {string[]} Array of fully qualified type names.\n */\n const getNamespaceTypes = (prefix, moduleDeclaration) => {\n /* c8 ignore next 3 -- Guard for ambient modules without body. */\n if (!moduleDeclaration.body || moduleDeclaration.body.type !== 'TSModuleBlock') {\n return [];\n }\n\n return moduleDeclaration.body.body.flatMap((item) => {\n /** @type {import('@typescript-eslint/types').TSESTree.ProgramStatement | import('@typescript-eslint/types').TSESTree.NamedExportDeclarations | null} */\n let declaration = item;\n\n if (item.type === 'ExportNamedDeclaration' && item.declaration) {\n declaration = item.declaration;\n }\n\n if (declaration.type === 'TSTypeAliasDeclaration' || declaration.type === 'ClassDeclaration') {\n /* c8 ignore next 4 -- Guard for anonymous class declarations. */\n if (!declaration.id) {\n return [];\n }\n\n return [\n `${prefix}.${declaration.id.name}`,\n ];\n }\n\n if (declaration.type === 'TSInterfaceDeclaration') {\n return [\n `${prefix}.${declaration.id.name}`,\n ...declaration.body.body.map((prop) => {\n // Only `TSPropertySignature` and `TSMethodSignature` have 'key'.\n if (prop.type !== 'TSPropertySignature' && prop.type !== 'TSMethodSignature') {\n return '';\n }\n\n // Key can be computed or a literal, only handle Identifier.\n if (prop.key.type !== 'Identifier') {\n return '';\n }\n\n const propName = prop.key.name;\n /* c8 ignore next -- `propName` is always truthy for Identifiers. */\n return propName ? `${prefix}.${declaration.id.name}.${propName}` : '';\n }).filter(Boolean),\n ];\n }\n\n // Handle nested namespaces.\n if (declaration.type === 'TSModuleDeclaration') {\n /* c8 ignore next -- Nested string-literal modules aren't valid TS syntax. */\n const nestedName = declaration.id?.type === 'Identifier' ? declaration.id.name : '';\n /* c8 ignore next 3 -- Guard. */\n if (!nestedName) {\n return [];\n }\n\n return [\n `${prefix}.${nestedName}`,\n ...getNamespaceTypes(`${prefix}.${nestedName}`, declaration),\n ];\n }\n\n // Fallback for unhandled declaration types (e.g., TSEnumDeclaration, FunctionDeclaration, etc.).\n return [];\n });\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n /** @type {Set<string>} */\n const closedTypes = new Set();\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 }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n closedTypes.add(name);\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'TSModuleDeclaration':\n closedTypes.add(name);\n return [\n name,\n ...getNamespaceTypes(name, globalItem),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n // Module scope names are also defined\n return [\n name,\n ];\n }\n\n return [\n name,\n ];\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((() => {\n // Detect static property assignments like `MyClass.Prop = ...`\n const programBody = /** @type {import('@typescript-eslint/types').TSESTree.Program} */ (\n sourceCode.ast\n ).body;\n\n return programBody.flatMap((statement) => {\n if (\n statement.type === 'ExpressionStatement' &&\n statement.expression.type === 'AssignmentExpression' &&\n statement.expression.left.type === 'MemberExpression' &&\n statement.expression.left.object.type === 'Identifier' &&\n statement.expression.left.property.type === 'Identifier' &&\n closedTypes.has(statement.expression.left.object.name)\n ) {\n return [\n `${statement.expression.left.object.name}.${statement.expression.left.property.name}`,\n ];\n }\n\n return [];\n });\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 3 */\n sourceCode.getScope(node)) ||\n // @ts-expect-error ESLint 8\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 definedNamesAndNamepaths = new Set(utils.filterTags(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n }).map(({\n name,\n }) => {\n return name;\n }));\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 // eslint-disable-next-line complexity -- Refactor\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 (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n !globalTypes.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty'\n ) {\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 const rootNamespace = val.split('.')[0];\n const isNamespaceValid = (definedTypes.includes(rootNamespace) || allDefinedTypes.has(rootNamespace)) &&\n !closedTypes.has(rootNamespace);\n\n if (!allDefinedTypes.has(val) &&\n !definedNamesAndNamepaths.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val)) && !isNamespaceValid\n ) {\n const parent =\n /**\n * @type {import('jsdoc-type-pratt-parser').RootResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (nde)._parent;\n if (parent?.type === 'JsdocTypeTypeParameter') {\n return;\n }\n\n if (parent?.type === 'JsdocTypeFunction' &&\n /** @type {import('jsdoc-type-pratt-parser').FunctionResult} */\n (parent)?.typeParameters?.some((typeParam) => {\n return value === typeParam.name.value;\n })\n ) {\n return;\n }\n\n if (parent?.type === 'JsdocTypeInfer' && value === parent.element.value) {\n allDefinedTypes.add(value);\n return;\n }\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 4 */\n } else {\n // @ts-expect-error ESLint 8\n context.markVariableAsUsed(val);\n }\n }\n\n if (checkUsedTypedefs && typedefDeclarations.includes(val)) {\n foundTypedefValues.push(val);\n }\n }\n });\n }\n\n state.foundTypedefValues = foundTypedefValues;\n}, {\n // We use this method rather than checking at end of handler above because\n // in that case, it is invoked too many times and would thus report errors\n // too many times.\n exit ({\n context,\n state,\n utils,\n }) {\n const {\n checkUsedTypedefs = false,\n } = context.options[0] || {};\n\n if (!checkUsedTypedefs) {\n return;\n }\n\n const allComments = context.sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return {\n doc: parseComment(commentNode, ''),\n loc: commentNode.loc,\n };\n });\n const typedefs = comments\n .flatMap(({\n doc,\n loc,\n }) => {\n const tags = doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n });\n if (!tags.length) {\n return [];\n }\n\n return {\n loc,\n tags,\n };\n });\n\n for (const typedef of typedefs) {\n if (\n !state.foundTypedefValues.includes(typedef.tags[0].name)\n ) {\n context.report({\n loc: /** @type {import('@eslint/core').SourceLocation} */ (typedef.loc),\n message: 'This typedef was not used within the file',\n });\n }\n }\n },\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`.',\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 checkUsedTypedefs: {\n description: 'Whether to check typedefs for use within the file',\n type: 'boolean',\n },\n definedTypes: {\n description: `This array can be populated to indicate other types which\nare automatically considered as defined (in addition to globals, etc.).\nDefaults to an empty array.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n description: `Whether to disable reporting of errors. Defaults to\n\\`false\\`. This may be set to \\`true\\` in order to take advantage of only\nmarking defined variables as used or checking used typedefs.`,\n type: 'boolean',\n },\n markVariablesAsUsed: {\n description: `Whether to mark variables as used for the purposes\nof the \\`no-unused-vars\\` rule when they are not found to be undefined.\nDefaults to \\`true\\`. May be set to \\`false\\` to enforce a practice of not\nimporting types unless used in code.`,\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
|
@@ -235,9 +235,15 @@ export default iterateJsdoc(({
|
|
|
235
235
|
ancestorNodes.flatMap((ancestorNode) => {
|
|
236
236
|
return getTemplateTags(ancestorNode);
|
|
237
237
|
}) :
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
238
|
+
// We err on the side of being too aggressive; checking only
|
|
239
|
+
// present tags is not sufficient
|
|
240
|
+
comments.flatMap((doc) => {
|
|
241
|
+
return doc.tags.filter(({
|
|
242
|
+
tag,
|
|
243
|
+
}) => {
|
|
244
|
+
return tag === 'template';
|
|
245
|
+
});
|
|
246
|
+
});
|
|
241
247
|
|
|
242
248
|
const closureGenericTypes = templateTags.flatMap((tag) => {
|
|
243
249
|
return utils.parseClosureTemplateTag(tag);
|
|
@@ -661,6 +667,11 @@ export default iterateJsdoc(({
|
|
|
661
667
|
return;
|
|
662
668
|
}
|
|
663
669
|
|
|
670
|
+
if (parent?.type === 'JsdocTypeInfer' && value === parent.element.value) {
|
|
671
|
+
allDefinedTypes.add(value);
|
|
672
|
+
return;
|
|
673
|
+
}
|
|
674
|
+
|
|
664
675
|
if (!disableReporting) {
|
|
665
676
|
report(`The type '${val}' is undefined.`, null, tag);
|
|
666
677
|
}
|