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 에이전트를 위한 것입니다. 단순히 라인 단위의 텍스트 변경만 보는 것이 아니라, 코드 구조의 변화를 파악하고자 하는 경우에 적합합니다.

주요 기능

  • 다중 언어 지원: TypeScript, Python, Go, Rust, Java, C++ 등을 포함한 23개 언어를 지원합니다.
  • 호출 흐름 차이 분석: git-diff 스타일 형식으로 호출 스택의 추가 및 제거를 시각화합니다.
  • 도달 가능성 분석: 특정 심볼에서 다른 심볼로 이어지는 모든 호출 경로를 찾을 수 있습니다.
  • 에이전트 준비 완료: 구조화된 출력(JSON, YAML, Markdown)을 제공하며, LLM과의 통합을 위한 MCP(Model Context Protocol) 서버 등록을 지원합니다.
  • 호출 트리 시각화: 특정 진입점이나 파일에 대해 ASCII 형식의 호출 트리를 생성합니다.

관련

  • 프로젝트
  • Dispatch
  • 프로젝트
  • 프로젝트
  • 프로젝트