HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Users/fred/.codex/.tmp/plugins/plugins/plugin-eval/src/evaluators/code.js
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],
  };
}