about summary refs log tree commit diff
path: root/clippy_dev/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-07-01 01:07:25 +0000
committerbors <bors@rust-lang.org>2022-07-01 01:07:25 +0000
commitd4488a520abb20a23398dd89086c8cbb089f03d3 (patch)
treee0754f3d3aaa66433ccc055a9c1f481fba94a806 /clippy_dev/src
parent23db5ce261cb8cf933d7b7988699cc1a28cee311 (diff)
parent131770d22b982998c179c1407111cf24ad12c809 (diff)
downloadrust-d4488a520abb20a23398dd89086c8cbb089f03d3.tar.gz
rust-d4488a520abb20a23398dd89086c8cbb089f03d3.zip
Auto merge of #9039 - Serial-ATA:dev-dogfood, r=giraffate
Add `cargo dev dogfood`

changelog: Add `cargo dev dogfood`

Part of #5394
Diffstat (limited to 'clippy_dev/src')
-rw-r--r--clippy_dev/src/dogfood.rs33
-rw-r--r--clippy_dev/src/lib.rs1
-rw-r--r--clippy_dev/src/main.rs20
3 files changed, 53 insertions, 1 deletions
diff --git a/clippy_dev/src/dogfood.rs b/clippy_dev/src/dogfood.rs
new file mode 100644
index 00000000000..b69e9f649ec
--- /dev/null
+++ b/clippy_dev/src/dogfood.rs
@@ -0,0 +1,33 @@
+use crate::clippy_project_root;
+use std::process::Command;
+
+/// # Panics
+///
+/// Panics if unable to run the dogfood test
+pub fn dogfood(fix: bool, allow_dirty: bool, allow_staged: bool) {
+    let mut cmd = Command::new("cargo");
+
+    cmd.current_dir(clippy_project_root())
+        .args(["test", "--test", "dogfood"])
+        .args(["--features", "internal"])
+        .args(["--", "dogfood_clippy"]);
+
+    let mut dogfood_args = Vec::new();
+    if fix {
+        dogfood_args.push("--fix");
+    }
+
+    if allow_dirty {
+        dogfood_args.push("--allow-dirty");
+    }
+
+    if allow_staged {
+        dogfood_args.push("--allow-staged");
+    }
+
+    cmd.env("__CLIPPY_DOGFOOD_ARGS", dogfood_args.join(" "));
+
+    let output = cmd.output().expect("failed to run command");
+
+    println!("{}", String::from_utf8_lossy(&output.stdout));
+}
diff --git a/clippy_dev/src/lib.rs b/clippy_dev/src/lib.rs
index 81e807cf10c..82574a8e64b 100644
--- a/clippy_dev/src/lib.rs
+++ b/clippy_dev/src/lib.rs
@@ -11,6 +11,7 @@ extern crate rustc_lexer;
 use std::path::PathBuf;
 
 pub mod bless;
+pub mod dogfood;
 pub mod fmt;
 pub mod lint;
 pub mod new_lint;
diff --git a/clippy_dev/src/main.rs b/clippy_dev/src/main.rs
index 243a901503f..a29ba2d0c85 100644
--- a/clippy_dev/src/main.rs
+++ b/clippy_dev/src/main.rs
@@ -3,7 +3,7 @@
 #![warn(rust_2018_idioms, unused_lifetimes)]
 
 use clap::{Arg, ArgAction, ArgMatches, Command, PossibleValue};
-use clippy_dev::{bless, fmt, lint, new_lint, serve, setup, update_lints};
+use clippy_dev::{bless, dogfood, fmt, lint, new_lint, serve, setup, update_lints};
 use indoc::indoc;
 
 fn main() {
@@ -13,6 +13,13 @@ fn main() {
         Some(("bless", matches)) => {
             bless::bless(matches.contains_id("ignore-timestamp"));
         },
+        Some(("dogfood", matches)) => {
+            dogfood::dogfood(
+                matches.contains_id("fix"),
+                matches.contains_id("allow-dirty"),
+                matches.contains_id("allow-staged"),
+            );
+        },
         Some(("fmt", matches)) => {
             fmt::run(matches.contains_id("check"), matches.contains_id("verbose"));
         },
@@ -104,6 +111,17 @@ fn get_clap_config() -> ArgMatches {
                     .long("ignore-timestamp")
                     .help("Include files updated before clippy was built"),
             ),
+            Command::new("dogfood").about("Runs the dogfood test").args([
+                Arg::new("fix").long("fix").help("Apply the suggestions when possible"),
+                Arg::new("allow-dirty")
+                    .long("allow-dirty")
+                    .help("Fix code even if the working directory has changes")
+                    .requires("fix"),
+                Arg::new("allow-staged")
+                    .long("allow-staged")
+                    .help("Fix code even if the working directory has staged changes")
+                    .requires("fix"),
+            ]),
             Command::new("fmt")
                 .about("Run rustfmt on all projects and tests")
                 .args([