From 6801eb57805c06c398bd82da72f1429acc634a07 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 4 Feb 2023 10:52:55 +0100 Subject: [PATCH] eslint-plugin: refactor to fix issues uncovered by more strict parsing Signed-off-by: Patrik Oldsberg --- packages/eslint-plugin/lib/getPackages.js | 12 ++++++------ packages/eslint-plugin/lib/visitImports.js | 12 ++++++++++-- .../eslint-plugin/rules/no-undeclared-imports.js | 13 +++++++++---- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/packages/eslint-plugin/lib/getPackages.js b/packages/eslint-plugin/lib/getPackages.js index 6c8c1a66b2..f5f2c63cc1 100644 --- a/packages/eslint-plugin/lib/getPackages.js +++ b/packages/eslint-plugin/lib/getPackages.js @@ -36,8 +36,10 @@ const manypkg = require('@manypkg/get-packages'); // Loads all packages in the monorepo once, and caches the result module.exports = (function () { + /** @type {PackageMap | undefined} */ let result = undefined; - let lastLoadAt = undefined; + /** @type {number} */ + let lastLoadAt = 0; /** @returns {PackageMap | undefined} */ return function getPackages(/** @type {string} */ dir) { @@ -58,11 +60,9 @@ module.exports = (function () { list: packages.packages, root: packages.root, byPath(filePath) { - return packages.packages.find(pkg => { - if (!path.relative(pkg.dir, filePath).startsWith('..')) { - return pkg; - } - }); + return packages.packages.find( + pkg => !path.relative(pkg.dir, filePath).startsWith('..'), + ); }, }; lastLoadAt = Date.now(); diff --git a/packages/eslint-plugin/lib/visitImports.js b/packages/eslint-plugin/lib/visitImports.js index ed16c26c7f..43401bf5f9 100644 --- a/packages/eslint-plugin/lib/visitImports.js +++ b/packages/eslint-plugin/lib/visitImports.js @@ -56,12 +56,17 @@ const getPackages = require('./getPackages'); /** * @callback ImportVisitor - * @param {import('eslint').Rule.Node} node + * @param {ConsideredNode} node * @param {LocalImport | InternalImport | ExternalImport | BuiltinImport} import */ /** - * @param {import('estree').ImportDeclaration | import('estree').ExportAllDeclaration | import('estree').ExportNamedDeclaration | import('estree').ImportExpression | import('estree').SimpleCallExpression} node + * @typedef ConsideredNode + * @type {import('estree').ImportDeclaration | import('estree').ExportAllDeclaration | import('estree').ExportNamedDeclaration | import('estree').ImportExpression | import('estree').SimpleCallExpression} + */ + +/** + * @param {ConsideredNode} node * @returns {undefined | {path: string, kind: 'type' | 'value'}} */ function getImportInfo(node) { @@ -103,6 +108,9 @@ module.exports = function visitImports(context, visitor) { return; } + /** + * @param {ConsideredNode} node + */ function visit(node) { const info = getImportInfo(node); if (!info) { diff --git a/packages/eslint-plugin/rules/no-undeclared-imports.js b/packages/eslint-plugin/rules/no-undeclared-imports.js index 4f60b712d9..85d7266eb8 100644 --- a/packages/eslint-plugin/rules/no-undeclared-imports.js +++ b/packages/eslint-plugin/rules/no-undeclared-imports.js @@ -37,7 +37,7 @@ const devModulePatterns = [ ]; function getExpectedDepType( - localPkg, + /** @type {any} */ localPkg, /** @type {string} */ impPath, /** @type {string} */ modulePath, ) { @@ -58,6 +58,7 @@ function getExpectedDepType( case 'react-router-dom': return 'peer'; } + break; case 'cli': case 'frontend': case 'backend': @@ -100,10 +101,14 @@ function findConflict(pkg, name, expectedType) { return { oldDepsField, depsField }; } + return undefined; } -function getAddFlagForConflict(conflict) { - switch (conflict?.depsField) { +/** + * @param {string} depsField + */ +function getAddFlagForDepsField(depsField) { + switch (depsField) { case depFields.dep: return ''; case depFields.dev: @@ -189,7 +194,7 @@ module.exports = { data: { ...conflict, packagePath, - addFlag: getAddFlagForConflict(conflict), + addFlag: getAddFlagForDepsField(conflict.depsField), packageName: imp.packageName, packageJsonPath: packageJsonPath, },