From 735551e950bdba08998311376068c4354ec1fe7a Mon Sep 17 00:00:00 2001 From: Li Junchen Date: Mon, 21 Oct 2024 14:58:11 +0800 Subject: [PATCH 1/2] internal: support extra_args for moon fmt --- crates/moon/src/cli/fmt.rs | 11 ++++++--- crates/moon/src/cli/tool.rs | 10 -------- crates/moon/src/cli/tool/format_and_diff.rs | 3 +++ crates/moonbuild/src/fmt.rs | 26 ++++++++++++++++----- crates/moonutil/src/common.rs | 1 + 5 files changed, 32 insertions(+), 19 deletions(-) diff --git a/crates/moon/src/cli/fmt.rs b/crates/moon/src/cli/fmt.rs index e6a16fd9..1257124e 100644 --- a/crates/moon/src/cli/fmt.rs +++ b/crates/moon/src/cli/fmt.rs @@ -16,7 +16,7 @@ // // For inquiries, you can contact us via e-mail at jichuruanjian@idea.edu.cn. -use anyhow::bail; +use moonbuild::dry_run; use mooncake::pkg::sync::auto_sync; use moonutil::{ common::{FileLock, FmtOpt, MoonbuildOpt, MooncOpt, RunMode}, @@ -36,6 +36,8 @@ pub struct FmtSubcommand { /// Sort input files #[clap(long)] pub sort_input: bool, + + pub args: Vec, } pub fn run_fmt(cli: &UniversalFlags, cmd: FmtSubcommand) -> anyhow::Result { @@ -64,7 +66,10 @@ pub fn run_fmt(cli: &UniversalFlags, cmd: FmtSubcommand) -> anyhow::Result target_dir: target_dir.clone(), sort_input: cmd.sort_input, run_mode, - fmt_opt: Some(FmtOpt { check: cmd.check }), + fmt_opt: Some(FmtOpt { + check: cmd.check, + extra_args: cmd.args, + }), build_graph: cli.build_graph, test_opt: None, args: vec![], @@ -83,7 +88,7 @@ pub fn run_fmt(cli: &UniversalFlags, cmd: FmtSubcommand) -> anyhow::Result )?; if cli.dry_run { - bail!("dry-run is not implemented for fmt"); + return dry_run::print_commands(&module, &moonc_opt, &moonbuild_opt); } moonbuild::entry::run_fmt(&module, &moonc_opt, &moonbuild_opt) } diff --git a/crates/moon/src/cli/tool.rs b/crates/moon/src/cli/tool.rs index 772a0e88..8609c33f 100644 --- a/crates/moon/src/cli/tool.rs +++ b/crates/moon/src/cli/tool.rs @@ -16,8 +16,6 @@ // // For inquiries, you can contact us via e-mail at jichuruanjian@idea.edu.cn. -use std::path::PathBuf; - pub mod embed; pub mod format_and_diff; @@ -36,14 +34,6 @@ pub enum ToolSubcommands { Embed(Embed), } -#[derive(Debug, clap::Parser)] -pub struct FormatAndWriteSubcommand { - #[clap(long)] - old: PathBuf, - #[clap(long)] - new: PathBuf, -} - pub fn run_tool(cmd: ToolSubcommand) -> anyhow::Result { match cmd.subcommand { ToolSubcommands::FormatAndDiff(subcmd) => run_format_and_diff(subcmd), diff --git a/crates/moon/src/cli/tool/format_and_diff.rs b/crates/moon/src/cli/tool/format_and_diff.rs index abd1914f..3d82465f 100644 --- a/crates/moon/src/cli/tool/format_and_diff.rs +++ b/crates/moon/src/cli/tool/format_and_diff.rs @@ -28,6 +28,8 @@ pub struct FormatAndDiffSubcommand { /// The target path of the formatted code #[clap(long)] new: PathBuf, + + pub args: Vec, } pub fn run_format_and_diff(cmd: FormatAndDiffSubcommand) -> anyhow::Result { @@ -36,6 +38,7 @@ pub fn run_format_and_diff(cmd: FormatAndDiffSubcommand) -> anyhow::Result .arg(cmd.old.to_str().unwrap()) .arg("-o") .arg(cmd.new.to_str().unwrap()) + .args(&cmd.args) .stdin(Stdio::inherit()) .stdout(Stdio::inherit()) .stderr(Stdio::inherit()) diff --git a/crates/moonbuild/src/fmt.rs b/crates/moonbuild/src/fmt.rs index 3671c518..20956fd4 100644 --- a/crates/moonbuild/src/fmt.rs +++ b/crates/moonbuild/src/fmt.rs @@ -35,8 +35,12 @@ pub fn load_moon_proj( moonc_opt: &MooncOpt, moonbuild_opt: &MoonbuildOpt, ) -> anyhow::Result { - let n2_input = gen_fmt(m, moonc_opt, moonbuild_opt); - let state = gen_n2_fmt_state(&n2_input?, moonc_opt, moonbuild_opt)?; + let n2_input = super::fmt::gen_fmt(m, moonc_opt, moonbuild_opt)?; + let state = if moonbuild_opt.fmt_opt.as_ref().unwrap().check { + super::fmt::gen_n2_fmt_check_state(&n2_input, moonc_opt, moonbuild_opt)? + } else { + super::fmt::gen_n2_fmt_state(&n2_input, moonc_opt, moonbuild_opt)? + }; Ok(state) } @@ -89,7 +93,11 @@ pub fn gen_fmt( Ok(N2FmtInput { items }) } -fn gen_inplace_fmt_command(graph: &mut n2graph::Graph, item: &FmtItem) -> (Build, FileId) { +fn gen_inplace_fmt_command( + graph: &mut n2graph::Graph, + item: &FmtItem, + moonbuild_opt: &MoonbuildOpt, +) -> (Build, FileId) { let loc = FileLoc { filename: Rc::new(PathBuf::from("format")), line: 0, @@ -119,6 +127,7 @@ fn gen_inplace_fmt_command(graph: &mut n2graph::Graph, item: &FmtItem) -> (Build .arg("-w") .arg("-o") .arg(&item.phony_out) + .args(&moonbuild_opt.fmt_opt.as_ref().unwrap().extra_args) .build(); build.cmdline = Some(command); build.desc = Some(format!("moonfmt {}", item.input)); @@ -160,7 +169,7 @@ pub fn gen_n2_fmt_state( let mut builds = vec![]; for item in input.items.iter() { - let (build, fid) = gen_inplace_fmt_command(&mut graph, item); + let (build, fid) = gen_inplace_fmt_command(&mut graph, item, moonbuild_opt); graph.add_build(build)?; builds.push(fid); } @@ -185,7 +194,11 @@ pub fn gen_n2_fmt_state( }) } -fn gen_fmt_to_command(graph: &mut n2graph::Graph, item: &FmtItem) -> (Build, FileId) { +fn gen_fmt_to_command( + graph: &mut n2graph::Graph, + item: &FmtItem, + moonbuild_opt: &MoonbuildOpt, +) -> (Build, FileId) { let loc = FileLoc { filename: Rc::new(PathBuf::from("format")), line: 0, @@ -220,6 +233,7 @@ fn gen_fmt_to_command(graph: &mut n2graph::Graph, item: &FmtItem) -> (Build, Fil .arg(&item.input) .arg("--new") .arg(&item.output) + .args(&moonbuild_opt.fmt_opt.as_ref().unwrap().extra_args) .build(); build.cmdline = Some(command); build.desc = Some(format!("moonfmt {}", item.input)); @@ -261,7 +275,7 @@ pub fn gen_n2_fmt_check_state( let mut builds = vec![]; for item in input.items.iter() { - let (bs, fs) = gen_fmt_to_command(&mut graph, item); + let (bs, fs) = gen_fmt_to_command(&mut graph, item, moonbuild_opt); graph.add_build(bs)?; builds.push(fs); } diff --git a/crates/moonutil/src/common.rs b/crates/moonutil/src/common.rs index dc1dc82b..689d3a93 100644 --- a/crates/moonutil/src/common.rs +++ b/crates/moonutil/src/common.rs @@ -371,6 +371,7 @@ pub struct TestArtifacts { #[derive(Debug, Clone, Default)] pub struct FmtOpt { pub check: bool, + pub extra_args: Vec, } #[derive(Debug, Clone)] From ab6f0baf0aa2de6a79f39b6ca2aea646c26bb9f0 Mon Sep 17 00:00:00 2001 From: Li Junchen Date: Mon, 21 Oct 2024 14:58:32 +0800 Subject: [PATCH 2/2] update tests --- crates/moon/tests/test_cases/mod.rs | 48 +++++++++++++++++++++++++++++ docs/manual-zh/src/commands.md | 6 +++- docs/manual/src/commands.md | 6 +++- 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/crates/moon/tests/test_cases/mod.rs b/crates/moon/tests/test_cases/mod.rs index 384aa964..a7a43327 100644 --- a/crates/moon/tests/test_cases/mod.rs +++ b/crates/moon/tests/test_cases/mod.rs @@ -3953,6 +3953,54 @@ fn test_moon_fmt_002() { ); } +#[test] +fn test_moon_fmt_extra_args() { + let dir = TestDir::new("moon_fmt.in"); + check( + get_stdout(&dir, ["fmt", "--dry-run", "--sort-input"]), + expect![[r#" + moonfmt ./lib/hello.mbt -w -o ./target/wasm-gc/release/format/lib/hello.mbt + moonfmt ./lib/hello_wbtest.mbt -w -o ./target/wasm-gc/release/format/lib/hello_wbtest.mbt + moonfmt ./main/main.mbt -w -o ./target/wasm-gc/release/format/main/main.mbt + "#]], + ); + check( + get_stdout(&dir, ["fmt", "--dry-run", "--sort-input", "--", "a", "b"]), + expect![[r#" + moonfmt ./lib/hello.mbt -w -o ./target/wasm-gc/release/format/lib/hello.mbt a b + moonfmt ./lib/hello_wbtest.mbt -w -o ./target/wasm-gc/release/format/lib/hello_wbtest.mbt a b + moonfmt ./main/main.mbt -w -o ./target/wasm-gc/release/format/main/main.mbt a b + "#]], + ); + check( + get_stdout(&dir, ["fmt", "--check", "--sort-input", "--dry-run"]), + expect![[r#" + moon tool format-and-diff --old ./lib/hello.mbt --new ./target/wasm-gc/release/format/lib/hello.mbt + moon tool format-and-diff --old ./lib/hello_wbtest.mbt --new ./target/wasm-gc/release/format/lib/hello_wbtest.mbt + moon tool format-and-diff --old ./main/main.mbt --new ./target/wasm-gc/release/format/main/main.mbt + "#]], + ); + check( + get_stdout( + &dir, + [ + "fmt", + "--check", + "--sort-input", + "--dry-run", + "--", + "c", + "d", + ], + ), + expect![[r#" + moon tool format-and-diff --old ./lib/hello.mbt --new ./target/wasm-gc/release/format/lib/hello.mbt c d + moon tool format-and-diff --old ./lib/hello_wbtest.mbt --new ./target/wasm-gc/release/format/lib/hello_wbtest.mbt c d + moon tool format-and-diff --old ./main/main.mbt --new ./target/wasm-gc/release/format/main/main.mbt c d + "#]], + ); +} + #[test] fn test_export_memory_name() { let dir = TestDir::new("export_memory.in"); diff --git a/docs/manual-zh/src/commands.md b/docs/manual-zh/src/commands.md index d80395d7..4e68f9ae 100644 --- a/docs/manual-zh/src/commands.md +++ b/docs/manual-zh/src/commands.md @@ -221,7 +221,11 @@ Remove the target directory Format source code -**Usage:** `moon fmt [OPTIONS]` +**Usage:** `moon fmt [OPTIONS] [ARGS]...` + +###### **Arguments:** + +* `` ###### **Options:** diff --git a/docs/manual/src/commands.md b/docs/manual/src/commands.md index d80395d7..4e68f9ae 100644 --- a/docs/manual/src/commands.md +++ b/docs/manual/src/commands.md @@ -221,7 +221,11 @@ Remove the target directory Format source code -**Usage:** `moon fmt [OPTIONS]` +**Usage:** `moon fmt [OPTIONS] [ARGS]...` + +###### **Arguments:** + +* `` ###### **Options:**