Skip to content

Commit 331634a

Browse files
committed
Fix staging of linting tools
1 parent 7eb1432 commit 331634a

File tree

1 file changed

+41
-39
lines changed

1 file changed

+41
-39
lines changed

src/bootstrap/src/core/build_steps/clippy.rs

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,12 @@
66
//! which is performed by the `x clippy ci` command.
77
//!
88
//! 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
1010
//! for running Clippy. The second part (actually building Clippy) is performed inside
1111
//! [Builder::cargo_clippy_cmd]. It would be nice if this was more explicit, and we actually had
1212
//! to pass a prebuilt Clippy from the outside when running `cargo clippy`, but that would be
1313
//! (as usual) a massive undertaking/refactoring.
1414
15-
use super::check;
1615
use super::compile::{run_cargo, rustc_cargo, std_cargo};
1716
use super::tool::{RustcPrivateCompilers, SourceType, prepare_tool_cargo};
1817
use crate::builder::{Builder, ShouldRun};
@@ -373,15 +372,19 @@ impl Step for CodegenGcc {
373372

374373
macro_rules! lint_any {
375374
($(
376-
$name:ident, $path:expr, $readable_name:expr
375+
$name:ident,
376+
$path:expr,
377+
$readable_name:expr,
378+
$mode:expr
377379
$(,lint_by_default = $lint_by_default:expr)*
378380
;
379381
)+) => {
380382
$(
381383

382384
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
383385
pub struct $name {
384-
pub target: TargetSelection,
386+
build_compiler: Compiler,
387+
target: TargetSelection,
385388
config: LintConfig,
386389
}
387390

@@ -396,23 +399,19 @@ macro_rules! lint_any {
396399
fn make_run(run: RunConfig<'_>) {
397400
let config = LintConfig::new(run.builder);
398401
run.builder.ensure($name {
402+
build_compiler: prepare_compiler_for_check(run.builder, run.target, $mode),
399403
target: run.target,
400404
config,
401405
});
402406
}
403407

404408
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;
406410
let target = self.target;
407-
408-
if !builder.download_rustc() {
409-
builder.ensure(check::Rustc::new(builder, target, vec![]));
410-
};
411-
412411
let cargo = prepare_tool_cargo(
413412
builder,
414-
compiler,
415-
Mode::ToolRustc,
413+
build_compiler,
414+
$mode,
416415
target,
417416
Kind::Clippy,
418417
$path,
@@ -422,15 +421,15 @@ macro_rules! lint_any {
422421

423422
let _guard = builder.msg_tool(
424423
Kind::Clippy,
425-
Mode::ToolRustc,
424+
$mode,
426425
$readable_name,
427-
compiler.stage,
428-
&compiler.host,
426+
build_compiler.stage,
427+
&build_compiler.host,
429428
&target,
430429
);
431430

432431
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))
434433
.with_prefix(&format!("{}-check", stringified_name));
435434

436435
run_cargo(
@@ -452,30 +451,32 @@ macro_rules! lint_any {
452451
}
453452
}
454453

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.
455456
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;
479480
);
480481

481482
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
@@ -499,6 +500,7 @@ impl Step for CI {
499500

500501
fn run(self, builder: &Builder<'_>) -> Self::Output {
501502
builder.ensure(Bootstrap {
503+
build_compiler: prepare_compiler_for_check(builder, self.target, Mode::ToolTarget),
502504
target: self.target,
503505
config: self.config.merge(&LintConfig {
504506
allow: vec![],

0 commit comments

Comments
 (0)