其他
需要递归分析函数调用依赖、影响面或架构时,用 GrepAI…
当你已使用 GrepAI 且需要从某个函数出发递归查看完整调用依赖、评估重构影响或导出架构图数据时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 40/100 ×0.15
适用场景
需要递归分析函数调用依赖、影响面或架构时特定
解决思路
- 基本用法:运行 `grepai trace graph "FunctionName"` 构建递归调用依赖树;例如 `grepai trace graph "main"` 会输出以 main 为根的调用图、节点数和最大深度。
- 用 `--depth` 控制递归深度:默认深度为 2 层;`grepai trace graph "main" --depth 1` 只列直接被调用者(callees);`grepai trace graph "main" --depth 2` 为默认;`grepai trace graph "main" --depth 3` 展开到第 3 层;`grepai trace graph "main" --depth 5` 做更深分析。
- 需要机器可读输出时,加 `--json`,例如 `grepai trace graph "main" --depth 2 --json`,输出包含 query、mode、depth、root、children、file、line、stats.nodes、stats.max_depth 等字段。
- 需要更紧凑 JSON 时,在 `--json` 基础上加 `--compact`,例如 `grepai trace graph "main" --depth 2 --json --compact`,字段会缩写为 q、d、r、n、c、s 等。
- 在 v0.26.0+ 使用 `--toon` 输出 TOON 格式,例如 `grepai trace graph "main" --depth 2 --toon`;TOON 比 JSON 约少 50% tokens;`--json` 与 `--toon` 互斥,不能同时使用。
- 用 `--mode fast` 进行基于正则的快速提取:`grepai trace graph "main" --mode fast`。
- 用 `--mode precise` 进行基于 tree-sitter AST 的精确提取:`grepai trace graph "main" --mode precise`。
- 理解应用启动流程:`grepai trace graph "main" --depth 4`。
- 做影响分析:查某工具函数被谁依赖,运行 `grepai trace graph "validateInput" --depth 3`;查数据库层变更影响,运行 `grepai trace graph "executeQuery" --depth 2`。
- 做代码审查:运行 `grepai trace graph "processOrder" --depth 5`;节点很多表示复杂度高。
- 生成文档数据:运行 `grepai trace graph "main" --depth 3 --json > architecture.json`。
- 做重构规划:运行 `grepai trace graph "legacyAuth" --depth 3` 查看改动可能破坏什么。
- 处理循环依赖:GrepAI 会检测并标记循环依赖,文本输出中显示 `[CYCLE]`,JSON 中对应节点带 `"cycle": true`。
- 限制大图深度:先用浅层,运行 `grepai trace graph "main" --depth 2`。
- 聚焦大图特定区域:不总是追 `main`,改为追子系统,运行 `grepai trace graph "authMiddleware" --depth 3`。
- 对大图做后处理过滤:运行 `grepai trace graph "main" --depth 3 --json | jq '...'`。
- 导出 DOT/Graphviz:将 `grepai trace graph "main" --depth 3 --json` 通过 Python 脚本解析,输出 `digraph G { rankdir=TB; ... }`,再运行 `dot -Tpng graph.dot -o graph.png`。
- 生成 Mermaid 图:将 `grepai trace graph "main" --depth 2 --json` 通过 Python 脚本解析,输出 ```mermaid graph TD ... ``` 格式。
- 比较图规模:用 `grepai trace graph "main" --depth 3 --json | jq '.stats.nodes'` 获取节点数;重构前后分别执行并比较,例如 `echo "Before: $(grepai trace graph 'main' --depth 3 --json | jq '.stats.nodes') nodes"`,重构后再执行对应 After 版本。
- 解决图过大或超时:降低深度,如 `--depth 2`;改为追踪特定函数而非 `main`;使用 `--mode fast`。
- 解决大量循环:说明代码存在循环依赖,考虑重构。
- 解决缺失分支:尝试 `--mode precise`;检查文件是否已索引;确认语言已启用。
- 最佳实践:从浅层开始,先用 `--depth 2`,按需增加。
- 最佳实践:聚焦分析特定函数,不要总是从 `main` 开始。
- 最佳实践:导出 JSON 用于生成图表和文档。
- 最佳实践:长期跟踪节点数作为复杂度指标。
- 最佳实践:调查循环依赖,循环依赖是代码坏味道。
- 输出格式:trace graph 结果包含 `🔍 Call Graph for "..."`、Depth、Mode、树状调用图、Statistics(Total nodes、Maximum depth reached、Cycles detected)以及提示 `--json` 和 `--depth N`。
适用边界 · 注意事项
- 未安装 GrepAI、代码库未被索引或目标语言未启用时,无法使用。
- 只需要查看单层调用关系时,不必递归建图,可用 callees 或普通代码搜索。
- 在超大代码库中直接使用很深深度可能导致图过大或超时,应先降低深度或聚焦子系统。