about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorJoshua Nelson <jyn514@gmail.com>2020-09-29 20:24:14 -0400
committerJoshua Nelson <jyn514@gmail.com>2020-10-26 18:58:52 -0400
commit51f8076403b69d803b1feb4624ba86a92417cdeb (patch)
tree83b312b56ea1aa850a08a93127956fd67706791b /src
parentb3246e0cb10a6a32e8f652312985d36581f77c19 (diff)
downloadrust-51f8076403b69d803b1feb4624ba86a92417cdeb.tar.gz
rust-51f8076403b69d803b1feb4624ba86a92417cdeb.zip
Add --fix support to `x.py clippy`
Diffstat (limited to 'src')
-rw-r--r--src/bootstrap/builder.rs4
-rw-r--r--src/bootstrap/check.rs28
-rw-r--r--src/bootstrap/flags.rs6
3 files changed, 24 insertions, 14 deletions
diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs
index c0578dea1cd..a2759b205d7 100644
--- a/src/bootstrap/builder.rs
+++ b/src/bootstrap/builder.rs
@@ -371,7 +371,7 @@ impl<'a> Builder<'a> {
                 tool::CargoMiri,
                 native::Lld
             ),
-            Kind::Check | Kind::Clippy | Kind::Fix | Kind::Format => describe!(
+            Kind::Check | Kind::Clippy { .. } | Kind::Fix | Kind::Format => describe!(
                 check::Std,
                 check::Rustc,
                 check::Rustdoc,
@@ -540,7 +540,7 @@ impl<'a> Builder<'a> {
         let (kind, paths) = match build.config.cmd {
             Subcommand::Build { ref paths } => (Kind::Build, &paths[..]),
             Subcommand::Check { ref paths, all_targets: _ } => (Kind::Check, &paths[..]),
-            Subcommand::Clippy { ref paths } => (Kind::Clippy, &paths[..]),
+            Subcommand::Clippy { ref paths, .. } => (Kind::Clippy, &paths[..]),
             Subcommand::Fix { ref paths } => (Kind::Fix, &paths[..]),
             Subcommand::Doc { ref paths, .. } => (Kind::Doc, &paths[..]),
             Subcommand::Test { ref paths, .. } => (Kind::Test, &paths[..]),
diff --git a/src/bootstrap/check.rs b/src/bootstrap/check.rs
index 443a490e342..c8363bbc7f7 100644
--- a/src/bootstrap/check.rs
+++ b/src/bootstrap/check.rs
@@ -7,9 +7,8 @@ use crate::tool::{prepare_tool_cargo, SourceType};
 use crate::INTERNER;
 use crate::{
     builder::{Builder, Kind, RunConfig, ShouldRun, Step},
-    Subcommand,
 };
-use crate::{Compiler, Mode};
+use crate::{Compiler, Mode, Subcommand};
 use std::path::PathBuf;
 
 #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
@@ -17,10 +16,17 @@ pub struct Std {
     pub target: TargetSelection,
 }
 
-fn args(kind: Kind) -> Vec<String> {
-    match kind {
-        Kind::Clippy => vec!["--".to_owned(), "--cap-lints".to_owned(), "warn".to_owned()],
-        _ => Vec::new(),
+/// Returns args for the subcommand itself (not for cargo)
+fn args(builder: &Builder<'_>) -> Vec<String> {
+    if let Subcommand::Clippy { fix, .. } = builder.config.cmd {
+        let mut args = vec!["--".to_owned(), "--cap-lints".to_owned(), "warn".to_owned()];
+        if fix {
+            args.insert(0, "--fix".to_owned());
+            args.insert(0, "-Zunstable-options".to_owned());
+        }
+        args
+    } else {
+        vec![]
     }
 }
 
@@ -62,7 +68,7 @@ impl Step for Std {
         run_cargo(
             builder,
             cargo,
-            args(builder.kind),
+            args(builder),
             &libstd_stamp(builder, compiler, target),
             vec![],
             true,
@@ -104,7 +110,7 @@ impl Step for Std {
             run_cargo(
                 builder,
                 cargo,
-                args(builder.kind),
+                args(builder),
                 &libstd_test_stamp(builder, compiler, target),
                 vec![],
                 true,
@@ -165,7 +171,7 @@ impl Step for Rustc {
         run_cargo(
             builder,
             cargo,
-            args(builder.kind),
+            args(builder),
             &librustc_stamp(builder, compiler, target),
             vec![],
             true,
@@ -220,7 +226,7 @@ impl Step for CodegenBackend {
         run_cargo(
             builder,
             cargo,
-            args(builder.kind),
+            args(builder),
             &codegen_backend_stamp(builder, compiler, target, backend),
             vec![],
             true,
@@ -278,7 +284,7 @@ macro_rules! tool_check_step {
                 run_cargo(
                     builder,
                     cargo,
-                    args(builder.kind),
+                    args(builder),
                     &stamp(builder, compiler, target),
                     vec![],
                     true,
diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs
index 3834e50e3fa..dbfcf4df9b4 100644
--- a/src/bootstrap/flags.rs
+++ b/src/bootstrap/flags.rs
@@ -55,6 +55,7 @@ pub enum Subcommand {
         paths: Vec<PathBuf>,
     },
     Clippy {
+        fix: bool,
         paths: Vec<PathBuf>,
     },
     Fix {
@@ -273,6 +274,9 @@ To learn more about a subcommand, run `./x.py <subcommand> -h`",
             "bench" => {
                 opts.optmulti("", "test-args", "extra arguments", "ARGS");
             }
+            "clippy" => {
+                opts.optflag("", "fix", "automatically apply lint suggestions");
+            }
             "doc" => {
                 opts.optflag("", "open", "open the docs in a browser");
             }
@@ -513,7 +517,7 @@ Arguments:
             "check" | "c" => {
                 Subcommand::Check { paths, all_targets: matches.opt_present("all-targets") }
             }
-            "clippy" => Subcommand::Clippy { paths },
+            "clippy" => Subcommand::Clippy { paths, fix: matches.opt_present("fix") },
             "fix" => Subcommand::Fix { paths },
             "test" | "t" => Subcommand::Test {
                 paths,