Skip to content

Commit

Permalink
Clear terminal before final check in watch mode
Browse files Browse the repository at this point in the history
  • Loading branch information
mo8it committed Sep 24, 2024
1 parent a55e848 commit 554301b
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 6 deletions.
16 changes: 12 additions & 4 deletions src/app_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ impl AppState {

// Return the exercise index of the first pending exercise found.
fn check_all_exercises(&self, stdout: &mut StdoutLock) -> Result<Option<usize>> {
stdout.write_all(RERUNNING_ALL_EXERCISES_MSG)?;
stdout.write_all(FINAL_CHECK_MSG)?;
let n_exercises = self.exercises.len();

let status = thread::scope(|s| {
Expand Down Expand Up @@ -441,7 +441,10 @@ impl AppState {
/// Mark the current exercise as done and move on to the next pending exercise if one exists.
/// If all exercises are marked as done, run all of them to make sure that they are actually
/// done. If an exercise which is marked as done fails, mark it as pending and continue on it.
pub fn done_current_exercise(&mut self, stdout: &mut StdoutLock) -> Result<ExercisesProgress> {
pub fn done_current_exercise<const CLEAR_BEFORE_FINAL_CHECK: bool>(
&mut self,
stdout: &mut StdoutLock,
) -> Result<ExercisesProgress> {
let exercise = &mut self.exercises[self.current_exercise_ind];
if !exercise.done {
exercise.done = true;
Expand All @@ -453,6 +456,12 @@ impl AppState {
return Ok(ExercisesProgress::NewPending);
}

if CLEAR_BEFORE_FINAL_CHECK {
clear_terminal(stdout)?;
} else {
stdout.write_all(b"\n")?;
}

if let Some(pending_exercise_ind) = self.check_all_exercises(stdout)? {
stdout.write_all(b"\n\n")?;

Expand Down Expand Up @@ -482,8 +491,7 @@ impl AppState {

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 RERUNNING_ALL_EXERCISES_MSG: &[u8] = b"
All exercises seem to be done.
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.
";
const FENISH_LINE: &str = "+----------------------------------------------------+
Expand Down
2 changes: 1 addition & 1 deletion src/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ pub fn run(app_state: &mut AppState) -> Result<()> {
stdout.write_all(b"\n")?;
}

match app_state.done_current_exercise(&mut stdout)? {
match app_state.done_current_exercise::<false>(&mut stdout)? {
ExercisesProgress::NewPending | ExercisesProgress::CurrentPending => {
stdout.write_all(b"Next exercise: ")?;
app_state
Expand Down
2 changes: 1 addition & 1 deletion src/watch/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ impl<'a> WatchState<'a> {
return Ok(ExercisesProgress::CurrentPending);
}

self.app_state.done_current_exercise(stdout)
self.app_state.done_current_exercise::<true>(stdout)
}

fn show_prompt(&self, stdout: &mut StdoutLock) -> io::Result<()> {
Expand Down

0 comments on commit 554301b

Please sign in to comment.