mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-25 00:00:05 +03:00
Compare commits
2 commits
9dffe97fd2
...
53e0bfe9f1
Author | SHA1 | Date | |
---|---|---|---|
53e0bfe9f1 | |||
554301b8e9 |
|
@ -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| {
|
||||
|
@ -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;
|
||||
|
@ -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")?;
|
||||
|
||||
|
@ -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 = "+----------------------------------------------------+
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<()> {
|
||||
|
|
Loading…
Reference in a new issue