pipeline/pass_*.c — 各 pass 職責

索引管線的每一個 pass 做什麼
目錄:src/pipeline/pass_*.c(合計 19,422 行)

大方向

索引不是一個大函式,而是一串單一職責的 pass。每個 pass 讀前一 pass 的產出,把自己負責的節點/邊 publish 到 store。以下是各 pass 的職責表與代表函式。


結構類

pass_definitions.c 865 行抽取函式/類別/方法/介面等定義節點。

樹的第一層:從 AST 找出所有「定義」並建立對應節點(Function/Class/Method/Interface/Enum/Type…)。

pass_calls.c 971 行建 CALLS 邊(import-aware、型別推斷)。

從呼叫點建立 CALLS 邊。配合 Hybrid LSP 的型別解析,跨檔呼叫也能解析(不是單純同名匹配)。

pass_usages.c · pass_enrichment.c 366 / 412 行USAGE 邊與圖豐富化。

pass_usages 記錄「識別字被用但無法證明唯一目標」的 USAGE 邊;pass_enrichment 補上其他語意豐富化。

型別類(Hybrid LSP)

pass_lsp_cross.c 1,600 行Hybrid LSP 跨檔型別解析。

最複雜的 pass:用 import graph + 跨檔定義 registry,把呼叫解析到「Go to Definition」等級。型別解析的核心在 internal/cbm/lsp/

pass_semantic.c · pass_semantic_edges.c 662 / 1,439 行語意邊(SEMANTICALLY_RELATED / SIMILAR_TO)。

pass_semantic 產出詞彙不匹配的同語言語意關係;pass_semantic_edges 用相似度分數決定邊(score ≥ 0.80)。pass_similarity(357 行)用 MinHash + LSH 做近複製偵測。

服務類

pass_route_nodes.c 1,231 行REST 端點變一級圖實體(Route 節點)。

掃描 HTTP 路由宣告(framework 特定),建立 Route 節點 + HANDLES 邊連到 handler。這是 get_architecture 的 routes 資料來源。

pass_cross_repo.c 1,356 行跨 repo 的 CROSS_* 邊。

多 repo index 進同一 store 時,連結跨 repo 的呼叫/引用。pass_pkgmap(2,119 行)做套件解析(package.json / go.mod / Cargo.toml…)。

IaC 類

pass_infrascan.c · pass_k8s.c 1,329 / 698 行Dockerfile、K8s manifests、Kustomize overlays。

基礎設施即程式碼也進圖:Dockerfile 的 RUN/ENV、K8s manifests 的 Resource 節點、Kustomize overlays 的 Module 節點 + IMPORTS 邊。

變更類

pass_gitdiff.c · pass_githistory.c · pass_compile_commands.c · pass_complexity.c 190 / 525 / 285 / 207 行變更耦合、編譯旗標、複雜度。

pass_gitdiff/githistory 產出 FILE_CHANGES_WITH(detect_changes 的 blast radius 用);pass_compile_commands 解析 compile_commands.jsonpass_complexity 算 Halstead-lite 等複雜度。

看完這頁你應該能說出:索引被拆成單一職責的 pass、型別解析由 pass_lsp_cross 負責、Route/Resource 節點來自 pass_route_nodes/infrascan、跨 repo 與相似度各由哪個 pass 產出。