summaryrefslogtreecommitdiff
path: root/src/app_state.rs
diff options
context:
space:
mode:
authorMo <76752051+mo8it@users.noreply.github.com>2024-04-25 14:43:28 +0200
committerGitHub <noreply@github.com>2024-04-25 14:43:28 +0200
commit88f27a53771a49a4e541627b84cc5dc7ab6f7357 (patch)
treeeba5401fd370e85cf597771b34a042eb5ae65475 /src/app_state.rs
parentd8c2ab8349854cbc7f4a994c7413d266cc38bc24 (diff)
parent1f1a62d83ef9398a1a31c904a2ef6d81f5455e59 (diff)
Merge pull request #1959 from rust-lang/output
Improve output
Diffstat (limited to 'src/app_state.rs')
-rw-r--r--src/app_state.rs20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/app_state.rs b/src/app_state.rs
index 33d3de2..476b5a9 100644
--- a/src/app_state.rs
+++ b/src/app_state.rs
@@ -11,7 +11,12 @@ use std::{
process::{Command, Stdio},
};
-use crate::{embedded::EMBEDDED_FILES, exercise::Exercise, info_file::ExerciseInfo, DEBUG_PROFILE};
+use crate::{
+ embedded::EMBEDDED_FILES,
+ exercise::{Exercise, OUTPUT_CAPACITY},
+ info_file::ExerciseInfo,
+ DEBUG_PROFILE,
+};
const STATE_FILE_NAME: &str = ".rustlings-state.txt";
const BAD_INDEX_ERR: &str = "The current exercise index is higher than the number of exercises";
@@ -107,7 +112,8 @@ impl AppState {
dir,
name,
path,
- mode: exercise_info.mode,
+ test: exercise_info.test,
+ strict_clippy: exercise_info.strict_clippy,
hint,
done: false,
}
@@ -302,12 +308,14 @@ impl AppState {
let Some(ind) = self.next_pending_exercise_ind() else {
writer.write_all(RERUNNING_ALL_EXERCISES_MSG)?;
+ let mut output = Vec::with_capacity(OUTPUT_CAPACITY);
for (exercise_ind, exercise) in self.exercises().iter().enumerate() {
- writer.write_fmt(format_args!("Running {exercise} ... "))?;
+ write!(writer, "Running {exercise} ... ")?;
writer.flush()?;
- if !exercise.run()?.status.success() {
- writer.write_fmt(format_args!("{}\n\n", "FAILED".red()))?;
+ let success = exercise.run(&mut output)?;
+ if !success {
+ writeln!(writer, "{}\n", "FAILED".red())?;
self.current_exercise_ind = exercise_ind;
@@ -321,7 +329,7 @@ impl AppState {
return Ok(ExercisesProgress::Pending);
}
- writer.write_fmt(format_args!("{}\n", "ok".green()))?;
+ writeln!(writer, "{}", "ok".green())?;
}
writer.execute(Clear(ClearType::All))?;