mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-26 00:00:03 +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.
|
// Return the exercise index of the first pending exercise found.
|
||||||
fn check_all_exercises(&self, stdout: &mut StdoutLock) -> Result<Option<usize>> {
|
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 n_exercises = self.exercises.len();
|
||||||
|
|
||||||
let status = thread::scope(|s| {
|
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.
|
/// 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
|
/// 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.
|
/// 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];
|
let exercise = &mut self.exercises[self.current_exercise_ind];
|
||||||
if !exercise.done {
|
if !exercise.done {
|
||||||
exercise.done = true;
|
exercise.done = true;
|
||||||
|
@ -453,6 +456,12 @@ impl AppState {
|
||||||
return Ok(ExercisesProgress::NewPending);
|
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)? {
|
if let Some(pending_exercise_ind) = self.check_all_exercises(stdout)? {
|
||||||
stdout.write_all(b"\n\n")?;
|
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 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 STATE_FILE_HEADER: &[u8] = b"DON'T EDIT THIS FILE!\n\n";
|
||||||
const RERUNNING_ALL_EXERCISES_MSG: &[u8] = b"
|
const FINAL_CHECK_MSG: &[u8] = b"All exercises seem to be done.
|
||||||
All exercises seem to be done.
|
|
||||||
Recompiling and running all exercises to make sure that all of them are actually done.
|
Recompiling and running all exercises to make sure that all of them are actually done.
|
||||||
";
|
";
|
||||||
const FENISH_LINE: &str = "+----------------------------------------------------+
|
const FENISH_LINE: &str = "+----------------------------------------------------+
|
||||||
|
|
|
@ -44,7 +44,7 @@ pub fn run(app_state: &mut AppState) -> Result<()> {
|
||||||
stdout.write_all(b"\n")?;
|
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 => {
|
ExercisesProgress::NewPending | ExercisesProgress::CurrentPending => {
|
||||||
stdout.write_all(b"Next exercise: ")?;
|
stdout.write_all(b"Next exercise: ")?;
|
||||||
app_state
|
app_state
|
||||||
|
|
|
@ -113,7 +113,7 @@ impl<'a> WatchState<'a> {
|
||||||
return Ok(ExercisesProgress::CurrentPending);
|
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<()> {
|
fn show_prompt(&self, stdout: &mut StdoutLock) -> io::Result<()> {
|
||||||
|
|
Loading…
Reference in a new issue