Skip to content

Commit 3ad54a7

Browse files
committed
Allow xtask::reformat to work without rustup
1 parent 38c1d6e commit 3ad54a7

File tree

1 file changed

+26
-18
lines changed

1 file changed

+26
-18
lines changed

xtask/src/codegen.rs

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -126,27 +126,35 @@ impl fmt::Display for Location {
126126
}
127127
}
128128

129-
fn ensure_rustfmt(sh: &Shell) {
130-
let version = cmd!(sh, "rustup run stable rustfmt --version").read().unwrap_or_default();
131-
if !version.contains("stable") {
132-
panic!(
133-
"Failed to run rustfmt from toolchain 'stable'. \
134-
Please run `rustup component add rustfmt --toolchain stable` to install it.",
135-
);
136-
}
137-
}
138-
139129
fn reformat(text: String) -> String {
140130
let sh = Shell::new().unwrap();
141-
ensure_rustfmt(&sh);
142131
let rustfmt_toml = project_root().join("rustfmt.toml");
143-
let mut stdout = cmd!(
144-
sh,
145-
"rustup run stable rustfmt --config-path {rustfmt_toml} --config fn_single_line=true"
146-
)
147-
.stdin(text)
148-
.read()
149-
.unwrap();
132+
let version = cmd!(sh, "rustup run stable rustfmt --version").read().unwrap_or_default();
133+
134+
// First try explicitly requesting the stable channel via rustup in case nightly is being used by default,
135+
// then plain rustfmt in case rustup isn't being used to manage the compiler (e.g. when using Nix).
136+
let mut stdout = if !version.contains("stable") {
137+
let version = cmd!(sh, "rustfmt --version").read().unwrap_or_default();
138+
if !version.contains("stable") {
139+
panic!(
140+
"Failed to run rustfmt from toolchain 'stable'. \
141+
Please run `rustup component add rustfmt --toolchain stable` to install it.",
142+
);
143+
} else {
144+
cmd!(sh, "rustfmt --config-path {rustfmt_toml} --config fn_single_line=true")
145+
.stdin(text)
146+
.read()
147+
.unwrap()
148+
}
149+
} else {
150+
cmd!(
151+
sh,
152+
"rustup run stable rustfmt --config-path {rustfmt_toml} --config fn_single_line=true"
153+
)
154+
.stdin(text)
155+
.read()
156+
.unwrap()
157+
};
150158
if !stdout.ends_with('\n') {
151159
stdout.push('\n');
152160
}

0 commit comments

Comments
 (0)