diff --git a/xtask/src/codegen/gen_assists_docs.rs b/xtask/src/codegen/gen_assists_docs.rs index 6da5ca89e7f..31d606535fb 100644 --- a/xtask/src/codegen/gen_assists_docs.rs +++ b/xtask/src/codegen/gen_assists_docs.rs @@ -4,7 +4,7 @@ use std::{fs, path::Path}; use crate::{ codegen::{self, extract_comment_blocks_with_empty_lines, Mode}, - project_root, Result, + project_root, rust_files, Result, }; pub fn generate_assists_docs(mode: Mode) -> Result<()> { @@ -46,12 +46,8 @@ fn reveal_hash_comments(text: &str) -> String { fn collect_assists() -> Result> { let mut res = Vec::new(); - for entry in fs::read_dir(project_root().join(codegen::ASSISTS_DIR))? { - let entry = entry?; - let path = entry.path(); - if path.is_file() { - collect_file(&mut res, path.as_path())?; - } + for path in rust_files(&project_root().join(codegen::ASSISTS_DIR)) { + collect_file(&mut res, path.as_path())?; } res.sort_by(|lhs, rhs| lhs.id.cmp(&rhs.id)); return Ok(res); diff --git a/xtask/src/lib.rs b/xtask/src/lib.rs index e1472e85d89..4f01f84fb41 100644 --- a/xtask/src/lib.rs +++ b/xtask/src/lib.rs @@ -17,6 +17,7 @@ use std::{ path::{Path, PathBuf}, process::{Command, Stdio}, }; +use walkdir::{DirEntry, WalkDir}; use crate::{ codegen::Mode, @@ -37,6 +38,21 @@ pub fn project_root() -> PathBuf { .to_path_buf() } +pub fn rust_files(path: &Path) -> impl Iterator { + let iter = WalkDir::new(path); + return iter + .into_iter() + .filter_entry(|e| !is_hidden(e)) + .map(|e| e.unwrap()) + .filter(|e| !e.file_type().is_dir()) + .map(|e| e.into_path()) + .filter(|path| path.extension().map(|it| it == "rs").unwrap_or(false)); + + fn is_hidden(entry: &DirEntry) -> bool { + entry.file_name().to_str().map(|s| s.starts_with('.')).unwrap_or(false) + } +} + pub fn run_rustfmt(mode: Mode) -> Result<()> { let _dir = pushd(project_root()); ensure_rustfmt()?; diff --git a/xtask/tests/tidy-tests/main.rs b/xtask/tests/tidy-tests/main.rs index 5ae86c87c94..80911a68e8b 100644 --- a/xtask/tests/tidy-tests/main.rs +++ b/xtask/tests/tidy-tests/main.rs @@ -5,13 +5,12 @@ use std::{ path::{Path, PathBuf}, }; -use walkdir::{DirEntry, WalkDir}; -use xtask::{not_bash::fs2, project_root}; +use xtask::{not_bash::fs2, project_root, rust_files}; #[test] fn rust_files_are_tidy() { let mut tidy_docs = TidyDocs::default(); - for path in rust_files() { + for path in rust_files(&project_root().join("crates")) { let text = fs2::read_to_string(&path).unwrap(); check_todo(&path, &text); check_trailing_ws(&path, &text); @@ -142,19 +141,3 @@ fn is_exclude_dir(p: &Path, dirs_to_exclude: &[&str]) -> bool { false } - -fn rust_files() -> impl Iterator { - let crates = project_root().join("crates"); - let iter = WalkDir::new(crates); - return iter - .into_iter() - .filter_entry(|e| !is_hidden(e)) - .map(|e| e.unwrap()) - .filter(|e| !e.file_type().is_dir()) - .map(|e| e.into_path()) - .filter(|path| path.extension().map(|it| it == "rs").unwrap_or(false)); - - fn is_hidden(entry: &DirEntry) -> bool { - entry.file_name().to_str().map(|s| s.starts_with('.')).unwrap_or(false) - } -}