开源工具 · 代码分析 · 图数据库
📌 **开源地址:**github.com/colbymchenry/codegraph(⭐ 971 Stars)
📜 **语言:**Python
🏷️ **标签:**code-analysis · dependency-graph · tree-sitter · Neo4j
⚠️ **状态:**Pre-alpha(开发中,欢迎尝鲜)
你有没有过这种经历?
入职第一天,前辈丢给你一个 10 万行 的项目源码,说:“先熟悉一下代码。” 你打开文件夹,几百个文件、几千个函数,谁调谁、谁依赖谁、改一处会不会崩十处——完全看不懂。
又或者你在做 Code Review,看到一个函数 processData() 被改了,你想知道:“还有哪些地方在调用它?改了会不会影响其他模块?”
传统的解决方案是全局搜索 + 人工梳理,费时费力还容易漏。要是能把整个代码库变成一张「关系网」,点点鼠标就能查到所有调用链,那该多好?
💡 **这就是 CodeGraph 想做的事:**把你的代码解析成一张可查询的图谱,函数、文件、类型是「节点」,调用、导入、包含关系是「边」。用图数据库的强大查询能力,秒级回答各种代码关系问题。
CodeGraph 是一个基于图数据库的代码分析工具。它能把你的代码仓库(Python、C、C++、Go、JavaScript)解析成结构化的图谱数据,存入 Neo4j 图数据库,然后通过 REST API 进行高效查询。
它能回答这些问题:
- 哪些函数调用了
foo? foo又调用了哪些函数?- 函数的完整「调用树」是什么?(递归展开)
- 谁使用了
foo的返回值? foo的定义在哪里?在哪些地方被调用?- 哪些文件导入了
foo? foo的类型是什么?还有哪些函数是同一类型?
三、核心能力详解
🌐 多语言支持
基于 tree-sitter 解析引擎(和 Neovim、Helix 等编辑器用的是同一个),统一支持 5 种主流语言: 语言解析器状态Pythontree-sitter-python✅Ctree-sitter-c✅C++tree-sitter-cpp✅Gotree-sitter-go✅JavaScripttree-sitter-javascript✅
📊 Neo4j 图数据库驱动
为什么不直接用 SQL?因为代码关系天然就是图结构——函数A调用函数B,函数B又调用函数C和D,这种多层嵌套的调用关系,用图数据库查询比传统关系型数据库快几个数量级。
在 Neo4j 中:
- **节点(Nodes):**函数、文件、类型
- **边(Edges):**调用关系(CALLS)、导入关系(IMPORTS)、包含关系(CONTAINS)
🔍 REST API 查询
启动服务后,通过 HTTP 请求就能查代码关系:
查询谁调用了 processData 函数
GET /api/callers?function=processData
查询 processData 调用了谁
GET /api/callees?function=processData
获取完整调用树
GET /api/calltree?function=processData&depth=5
查找函数定义位置
GET /api/definition?function=processData
### 🐳 Docker 一键部署
项目自带 Dockerfile 和 docker-compose.yml,Neo4j + CodeGraph 一个命令全拉起来,不用折腾环境配置。

## 四、Docker Compose 从零搭建(保姆级)
### 📦 步骤一:安装 Docker
已安装 Docker 的跳过这步。
# macOS
brew install --cask docker
# Ubuntu / Debian
sudo apt-get update
sudo apt-get install docker.io docker-compose-plugin
# 验证
docker --version
docker compose version
📋 步骤二:克隆项目
git clone https://github.com/colbymchenry/codegraph.git cd codegraph
项目结构
├── codegraph/ 核心代码
├── docker-compose.yml Docker 编排
├── Dockerfile 构建镜像
├── requirements.txt Python 依赖
└── setup.py 安装配置
### 🚀 步骤三:一键启动
# 一键启动 Neo4j + CodeGraph
docker compose up -d
# 查看服务状态
docker compose ps
# 期望:neo4b Running 7474,7687 / codegraph Running 5000
🎯 **就这三步!**Docker Compose 自动拉取 Neo4j 镜像、安装依赖、启动服务。整个过程约 2-3 分钟。
🔎 步骤四:解析代码
进入容器
docker compose exec codegraph bash
解析你的代码库
python -m codegraph parse /path/to/your/project
导入 Neo4j
python -m codegraph index
启动查询服务
python -m codegraph serve
访问 API
http://localhost:5000/api/callers?function=main
### 🎮 步骤五:查询代码关系
# 用 curl 查询
curl "http://localhost:5000/api/callers?function=processData"
# 返回:所有调用 processData 的函数
curl "http://localhost:5000/api/calltree?function=main&depth=3"
# 返回:从 main 出发的调用树
# 也可以在 Neo4j 浏览器(http://localhost:7474)用 Cypher 查询:
# MATCH (f:Function {name: "processData"})-[:CALLS]->(c)
# RETURN f, c
💡 不想用 Docker?手动安装也行:
前提:Python 3.6+ 和 Neo4j 数据库
pip install -r requirements.txt
python -m codegraph parse /path/to/project python -m codegraph index python -m codegraph serve

## 五、实际使用场景
### 🔍 代码审查(Code Review)
审查 PR 时,快速了解修改函数的影响范围。改了一个工具函数?一键查出所有调用方,确认不会引入 Bug。
### 🏗️ 项目重构 / 迁移
要把一个模块从项目 A 迁移到项目 B?先查清楚它的完整依赖图谱——导入了哪些外部模块、被哪些函数调用——做到心中有数再动手。
### 🔒 安全审计
发现一个不安全的函数?立即追溯所有调用链,定位可能受影响的入口点。从数据流入到流出,完整的值追踪。
### 👋 新人上手
新加入团队的成员,不用再逐文件翻代码。通过调用树,**5 分钟就能理解项目的核心架构和数据流**。

## 六、技术架构揭秘
CodeGraph 的架构非常清晰,分为**三层**:
### Phase 1:Parse(解析)
使用 **tree-sitter** 将源代码解析为通用 AST,提取:
- 函数定义(类方法、Lambda)
- 函数调用(构造函数、方法调用)
- 变量赋值(类字段)
- 导入语句(import、#include、from...import)
- 导出语句(module.exports、export)
- 类型注解和定义(类、接口、类型别名)
每个节点都带有**位置元数据**(文件路径、行号、列偏移)。
### Phase 2:Index(索引)
将解析结果导入 **Neo4j 图数据库**:
- **节点:**Function、File、Type
- **边:**CALLS、IMPORTS、CONTAINS、RETURNS_TO
### Phase 3:Serve(服务)
**Flask** 提供 REST API,对外暴露查询接口。你可以在任何语言、任何工具中调用。
🧩 **模块化设计:**解析器、索引器、服务器各自独立。想支持新语言(如 Rust、TypeScript),只需新增一个 tree-sitter 解析器,其他部分完全复用。

## 七、优缺点 & 总结
### ✅ 优点
- **多语言支持**——一套工具覆盖 Python/C/C++/Go/JS
- **图数据库**——天然适合代码关系查询,性能远超文本搜索
- **REST API**——可编程集成到 CI/CD、IDE 插件等场景
- **Docker 部署**——环境零配置,docker compose up 即用
- **可扩展架构**——模块化设计,新增语言解析器成本低
### ⚠️ 不足
- **Pre-alpha 阶段**——API 可能随时变动,不建议直接用于生产
- **依赖 Neo4j**——需要额外运行图数据库服务(Docker 已简化)
- **无 GUI**——目前只有 API,可视化需配合 Neo4j Browser
- **无正式 License**——开源但未声明许可证,商用需注意
### 📝 一句话总结
CodeGraph 把「读懂代码」从**人肉翻文件**变成**数据库查询**。虽然还在早期阶段,但思路非常值得借鉴。经常阅读大型代码库的同学,强烈推荐试一试。
🔗 **项目地址:**github.com/colbymchenry/codegraph
⭐ 觉得有用,给个 Star 支持开发者!

💬 评论