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 } ;
@@ -373,15 +372,19 @@ impl Step for CodegenGcc {
373
372
374
373
macro_rules! lint_any {
375
374
( $(
376
- $name: ident, $path: expr, $readable_name: expr
375
+ $name: ident,
376
+ $path: expr,
377
+ $readable_name: expr,
378
+ $mode: expr
377
379
$( , lint_by_default = $lint_by_default: expr) *
378
380
;
379
381
) +) => {
380
382
$(
381
383
382
384
#[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
383
385
pub struct $name {
384
- pub target: TargetSelection ,
386
+ build_compiler: Compiler ,
387
+ target: TargetSelection ,
385
388
config: LintConfig ,
386
389
}
387
390
@@ -396,23 +399,19 @@ macro_rules! lint_any {
396
399
fn make_run( run: RunConfig <' _>) {
397
400
let config = LintConfig :: new( run. builder) ;
398
401
run. builder. ensure( $name {
402
+ build_compiler: prepare_compiler_for_check( run. builder, run. target, $mode) ,
399
403
target: run. target,
400
404
config,
401
405
} ) ;
402
406
}
403
407
404
408
fn run( self , builder: & Builder <' _>) -> Self :: Output {
405
- let compiler = builder . compiler ( builder . top_stage , builder . config . host_target ) ;
409
+ let build_compiler = self . build_compiler ;
406
410
let target = self . target;
407
-
408
- if !builder. download_rustc( ) {
409
- builder. ensure( check:: Rustc :: new( builder, target, vec![ ] ) ) ;
410
- } ;
411
-
412
411
let cargo = prepare_tool_cargo(
413
412
builder,
414
- compiler ,
415
- Mode :: ToolRustc ,
413
+ build_compiler ,
414
+ $mode ,
416
415
target,
417
416
Kind :: Clippy ,
418
417
$path,
@@ -422,15 +421,15 @@ macro_rules! lint_any {
422
421
423
422
let _guard = builder. msg_tool(
424
423
Kind :: Clippy ,
425
- Mode :: ToolRustc ,
424
+ $mode ,
426
425
$readable_name,
427
- compiler . stage,
428
- & compiler . host,
426
+ build_compiler . stage,
427
+ & build_compiler . host,
429
428
& target,
430
429
) ;
431
430
432
431
let stringified_name = stringify!( $name) . to_lowercase( ) ;
433
- let stamp = BuildStamp :: new( & builder. cargo_out( compiler , Mode :: ToolRustc , target) )
432
+ let stamp = BuildStamp :: new( & builder. cargo_out( build_compiler , $mode , target) )
434
433
. with_prefix( & format!( "{}-check" , stringified_name) ) ;
435
434
436
435
run_cargo(
@@ -452,30 +451,32 @@ macro_rules! lint_any {
452
451
}
453
452
}
454
453
454
+ // Note: we use ToolTarget instead of ToolBootstrap here, to allow linting in-tree host tools
455
+ // using the in-tree Clippy. Because Mode::ToolBootstrap would always use stage 0 rustc/Clippy.
455
456
lint_any ! (
456
- Bootstrap , "src/bootstrap" , "bootstrap" ;
457
- BuildHelper , "src/build_helper" , "build_helper" ;
458
- BuildManifest , "src/tools/build-manifest" , "build-manifest" ;
459
- CargoMiri , "src/tools/miri/cargo-miri" , "cargo-miri" ;
460
- Clippy , "src/tools/clippy" , "clippy" ;
461
- CollectLicenseMetadata , "src/tools/collect-license-metadata" , "collect-license-metadata" ;
462
- Compiletest , "src/tools/compiletest" , "compiletest" ;
463
- CoverageDump , "src/tools/coverage-dump" , "coverage-dump" ;
464
- Jsondocck , "src/tools/jsondocck" , "jsondocck" ;
465
- Jsondoclint , "src/tools/jsondoclint" , "jsondoclint" ;
466
- LintDocs , "src/tools/lint-docs" , "lint-docs" ;
467
- LlvmBitcodeLinker , "src/tools/llvm-bitcode-linker" , "llvm-bitcode-linker" ;
468
- Miri , "src/tools/miri" , "miri" ;
469
- MiroptTestTools , "src/tools/miropt-test-tools" , "miropt-test-tools" ;
470
- OptDist , "src/tools/opt-dist" , "opt-dist" ;
471
- RemoteTestClient , "src/tools/remote-test-client" , "remote-test-client" ;
472
- RemoteTestServer , "src/tools/remote-test-server" , "remote-test-server" ;
473
- RustAnalyzer , "src/tools/rust-analyzer" , "rust-analyzer" ;
474
- Rustdoc , "src/librustdoc" , "clippy" ;
475
- Rustfmt , "src/tools/rustfmt" , "rustfmt" ;
476
- RustInstaller , "src/tools/rust-installer" , "rust-installer" ;
477
- Tidy , "src/tools/tidy" , "tidy" ;
478
- TestFloatParse , "src/tools/test-float-parse" , "test-float-parse" ;
457
+ Bootstrap , "src/bootstrap" , "bootstrap" , Mode :: ToolTarget ;
458
+ BuildHelper , "src/build_helper" , "build_helper" , Mode :: ToolTarget ;
459
+ BuildManifest , "src/tools/build-manifest" , "build-manifest" , Mode :: ToolTarget ;
460
+ CargoMiri , "src/tools/miri/cargo-miri" , "cargo-miri" , Mode :: ToolRustc ;
461
+ Clippy , "src/tools/clippy" , "clippy" , Mode :: ToolRustc ;
462
+ CollectLicenseMetadata , "src/tools/collect-license-metadata" , "collect-license-metadata" , Mode :: ToolTarget ;
463
+ Compiletest , "src/tools/compiletest" , "compiletest" , Mode :: ToolTarget ;
464
+ CoverageDump , "src/tools/coverage-dump" , "coverage-dump" , Mode :: ToolTarget ;
465
+ Jsondocck , "src/tools/jsondocck" , "jsondocck" , Mode :: ToolTarget ;
466
+ Jsondoclint , "src/tools/jsondoclint" , "jsondoclint" , Mode :: ToolTarget ;
467
+ LintDocs , "src/tools/lint-docs" , "lint-docs" , Mode :: ToolTarget ;
468
+ LlvmBitcodeLinker , "src/tools/llvm-bitcode-linker" , "llvm-bitcode-linker" , Mode :: ToolTarget ;
469
+ Miri , "src/tools/miri" , "miri" , Mode :: ToolRustc ;
470
+ MiroptTestTools , "src/tools/miropt-test-tools" , "miropt-test-tools" , Mode :: ToolTarget ;
471
+ OptDist , "src/tools/opt-dist" , "opt-dist" , Mode :: ToolTarget ;
472
+ RemoteTestClient , "src/tools/remote-test-client" , "remote-test-client" , Mode :: ToolTarget ;
473
+ RemoteTestServer , "src/tools/remote-test-server" , "remote-test-server" , Mode :: ToolTarget ;
474
+ RustAnalyzer , "src/tools/rust-analyzer" , "rust-analyzer" , Mode :: ToolRustc ;
475
+ Rustdoc , "src/librustdoc" , "clippy" , Mode :: ToolRustc ;
476
+ Rustfmt , "src/tools/rustfmt" , "rustfmt" , Mode :: ToolRustc ;
477
+ RustInstaller , "src/tools/rust-installer" , "rust-installer" , Mode :: ToolTarget ;
478
+ Tidy , "src/tools/tidy" , "tidy" , Mode :: ToolTarget ;
479
+ TestFloatParse , "src/tools/test-float-parse" , "test-float-parse" , Mode :: ToolStd ;
479
480
) ;
480
481
481
482
#[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
@@ -499,6 +500,7 @@ impl Step for CI {
499
500
500
501
fn run ( self , builder : & Builder < ' _ > ) -> Self :: Output {
501
502
builder. ensure ( Bootstrap {
503
+ build_compiler : prepare_compiler_for_check ( builder, self . target , Mode :: ToolTarget ) ,
502
504
target : self . target ,
503
505
config : self . config . merge ( & LintConfig {
504
506
allow : vec ! [ ] ,
0 commit comments