From 7f6eb15a210550fc3e64304d69d48b54262ab039 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Wed, 29 Nov 2023 12:36:01 +0100 Subject: [PATCH] feat(providence): do not throw on unparseable files, but allow to proceed run for rest of projects --- .changeset/big-gifts-reflect copy 2.md | 5 +++++ .changeset/big-gifts-reflect copy 3.md | 5 +++++ .changeset/big-gifts-reflect copy.md | 5 +++++ .../src/program/core/Analyzer.js | 19 +++++++++++++------ 4 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 .changeset/big-gifts-reflect copy 2.md create mode 100644 .changeset/big-gifts-reflect copy 3.md create mode 100644 .changeset/big-gifts-reflect copy.md diff --git a/.changeset/big-gifts-reflect copy 2.md b/.changeset/big-gifts-reflect copy 2.md new file mode 100644 index 000000000..9a73061e6 --- /dev/null +++ b/.changeset/big-gifts-reflect copy 2.md @@ -0,0 +1,5 @@ +--- +'providence-analytics': patch +--- + +feat: allow to resolve outside node_modules as well diff --git a/.changeset/big-gifts-reflect copy 3.md b/.changeset/big-gifts-reflect copy 3.md new file mode 100644 index 000000000..9b1159370 --- /dev/null +++ b/.changeset/big-gifts-reflect copy 3.md @@ -0,0 +1,5 @@ +--- +'providence-analytics': patch +--- + +feat: do not throw on unparseable files, but allow to proceed run for rest of projects diff --git a/.changeset/big-gifts-reflect copy.md b/.changeset/big-gifts-reflect copy.md new file mode 100644 index 000000000..23899f517 --- /dev/null +++ b/.changeset/big-gifts-reflect copy.md @@ -0,0 +1,5 @@ +--- +'providence-analytics': patch +--- + +fix: swc-traverse does not fail on object proto builtins like "toString" diff --git a/packages-node/providence-analytics/src/program/core/Analyzer.js b/packages-node/providence-analytics/src/program/core/Analyzer.js index f6137fb5b..c5d9989b1 100644 --- a/packages-node/providence-analytics/src/program/core/Analyzer.js +++ b/packages-node/providence-analytics/src/program/core/Analyzer.js @@ -1,6 +1,6 @@ /* eslint-disable no-param-reassign */ import semver from 'semver'; -import pathLib from 'path'; +import path from 'path'; import { LogService } from './LogService.js'; import { QueryService } from './QueryService.js'; import { ReportService } from './ReportService.js'; @@ -33,9 +33,17 @@ async function analyzePerAstFile(projectData, astAnalysis, analyzerCfg) { for (const { file, ast, context: astContext } of projectData.entries) { const relativePath = getFilePathRelativeFromRoot(file, projectData.project.path); const context = { code: astContext.code, relativePath, projectData, analyzerCfg }; - LogService.debug(`${pathLib.resolve(projectData.project.path, file)}`); - const { result, meta } = await astAnalysis(ast, context); - entries.push({ file: relativePath, meta, result }); + + const fullPath = path.resolve(projectData.project.path, file); + LogService.debug(`[analyzePerAstFile]: ${fullPath}`); + + // We do a try and catch here, so that unparseable files do not block all metrics we're gathering in a run + try { + const { result, meta } = await astAnalysis(ast, context); + entries.push({ file: relativePath, meta, result }); + } catch (e) { + LogService.error(`[analyzePerAstFile]: ${fullPath} throws: ${e}`); + } } const filteredEntries = entries.filter(({ result }) => Boolean(result.length)); return filteredEntries; @@ -137,15 +145,14 @@ const checkForMatchCompatibility = ( /** @type {PathFromSystemRoot} */ referencePath, /** @type {PathFromSystemRoot} */ targetPath, ) => { - // const refFile = pathLib.resolve(referencePath, 'package.json'); const referencePkg = InputDataService.getPackageJson(referencePath); - // const targetFile = pathLib.resolve(targetPath, 'package.json'); const targetPkg = InputDataService.getPackageJson(targetPath); const allTargetDeps = [ ...Object.entries(targetPkg?.devDependencies || {}), ...Object.entries(targetPkg?.dependencies || {}), ]; + const importEntry = allTargetDeps.find(([name]) => referencePkg?.name === name); if (!importEntry) { return { compatible: false, reason: 'no-dependency' };