From 14d53f75c94c39d781190d9fd83a95fbcd14b38f Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Wed, 16 Sep 2020 07:09:10 -0700 Subject: [PATCH] Use rustfmt given by RUSTFMT env var (#4419) --- config_proc_macro/src/utils.rs | 9 ++++++++- src/cargo-fmt/main.rs | 14 ++++++++++++-- src/format-diff/main.rs | 9 ++++++++- 3 files changed, 28 insertions(+), 4 deletions(-) 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(input: impl Iterator, 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, @@ -205,7 +215,7 @@ fn handle_command_status(status: Result) -> i32 { } fn get_rustfmt_info(args: &[String]) -> Result { - 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, 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)