src/pipeline/pass_*.c(合計 19,422 行)索引不是一個大函式,而是一串單一職責的 pass。每個 pass 讀前一 pass 的產出,把自己負責的節點/邊 publish 到 store。以下是各 pass 的職責表與代表函式。
樹的第一層:從 AST 找出所有「定義」並建立對應節點(Function/Class/Method/Interface/Enum/Type…)。
從呼叫點建立 CALLS 邊。配合 Hybrid LSP 的型別解析,跨檔呼叫也能解析(不是單純同名匹配)。
pass_usages 記錄「識別字被用但無法證明唯一目標」的 USAGE 邊;pass_enrichment 補上其他語意豐富化。
最複雜的 pass:用 import graph + 跨檔定義 registry,把呼叫解析到「Go to Definition」等級。型別解析的核心在 internal/cbm/lsp/。
pass_semantic 產出詞彙不匹配的同語言語意關係;pass_semantic_edges 用相似度分數決定邊(score ≥ 0.80)。pass_similarity(357 行)用 MinHash + LSH 做近複製偵測。
掃描 HTTP 路由宣告(framework 特定),建立 Route 節點 + HANDLES 邊連到 handler。這是 get_architecture 的 routes 資料來源。
多 repo index 進同一 store 時,連結跨 repo 的呼叫/引用。pass_pkgmap(2,119 行)做套件解析(package.json / go.mod / Cargo.toml…)。
基礎設施即程式碼也進圖:Dockerfile 的 RUN/ENV、K8s manifests 的 Resource 節點、Kustomize overlays 的 Module 節點 + IMPORTS 邊。
pass_gitdiff/githistory 產出 FILE_CHANGES_WITH(detect_changes 的 blast radius 用);pass_compile_commands 解析 compile_commands.json;pass_complexity 算 Halstead-lite 等複雜度。