aboutsummaryrefslogtreecommitdiff
path: root/src/cli.rs
diff options
context:
space:
mode:
authorrottedfm <rottedfm@proton.me>2026-08-19 11:21:47 -0400
committerrottedfm <rottedfm@proton.me>2026-08-19 11:21:47 -0400
commitea0bd36167b684c0accdb5ce2b2e21b8d84aeb25 (patch)
treebe1267972b5de2f1ae592577dfabce67f1fe6e87 /src/cli.rs
parent8c0b4c53b130555f040884c1f52b90f16b23e241 (diff)
feat: implement Helix-style modal buffer under DO-178C DAL-C
The repository was an unmodified ratatui component template: no editor code, JSON5 config, and placeholder widgets. This establishes the first working baseline — `moji <file>` opens a file into a ropey rope and edits it with Helix selection-first semantics. Requirements, implementation and tests land together because they must: the traceability check rejects requirements with no implementation and tests naming requirements that do not exist, so neither half is a valid commit on its own. Package renamed to mojibake-editor (mojibake was taken on crates.io); binary is moji, library target stays mojibake. Class: New behaviour Requirements: MJB-HLR-001..019, MJB-LLR-001..205 Derived: MJB-DR-001..007 (DR-001 resolved, six open for review) Verified: cargo build; clippy --all-targets -D warnings clean; cargo test 294 passing; ./scripts/check-trace.sh 98/98/98; cargo package clean Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'src/cli.rs')
-rw-r--r--src/cli.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/cli.rs b/src/cli.rs
new file mode 100644
index 0000000..9b50bcb
--- /dev/null
+++ b/src/cli.rs
@@ -0,0 +1,54 @@
+use std::path::PathBuf;
+
+use clap::Parser;
+
+use crate::config::{get_config_dir, get_data_dir};
+
+#[derive(Parser, Debug)]
+#[command(author, version = version(), about)]
+pub struct Cli {
+ /// File to edit. A path that does not exist is created on write.
+ // MJB-LLR-111, MJB-LLR-112
+ #[arg(value_name = "FILE")]
+ pub file: Option<PathBuf>,
+
+ /// Tick rate, i.e. number of ticks per second
+ #[arg(short, long, value_name = "FLOAT", default_value_t = 4.0)]
+ pub tick_rate: f64,
+
+ /// Frame rate, i.e. number of frames per second
+ #[arg(short, long, value_name = "FLOAT", default_value_t = 60.0)]
+ pub frame_rate: f64,
+}
+
+const VERSION_MESSAGE: &str = concat!(
+ env!("CARGO_PKG_VERSION"),
+ "-",
+ env!("VERGEN_GIT_DESCRIBE"),
+ " (",
+ env!("VERGEN_BUILD_DATE"),
+ ")"
+);
+
+/// The `origin` remote of the checkout this binary was built from, emitted by
+/// `build.rs`.
+const GIT_REMOTE_URL: &str = env!("VERGEN_GIT_REMOTE_URL");
+
+pub fn version() -> String {
+ let author = clap::crate_authors!();
+
+ // let current_exe_path = PathBuf::from(clap::crate_name!()).display().to_string();
+ let config_dir_path = get_config_dir().display().to_string();
+ let data_dir_path = get_data_dir().display().to_string();
+
+ format!(
+ "\
+{VERSION_MESSAGE}
+
+Authors: {author}
+
+Repository: {GIT_REMOTE_URL}
+Config directory: {config_dir_path}
+Data directory: {data_dir_path}"
+ )
+}