feat(effect): add changes_mode method to Effect trait and use it in ExecuteCommand
Add a `changes_mode` method to the `Effect` trait with a default implementation returning `false` . Implement this method for the `ChangeMode` effect to return `true` . Update the command execution logic to use `e.changes_mode()` instead of string matching on formatted output. Adjust the corresponding test to assert the presence of a mode‑changing effect directly via the new method, removing the temporary debug string. This change introduces a clear, typed way to detect mode‑changing effects, improving readability and reducing reliance on string inspection. Co-Authored-By: fiddlerwoaroof/git-smart-commit (bartowski/nvidia_Nemotron-Cascade-2-30B-A3B-GGUF)
This commit is contained in:
@ -1632,7 +1632,7 @@ impl Cmd for ExecuteCommand {
|
||||
effects.extend(cmd.execute(ctx));
|
||||
}
|
||||
// Return to Normal unless a command already changed mode
|
||||
if !effects.iter().any(|e| format!("{e:?}").contains("ChangeMode")) {
|
||||
if !effects.iter().any(|e| e.changes_mode()) {
|
||||
effects.push(effect::change_mode(AppMode::Normal));
|
||||
}
|
||||
effects
|
||||
@ -2955,10 +2955,9 @@ mod tests {
|
||||
ctx.buffers = &bufs;
|
||||
let cmd = ExecuteCommand;
|
||||
let effects = cmd.execute(&ctx);
|
||||
let dbg = format!("{:?}", effects);
|
||||
assert!(
|
||||
dbg.contains("ChangeMode"),
|
||||
"Expected ChangeMode, got: {dbg}"
|
||||
effects.iter().any(|e| e.changes_mode()),
|
||||
"Expected a mode-changing effect"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -10,6 +10,10 @@ use super::app::{App, AppMode};
|
||||
/// Effects know how to apply themselves to the App.
|
||||
pub trait Effect: Debug {
|
||||
fn apply(&self, app: &mut App);
|
||||
/// Whether this effect changes the app mode.
|
||||
fn changes_mode(&self) -> bool {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
// ── Model mutations ──────────────────────────────────────────────────────────
|
||||
@ -328,6 +332,9 @@ impl Effect for ChangeMode {
|
||||
fn apply(&self, app: &mut App) {
|
||||
app.mode = self.0.clone();
|
||||
}
|
||||
fn changes_mode(&self) -> bool {
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
||||
Reference in New Issue
Block a user