Skip to content

Commit aa99928

Browse files
committed
bootstrap: run full rust-analyzer tests
1 parent e2c96cc commit aa99928

File tree

1 file changed

+41
-15
lines changed
  • src/bootstrap/src/core/build_steps

1 file changed

+41
-15
lines changed

src/bootstrap/src/core/build_steps/test.rs

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -446,35 +446,61 @@ impl Step for RustAnalyzer {
446446

447447
/// Runs `cargo test` for rust-analyzer
448448
fn run(self, builder: &Builder<'_>) {
449-
let host = self.compilers.target();
449+
let tool_result = builder.ensure(tool::RustAnalyzer::from_compilers(self.compilers));
450+
let build_compiler = tool_result.build_compiler;
451+
let target = self.compilers.target();
452+
453+
let test_compiler = self.compilers.target();
450454

451-
let workspace_path = "src/tools/rust-analyzer";
452-
// until the whole RA test suite runs on `i686`, we only run
453-
// `proc-macro-srv` tests
454-
let crate_path = "src/tools/rust-analyzer/crates/proc-macro-srv";
455455
let mut cargo = tool::prepare_tool_cargo(
456456
builder,
457-
self.compilers.build_compiler(),
457+
build_compiler,
458458
Mode::ToolRustcPrivate,
459-
host,
459+
target,
460460
Kind::Test,
461-
crate_path,
461+
"src/tools/rust-analyzer",
462462
SourceType::InTree,
463463
&["in-rust-tree".to_owned()],
464464
);
465465
cargo.allow_features(tool::RustAnalyzer::ALLOW_FEATURES);
466466

467-
let dir = builder.src.join(workspace_path);
468-
// needed by rust-analyzer to find its own text fixtures, cf.
469-
// https://github.com/rust-analyzer/expect-test/issues/33
470-
cargo.env("CARGO_WORKSPACE_DIR", &dir);
467+
// N.B. it turns out _setting_ `CARGO_WORKSPACE_DIR` actually somehow breaks `expect-test`,
468+
// even though previously we actually needed to set that hack to allow `expect-test` to
469+
// correctly discover the r-a workspace instead of the outer r-l/r workspace.
471470

472-
// RA's test suite tries to write to the source directory, that can't
473-
// work in Rust CI
471+
// FIXME: RA's test suite tries to write to the source directory, that can't work in Rust CI
472+
// without properly wiring up the writable test dir.
474473
cargo.env("SKIP_SLOW_TESTS", "1");
474+
// FIXME: teach rust-analyzer to use `RUST_ANALYZER_TEST_DIR` for its test output root
475+
// directory. In the rust-lang/rust CI, we separate checkout directory vs build directory,
476+
// where the checkout directory is read-only whereas build directory (including test output
477+
// directories) is writable.
478+
let dir = testdir(builder, target);
479+
t!(fs::create_dir_all(&dir));
480+
cargo.env("RUST_ANALYZER_TEST_DIR", dir);
481+
482+
// NOTE: we need to skip `src/tools/rust-analyzer/xtask` as they seem to exercise rustup /
483+
// stable rustfmt.
484+
//
485+
// NOTE: you can only skip a specific workspace package via `--skip=...` if you *also*
486+
// specify `--workspace`.
487+
cargo.arg("--workspace");
488+
cargo.arg("--exclude=xtask");
489+
490+
let mut skip_tests = vec![];
491+
492+
// Across all platforms
493+
skip_tests.extend_from_slice(&[
494+
// FIXME: this test wants to find a `rustc`. We need to provide it with a path to staged
495+
// in-tree `rustc`, but setting `RUSTC` env var requires some reworking of bootstrap.
496+
"tests::smoke_test_real_sysroot_cargo",
497+
]);
498+
499+
let skip_tests = skip_tests.iter().map(|name| format!("--skip={name}")).collect::<Vec<_>>();
500+
let skip_tests = skip_tests.iter().map(|s| s.as_str()).collect::<Vec<_>>();
475501

476502
cargo.add_rustc_lib_path(builder);
477-
run_cargo_test(cargo, &[], &[], "rust-analyzer", host, builder);
503+
run_cargo_test(cargo, skip_tests.as_slice(), &[], "rust-analyzer", test_compiler, builder);
478504
}
479505

480506
fn metadata(&self) -> Option<StepMetadata> {

0 commit comments

Comments
 (0)