From 9f1a4c84ee53bcb1aacc88a1ec5fb56ef3e9ef74 Mon Sep 17 00:00:00 2001 From: PoiScript Date: Thu, 21 Dec 2023 05:18:32 +0800 Subject: [PATCH] feat(cli): fmt subcommand --- orgize-cli/src/fmt.rs | 37 +++++++++++++++++++++++++++++++++++++ orgize-cli/src/main.rs | 10 ++++++++++ 2 files changed, 47 insertions(+) create mode 100644 orgize-cli/src/fmt.rs diff --git a/orgize-cli/src/fmt.rs b/orgize-cli/src/fmt.rs new file mode 100644 index 0000000..e267486 --- /dev/null +++ b/orgize-cli/src/fmt.rs @@ -0,0 +1,37 @@ +use clap::Args; +use orgize::Org; +use std::path::PathBuf; + +use crate::diff; + +#[derive(Debug, Args)] +pub struct Command { + path: Vec, + + #[arg(short, long)] + dry_run: bool, +} + +impl Command { + pub fn run(self) -> anyhow::Result<()> { + for path in self.path { + if !path.exists() { + tracing::error!("{:?} is not existed", path); + + let input = std::fs::read_to_string(&path)?; + + let org = Org::parse(&input); + + let patches = orgize_common::formatting(&org); + + if self.dry_run { + diff::print(&input, patches); + } else { + diff::write_to_file(&input, patches, path)?; + } + } + } + + Ok(()) + } +} diff --git a/orgize-cli/src/main.rs b/orgize-cli/src/main.rs index 01dfb69..f7ca0f8 100644 --- a/orgize-cli/src/main.rs +++ b/orgize-cli/src/main.rs @@ -1,12 +1,14 @@ mod detangle; mod diff; mod execute_src_block; +mod fmt; mod tangle; use clap::{Parser, Subcommand}; use clap_verbosity_flag::{InfoLevel, LevelFilter as CLevelFilter, Verbosity}; use tracing::level_filters::LevelFilter; +/// Command line utility for org-mode files #[derive(Debug, Parser)] #[clap(name = "orgize-tools", version)] pub struct App { @@ -19,14 +21,21 @@ pub struct App { #[derive(Debug, Subcommand)] enum Command { + /// Tangle source block contents to destination files #[clap(name = "tangle")] Tangle(tangle::Command), + /// Insert tangled file contents back to source files #[clap(name = "detangle")] Detangle(detangle::Command), + /// Execute source block #[clap(name = "execute-src-block")] ExecuteSrcBlock(execute_src_block::Command), + + /// Format org-mode files + #[clap(name = "fmt")] + Format(fmt::Command), } fn main() -> anyhow::Result<()> { @@ -50,5 +59,6 @@ fn main() -> anyhow::Result<()> { Command::Tangle(cmd) => cmd.run(), Command::Detangle(cmd) => cmd.run(), Command::ExecuteSrcBlock(cmd) => cmd.run(), + Command::Format(cmd) => cmd.run(), } }