跳转至

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)

关键洞察

  1. USER_TYPE 357 次——是分类核心(ANTHROPIC 员工 / 外部用户 / 合作伙伴)
  2. 3 个后端支持:Bedrock / Vertex / Foundry(商业版多后端分发)
  3. 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。

结果

检测到 0 个循环依赖

关键洞察

  1. Claude Code 模块化做得很干净
  2. 即使有 7937 个相对路径 import,没有一个循环
  3. 这归功于:
  4. 严格分层(utils ← services ← tools/hooks)
  5. AppStateStore 60 行核心不依赖 services
  6. Plugin/hook/event 系统有清晰单向依赖

关联

  • learn_doc/analysis/module-dependencies.md —— 完整模块依赖图
  • learn_doc/topics/coding-style-conventions.md —— 模块化规范

3. G1-7 TODO 标记统计

总 TODO138 个(不含 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

关键洞察

  1. 49 个 TODO 集中在 utils/——因为 utils 是底层,变化最多
  2. 占位 / 未做 = 主要类型——说明有功能未完成
  3. 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 框架

检测结果

$ grep -rE "vi\.mock\(|jest\.mock\(" --include="*.ts" --include="*.tsx"
0

关键洞察

  1. 0 mock——所有测试直接 import 真实模块
  2. C1 practice-tests/ 280 个测试都用这个模式
  3. 优势:
  4. 测试更真实(跑真实代码)
  5. 不需维护 mock
  6. 代价:
  7. 测试可能慢(每个测试都跑实际 IO)
  8. 部分模块难测(如 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 的位置应改为 jsonParse helper
  • 详见 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 大)

  1. USER_TYPE 357 次——是 Claude Code 分类核心,决定商业版 vs 公开版分支
  2. 3 个后端支持(Bedrock/Vertex/Foundry)——商业版多云分发
  3. 0 循环依赖——模块化做得比同体量项目好 10 倍
  4. 138 TODO 集中 utils/——底层代码最需要清理
  5. 0 mock——测试策略直接 import 真实模块(更真实但慢)

🔗 关联