tanishqkancharla/calldiff

Diffs for function call stacks across git commits. 22 languages supported (AST-based, built using Tree-sitter). Great for agentic review.

解決的問題

calldiff 解決了理解不同 git 提交之間程式執行流程變化之問題。雖然標準的行級 diff 只能顯示哪些程式碼行有變更,但往往會掩蓋變更的「形狀」——特別是哪些函數現在呼叫了哪些其他函數。這對於需要重設程式呼叫流程的 AI 代理或開發者進行代理式程式碼審查時尤其有用。

工作原理

此工具從 git 樹中讀取原始碼,並使用 tree-sitter 語法解析器支援 23 種不同語言的程式碼。它為每個函數建立被呼叫者(callees)清單,並擴展為呼叫樹。透過比較不同提交或分支之間的這些呼叫樹,可識別出哪些被呼叫者出現、消失或移動。由於它是基於 AST(語法)而非完整型別檢查器,因此無法解析動態呼叫。

適用對象

專為需要可視化呼叫堆疊與函數相依性變化,而非僅關注逐行文字變更的開發者與 AI 代理設計。

特色亮點

  • 多語言支援:支援 23 種語言,包括 TypeScript、Python、Go、Rust、Java 與 C++。
  • 呼叫流程差分:使用類似 git-diff 的格式,可視化呼叫堆疊的新增與刪除。
  • 可達性分析:可找出從一個特定符號到另一個符號的所有呼叫路徑。
  • 代理就緒:提供結構化輸出(JSON、YAML、Markdown),並支援 MCP(Model Context Protocol)伺服器註冊,便於與 LLM 集成。
  • 呼叫樹可視化:為特定入口點或檔案產生 ASCII 呼叫樹。

相關

  • 專案
  • Dispatch
  • 專案
  • 專案
  • 專案