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));
|
effects.extend(cmd.execute(ctx));
|
||||||
}
|
}
|
||||||
// Return to Normal unless a command already changed mode
|
// 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.push(effect::change_mode(AppMode::Normal));
|
||||||
}
|
}
|
||||||
effects
|
effects
|
||||||
@ -2955,10 +2955,9 @@ mod tests {
|
|||||||
ctx.buffers = &bufs;
|
ctx.buffers = &bufs;
|
||||||
let cmd = ExecuteCommand;
|
let cmd = ExecuteCommand;
|
||||||
let effects = cmd.execute(&ctx);
|
let effects = cmd.execute(&ctx);
|
||||||
let dbg = format!("{:?}", effects);
|
|
||||||
assert!(
|
assert!(
|
||||||
dbg.contains("ChangeMode"),
|
effects.iter().any(|e| e.changes_mode()),
|
||||||
"Expected ChangeMode, got: {dbg}"
|
"Expected a mode-changing effect"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -10,6 +10,10 @@ use super::app::{App, AppMode};
|
|||||||
/// Effects know how to apply themselves to the App.
|
/// Effects know how to apply themselves to the App.
|
||||||
pub trait Effect: Debug {
|
pub trait Effect: Debug {
|
||||||
fn apply(&self, app: &mut App);
|
fn apply(&self, app: &mut App);
|
||||||
|
/// Whether this effect changes the app mode.
|
||||||
|
fn changes_mode(&self) -> bool {
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Model mutations ──────────────────────────────────────────────────────────
|
// ── Model mutations ──────────────────────────────────────────────────────────
|
||||||
@ -328,6 +332,9 @@ impl Effect for ChangeMode {
|
|||||||
fn apply(&self, app: &mut App) {
|
fn apply(&self, app: &mut App) {
|
||||||
app.mode = self.0.clone();
|
app.mode = self.0.clone();
|
||||||
}
|
}
|
||||||
|
fn changes_mode(&self) -> bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|||||||
Reference in New Issue
Block a user