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
  • 项目
  • 项目
  • 项目