about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/tools/rust-analyzer/xtask/src/codegen.rs48
1 files changed, 26 insertions, 22 deletions
diff --git a/src/tools/rust-analyzer/xtask/src/codegen.rs b/src/tools/rust-analyzer/xtask/src/codegen.rs
index 09bfed19b0e..4c7b07c5e02 100644
--- a/src/tools/rust-analyzer/xtask/src/codegen.rs
+++ b/src/tools/rust-analyzer/xtask/src/codegen.rs
@@ -126,31 +126,35 @@ impl fmt::Display for Location {
     }
 }
 
-fn rustfmt_executable(sh: &Shell) -> &str {
-    // First try explicitly requesting the stable channel via rustup in case nightly is being used by default,
-    // then plain rustfmt in case rustup isn't being used to manage the compiler (e.g. when using Nix).
-    for executable in ["rustup run stable rustfmt", "rustfmt"] {
-        let version = cmd!(sh, "{executable} --version").read().unwrap_or_default();
-        if version.contains("stable") {
-            return executable;
-        }
-    }
-
-    panic!(
-        "Failed to run rustfmt from toolchain 'stable'. \
-                 Please run `rustup component add rustfmt --toolchain stable` to install it.",
-    );
-}
-
 fn reformat(text: String) -> String {
     let sh = Shell::new().unwrap();
-    let rustfmt_exe = rustfmt_executable(&sh);
     let rustfmt_toml = project_root().join("rustfmt.toml");
-    let mut stdout =
-        cmd!(sh, "{rustfmt_exe} --config-path {rustfmt_toml} --config fn_single_line=true")
-            .stdin(text)
-            .read()
-            .unwrap();
+    let version = cmd!(sh, "rustup run stable rustfmt --version").read().unwrap_or_default();
+
+    // First try explicitly requesting the stable channel via rustup in case nightly is being used by default,
+    // then plain rustfmt in case rustup isn't being used to manage the compiler (e.g. when using Nix).
+    let mut stdout = if !version.contains("stable") {
+        let version = cmd!(sh, "rustfmt --version").read().unwrap_or_default();
+        if !version.contains("stable") {
+            panic!(
+                "Failed to run rustfmt from toolchain 'stable'. \
+                 Please run `rustup component add rustfmt --toolchain stable` to install it.",
+            );
+        } else {
+            cmd!(sh, "rustfmt --config-path {rustfmt_toml} --config fn_single_line=true")
+                .stdin(text)
+                .read()
+                .unwrap()
+        }
+    } else {
+        cmd!(
+            sh,
+            "rustup run stable rustfmt --config-path {rustfmt_toml} --config fn_single_line=true"
+        )
+        .stdin(text)
+        .read()
+        .unwrap()
+    };
     if !stdout.ends_with('\n') {
         stdout.push('\n');
     }