diff options
| author | mo8it <mo8it@proton.me> | 2024-05-13 17:06:11 +0200 |
|---|---|---|
| committer | mo8it <mo8it@proton.me> | 2024-05-13 17:06:11 +0200 |
| commit | 4ae3fcc3caf91d4b22680ed4497c8ee05296eaad (patch) | |
| tree | 1248409373c7943a7b3c663eeead4af76a8d51c4 | |
| parent | 17a2d42ffd868e2049c91d7d1adbecd7f9958020 (diff) | |
Don't skip exercises on file changes
| -rw-r--r-- | src/app_state.rs | 4 | ||||
| -rw-r--r-- | src/watch.rs | 2 | ||||
| -rw-r--r-- | src/watch/state.rs | 9 |
3 files changed, 13 insertions, 2 deletions
diff --git a/src/app_state.rs b/src/app_state.rs index 85639e5..75014ce 100644 --- a/src/app_state.rs +++ b/src/app_state.rs @@ -198,6 +198,10 @@ impl AppState { } pub fn set_current_exercise_ind(&mut self, exercise_ind: usize) -> Result<()> { + if exercise_ind == self.current_exercise_ind { + return Ok(()); + } + if exercise_ind >= self.exercises.len() { bail!(BAD_INDEX_ERR); } diff --git a/src/watch.rs b/src/watch.rs index f72ebf7..2fbc533 100644 --- a/src/watch.rs +++ b/src/watch.rs @@ -95,7 +95,7 @@ pub fn watch( WatchEvent::Input(InputEvent::Run) => watch_state.run_current_exercise()?, WatchEvent::Input(InputEvent::Unrecognized) => watch_state.render()?, WatchEvent::FileChange { exercise_ind } => { - watch_state.run_exercise_with_ind(exercise_ind)?; + watch_state.handle_file_change(exercise_ind)?; } WatchEvent::TerminalResize => { watch_state.render()?; diff --git a/src/watch/state.rs b/src/watch/state.rs index 74cf182..60b6d5a 100644 --- a/src/watch/state.rs +++ b/src/watch/state.rs @@ -72,7 +72,14 @@ impl<'a> WatchState<'a> { self.render() } - pub fn run_exercise_with_ind(&mut self, exercise_ind: usize) -> Result<()> { + pub fn handle_file_change(&mut self, exercise_ind: usize) -> Result<()> { + // Don't skip exercises on file changes to avoid confusion from missing exercises. + // Skipping exercises must be explicit in the interactive list. + // But going back to an earlier exercise on file change is fine. + if self.app_state.current_exercise_ind() < exercise_ind { + return Ok(()); + } + self.app_state.set_current_exercise_ind(exercise_ind)?; self.run_current_exercise() } |
