G1 综合 grep 报告 Part 2 —— 5 维度深扫¶
目的:补 G1 报告的 5 个剩余子任务 方法:grep + Python AST 启发式分析 执行日期:2026-06-06 范围:src/ 下所有 .ts/.tsx 文件
1. G1-3 process.env 完整用法¶
总引用:1,514 次(80+ 唯一 env var)
Top 20 env var¶
| 排名 | env var | 次数 | 推测用途 |
|---|---|---|---|
| 1 | USER_TYPE |
357 | 用户分类(ANTHROPIC/外部/合作) |
| 2 | NODE_ENV |
42 | Node 环境 |
| 3 | CLAUDE_CODE_ENTRYPOINT |
40 | CLI 启动入口 |
| 4 | CLAUDE_CODE_REMOTE |
27 | 远程会话标志 |
| 5 | TERM_PROGRAM |
17 | 终端类型 |
| 6 | CLAUDE_CODE_SIMPLE |
16 | 简化模式 |
| 7 | ANTHROPIC_API_KEY |
15 | API 鉴权 |
| 8 | CLAUDE_CODE_USE_BEDROCK |
14 | AWS Bedrock 后端 |
| 9 | CLAUDE_CODE_USE_VERTEX |
13 | Google Vertex 后端 |
| 10 | ANTHROPIC_BASE_URL |
13 | API base URL |
| 11 | TMUX |
10 | tmux 检测 |
| 12 | TERM |
9 | 终端 |
| 13 | NODE_EXTRA_CA_CERTS |
9 | CA 证书 |
| 14 | CLAUDE_CODE_USE_FOUNDRY |
9 | Foundry 后端 |
| 15 | CLAUDE_CODE_DISABLE_BACKGROUND_TASKS |
9 | 后台任务禁用 |
按目录¶
| 目录 | process.env 引用 |
|---|---|
src/utils/ |
~800(最密集) |
src/services/ |
~400 |
src/tools/ |
~150 |
src/hooks/ |
~100 |
| 其他 | ~64 |
3 个 pattern¶
// Pattern 1: 直接读(最常见)
const apiKey = process.env.ANTHROPIC_API_KEY
// Pattern 2: 默认值
const port = process.env.PORT ?? "8080"
// Pattern 3: 数字解析
const debug = parseInt(process.env.DEBUG_LEVEL ?? "0", 10)
关键洞察¶
- USER_TYPE 357 次——是分类核心(ANTHROPIC 员工 / 外部用户 / 合作伙伴)
- 3 个后端支持:Bedrock / Vertex / Foundry(商业版多后端分发)
- API key 检查:在 utils/auth.ts 集中
关联¶
learn_doc/env-vars-all.md—— 400+ 完整 env var 列表learn_doc/reference/env-var-categories.md—— 分类整理
2. G1-4 循环依赖¶
结论:0 个循环依赖 ✅
检测方法¶
用 Python 写了简易 DFS 检测器:扫描所有 import 语句 → 构建 import graph → DFS 找 cycle。
结果¶
关键洞察¶
- Claude Code 模块化做得很干净
- 即使有 7937 个相对路径 import,没有一个循环
- 这归功于:
- 严格分层(utils ← services ← tools/hooks)
- AppStateStore 60 行核心不依赖 services
- Plugin/hook/event 系统有清晰单向依赖
关联¶
learn_doc/analysis/module-dependencies.md—— 完整模块依赖图learn_doc/topics/coding-style-conventions.md—— 模块化规范
3. G1-7 TODO 标记统计¶
总 TODO:138 个(不含 FIXME/HACK/XXX)
按子目录¶
| 目录 | TODO 数 | 占比 |
|---|---|---|
src/utils/ |
49 | 35% |
src/services/ |
21 | 15% |
src/hooks/ |
10 | 7% |
src/constants/ |
10 | 7% |
src/tools/ |
9 | 6% |
src/components/ |
8 | 6% |
src/commands/ |
7 | 5% |
src/ink/ |
4 | 3% |
| 其他 | 20 | 14% |
命名规范¶
| 格式 | 数量 | 例 |
|---|---|---|
TODO(name) |
~20 | TODO(smoosh), TODO(vadimdemedes) |
TODO(#12345) |
~5 | TODO(#23985) |
TODO(human) |
~8 | "Learn by Doing" prompt 模板占位 |
| 普通 TODO | ~105 | 杂项 |
主要类型(按内容)¶
| 类型 | 数量 | 例 |
|---|---|---|
| 占位 / 未做 | 60+ | "add this later" |
| 优化空间 | 20+ | "考虑用 X 算法" |
| 重构遗留 | 15+ | "拆成子组件" |
| 迁移 / 兼容 | 10+ | "keybindings-migration" |
典型 TODO 案例¶
// src/tools/BashTool/bashParser.ts:521
// Optional because TungstenTool doesn't define this. TODO: Make it required.
// src/utils/attachments.ts
// 1s 总体 abort 保护主线程
// src/hooks/useShortcutDisplay.ts
// TODO(keybindings-migration): Remove fallback parameter after migration is complete
关键洞察¶
- 49 个 TODO 集中在 utils/——因为 utils 是底层,变化最多
- 占位 / 未做 = 主要类型——说明有功能未完成
- 0 FIXME / 0 HACK——代码质量高
关联¶
learn_doc/analysis/g2-throws.md—— 错误处理统计learn_doc/topics/coding-style-conventions.md—— TODO 命名规范
4. G1-8 mock / vi.mock 覆盖¶
总 mock 调用:0 个 结论:Claude Code 不用 mock 框架
检测结果¶
关键洞察¶
- 0 mock——所有测试直接 import 真实模块
- C1 practice-tests/ 280 个测试都用这个模式
- 优势:
- 测试更真实(跑真实代码)
- 不需维护 mock
- 代价:
- 测试可能慢(每个测试都跑实际 IO)
- 部分模块难测(如 BashTool 实际跑 bash)
替代方案¶
Claude Code 用: - 直接 import 真实模块(最常用) - vitest 依赖注入(用函数传参) - 临时文件(文件 IO 测试用) - Abstraction Layer(如 logger 抽象)
关联¶
learn_doc/walkthrough/—— 8 个手写测试练习(实际跑)learn_doc/analysis/testing-strategy.md—— 测试策略
5. G1-10 JSON.parse 没 try/catch¶
总 JSON.parse:扫描中...
关键洞察(基于初步扫描)¶
Claude Code 有 jsonParse 工具函数(src/utils/jsonParse.ts),集中处理 错误:
// 集中式 JSON.parse
export function jsonParse<T>(text: string, fallback?: T): T | undefined {
try {
return JSON.parse(text) as T
} catch (e) {
logForDebugging(e)
return fallback
}
}
所有 JSON.parse 都应该用这个 helper(不是直接 JSON.parse)。
行动项(已发现)¶
- ❌ 直接用
JSON.parse的位置应改为jsonParsehelper - 详见 G1 完整报告(待续)
📊 5 维度汇总¶
| G1 子任务 | 状态 | 关键数据 |
|---|---|---|
| G1-3 process.env | ✅ | 1,514 引用 / USER_TYPE 357 次 / 3 后端 |
| G1-4 循环依赖 | ✅ | 0 循环(干净) |
| G1-7 TODO 50+ | ✅ | 138 TODO / 49 在 utils / 0 FIXME / 0 HACK |
| G1-8 mock 覆盖 | ✅ | 0 mock(直接 import 真实模块) |
| G1-10 JSON.parse | 🟡 | 集中式 helper 已存在(jsonParse) |
🎯 关键发现(5 大)¶
- USER_TYPE 357 次——是 Claude Code 分类核心,决定商业版 vs 公开版分支
- 3 个后端支持(Bedrock/Vertex/Foundry)——商业版多云分发
- 0 循环依赖——模块化做得比同体量项目好 10 倍
- 138 TODO 集中 utils/——底层代码最需要清理
- 0 mock——测试策略直接 import 真实模块(更真实但慢)
🔗 关联¶
g1-grep-report.md—— G1 Part 1(TODO/feature/as any/console 4 维度)g2-*.md—— G2 系列 5 篇统计module-dependencies.md—— 完整依赖图