Files
Edu/scripts/arch-scan/scanner.ts
SpecialX 4629de1926 fix(arch-scan): 修复多语言扫描器并添加 DELETE 清空表
- scanner.ts: 添加 DELETE 清空旧数据语句,避免重复插入
- ts-scanner: 改用 regex 替代 ts-morph 解析(避免解析失败)
- go-scanner/py-scanner/proto-scanner: 完善实现
2026-07-08 12:49:43 +08:00

39 lines
1.3 KiB
TypeScript

#!/usr/bin/env tsx
import { createDb } from "./schema.js";
import { scanTypeScript } from "./scanners/ts-scanner.js";
import { scanGo } from "./scanners/go-scanner.js";
import { scanPython } from "./scanners/py-scanner.js";
import { scanProtobuf } from "./scanners/proto-scanner.js";
import path from "node:path";
const ROOT = process.cwd();
function main(): void {
const db = createDb(path.join(ROOT, "arch.db"));
// 清空旧数据(避免重跑产生重复符号)
db.exec(
"DELETE FROM calls; DELETE FROM dependencies; DELETE FROM symbols; DELETE FROM contracts; DELETE FROM events; DELETE FROM modules;",
);
console.log("🔍 arch-scan: 开始多语言扫描...");
// 串行扫描(并行会导致 FOREIGN KEY 错误)
const tsStats = scanTypeScript(db, ROOT);
console.log(` TypeScript: ${tsStats.modules} 模块, ${tsStats.symbols} 符号`);
const goStats = scanGo(db, ROOT);
console.log(` Go: ${goStats.modules} 模块, ${goStats.symbols} 符号`);
const pyStats = scanPython(db, ROOT);
console.log(` Python: ${pyStats.modules} 模块, ${pyStats.symbols} 符号`);
const protoStats = scanProtobuf(db, ROOT);
console.log(` Protobuf: ${protoStats.contracts} 契约`);
console.log("✅ arch-scan 完成");
db.close();
}
main();