Skip to content

Commit 785fb26

Browse files
committed
fix(imports-as-dependencies): check for types in package.json and if not present, check @types; fixes #1107
1 parent d7ec6e0 commit 785fb26

File tree

2 files changed

+44
-6
lines changed

2 files changed

+44
-6
lines changed

src/rules/importsAsDependencies.js

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ try {
3737
/* eslint-enable no-console -- Inform user */
3838
}
3939

40+
const moduleCheck = new Map();
41+
4042
export default iterateJsdoc(({
4143
jsdoc,
4244
settings,
@@ -60,13 +62,34 @@ export default iterateJsdoc(({
6062
}
6163

6264
traverse(typeAst, (nde) => {
63-
if (nde.type === 'JsdocTypeImport' && !deps.has(nde.element.value.replace(
64-
/^(@[^/]+\/[^/]+|[^/]+).*$/u, '$1',
65-
))) {
66-
utils.reportJSDoc(
67-
'import points to package which is not found in dependencies',
68-
tag,
65+
if (nde.type === 'JsdocTypeImport') {
66+
let mod = nde.element.value.replace(
67+
/^(@[^/]+\/[^/]+|[^/]+).*$/u, '$1',
6968
);
69+
if (!moduleCheck.has(mod)) {
70+
let pkg;
71+
try {
72+
pkg = JSON.parse(
73+
// @ts-expect-error It's ok
74+
readFileSync(join(process.cwd(), 'node_modules', mod, './package.json')),
75+
);
76+
} catch {
77+
// Ignore
78+
}
79+
80+
if (!pkg || !pkg.types) {
81+
mod = `@types/${mod}`;
82+
}
83+
84+
moduleCheck.set(mod, !deps.has(mod));
85+
}
86+
87+
if (moduleCheck.get(mod)) {
88+
utils.reportJSDoc(
89+
'import points to package which is not found in dependencies',
90+
tag,
91+
);
92+
}
7093
}
7194
});
7295
}

test/rules/assertions/importsAsDependencies.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,5 +87,20 @@ export default {
8787
*/
8888
`,
8989
},
90+
{
91+
code: `
92+
/**
93+
* @type {null|import('esquery').ESQueryOptions}
94+
*/
95+
`,
96+
},
97+
{
98+
code: `
99+
/**
100+
* @type {null|import('@es-joy/jsdoccomment').InlineTag|
101+
* import('@es-joy/jsdoccomment').JsdocBlock}
102+
*/
103+
`,
104+
},
90105
],
91106
};

0 commit comments

Comments
 (0)