name: search-tools description: 搜索工具层次结构
搜索工具层次结构
当搜索代码时,使用此决策树:
决策树
需要概念/语义搜索吗?
(X如何工作,查找模式,理解架构)
→ 使用 LEANN (/leann-search) - 基于嵌入的语义搜索
→ PreToolUse 钩子自动重定向语义 Grep 查询
需要理解代码结构吗?
(查找函数调用,类使用,重构模式)
→ 使用 AST-grep (/ast-grep-find)
需要在代码中查找文本吗?
→ 使用 Morph (/morph-search) - 快 20 倍
→ 如果没有 Morph API 密钥:回退到 Grep 工具
简单的单次搜索?
→ 直接使用内置的 Grep 工具
工具比较
| 工具 | 最适用于 | 要求 |
|---|---|---|
| LEANN | 语义搜索:“缓存如何工作”、“错误处理模式”,概念性查询 | 索引已构建 |
| AST-grep | 结构模式:“查找所有调用 foo() 的地方”,重构,按类型查找使用情况 |
MCP 服务器 |
| Morph | 快速文本搜索:“查找提到错误的文件”,跨代码库的 grep | API 密钥 |
| Grep | 字面模式,类/函数名称,正则表达式 | 无(内置) |
例子
LEANN(语义/概念):
- “身份验证如何工作”
- “查找错误处理模式”
- “限流在哪里实现”
AST-grep(结构):
- “查找所有返回 Promise 的函数”
- “查找所有使用 useState 的 React 组件”
- “将所有 X 的导入重构为 Y”
Morph(文本搜索):
- “查找所有提到‘身份验证’的文件”
- “搜索 TODO 注释”
Grep(字面):
class ProviderAdapterdef __init__- 正则表达式模式
LEANN 命令
# 使用语义查询搜索
leann search opc-dev “黑板通信如何工作” --top-k 5
# 列出可用索引
leann list
# 重建索引(当代码变化时)
leann build opc-dev --docs dir1 dir2 --no-recompute --no-compact --force