6
6
//! which is performed by the `x clippy ci` command.
7
7
//!
8
8
//! In order to prepare a build compiler for running clippy, use the
9
- //! ` check::prepare_compiler_for_check` function. That prepares a compiler and a standard library
9
+ //! [ check::prepare_compiler_for_check] function. That prepares a compiler and a standard library
10
10
//! for running Clippy. The second part (actually building Clippy) is performed inside
11
11
//! [Builder::cargo_clippy_cmd]. It would be nice if this was more explicit, and we actually had
12
12
//! to pass a prebuilt Clippy from the outside when running `cargo clippy`, but that would be
13
13
//! (as usual) a massive undertaking/refactoring.
14
14
15
- use super :: check;
16
15
use super :: compile:: { run_cargo, rustc_cargo, std_cargo} ;
17
16
use super :: tool:: { RustcPrivateCompilers , SourceType , prepare_tool_cargo} ;
18
17
use crate :: builder:: { Builder , ShouldRun } ;
@@ -377,15 +376,19 @@ impl Step for CodegenGcc {
377
376
378
377
macro_rules! lint_any {
379
378
( $(
380
- $name: ident, $path: expr, $readable_name: expr
379
+ $name: ident,
380
+ $path: expr,
381
+ $readable_name: expr,
382
+ $mode: expr
381
383
$( , lint_by_default = $lint_by_default: expr) *
382
384
;
383
385
) +) => {
384
386
$(
385
387
386
388
#[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
387
389
pub struct $name {
388
- pub target: TargetSelection ,
390
+ build_compiler: Compiler ,
391
+ target: TargetSelection ,
389
392
config: LintConfig ,
390
393
}
391
394
@@ -400,23 +403,19 @@ macro_rules! lint_any {
400
403
fn make_run( run: RunConfig <' _>) {
401
404
let config = LintConfig :: new( run. builder) ;
402
405
run. builder. ensure( $name {
406
+ build_compiler: prepare_compiler_for_check( run. builder, run. target, $mode) ,
403
407
target: run. target,
404
408
config,
405
409
} ) ;
406
410
}
407
411
408
412
fn run( self , builder: & Builder <' _>) -> Self :: Output {
409
- let build_compiler = builder . compiler ( builder . top_stage , builder . config . host_target ) ;
413
+ let build_compiler = self . build_compiler ;
410
414
let target = self . target;
411
-
412
- if !builder. download_rustc( ) {
413
- builder. ensure( check:: Rustc :: new( builder, target, vec![ ] ) ) ;
414
- } ;
415
-
416
415
let cargo = prepare_tool_cargo(
417
416
builder,
418
417
build_compiler,
419
- Mode :: ToolRustc ,
418
+ $mode ,
420
419
target,
421
420
Kind :: Clippy ,
422
421
$path,
@@ -427,13 +426,13 @@ macro_rules! lint_any {
427
426
let _guard = builder. msg(
428
427
Kind :: Clippy ,
429
428
$readable_name,
430
- Mode :: ToolRustc ,
429
+ $mode ,
431
430
build_compiler,
432
431
target,
433
432
) ;
434
433
435
434
let stringified_name = stringify!( $name) . to_lowercase( ) ;
436
- let stamp = BuildStamp :: new( & builder. cargo_out( build_compiler, Mode :: ToolRustc , target) )
435
+ let stamp = BuildStamp :: new( & builder. cargo_out( build_compiler, $mode , target) )
437
436
. with_prefix( & format!( "{}-check" , stringified_name) ) ;
438
437
439
438
run_cargo(
@@ -455,30 +454,32 @@ macro_rules! lint_any {
455
454
}
456
455
}
457
456
457
+ // Note: we use ToolTarget instead of ToolBootstrap here, to allow linting in-tree host tools
458
+ // using the in-tree Clippy. Because Mode::ToolBootstrap would always use stage 0 rustc/Clippy.
458
459
lint_any ! (
459
- Bootstrap , "src/bootstrap" , "bootstrap" ;
460
- BuildHelper , "src/build_helper" , "build_helper" ;
461
- BuildManifest , "src/tools/build-manifest" , "build-manifest" ;
462
- CargoMiri , "src/tools/miri/cargo-miri" , "cargo-miri" ;
463
- Clippy , "src/tools/clippy" , "clippy" ;
464
- CollectLicenseMetadata , "src/tools/collect-license-metadata" , "collect-license-metadata" ;
465
- Compiletest , "src/tools/compiletest" , "compiletest" ;
466
- CoverageDump , "src/tools/coverage-dump" , "coverage-dump" ;
467
- Jsondocck , "src/tools/jsondocck" , "jsondocck" ;
468
- Jsondoclint , "src/tools/jsondoclint" , "jsondoclint" ;
469
- LintDocs , "src/tools/lint-docs" , "lint-docs" ;
470
- LlvmBitcodeLinker , "src/tools/llvm-bitcode-linker" , "llvm-bitcode-linker" ;
471
- Miri , "src/tools/miri" , "miri" ;
472
- MiroptTestTools , "src/tools/miropt-test-tools" , "miropt-test-tools" ;
473
- OptDist , "src/tools/opt-dist" , "opt-dist" ;
474
- RemoteTestClient , "src/tools/remote-test-client" , "remote-test-client" ;
475
- RemoteTestServer , "src/tools/remote-test-server" , "remote-test-server" ;
476
- RustAnalyzer , "src/tools/rust-analyzer" , "rust-analyzer" ;
477
- Rustdoc , "src/librustdoc" , "clippy" ;
478
- Rustfmt , "src/tools/rustfmt" , "rustfmt" ;
479
- RustInstaller , "src/tools/rust-installer" , "rust-installer" ;
480
- Tidy , "src/tools/tidy" , "tidy" ;
481
- TestFloatParse , "src/tools/test-float-parse" , "test-float-parse" ;
460
+ Bootstrap , "src/bootstrap" , "bootstrap" , Mode :: ToolTarget ;
461
+ BuildHelper , "src/build_helper" , "build_helper" , Mode :: ToolTarget ;
462
+ BuildManifest , "src/tools/build-manifest" , "build-manifest" , Mode :: ToolTarget ;
463
+ CargoMiri , "src/tools/miri/cargo-miri" , "cargo-miri" , Mode :: ToolRustc ;
464
+ Clippy , "src/tools/clippy" , "clippy" , Mode :: ToolRustc ;
465
+ CollectLicenseMetadata , "src/tools/collect-license-metadata" , "collect-license-metadata" , Mode :: ToolTarget ;
466
+ Compiletest , "src/tools/compiletest" , "compiletest" , Mode :: ToolTarget ;
467
+ CoverageDump , "src/tools/coverage-dump" , "coverage-dump" , Mode :: ToolTarget ;
468
+ Jsondocck , "src/tools/jsondocck" , "jsondocck" , Mode :: ToolTarget ;
469
+ Jsondoclint , "src/tools/jsondoclint" , "jsondoclint" , Mode :: ToolTarget ;
470
+ LintDocs , "src/tools/lint-docs" , "lint-docs" , Mode :: ToolTarget ;
471
+ LlvmBitcodeLinker , "src/tools/llvm-bitcode-linker" , "llvm-bitcode-linker" , Mode :: ToolTarget ;
472
+ Miri , "src/tools/miri" , "miri" , Mode :: ToolRustc ;
473
+ MiroptTestTools , "src/tools/miropt-test-tools" , "miropt-test-tools" , Mode :: ToolTarget ;
474
+ OptDist , "src/tools/opt-dist" , "opt-dist" , Mode :: ToolTarget ;
475
+ RemoteTestClient , "src/tools/remote-test-client" , "remote-test-client" , Mode :: ToolTarget ;
476
+ RemoteTestServer , "src/tools/remote-test-server" , "remote-test-server" , Mode :: ToolTarget ;
477
+ RustAnalyzer , "src/tools/rust-analyzer" , "rust-analyzer" , Mode :: ToolRustc ;
478
+ Rustdoc , "src/librustdoc" , "clippy" , Mode :: ToolRustc ;
479
+ Rustfmt , "src/tools/rustfmt" , "rustfmt" , Mode :: ToolRustc ;
480
+ RustInstaller , "src/tools/rust-installer" , "rust-installer" , Mode :: ToolTarget ;
481
+ Tidy , "src/tools/tidy" , "tidy" , Mode :: ToolTarget ;
482
+ TestFloatParse , "src/tools/test-float-parse" , "test-float-parse" , Mode :: ToolStd ;
482
483
) ;
483
484
484
485
#[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
@@ -502,6 +503,7 @@ impl Step for CI {
502
503
503
504
fn run ( self , builder : & Builder < ' _ > ) -> Self :: Output {
504
505
builder. ensure ( Bootstrap {
506
+ build_compiler : prepare_compiler_for_check ( builder, self . target , Mode :: ToolTarget ) ,
505
507
target : self . target ,
506
508
config : self . config . merge ( & LintConfig {
507
509
allow : vec ! [ ] ,
0 commit comments