概览
main.rs
- 角色:ripgrep可执行程序的入口,负责顶层参数分发、并发策略选者、错误与退出码处理、以及几种运行模式(search/files/types/generate/special)的协调。
主要职责
- 调用flags::parse()获取解析结果并交由run()处理
- 在顶层处理run()返回的错误:BrokenPipe被视为优雅退出(退出码为0),其他错误打印并返回2。
- 根据HiArgs和Mode决定单线程或并行执行搜索/列举等逻辑。
- 在搜索结束后依据匹配情况、错误标记和quiet标志计算最终退出码 (0/1/2)。
控制流(伪代码)
//高层伪代码
fn main() -> ExitCode {
match run(flags::parse()) {
Ok(code) => code,
Err(err) => {
if err.chain() contains BrokenPipe { return ExitCode::from(0); }
eprintln(err);
ExitCode::from(2)
}
}
}
关键函数与职责
- main:顶层错误捕获与BrokenPipe特殊处理
- run(result): 解包ParseResult(Err/Special/Ok),分派到具体模式;计算最终退出码。
- search(args, mode):单线程搜索。构造walk -> haystack -> 顺序调用searcher,统计并打印stats。
- search_parallel(args, mode):并行搜索,使用walk的并行runner,worker closuer负责单文件搜索、统计合并和通过bufwtr打印结果。
- files(args)/file_parallel(args):列出文件路径(单线程/多线程实现,后者使用打印线程和mpsc channel)。
- special(mode):输出help/version等短路模式(最少初始化)
- generate(mode):生成man页或shell补全并写stdout
- print_stats(…):根据SearchMode输出文本或JSON统计。
重要概念与类型
- HiArgs:高层运行时配置()
- Mode/SearchMode:决定是 Search/Files/Types/Generate/Special 以及 JSON/text 输出等。
- WalkState:ignore crate的遍历控制(Continue/Quit)