Skip to content

Commit 87d92ee

Browse files
committed
Fix staging of linting tools
1 parent c5dac1a commit 87d92ee

File tree

1 file changed

+38
-36
lines changed

1 file changed

+38
-36
lines changed

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

Lines changed: 38 additions & 36 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};
@@ -377,15 +376,19 @@ impl Step for CodegenGcc {
377376

378377
macro_rules! lint_any {
379378
($(
380-
$name:ident, $path:expr, $readable_name:expr
379+
$name:ident,
380+
$path:expr,
381+
$readable_name:expr,
382+
$mode:expr
381383
$(,lint_by_default = $lint_by_default:expr)*
382384
;
383385
)+) => {
384386
$(
385387

386388
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
387389
pub struct $name {
388-
pub target: TargetSelection,
390+
build_compiler: Compiler,
391+
target: TargetSelection,
389392
config: LintConfig,
390393
}
391394

@@ -400,23 +403,19 @@ macro_rules! lint_any {
400403
fn make_run(run: RunConfig<'_>) {
401404
let config = LintConfig::new(run.builder);
402405
run.builder.ensure($name {
406+
build_compiler: prepare_compiler_for_check(run.builder, run.target, $mode),
403407
target: run.target,
404408
config,
405409
});
406410
}
407411

408412
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;
410414
let target = self.target;
411-
412-
if !builder.download_rustc() {
413-
builder.ensure(check::Rustc::new(builder, target, vec![]));
414-
};
415-
416415
let cargo = prepare_tool_cargo(
417416
builder,
418417
build_compiler,
419-
Mode::ToolRustc,
418+
$mode,
420419
target,
421420
Kind::Clippy,
422421
$path,
@@ -427,13 +426,13 @@ macro_rules! lint_any {
427426
let _guard = builder.msg(
428427
Kind::Clippy,
429428
$readable_name,
430-
Mode::ToolRustc,
429+
$mode,
431430
build_compiler,
432431
target,
433432
);
434433

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

439438
run_cargo(
@@ -455,30 +454,32 @@ macro_rules! lint_any {
455454
}
456455
}
457456

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.
458459
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;
482483
);
483484

484485
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
@@ -502,6 +503,7 @@ impl Step for CI {
502503

503504
fn run(self, builder: &Builder<'_>) -> Self::Output {
504505
builder.ensure(Bootstrap {
506+
build_compiler: prepare_compiler_for_check(builder, self.target, Mode::ToolTarget),
505507
target: self.target,
506508
config: self.config.merge(&LintConfig {
507509
allow: vec![],

0 commit comments

Comments
 (0)