mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-28 20:16:58 +03:00
45 lines
1.7 KiB
Rust
45 lines
1.7 KiB
Rust
use crate::utils::{ErrAction, cargo_cmd, expect_action, run_exit_on_err};
|
|
use std::process::Command;
|
|
use std::{env, fs};
|
|
|
|
#[cfg(not(windows))]
|
|
static CARGO_CLIPPY_EXE: &str = "cargo-clippy";
|
|
#[cfg(windows)]
|
|
static CARGO_CLIPPY_EXE: &str = "cargo-clippy.exe";
|
|
|
|
pub fn run<'a>(path: &str, edition: &str, args: impl Iterator<Item = &'a String>) {
|
|
let is_file = expect_action(fs::metadata(path), ErrAction::Read, path).is_file();
|
|
if is_file {
|
|
run_exit_on_err(
|
|
"cargo run",
|
|
cargo_cmd()
|
|
.args(["run", "--bin", "clippy-driver", "--"])
|
|
.args(["-L", "./target/debug"])
|
|
.args(["-Z", "no-codegen"])
|
|
.args(["--edition", edition])
|
|
.arg(path)
|
|
.args(args)
|
|
// Prevent rustc from creating `rustc-ice-*` files the console output is enough.
|
|
.env("RUSTC_ICE", "0"),
|
|
);
|
|
} else {
|
|
// Ideally this would just be `cargo run`, but the working directory needs to be
|
|
// set to clippy's directory when building, and the target project's directory
|
|
// when running clippy. `cargo` can only set a single working directory for both
|
|
// when using `run`.
|
|
run_exit_on_err("cargo build", cargo_cmd().arg("build"));
|
|
|
|
let mut exe = env::current_exe().expect("failed to get current executable name");
|
|
exe.set_file_name(CARGO_CLIPPY_EXE);
|
|
run_exit_on_err(
|
|
"cargo clippy",
|
|
Command::new(exe)
|
|
.arg("clippy")
|
|
.args(args)
|
|
// Prevent rustc from creating `rustc-ice-*` files the console output is enough.
|
|
.env("RUSTC_ICE", "0")
|
|
.current_dir(path),
|
|
);
|
|
}
|
|
}
|