summaryrefslogtreecommitdiff
path: root/src/app_state.rs
diff options
context:
space:
mode:
authorNahor <nahor.j+github@gmail.com>2024-10-02 13:40:32 -0700
committerNahor <nahor.j+github@gmail.com>2024-10-02 13:40:32 -0700
commitc52867eb8bf69f67e702b87dd2bf12125aa7ab12 (patch)
tree8bd8d22b1de936b279063e0a43c1c740708a7c15 /src/app_state.rs
parent26fd97a209d936755aa653ee0110d17d27e47306 (diff)
Add command to check all the exercises
This allows for skipping repeating "next" when multiple exercises are done at once, or when earlier exercises have been updated/changed (and thus must be redone) while still working of the whole set (i.e. the final check_all is not yet available to flag those undone exercises)
Diffstat (limited to 'src/app_state.rs')
-rw-r--r--src/app_state.rs24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/app_state.rs b/src/app_state.rs
index de5a382..99772b7 100644
--- a/src/app_state.rs
+++ b/src/app_state.rs
@@ -396,8 +396,16 @@ impl AppState {
}
// Return the exercise index of the first pending exercise found.
- fn check_all_exercises(&mut self, stdout: &mut StdoutLock) -> Result<Option<usize>> {
- stdout.write_all(FINAL_CHECK_MSG)?;
+ pub fn check_all_exercises(
+ &mut self,
+ stdout: &mut StdoutLock,
+ final_check: bool,
+ ) -> Result<Option<usize>> {
+ if !final_check {
+ stdout.write_all(INTERMEDIATE_CHECK_MSG)?;
+ } else {
+ stdout.write_all(FINAL_CHECK_MSG)?;
+ }
let n_exercises = self.exercises.len();
let (mut checked_count, mut results) = thread::scope(|s| {
@@ -513,7 +521,7 @@ impl AppState {
stdout.write_all(b"\n")?;
}
- if let Some(pending_exercise_ind) = self.check_all_exercises(stdout)? {
+ if let Some(pending_exercise_ind) = self.check_all_exercises(stdout, true)? {
stdout.write_all(b"\n\n")?;
self.current_exercise_ind = pending_exercise_ind;
@@ -525,6 +533,12 @@ impl AppState {
// Write that the last exercise is done.
self.write()?;
+ self.render_final_message(stdout)?;
+
+ Ok(ExercisesProgress::AllDone)
+ }
+
+ pub fn render_final_message(&self, stdout: &mut StdoutLock) -> Result<()> {
clear_terminal(stdout)?;
stdout.write_all(FENISH_LINE.as_bytes())?;
@@ -534,12 +548,14 @@ impl AppState {
stdout.write_all(b"\n")?;
}
- Ok(ExercisesProgress::AllDone)
+ Ok(())
}
}
const BAD_INDEX_ERR: &str = "The current exercise index is higher than the number of exercises";
const STATE_FILE_HEADER: &[u8] = b"DON'T EDIT THIS FILE!\n\n";
+const INTERMEDIATE_CHECK_MSG: &[u8] = b"Checking all exercises
+";
const FINAL_CHECK_MSG: &[u8] = b"All exercises seem to be done.
Recompiling and running all exercises to make sure that all of them are actually done.
";