Version Check / check-version (pull_request) Successful in 10s
The headline flow — fill a config from its template — did not work. Three bugs, each individually enough to make the tool feel unfinished: - `add_missing` was unreachable. `find_binding` returned the first match in a linear array and `edit_append` was also bound to `a`, 17 entries earlier. Bindings now resolve through one table built from the config, and `KeybindsConfig::conflicts()` reports any key bound twice instead of letting one silently shadow the other. `add_missing` moves to `<Space>`, with `A` to take every missing default at once. - Item status was ignored on write. Every writer fell back to `template_value`, so "(missing)" keys landed in the output regardless and saving was close to a copy. Unaccepted entries are now omitted. - Parse errors were swallowed, then the good file was overwritten. A malformed target opened as an empty editor and `:w` truncated it. Parse failures are now fatal, reported with context, before the TUI starts. Also: - Split "differs from the template" (ItemStatus::Overridden) from "you edited this" (ConfigItem::dirty). A real config differs from its example on nearly every line, so the old Modified flag painted the whole list orange and carried no signal. - Splice template-only entries in at their natural position instead of appending them, so a missing nested key no longer strands itself at the bottom of the tree at depth 3. - Preserve .env comments and blank lines across a save. - Header naming the output file and the template it is compared against, plus missing/changed counts. Previously nothing on screen said which files were in play or where `:w` would write. - `?` opens a two-column keybinding reference built from the user's own config, scrollable on short terminals. The status bar drops to a few contextual hints; the old one joined 11+ hints into an unwrapped line that truncated at 80 columns. - Foldable groups, which the `+ ` prefix had always implied. - Search covers values as well as keys, reports `match n/m`, and `Esc` restores the pre-search cursor. - Quitting with unsaved changes is refused; added `:q!`, `:x`, `:w <path>`. - Status messages expire after 4s instead of permanently replacing hints. - Cancelling a rename on a just-created item removes it again. - Editing a Number field with text demotes the type instead of failing obscurely at write time. - Undo-tree branches are reachable via `g-`/`g+` and reported on undo. - Poll instead of blocking, so resizes repaint; drop the unused mouse capture that was costing terminal text selection for nothing. - `--format` accepts xml, ini and properties, which were already supported. 36 tests, up from 13. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5mrbEFmwv2A4cdzbcSiS1
49 lines
785 B
TOML
49 lines
785 B
TOML
[package]
|
|
authors = ["Nils Pukropp <nils@narl.io>"]
|
|
edition = "2024"
|
|
name = "mould"
|
|
version = "0.6.0"
|
|
|
|
[[bin]]
|
|
name = "mould"
|
|
path = "src/main.rs"
|
|
|
|
[dependencies]
|
|
anyhow = "1.0.102"
|
|
crossterm = "0.29.0"
|
|
dirs = "6.0.0"
|
|
env_logger = "0.11.9"
|
|
java-properties = "2.0.0"
|
|
log = "0.4.29"
|
|
ratatui = "0.30.0"
|
|
rust-ini = "0.21.3"
|
|
serde_yaml = "0.9.34"
|
|
thiserror = "2.0.18"
|
|
tui-input = "0.15.0"
|
|
|
|
[dependencies.serde]
|
|
version = "1.0.228"
|
|
features = ["derive"]
|
|
|
|
[dependencies.serde_json]
|
|
version = "1.0.149"
|
|
features = ["preserve_order"]
|
|
|
|
[dependencies.toml]
|
|
version = "1.0.7"
|
|
features = ["preserve_order"]
|
|
|
|
[dependencies.clap]
|
|
version = "4.6.0"
|
|
features = ["derive"]
|
|
|
|
[dependencies.quick-xml]
|
|
version = "0.39.2"
|
|
features = [
|
|
"serde",
|
|
"serialize",
|
|
]
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3.27.0"
|