chore: format

This commit is contained in:
Edward Langley
2026-04-13 21:30:37 -07:00
parent af74dc3d3f
commit 6370f8b19f
19 changed files with 445 additions and 249 deletions

View File

@ -3,7 +3,7 @@ use crate::ui::app::AppMode;
use crate::ui::effect::{self, Effect};
use super::core::{Cmd, CmdContext};
use super::navigation::{viewport_effects, CursorState, EnterAdvance};
use super::navigation::{CursorState, EnterAdvance, viewport_effects};
#[cfg(test)]
mod tests {

View File

@ -3,8 +3,8 @@ use std::fmt::Debug;
use crossterm::event::KeyCode;
use crate::model::cell::{CellKey, CellValue};
use crate::model::Model;
use crate::model::cell::{CellKey, CellValue};
use crate::ui::app::AppMode;
use crate::ui::effect::{Effect, Panel};
use crate::view::{Axis, GridLayout};

View File

@ -2,7 +2,7 @@ use crate::model::cell::CellValue;
use crate::ui::effect::{self, Effect};
use crate::view::Axis;
use super::core::{require_args, Cmd, CmdContext};
use super::core::{Cmd, CmdContext, require_args};
#[cfg(test)]
mod tests {
@ -110,7 +110,6 @@ macro_rules! effect_cmd {
};
}
effect_cmd!(
AddCategoryCmd,
"add-category",
@ -202,7 +201,10 @@ effect_cmd!(
"add-formula",
|args: &[String]| {
if args.is_empty() || args.len() > 2 {
return Err(format!("add-formula requires 1-2 argument(s), got {}", args.len()));
return Err(format!(
"add-formula requires 1-2 argument(s), got {}",
args.len()
));
}
Ok(())
},
@ -397,7 +399,10 @@ effect_cmd!(
"help",
|_args: &[String]| -> Result<(), String> { Ok(()) },
|_args: &Vec<String>, _ctx: &CmdContext| -> Vec<Box<dyn Effect>> {
vec![effect::help_page_set(0), effect::change_mode(crate::ui::app::AppMode::Help)]
vec![
effect::help_page_set(0),
effect::change_mode(crate::ui::app::AppMode::Help),
]
}
);

View File

@ -1,15 +1,15 @@
pub mod core;
pub mod navigation;
pub mod mode;
pub mod cell;
pub mod search;
pub mod panel;
pub mod grid;
pub mod tile;
pub mod text_buffer;
pub mod commit;
pub mod core;
pub mod effect_cmds;
pub mod grid;
pub mod mode;
pub mod navigation;
pub mod panel;
pub mod registry;
pub mod search;
pub mod text_buffer;
pub mod tile;
// Re-export items used by external code
pub use self::core::{Cmd, CmdContext, CmdRegistry};

View File

@ -3,7 +3,7 @@ use crossterm::event::KeyCode;
use crate::ui::app::AppMode;
use crate::ui::effect::{self, Effect};
use super::core::{read_buffer, Cmd, CmdContext};
use super::core::{Cmd, CmdContext, read_buffer};
#[cfg(test)]
mod tests {

View File

@ -235,9 +235,8 @@ impl Keymap {
/// Look up the binding for a key, falling through to parent keymaps.
pub fn lookup(&self, key: KeyCode, mods: KeyModifiers) -> Option<&Binding> {
self.lookup_local(key, mods).or_else(|| {
self.parent.as_ref().and_then(|p| p.lookup(key, mods))
})
self.lookup_local(key, mods)
.or_else(|| self.parent.as_ref().and_then(|p| p.lookup(key, mods)))
}
/// Dispatch a key: look up binding, resolve through registry, return effects.
@ -729,50 +728,82 @@ impl KeymapSet {
// ── Editing mode ─────────────────────────────────────────────────
let mut ed = Keymap::new();
ed.bind_seq(KeyCode::Esc, none, vec![
("clear-buffer", vec!["edit".into()]),
("enter-mode", vec!["normal".into()]),
]);
ed.bind_seq(KeyCode::Enter, none, vec![
("commit-cell-edit", vec![]),
("clear-buffer", vec!["edit".into()]),
]);
ed.bind_seq(KeyCode::Tab, none, vec![
("commit-and-advance-right", vec![]),
("clear-buffer", vec!["edit".into()]),
]);
ed.bind_seq(
KeyCode::Esc,
none,
vec![
("clear-buffer", vec!["edit".into()]),
("enter-mode", vec!["normal".into()]),
],
);
ed.bind_seq(
KeyCode::Enter,
none,
vec![
("commit-cell-edit", vec![]),
("clear-buffer", vec!["edit".into()]),
],
);
ed.bind_seq(
KeyCode::Tab,
none,
vec![
("commit-and-advance-right", vec![]),
("clear-buffer", vec!["edit".into()]),
],
);
ed.bind_args(KeyCode::Backspace, none, "pop-char", vec!["edit".into()]);
ed.bind_any_char("append-char", vec!["edit".into()]);
set.insert(ModeKey::Editing, Arc::new(ed));
// ── Formula edit ─────────────────────────────────────────────────
let mut fe = Keymap::new();
fe.bind_seq(KeyCode::Esc, none, vec![
("clear-buffer", vec!["formula".into()]),
("enter-mode", vec!["formula-panel".into()]),
]);
fe.bind_seq(KeyCode::Enter, none, vec![
("commit-formula", vec![]),
("clear-buffer", vec!["formula".into()]),
]);
fe.bind_seq(
KeyCode::Esc,
none,
vec![
("clear-buffer", vec!["formula".into()]),
("enter-mode", vec!["formula-panel".into()]),
],
);
fe.bind_seq(
KeyCode::Enter,
none,
vec![
("commit-formula", vec![]),
("clear-buffer", vec!["formula".into()]),
],
);
fe.bind_args(KeyCode::Backspace, none, "pop-char", vec!["formula".into()]);
fe.bind_any_char("append-char", vec!["formula".into()]);
set.insert(ModeKey::FormulaEdit, Arc::new(fe));
// ── Category add ─────────────────────────────────────────────────
let mut ca = Keymap::new();
ca.bind_seq(KeyCode::Esc, none, vec![
("clear-buffer", vec!["category".into()]),
("enter-mode", vec!["category-panel".into()]),
]);
ca.bind_seq(KeyCode::Enter, none, vec![
("commit-category-add", vec![]),
("clear-buffer", vec!["category".into()]),
]);
ca.bind_seq(KeyCode::Tab, none, vec![
("commit-category-add", vec![]),
("clear-buffer", vec!["category".into()]),
]);
ca.bind_seq(
KeyCode::Esc,
none,
vec![
("clear-buffer", vec!["category".into()]),
("enter-mode", vec!["category-panel".into()]),
],
);
ca.bind_seq(
KeyCode::Enter,
none,
vec![
("commit-category-add", vec![]),
("clear-buffer", vec!["category".into()]),
],
);
ca.bind_seq(
KeyCode::Tab,
none,
vec![
("commit-category-add", vec![]),
("clear-buffer", vec!["category".into()]),
],
);
ca.bind_args(
KeyCode::Backspace,
none,
@ -784,46 +815,74 @@ impl KeymapSet {
// ── Item add ─────────────────────────────────────────────────────
let mut ia = Keymap::new();
ia.bind_seq(KeyCode::Esc, none, vec![
("clear-buffer", vec!["item".into()]),
("enter-mode", vec!["category-panel".into()]),
]);
ia.bind_seq(KeyCode::Enter, none, vec![
("commit-item-add", vec![]),
("clear-buffer", vec!["item".into()]),
]);
ia.bind_seq(KeyCode::Tab, none, vec![
("commit-item-add", vec![]),
("clear-buffer", vec!["item".into()]),
]);
ia.bind_seq(
KeyCode::Esc,
none,
vec![
("clear-buffer", vec!["item".into()]),
("enter-mode", vec!["category-panel".into()]),
],
);
ia.bind_seq(
KeyCode::Enter,
none,
vec![
("commit-item-add", vec![]),
("clear-buffer", vec!["item".into()]),
],
);
ia.bind_seq(
KeyCode::Tab,
none,
vec![
("commit-item-add", vec![]),
("clear-buffer", vec!["item".into()]),
],
);
ia.bind_args(KeyCode::Backspace, none, "pop-char", vec!["item".into()]);
ia.bind_any_char("append-char", vec!["item".into()]);
set.insert(ModeKey::ItemAdd, Arc::new(ia));
// ── Export prompt ────────────────────────────────────────────────
let mut ep = Keymap::new();
ep.bind_seq(KeyCode::Esc, none, vec![
("clear-buffer", vec!["export".into()]),
("enter-mode", vec!["normal".into()]),
]);
ep.bind_seq(KeyCode::Enter, none, vec![
("commit-export", vec![]),
("clear-buffer", vec!["export".into()]),
]);
ep.bind_seq(
KeyCode::Esc,
none,
vec![
("clear-buffer", vec!["export".into()]),
("enter-mode", vec!["normal".into()]),
],
);
ep.bind_seq(
KeyCode::Enter,
none,
vec![
("commit-export", vec![]),
("clear-buffer", vec!["export".into()]),
],
);
ep.bind_args(KeyCode::Backspace, none, "pop-char", vec!["export".into()]);
ep.bind_any_char("append-char", vec!["export".into()]);
set.insert(ModeKey::ExportPrompt, Arc::new(ep));
// ── Command mode ─────────────────────────────────────────────────
let mut cm = Keymap::new();
cm.bind_seq(KeyCode::Esc, none, vec![
("clear-buffer", vec!["command".into()]),
("enter-mode", vec!["normal".into()]),
]);
cm.bind_seq(KeyCode::Enter, none, vec![
("execute-command", vec![]),
("clear-buffer", vec!["command".into()]),
]);
cm.bind_seq(
KeyCode::Esc,
none,
vec![
("clear-buffer", vec!["command".into()]),
("enter-mode", vec!["normal".into()]),
],
);
cm.bind_seq(
KeyCode::Enter,
none,
vec![
("execute-command", vec![]),
("clear-buffer", vec!["command".into()]),
],
);
cm.bind(KeyCode::Backspace, none, "command-mode-backspace");
cm.bind_any_char("append-char", vec!["command".into()]);
set.insert(ModeKey::CommandMode, Arc::new(cm));
@ -1086,9 +1145,11 @@ mod tests {
let ks = KeymapSet::default_keymaps();
let editing = ks.mode_maps.get(&ModeKey::Editing).unwrap();
// Should have AnyChar for text input
assert!(editing
.lookup(KeyCode::Char('z'), KeyModifiers::NONE)
.is_some());
assert!(
editing
.lookup(KeyCode::Char('z'), KeyModifiers::NONE)
.is_some()
);
// Should have Esc to exit
assert!(editing.lookup(KeyCode::Esc, KeyModifiers::NONE).is_some());
}
@ -1097,9 +1158,11 @@ mod tests {
fn search_mode_has_any_char_and_esc() {
let ks = KeymapSet::default_keymaps();
let search = ks.mode_maps.get(&ModeKey::SearchMode).unwrap();
assert!(search
.lookup(KeyCode::Char('a'), KeyModifiers::NONE)
.is_some());
assert!(
search
.lookup(KeyCode::Char('a'), KeyModifiers::NONE)
.is_some()
);
assert!(search.lookup(KeyCode::Esc, KeyModifiers::NONE).is_some());
}

View File

@ -5,7 +5,7 @@
//! Coordinate pairs use `/`: `Category/Item`
//! Quoted strings supported: `"Profit = Revenue - Cost"`
use super::cmd::{default_registry, Cmd, CmdRegistry};
use super::cmd::{Cmd, CmdRegistry, default_registry};
/// Parse a line into commands using the default registry.
pub fn parse_line(line: &str) -> Result<Vec<Box<dyn Cmd>>, String> {