]> git.lizzy.rs Git - rust.git/blob - src/tools/tidy/src/walk.rs
Auto merge of #101332 - sashashura:patch-1, r=pietroalbini
[rust.git] / src / tools / tidy / src / walk.rs
1 use std::fs::File;
2 use std::io::Read;
3 use walkdir::{DirEntry, WalkDir};
4
5 use std::path::Path;
6
7 pub fn filter_dirs(path: &Path) -> bool {
8     let skip = [
9         "tidy-test-file",
10         "compiler/rustc_codegen_cranelift",
11         "compiler/rustc_codegen_gcc",
12         "src/llvm-project",
13         "library/backtrace",
14         "library/portable-simd",
15         "library/stdarch",
16         "src/tools/cargo",
17         "src/tools/clippy",
18         "src/tools/miri",
19         "src/tools/rls",
20         "src/tools/rust-analyzer",
21         "src/tools/rust-installer",
22         "src/tools/rustfmt",
23         "src/doc/book",
24         // Filter RLS output directories
25         "target/rls",
26         "src/bootstrap/target",
27     ];
28     skip.iter().any(|p| path.ends_with(p))
29 }
30
31 pub fn walk_many(
32     paths: &[&Path],
33     skip: &mut dyn FnMut(&Path) -> bool,
34     f: &mut dyn FnMut(&DirEntry, &str),
35 ) {
36     for path in paths {
37         walk(path, skip, f);
38     }
39 }
40
41 pub fn walk(path: &Path, skip: &mut dyn FnMut(&Path) -> bool, f: &mut dyn FnMut(&DirEntry, &str)) {
42     let mut contents = String::new();
43     walk_no_read(path, skip, &mut |entry| {
44         contents.clear();
45         if t!(File::open(entry.path()), entry.path()).read_to_string(&mut contents).is_err() {
46             contents.clear();
47         }
48         f(&entry, &contents);
49     });
50 }
51
52 pub(crate) fn walk_no_read(
53     path: &Path,
54     skip: &mut dyn FnMut(&Path) -> bool,
55     f: &mut dyn FnMut(&DirEntry),
56 ) {
57     let walker = WalkDir::new(path).into_iter().filter_entry(|e| !skip(e.path()));
58     for entry in walker {
59         if let Ok(entry) = entry {
60             if entry.file_type().is_dir() {
61                 continue;
62             }
63             f(&entry);
64         }
65     }
66 }