diff options
| author | mo8it <mo8it@proton.me> | 2024-08-01 19:14:09 +0200 |
|---|---|---|
| committer | mo8it <mo8it@proton.me> | 2024-08-01 19:14:09 +0200 |
| commit | 65a8f6bb4b542a24bf80265cf5080b5c8f51fb7e (patch) | |
| tree | d53521412adacb549b0ba00233a04123a8a3baa2 /src/dev | |
| parent | e0f0944bffe607af9e6059df7a65d4b9b0b99e4f (diff) | |
Run rustfmt on solutions in `dev check`
Diffstat (limited to 'src/dev')
| -rw-r--r-- | src/dev/check.rs | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/dev/check.rs b/src/dev/check.rs index 0d1e587..cf1d976 100644 --- a/src/dev/check.rs +++ b/src/dev/check.rs @@ -4,6 +4,7 @@ use std::{ fs::{self, read_dir, OpenOptions}, io::{self, Read, Write}, path::{Path, PathBuf}, + process::{Command, Stdio}, sync::atomic::{self, AtomicBool}, thread, }; @@ -224,7 +225,7 @@ fn check_solutions( cmd_runner: &CmdRunner, ) -> Result<()> { println!("Running all solutions. This may take a while…\n"); - let sol_paths = thread::scope(|s| { + thread::scope(|s| { let handles = info_file .exercises .iter() @@ -250,6 +251,14 @@ fn check_solutions( .collect::<Vec<_>>(); let mut sol_paths = hashbrown::HashSet::with_capacity(info_file.exercises.len()); + let mut fmt_cmd = Command::new("rustfmt"); + fmt_cmd + .arg("--check") + .arg("--edition") + .arg("2021") + .arg("--color") + .arg("--always") + .stdin(Stdio::null()); for (exercise_name, handle) in info_file .exercises @@ -259,6 +268,7 @@ fn check_solutions( { match handle.join() { Ok(SolutionCheck::Success { sol_path }) => { + fmt_cmd.arg(&sol_path); sol_paths.insert(PathBuf::from(sol_path)); } Ok(SolutionCheck::MissingRequired) => { @@ -276,12 +286,18 @@ fn check_solutions( } } - Ok(sol_paths) - })?; + let handle = s.spawn(move || check_unexpected_files("solutions", &sol_paths)); - check_unexpected_files("solutions", &sol_paths)?; + if !fmt_cmd + .status() + .context("Failed to run `rustfmt` on all solution files")? + .success() + { + bail!("Some solutions aren't formatted. Run `rustfmt` on them"); + } - Ok(()) + handle.join().unwrap() + }) } pub fn check(require_solutions: bool) -> Result<()> { |
