Skip to content

Commit

Permalink
Auto merge of rust-lang#9039 - Serial-ATA:dev-dogfood, r=giraffate
Browse files Browse the repository at this point in the history
Add `cargo dev dogfood`

changelog: Add `cargo dev dogfood`

Part of rust-lang#5394
  • Loading branch information
bors committed Jul 1, 2022
2 parents 23db5ce + 131770d commit d4488a5
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 6 deletions.
4 changes: 3 additions & 1 deletion book/src/development/basics.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ cargo uitest
# only run UI tests starting with `test_`
TESTNAME="test_" cargo uitest
# only run dogfood tests
cargo test --test dogfood
cargo dev dogfood
```

If the output of a [UI test] differs from the expected output, you can update
Expand Down Expand Up @@ -97,6 +97,8 @@ cargo dev deprecate
cargo dev setup git-hook
# (experimental) Setup Clippy to work with IntelliJ-Rust
cargo dev setup intellij
# runs the `dogfood` tests
cargo dev dogfood
```

More about intellij command usage and reasons
Expand Down
33 changes: 33 additions & 0 deletions clippy_dev/src/dogfood.rs
Original file line number Diff line number Diff line change
@@ -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));
}
1 change: 1 addition & 0 deletions clippy_dev/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
20 changes: 19 additions & 1 deletion clippy_dev/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -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"));
},
Expand Down Expand Up @@ -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([
Expand Down
14 changes: 10 additions & 4 deletions tests/dogfood.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,16 @@ fn run_clippy_for_package(project: &str, args: &[&str]) {
.env("CARGO_INCREMENTAL", "0")
.arg("clippy")
.arg("--all-targets")
.arg("--all-features")
.arg("--")
.args(args)
.arg("-Cdebuginfo=0"); // disable debuginfo to generate less data in the target dir
.arg("--all-features");

if let Ok(dogfood_args) = std::env::var("__CLIPPY_DOGFOOD_ARGS") {
for arg in dogfood_args.split_whitespace() {
command.arg(arg);
}
}

command.arg("--").args(args);
command.arg("-Cdebuginfo=0"); // disable debuginfo to generate less data in the target dir

if cfg!(feature = "internal") {
// internal lints only exist if we build with the internal feature
Expand Down

0 comments on commit d4488a5

Please sign in to comment.