refactor(command): improve formula commitment and buffer management
Refactor command execution and buffer management. - `CommitFormula` now defaults to targeting `_Measure` . - `CommitFormula` no longer automatically clears the buffer; buffer clearing is now handled by keymap sequences. - Added `ClearBufferCmd` to the command registry. - Updated `AddFormulaCmd` to support optional target category. - Added `SetBuffer` effect to allow clearing buffers. Co-Authored-By: fiddlerwoaroof/git-smart-commit (unsloth/gemma-4-26B-A4B-it-GGUF:UD-Q5_K_XL)
This commit is contained in:
@ -34,8 +34,10 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
/// Formulas always target _Measure by default, even when no regular
|
||||
/// categories exist. _Measure is a virtual category that always exists.
|
||||
#[test]
|
||||
fn commit_formula_without_regular_categories_shows_status() {
|
||||
fn commit_formula_without_regular_categories_targets_measure() {
|
||||
let m = Model::new("Empty");
|
||||
let layout = make_layout(&m);
|
||||
let reg = make_registry();
|
||||
@ -46,12 +48,12 @@ mod tests {
|
||||
let effects = CommitFormula.execute(&ctx);
|
||||
let dbg = effects_debug(&effects);
|
||||
assert!(
|
||||
!dbg.contains("AddFormula"),
|
||||
"Should not add formula when only virtual categories exist, got: {dbg}"
|
||||
dbg.contains("AddFormula"),
|
||||
"Should add formula targeting _Measure, got: {dbg}"
|
||||
);
|
||||
assert!(
|
||||
dbg.contains("Add at least one category first"),
|
||||
"Expected status message, got: {dbg}"
|
||||
dbg.contains("_Measure"),
|
||||
"target_category should be _Measure, got: {dbg}"
|
||||
);
|
||||
}
|
||||
|
||||
@ -220,30 +222,23 @@ impl Cmd for CommitFormula {
|
||||
}
|
||||
fn execute(&self, ctx: &CmdContext) -> Vec<Box<dyn Effect>> {
|
||||
let buf = ctx.buffers.get("formula").cloned().unwrap_or_default();
|
||||
let first_cat = ctx
|
||||
.model
|
||||
.regular_category_names()
|
||||
.into_iter()
|
||||
.next()
|
||||
.map(String::from);
|
||||
let mut effects: Vec<Box<dyn Effect>> = Vec::new();
|
||||
if let Some(cat) = first_cat {
|
||||
effects.push(Box::new(effect::AddFormula {
|
||||
raw: buf,
|
||||
target_category: cat,
|
||||
}));
|
||||
effects.push(effect::mark_dirty());
|
||||
effects.push(effect::set_status("Formula added"));
|
||||
} else {
|
||||
effects.push(effect::set_status("Add at least one category first."));
|
||||
}
|
||||
// Default formula target to _Measure (the virtual measure category).
|
||||
// _Measure dynamically includes all formula targets.
|
||||
effects.push(Box::new(effect::AddFormula {
|
||||
raw: buf,
|
||||
target_category: "_Measure".to_string(),
|
||||
}));
|
||||
effects.push(effect::mark_dirty());
|
||||
effects.push(effect::set_status("Formula added"));
|
||||
effects.push(effect::change_mode(AppMode::FormulaPanel));
|
||||
effects
|
||||
}
|
||||
}
|
||||
|
||||
/// Shared helper: read a buffer, trim it, and if non-empty, produce add + dirty
|
||||
/// + status + clear-buffer effects. If empty, return to CategoryPanel.
|
||||
/// + status effects. If empty, return to CategoryPanel.
|
||||
/// Buffer clearing is handled by the keymap (Enter → [commit, clear-buffer]).
|
||||
fn commit_add_from_buffer(
|
||||
ctx: &CmdContext,
|
||||
buffer_name: &str,
|
||||
@ -262,10 +257,6 @@ fn commit_add_from_buffer(
|
||||
add,
|
||||
effect::mark_dirty(),
|
||||
effect::set_status(status_msg(&trimmed)),
|
||||
Box::new(effect::SetBuffer {
|
||||
name: buffer_name.to_string(),
|
||||
value: String::new(),
|
||||
}),
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user