Files
obsidian-livesync/utilsdeno/detect-any.ts
T
2026-06-17 06:10:30 +01:00

50 lines
1.7 KiB
TypeScript

// Detect explicit usage of 'any' type in the codebase.
// Use this script by running `deno run --allow-read --allow-env detect-any.ts` from the utilsdeno directory.
import { Project, SyntaxKind } from "npm:ts-morph";
import path from "node:path";
import { fileURLToPath } from "node:url";
const project = new Project({ tsConfigFilePath: "../tsconfig.json" });
project.addSourceFilesAtPaths("../src/**/*.ts");
project.addSourceFilesAtPaths("../src/**/*.svelte");
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const projectRoot = path.resolve(__dirname, "..");
function toPosixPath(filePath: string): string {
return filePath.replace(/\\/g, "/");
}
const posixProjectRoot = toPosixPath(projectRoot);
const posixSrc = `${posixProjectRoot}/src`;
let anyCount = 0;
for (const sourceFile of project.getSourceFiles()) {
const filePath = sourceFile.getFilePath();
const posixFilePath = toPosixPath(filePath);
if (!posixFilePath.startsWith(posixSrc)) continue;
if (
posixFilePath.includes("/_test/") ||
posixFilePath.endsWith(".spec.ts") ||
posixFilePath.endsWith(".test.ts")
) {
continue;
}
const anyNodes = sourceFile.getDescendantsOfKind(SyntaxKind.AnyKeyword);
if (anyNodes.length > 0) {
console.log(`File: ${posixFilePath.slice(posixProjectRoot.length + 1)}`);
for (const anyNode of anyNodes) {
const { line } = sourceFile.getLineAndColumnAtPos(anyNode.getStart());
const lineText = sourceFile.getFullText().split(/\r?\n/)[line - 1];
console.log(` Line ${line}: ${lineText.trim()}`);
anyCount++;
}
}
}
console.log(`\nTotal explicit 'any' usages found: ${anyCount}`);