diff --git a/src/rules/importsAsDependencies.js b/src/rules/importsAsDependencies.js index 975210830..a6a4166f3 100644 --- a/src/rules/importsAsDependencies.js +++ b/src/rules/importsAsDependencies.js @@ -60,13 +60,30 @@ export default iterateJsdoc(({ } traverse(typeAst, (nde) => { - if (nde.type === 'JsdocTypeImport' && !deps.has(nde.element.value.replace( - /^(@[^/]+\/[^/]+|[^/]+).*$/u, '$1', - ))) { - utils.reportJSDoc( - 'import points to package which is not found in dependencies', - tag, + if (nde.type === 'JsdocTypeImport') { + let mod = nde.element.value.replace( + /^(@[^/]+\/[^/]+|[^/]+).*$/u, '$1', ); + let pkg; + try { + pkg = JSON.parse( + // @ts-expect-error It's ok + readFileSync(join(process.cwd(), 'node_modules', mod, './package.json')), + ); + } catch { + // Ignore + } + + if (!pkg || !pkg.types) { + mod = `@types/${mod}`; + } + + if (!deps.has(mod)) { + utils.reportJSDoc( + 'import points to package which is not found in dependencies', + tag, + ); + } } }); } diff --git a/test/rules/assertions/importsAsDependencies.js b/test/rules/assertions/importsAsDependencies.js index 321a6c96b..d81dd7f73 100644 --- a/test/rules/assertions/importsAsDependencies.js +++ b/test/rules/assertions/importsAsDependencies.js @@ -87,5 +87,12 @@ export default { */ `, }, + { + code: ` + /** + * @type {null|import('esquery').ESQueryOptions} + */ + `, + }, ], };