explore-codebase

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Explore Codebase

探索代码库

Tool Selection

工具选择

NeedTool
Structural patterns (functions, classes)
sg
(ast-grep)
Text/regex patterns (strings, names)
rg
(ripgrep)
File discovery by name/extension
fd
Decision flow: Find files first?
fd
→ pipe to
rg
/
sg
. Syntax-aware match needed?
sg
. Fast text search?
rg
. Uncertain? Start with
rg
, escalate to
sg
if structure matters.
需求工具
结构化模式(函数、类)
sg
(ast-grep)
文本/正则模式(字符串、名称)
rg
(ripgrep)
按名称/扩展名检索文件
fd
决策流程:需要先查找文件?使用
fd
→ 管道输出到
rg
/
sg
。需要语法感知匹配?使用
sg
。需要快速文本搜索?使用
rg
。不确定的话?先从
rg
开始,若结构很重要再切换到
sg

ast-grep Essentials

ast-grep 核心要点

ast-grep is the least familiar tool -- key syntax summarized here. See references/ast-grep.md for language-specific patterns and YAML rule files.
bash
sg -p 'PATTERN' -l LANG [PATH]
sg -p 'PATTERN' --has 'INNER' -l LANG       # Must contain
sg -p 'PATTERN' --not-has 'INNER' -l LANG   # Must not contain
sg -p 'PATTERN' --inside 'OUTER' -l LANG    # Must be within
ast-grep是相对陌生的工具——此处汇总了其核心语法。语言特定模式和YAML规则文件请参考references/ast-grep.md
bash
sg -p 'PATTERN' -l LANG [PATH]
sg -p 'PATTERN' --has 'INNER' -l LANG       # 必须包含
sg -p 'PATTERN' --not-has 'INNER' -l LANG   # 必须不包含
sg -p 'PATTERN' --inside 'OUTER' -l LANG    # 必须在内部

Metavariables

元变量

SyntaxCapturesExample
$VAR
Single node
console.log($MSG)
$$$VAR
Zero or more nodes
function($$$ARGS)
-- any arity
$_
Non-capturing
$_FUNC($_)
-- match without capture
Rules: must be UPPERCASE, same name = same content (
$A == $A
matches
x == x
not
x == y
).
语法捕获内容示例
$VAR
单个节点
console.log($MSG)
$$$VAR
零或多个节点
function($$$ARGS)
-- 任意参数数量
$_
非捕获型
$_FUNC($_)
-- 匹配但不捕获
规则:必须为大写,同名变量表示内容相同(
$A == $A
匹配
x == x
,而非
x == y
)。

Examples

示例

bash
sg -p 'function $NAME($$$ARGS) { $$$ }' -l js
sg -p 'async function $NAME($$$) { $$$ }' --has 'await $EXPR' -l js
sg -p 'class $NAME extends $PARENT { $$$ }' -l ts
sg -p 'def $NAME($$$): $$$' -l py
bash
sg -p 'function $NAME($$$ARGS) { $$$ }' -l js
sg -p 'async function $NAME($$$) { $$$ }' --has 'await $EXPR' -l js
sg -p 'class $NAME extends $PARENT { $$$ }' -l ts
sg -p 'def $NAME($$$): $$$' -l py

ripgrep / fd Quick Reference

ripgrep / fd 速查表

Standard CLI tools -- use references/ripgrep.md and references/fd.md for full flag tables.
bash
rg PATTERN -t TYPE [PATH]         # Search by file type
rg -F 'LITERAL' -t TYPE           # Fixed string (no regex)
rg PATTERN -l                     # List matching files only
rg PATTERN -C 3                   # With context lines

fd -e EXT [PATH]                  # Find by extension
fd PATTERN [PATH]                 # Find by name regex
fd -e py | xargs rg 'pattern'    # Pipe fd into rg
标准CLI工具——完整的参数表请参考references/ripgrep.mdreferences/fd.md
bash
rg PATTERN -t TYPE [PATH]         # 按文件类型搜索
rg -F 'LITERAL' -t TYPE           # 固定字符串(无正则)
rg PATTERN -l                     # 仅列出匹配的文件
rg PATTERN -C 3                   # 显示上下文行

fd -e EXT [PATH]                  # 按扩展名查找
fd PATTERN [PATH]                 # 按名称正则查找
fd -e py | xargs rg 'pattern'    # 将fd结果管道到rg

Performance

性能优化

  • Narrow scope first:
    fd -e py src/ | xargs rg 'class.*Test'
  • Always use type filters:
    rg PATTERN -t rust
    ,
    sg -p 'PATTERN' -l rs
  • Exclude artifacts:
    rg PATTERN -g '!node_modules' -g '!dist'
  • 先缩小范围:
    fd -e py src/ | xargs rg 'class.*Test'
  • 始终使用类型过滤:
    rg PATTERN -t rust
    ,
    sg -p 'PATTERN' -l rs
  • 排除构建产物:
    rg PATTERN -g '!node_modules' -g '!dist'