From 74789c4b1368b0753eb6e0186d85e560fd21e718 Mon Sep 17 00:00:00 2001 From: silentvoid <51264226+SilentVoid13@users.noreply.github.com> Date: Fri, 25 Apr 2025 15:37:39 +0200 Subject: [PATCH] fix: dx check now respects files to ignore (e.g. .gitignore) (#4038) closes #3751 --- packages/cli/src/cli/autoformat.rs | 18 ++---------------- packages/cli/src/cli/check.rs | 30 ++---------------------------- packages/cli/src/metadata.rs | 15 +++++++++++++++ 3 files changed, 19 insertions(+), 44 deletions(-) diff --git a/packages/cli/src/cli/autoformat.rs b/packages/cli/src/cli/autoformat.rs index 9ca73c134..47d663026 100644 --- a/packages/cli/src/cli/autoformat.rs +++ b/packages/cli/src/cli/autoformat.rs @@ -1,5 +1,5 @@ use super::*; -use crate::DioxusCrate; +use crate::{metadata::collect_rs_files, DioxusCrate}; use anyhow::Context; use dioxus_autofmt::{IndentOptions, IndentType}; use rayon::prelude::*; @@ -126,20 +126,6 @@ fn refactor_file( Ok(()) } -use std::ffi::OsStr; -fn get_project_files(dir: impl AsRef) -> Vec { - let mut files = Vec::new(); - for result in ignore::Walk::new(dir) { - let path = result.unwrap().into_path(); - if let Some(ext) = path.extension() { - if ext == OsStr::new("rs") { - files.push(path); - } - } - } - files -} - fn format_file( path: impl AsRef, indent: IndentOptions, @@ -185,7 +171,7 @@ fn autoformat_project( format_rust_code: bool, dir: impl AsRef, ) -> Result<()> { - let files_to_format = get_project_files(dir); + let files_to_format = collect_rs_files(dir); if files_to_format.is_empty() { return Ok(()); diff --git a/packages/cli/src/cli/check.rs b/packages/cli/src/cli/check.rs index 3c28df012..ea70c74c4 100644 --- a/packages/cli/src/cli/check.rs +++ b/packages/cli/src/cli/check.rs @@ -4,10 +4,9 @@ //! https://github.com/rust-lang/rustfmt/blob/master/src/bin/main.rs use super::*; -use crate::DioxusCrate; +use crate::{metadata::collect_rs_files, DioxusCrate}; use anyhow::Context; use futures_util::{stream::FuturesUnordered, StreamExt}; -use std::path::Path; /// Check the Rust files in the project for issues. #[derive(Clone, Debug, Parser)] @@ -54,7 +53,7 @@ async fn check_file_and_report(path: PathBuf) -> Result<()> { /// Doesn't do mod-descending, so it will still try to check unreachable files. TODO. async fn check_project_and_report(dioxus_crate: DioxusCrate) -> Result<()> { let mut files_to_check = vec![dioxus_crate.main_source_file()]; - collect_rs_files(&dioxus_crate.crate_dir(), &mut files_to_check); + files_to_check.extend(collect_rs_files(dioxus_crate.crate_dir())); check_files_and_report(files_to_check).await } @@ -106,28 +105,3 @@ async fn check_files_and_report(files_to_check: Vec) -> Result<()> { _ => Err(format!("{} issues found.", total_issues).into()), } } - -fn collect_rs_files(folder: &Path, files: &mut Vec) { - let Ok(folder) = folder.read_dir() else { - return; - }; - - // load the gitignore - for entry in folder { - let Ok(entry) = entry else { - continue; - }; - - let path = entry.path(); - - if path.is_dir() { - collect_rs_files(&path, files); - } - - if let Some(ext) = path.extension() { - if ext == "rs" { - files.push(path); - } - } - } -} diff --git a/packages/cli/src/metadata.rs b/packages/cli/src/metadata.rs index f9e072683..7d8a2a321 100644 --- a/packages/cli/src/metadata.rs +++ b/packages/cli/src/metadata.rs @@ -2,6 +2,7 @@ use std::error::Error; use std::{ env, + ffi::OsStr, fmt::{Display, Formatter}, fs, path::{Path, PathBuf}, @@ -62,3 +63,17 @@ fn contains_manifest(path: &Path) -> bool { }) .unwrap_or(false) } + +/// Collects all `.rs` files in the provided directory, respecting files to ignore (e.g. `.gitignore`) +pub(crate) fn collect_rs_files(dir: impl AsRef) -> Vec { + let mut files = Vec::new(); + for result in ignore::Walk::new(dir) { + let path = result.unwrap().into_path(); + if let Some(ext) = path.extension() { + if ext == OsStr::new("rs") { + files.push(path); + } + } + } + files +}