← Files Plugin EvalARCHIVED FILE

src/evaluators/code.js

1.23 KB · Sep 30, 2026 · 23:18 UTC

↓ Download file

import path from "node:path";

import { walkFiles } from "../lib/files.js";
import { analyzePythonFiles } from "./python.js";
import { analyzeTypeScriptFiles } from "./typescript.js";

function filterLanguageFiles(files) {
  const tsFiles = [];
  const pyFiles = [];

  for (const filePath of files) {
    const extension = path.extname(filePath).toLowerCase();
    if ([".ts", ".tsx", ".mts", ".cts"].includes(extension)) {
      tsFiles.push(filePath);
    } else if (extension === ".py") {
      pyFiles.push(filePath);
    }
  }

  return { tsFiles, pyFiles };
}

export async function analyzeCodeMetrics(rootPath, target) {
  const files =
    target.kind === "file"
      ? [target.path]
      : await walkFiles(rootPath, {
          excludeDirs: [],
          skipTopLevel: target.kind === "directory" ? [] : ["fixtures", "__fixtures__"],
        });
  const { tsFiles, pyFiles } = filterLanguageFiles(files);

  const tsAnalysis = await analyzeTypeScriptFiles(tsFiles, rootPath);
  const pyAnalysis = await analyzePythonFiles(pyFiles, rootPath);

  return {
    checks: [...tsAnalysis.checks, ...pyAnalysis.checks],
    metrics: [...tsAnalysis.metrics, ...pyAnalysis.metrics],
    artifacts: [...tsAnalysis.artifacts, ...pyAnalysis.artifacts],
  };
}

SHA-256: 33b66994a78a8bd9667b75792c538b82cc2968d053c7409bcc7adb07f11509bd