- let target_dir = std::env::var_os("CLIPPY_DOGFOOD")
- .map(|_| {
- std::env::var_os("CARGO_MANIFEST_DIR").map_or_else(
- || {
- let mut fallback = std::ffi::OsString::new();
- fallback.push("clippy_dogfood");
- fallback
- },
- |d| {
- std::path::PathBuf::from(d)
- .join("target")
- .join("dogfood")
- .into_os_string()
- },
- )
- }).map(|p| ("CARGO_TARGET_DIR", p));
-
- let exit_status = std::process::Command::new("cargo")
- .args(&args)
- .env("RUSTC_WRAPPER", path)
- .env("CLIPPY_ARGS", clippy_args)
- .envs(target_dir)
+ fn target_dir() -> Option<(&'static str, OsString)> {
+ env::var_os("CLIPPY_DOGFOOD")
+ .map(|_| {
+ env::var_os("CARGO_MANIFEST_DIR").map_or_else(
+ || std::ffi::OsString::from("clippy_dogfood"),
+ |d| {
+ std::path::PathBuf::from(d)
+ .join("target")
+ .join("dogfood")
+ .into_os_string()
+ },
+ )
+ })
+ .map(|p| ("CARGO_TARGET_DIR", p))
+ }
+
+ fn into_std_cmd(self) -> Command {
+ let mut cmd = Command::new("cargo");
+ let clippy_args: String = self
+ .clippy_args
+ .iter()
+ .map(|arg| format!("{}__CLIPPY_HACKERY__", arg))
+ .collect();
+
+ cmd.env("RUSTC_WORKSPACE_WRAPPER", Self::path())
+ .envs(ClippyCmd::target_dir())
+ .env("CLIPPY_ARGS", clippy_args)
+ .arg(self.cargo_subcommand)
+ .args(&self.args);
+
+ cmd
+ }
+}
+
+fn process<I>(old_args: I) -> Result<(), i32>
+where
+ I: Iterator<Item = String>,
+{
+ let cmd = ClippyCmd::new(old_args);
+
+ let mut cmd = cmd.into_std_cmd();
+
+ let exit_status = cmd