tanishqkancharla/calldiff
TypeScript0 / 0
Git 커밋 간 함수 호출 트리를 AST로 비교하는 22개 언어 지원 CLI
TL;DR
calldiff는 독립형 CLI 도구로, Git 커밋이나 working tree 사이의 함수 호출 스택을 Tree-sitter AST로 비교합니다. `diff`는 호출 트리의 추가·삭제·이동을 보여주고, `tree`는 특정 entrypoint의 호출 구조를 출력하며, `reach`는 두 심볼 사이의 모든 호출 경로를 찾습니다. TypeScript, Python, Go, Rust 등 22개 언어를 지원하고 JSON·YAML·Markdown·JSONL 출력과 `incur` 기반 skills 및 MCP 연동을 제공합니다. 다만 full typechecker가 아니어서 동적 호출은 해석하지 않으므로, 정적 호출 흐름을 빠르게 검토하려는 Agentic code review와 CI 자동화에 맞습니다.
핵심 포인트
- calldiff는 독립형 CLI 도구로, Git 커밋 사이에서 함수가 어떤 함수를 호출하는지 비교합니다. `git diff`처럼 `from`과 `to`를 지정하면 호출 트리에서 추가·삭제·이동한 callee를 ASCII 트리로 출력합니다. 코드 변경의 줄 단위 차이보다 호출 흐름의 구조적 변화를 빠르게 파악하려는 Agentic code review에 적합합니다.
- TypeScript와 JavaScript를 비롯해 Python, Go, Rust, Java, C++, C#, Swift, Kotlin 등 22개 언어를 Tree-sitter AST로 처리합니다. 소스 파일을 Git 트리 또는 working tree에서 읽고 함수별 callee 목록을 만든 뒤 호출 트리로 확장해 비교합니다. 전체 typechecker가 아니므로 동적 호출은 해석하지 못하며, 문법 구조를 기반으로 한 정적 분석이라는 한계가 있습니다.
- `diff`, `tree`, `reach` 세 가지 명령으로 커밋 간 호출 트리 비교, 특정 entrypoint의 현재 호출 구조 확인, 두 심볼 사이의 모든 호출 경로 검색을 수행합니다. `--entry`, `--file`, `--max-depth`, `--locs`로 분석 범위와 위치 정보를 조절하고 `json`, `yaml`, `md`, `jsonl` 형식으로 결과를 내보냅니다. 함수명·클래스 메서드·생성자·JSX 컴포넌트와 조건 분기를 표시하므로 변경된 실행 경로를 코드 리뷰 자료나 자동화 입력으로 재사용할 수 있습니다.
- 설치는 `npx calldiff@latest` 또는 전역 npm 설치로 끝나며, 별도 서버 없이 Git 저장소에서 바로 실행합니다. `incur` 기반 기능으로 `skills add`를 통한 에이전트 skill 설치와 `mcp add`를 통한 MCP server 등록도 지원합니다. 호출 흐름을 자동 리뷰에 연결하려는 팀에는 유용하지만, 런타임 동작·타입 정보·리플렉션까지 검증해야 하는 정밀 분석에는 보완 도구가 필요합니다.
387
Stars
16
Forks
+209
Trending
0
조회수
387 watchers7 open issuesMIT License
관련 토론
아직 관련 토론이 없습니다.
댓글
댓글을 작성하려면 로그인이 필요합니다.