名称:tldr代码 描述:通过五层堆栈(AST、调用图、CFG、DFG、PDG)进行令牌高效代码分析。节省95%的令牌。 允许工具:[Bash] 关键词:[调试、重构、理解、复杂性、“调用图”、“数据流”、“谁调用”、“多复杂”、搜索、探索、分析、死代码、架构、导入]
TLDR代码:完整参考
令牌高效代码分析。相对于原始文件读取,节省95%。
快速参考
| 任务 | 命令 |
|---|---|
| 文件树 | tldr tree src/ |
| 代码结构 | tldr structure . --lang python |
| 搜索代码 | tldr search "模式" . |
| 调用图 | tldr calls src/ |
| 谁调用X? | tldr impact 函数名 . |
| 控制流 | tldr cfg 文件.py 函数 |
| 数据流 | tldr dfg 文件.py 函数 |
| 程序切片 | tldr slice 文件.py 函数 42 |
| 死代码 | tldr dead src/ |
| 架构 | tldr arch src/ |
| 导入 | tldr imports 文件.py |
| 谁导入X? | tldr importers 模块名 . |
| 受影响测试 | tldr change-impact --git |
| 类型检查 | tldr diagnostics 文件.py |
| 语义搜索 | tldr semantic search "认证流程" |
五层堆栈
第1层:AST ~500个令牌 函数签名、导入
第2层:调用图 +440个令牌 谁调用什么(跨文件)
第3层:CFG +110个令牌 复杂性、分支、循环
第4层:DFG +130个令牌 变量定义/使用
第5层:PDG +150个令牌 依赖关系、切片
───────────────────────────────────────────────────────────────
总计: ~1,200个令牌 vs 23,000原始 = 节省95%
CLI命令
导航
# 文件树
tldr tree [路径]
tldr tree src/ --ext .py .ts # 过滤扩展名
tldr tree . --show-hidden # 包含隐藏文件
# 代码结构(代码图)
tldr structure [路径] --lang python
tldr structure src/ --max 100 # 最大分析文件数
搜索
# 文本搜索
tldr search <模式> [路径]
tldr search "def process" src/
tldr search "class.*Error" . --ext .py
tldr search "TODO" . -C 3 # 3行上下文
tldr search "func" . --max 50 # 限制结果数
# 语义搜索(自然语言)
tldr semantic search "认证流程"
tldr semantic search "错误处理" --k 10
tldr semantic search "数据库查询" --expand # 包含调用图
文件分析
# 完整文件信息
tldr extract <文件>
tldr extract src/api.py
tldr extract src/api.py --class UserService # 过滤到类
tldr extract src/api.py --function process # 过滤到函数
tldr extract src/api.py --method UserService.get # 过滤到方法
# 相关上下文(遵循调用图)
tldr context <入口> --project <路径>
tldr context main --project src/ --depth 3
tldr context UserService.create --project . --lang typescript
流分析
# 控制流图(复杂性)
tldr cfg <文件> <函数>
tldr cfg src/processor.py process_data
# 返回:圈复杂度、块、分支、循环
# 数据流图(变量跟踪)
tldr dfg <文件> <函数>
tldr dfg src/processor.py process_data
# 返回:变量定义、读取、修改的位置
# 程序切片(什么影响第X行)
tldr slice <文件> <函数> <行>
tldr slice src/processor.py process_data 42
tldr slice src/processor.py process_data 42 --direction forward
tldr slice src/processor.py process_data 42 --var result
代码库分析
# 构建跨文件调用图
tldr calls [路径]
tldr calls src/ --lang python
# 反向调用图(谁调用这个函数?)
tldr impact <函数> [路径]
tldr impact process_data src/ --depth 5
tldr impact authenticate . --file auth # 按文件过滤
# 查找死/不可达代码
tldr dead [路径]
tldr dead src/ --entry main cli test_ # 指定入口点
tldr dead . --lang typescript
# 检测架构层
tldr arch [路径]
tldr arch src/ --lang python
# 返回:入口层、中间层、叶层、循环依赖
导入分析
# 解析文件导入
tldr imports <文件>
tldr imports src/api.py
tldr imports src/api.ts --lang typescript
# 反向导入查找(谁导入这个模块?)
tldr importers <模块> [路径]
tldr importers datetime src/
tldr importers UserService . --lang typescript
质量与测试
# 类型检查 + 代码检查
tldr diagnostics <文件|路径>
tldr diagnostics src/api.py
tldr diagnostics . --project # 整个项目
tldr diagnostics src/ --no-lint # 仅类型检查
tldr diagnostics src/ --format text # 可读格式
# 查找受影响测试
tldr change-impact [文件...]
tldr change-impact # 自动检测(会话/git)
tldr change-impact src/api.py # 显式文件
tldr change-impact --session # 会话修改文件
tldr change-impact --git # Git差异文件
tldr change-impact --git --git-base main # 对比分支差异
tldr change-impact --run # 实际运行受影响测试
缓存
# 预构建调用图缓存
tldr warm <路径>
tldr warm src/ --lang python
tldr warm . --background # 后台构建
# 构建语义索引(一次性)
tldr semantic index [路径]
tldr semantic index . --lang python
tldr semantic index . --model all-MiniLM-L6-v2 # 小模型(80MB)
守护进程(更快查询)
守护进程在内存中保存索引,实现即时重复查询。
守护进程命令
# 启动守护进程(自动后台)
tldr daemon start
tldr daemon start --project /path/to/project
# 检查状态
tldr daemon status
# 停止守护进程
tldr daemon stop
# 发送原始命令
tldr daemon query ping
tldr daemon query status
# 通知文件更改(用于钩子)
tldr daemon notify <文件>
tldr daemon notify src/api.py
守护进程功能
| 功能 | 描述 |
|---|---|
| 自动关闭 | 30分钟空闲 |
| 查询缓存 | SalsaDB记忆化 |
| 内容哈希 | 跳过未更改文件 |
| 脏跟踪 | 增量重新索引 |
| 跨平台 | Unix套接字 / Windows TCP |
守护进程套接字协议
向套接字发送JSON,接收JSON响应:
// 请求
{"cmd": "search", "pattern": "process", "max_results": 10}
// 响应
{"status": "ok", "results": [...]}
所有22个守护进程命令:
ping, status, shutdown, search, extract, impact, dead, arch,
cfg, dfg, slice, calls, warm, semantic, tree, structure,
context, imports, importers, notify, diagnostics, change_impact
语义搜索(P6)
使用嵌入进行自然语言代码搜索。
设置
# 构建索引(首次运行下载模型)
tldr semantic index .
# 默认模型:bge-large-en-v1.5(1.3GB,最佳质量)
# 小模型:all-MiniLM-L6-v2(80MB,更快)
tldr semantic index . --model all-MiniLM-L6-v2
搜索
tldr semantic search "认证流程"
tldr semantic search "错误处理模式" --k 10
tldr semantic search "数据库连接" --expand # 遵循调用图
配置
在.claude/settings.json中:
{
"semantic_search": {
"enabled": true,
"auto_reindex_threshold": 20,
"model": "bge-large-en-v1.5"
}
}
支持的语言
| 语言 | AST | 调用图 | CFG | DFG | PDG |
|---|---|---|---|---|---|
| Python | 是 | 是 | 是 | 是 | 是 |
| TypeScript | 是 | 是 | 是 | 是 | 是 |
| JavaScript | 是 | 是 | 是 | 是 | 是 |
| Go | 是 | 是 | 是 | 是 | 是 |
| Rust | 是 | 是 | 是 | 是 | 是 |
| Java | 是 | 是 | - | - | - |
| C/C++ | 是 | 是 | - | - | - |
| Ruby | 是 | - | - | - | - |
| PHP | 是 | - | - | - | - |
| Kotlin | 是 | - | - | - | - |
| Swift | 是 | - | - | - | - |
| C# | 是 | - | - | - | - |
| Scala | 是 | - | - | - | - |
| Lua | 是 | - | - | - | - |
| Elixir | 是 | - | - | - | - |
忽略模式
TLDR遵循.tldrignore(gitignore语法):
# .tldrignore
.venv/
__pycache__/
node_modules/
*.min.js
dist/
首次运行创建.tldrignore并设置默认值。
使用--no-ignore绕过。
何时使用TLDR vs 其他工具
| 任务 | 使用TLDR | 使用Grep |
|---|---|---|
| 查找函数定义 | tldr extract 文件 --function X |
- |
| 搜索代码模式 | tldr search "模式" |
- |
| 字符串文字搜索 | - | grep "文字" |
| 配置值 | - | grep "KEY=" |
| 跨文件调用 | tldr calls |
- |
| 反向依赖 | tldr impact 函数 |
- |
| 复杂性分析 | tldr cfg 文件 函数 |
- |
| 变量跟踪 | tldr dfg 文件 函数 |
- |
| 自然语言查询 | tldr semantic search |
- |
Python API
from tldr.api import (
# L1: AST
extract_file, extract_functions, get_imports,
# L2: 调用图
build_project_call_graph, get_intra_file_calls,
# L3: CFG
get_cfg_context,
# L4: DFG
get_dfg_context,
# L5: PDG
get_slice, get_pdg_context,
# 统一
get_relevant_context,
# 分析
analyze_dead_code, analyze_architecture, analyze_impact,
)
# 示例:为LLM获取上下文
ctx = get_relevant_context("src/", "main", depth=2, language="python")
print(ctx.to_llm_string())
修复错误工作流(导航 + 阅读)
关键洞察: TLDR导航,然后您阅读。不要仅从摘要中修复错误。
模式
# 1. 导航:查找哪些文件重要
tldr imports 文件.py # 错误文件依赖什么?
tldr impact 函数名 . # 谁调用错误函数?
tldr calls . # 跨文件边(模型关注2跳)
# 2. 阅读:获取关键文件的实际代码(2-4个文件,不是所有50个)
# 使用Read工具或tldr search -C获取带上下文的代码
tldr search "def buggy_func" . -C 20
为什么这样有效
对于跨文件错误(例如,错误字段名、类型不匹配),您需要查看:
- 有错误的文件(处理程序访问
task.user_id) - 有合同的文件(模型定义
owner_id)
TLDR查找哪些文件重要。然后您阅读它们。
获取更多上下文
如果TLDR输出不够:
tldr search "模式" . -C 20- 获取带20行上下文的实际代码tldr imports 文件.py- 查看文件依赖什么- 如果您需要完整实现,直接阅读文件
令牌节省证据
原始文件读取: 23,314个令牌
TLDR所有层: 1,189个令牌
─────────────────────────────────
节省: 95%
洞察:调用图导航到相关代码,然后层提供结构化摘要。您不阅读无关代码。