Skip to content

Add cargo dev dogfood #9039

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -95,6 +95,8 @@ cargo dev new_lint
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
21 changes: 20 additions & 1 deletion clippy_dev/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,23 @@
#![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() {
let matches = get_clap_config();

match matches.subcommand() {
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 @@ -98,6 +106,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