diff --git a/config_proc_macro/src/utils.rs b/config_proc_macro/src/utils.rs index fec6a8e4907..c6e6ad1aec8 100644 --- a/config_proc_macro/src/utils.rs +++ b/config_proc_macro/src/utils.rs @@ -1,5 +1,7 @@ use proc_macro2::TokenStream; use quote::{quote, ToTokens}; +use std::env; +use std::ffi::OsStr; pub fn fold_quote<F, I, T>(input: impl Iterator<Item = I>, f: F) -> TokenStream where @@ -25,7 +27,12 @@ pub fn debug_with_rustfmt(input: &TokenStream) { use std::io::Write; use std::process::{Command, Stdio}; - let mut child = Command::new("rustfmt") + let rustfmt_var = env::var_os("RUSTFMT"); + let rustfmt = match &rustfmt_var { + Some(rustfmt) => rustfmt, + None => OsStr::new("rustfmt"), + }; + let mut child = Command::new(rustfmt) .stdin(Stdio::piped()) .stdout(Stdio::piped()) .spawn() diff --git a/src/cargo-fmt/main.rs b/src/cargo-fmt/main.rs index 233a0f1d145..22aeceeb53b 100644 --- a/src/cargo-fmt/main.rs +++ b/src/cargo-fmt/main.rs @@ -7,6 +7,7 @@ use cargo_metadata; use std::cmp::Ordering; use std::collections::{BTreeMap, BTreeSet}; use std::env; +use std::ffi::OsStr; use std::fs; use std::hash::{Hash, Hasher}; use std::io::{self, Write}; @@ -129,6 +130,15 @@ fn execute() -> i32 { } } +fn rustfmt_command() -> Command { + let rustfmt_var = env::var_os("RUSTFMT"); + let rustfmt = match &rustfmt_var { + Some(rustfmt) => rustfmt, + None => OsStr::new("rustfmt"), + }; + Command::new(rustfmt) +} + fn convert_message_format_to_rustfmt_args( message_format: &str, rustfmt_args: &mut Vec<String>, @@ -205,7 +215,7 @@ fn handle_command_status(status: Result<i32, io::Error>) -> i32 { } fn get_rustfmt_info(args: &[String]) -> Result<i32, io::Error> { - let mut command = Command::new("rustfmt") + let mut command = rustfmt_command() .stdout(std::process::Stdio::inherit()) .args(args) .spawn() @@ -484,7 +494,7 @@ fn run_rustfmt( println!(); } - let mut command = Command::new("rustfmt") + let mut command = rustfmt_command() .stdout(stdout) .args(files) .args(&["--edition", edition]) diff --git a/src/format-diff/main.rs b/src/format-diff/main.rs index a73d2da4d03..8a8bb9356ca 100644 --- a/src/format-diff/main.rs +++ b/src/format-diff/main.rs @@ -13,6 +13,8 @@ use serde_json as json; use thiserror::Error; use std::collections::HashSet; +use std::env; +use std::ffi::OsStr; use std::io::{self, BufRead}; use std::process; @@ -94,7 +96,12 @@ fn run_rustfmt(files: &HashSet<String>, ranges: &[Range]) -> Result<(), FormatDi debug!("Files: {:?}", files); debug!("Ranges: {:?}", ranges); - let exit_status = process::Command::new("rustfmt") + let rustfmt_var = env::var_os("RUSTFMT"); + let rustfmt = match &rustfmt_var { + Some(rustfmt) => rustfmt, + None => OsStr::new("rustfmt"), + }; + let exit_status = process::Command::new(rustfmt) .args(files) .arg("--file-lines") .arg(ranges_as_json)