diff --git a/crates/forge/src/cmd/fmt.rs b/crates/forge/src/cmd/fmt.rs index d12135e8aeb1a..db7e648d24359 100644 --- a/crates/forge/src/cmd/fmt.rs +++ b/crates/forge/src/cmd/fmt.rs @@ -127,12 +127,19 @@ impl FmtArgs { let path = source_unit.file.name.as_real(); let original = source_unit.file.src.as_str(); let formatted = forge_fmt::format_ast(gcx, source_unit, fmt_config.clone())?; + let from_stdin = path.is_none(); + + // Return formatted code when read from stdin without check or raw switch. + // + if from_stdin && !self.check && !self.raw { + return Some(Ok(formatted)); + } if original == formatted { return None; } - if self.check || path.is_none() { + if self.check || from_stdin { let summary = if self.raw { formatted } else { diff --git a/crates/forge/tests/cli/fmt.rs b/crates/forge/tests/cli/fmt.rs index d5ff4030cd162..d91607bf01368 100644 --- a/crates/forge/tests/cli/fmt.rs +++ b/crates/forge/tests/cli/fmt.rs @@ -89,3 +89,12 @@ Diff in stdin: "#]]); }); + +// Test that original is returned if read from stdin and no diff. +// +forgetest!(fmt_stdin_original, |_prj, cmd| { + cmd.args(["fmt", "-"]); + + cmd.stdin(FORMATTED.as_bytes()); + cmd.assert_success().stdout_eq(FORMATTED.as_bytes()); +});