Skip to content

Commit d9e462f

Browse files
committed
Auto merge of #12953 - stanciuadrian:fmt, r=lnicola
Run stable `fmt` & `cargo` through `rustup` `cargo test -p ide-assists` fails on Windows/x64/nightly: ```shell > rustup self update info: checking for self-updates rustup unchanged - 1.25.1 > rustup update info: syncing channel updates for 'stable-x86_64-pc-windows-msvc' info: syncing channel updates for 'nightly-x86_64-pc-windows-msvc' info: checking for self-updates stable-x86_64-pc-windows-msvc unchanged - rustc 1.62.1 (e092d0b 2022-07-16) nightly-x86_64-pc-windows-msvc unchanged - rustc 1.64.0-nightly (affe0d3 2022-08-05) info: cleaning up downloads & tmp directories > rustup show Default host: x86_64-pc-windows-msvc rustup home: C:\Users\stanc\.rustup installed toolchains -------------------- stable-x86_64-pc-windows-msvc nightly-x86_64-pc-windows-msvc (default) active toolchain ---------------- nightly-x86_64-pc-windows-msvc (default) rustc 1.64.0-nightly (affe0d3 2022-08-05) > cargo test -p ide-assists test tests::sourcegen::sourcegen_assists_docs ... FAILED failures: ---- tests::sourcegen::sourcegen_assists_docs stdout ---- thread 'tests::sourcegen::sourcegen_assists_docs' panicked at 'Failed to run rustfmt from toolchain 'stable'. Please run `rustup component add rustfmt --toolchain stable` to install it.', crates\sourcegen\src\lib.rs:141:9 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace failures: tests::sourcegen::sourcegen_assists_docs test result: FAILED. 1576 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.82s error: test failed, to rerun pass '-p ide-assists --lib' ``` After some investigation it seemed that [`cmd!`](https://github.com/rust-lang/rust-analyzer/blob/51705698bd66919435e4fcbc25d96bd7fc5583f4/crates/sourcegen/src/lib.rs#L139) didn't execute the expected (stable) rustfmt. A simple `xshell` test failed too: ```rust use xshell::{cmd, Shell}; fn main() { let sh = &Shell::new().unwrap(); sh.set_var("RUSTUP_TOOLCHAIN", "stable"); let version = cmd!(sh, "rustfmt --version").read().unwrap_or_default(); println!("{version}"); } ``` Bypassing `xshell` and using `Command` directly failed too: ```rust use std::process::{Command, Stdio}; fn main() { let child = Command::new("rustfmt") .arg("--version") .stdin(Stdio::null()) .stdout(Stdio::piped()) .env("RUSTUP_TOOLCHAIN", "stable") .spawn() .expect("failed to start"); let output = child.wait_with_output().unwrap(); let version = String::from_utf8_lossy(&output.stdout); println!("{version}"); } ``` Spawning `cargo +stable fmt version` [failed too](rust-lang/rustup#3036) with `error: no such subcommand: +stable`. Only `rustup run stable` worked fine for both `cargo` and `fmt`. Thanks to `@lnicola` for a live investigation session, hints and tips.
2 parents 5170569 + e8a9bc0 commit d9e462f

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

crates/rust-analyzer/tests/slow-tests/tidy.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,18 @@ use xshell::cmd;
1313
fn check_code_formatting() {
1414
let sh = &Shell::new().unwrap();
1515
sh.change_dir(sourcegen::project_root());
16-
sh.set_var("RUSTUP_TOOLCHAIN", "stable");
1716

18-
let out = cmd!(sh, "rustfmt --version").read().unwrap();
17+
let out = cmd!(sh, "rustup run stable rustfmt --version").read().unwrap();
1918
if !out.contains("stable") {
2019
panic!(
2120
"Failed to run rustfmt from toolchain 'stable'. \
2221
Please run `rustup component add rustfmt --toolchain stable` to install it.",
2322
)
2423
}
2524

26-
let res = cmd!(sh, "cargo fmt -- --check").run();
25+
let res = cmd!(sh, "rustup run stable cargo fmt -- --check").run();
2726
if res.is_err() {
28-
let _ = cmd!(sh, "cargo fmt").run();
27+
let _ = cmd!(sh, "rustup run stable cargo fmt").run();
2928
}
3029
res.unwrap()
3130
}

crates/sourcegen/src/lib.rs

+8-6
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ impl fmt::Display for Location {
136136
}
137137

138138
fn ensure_rustfmt(sh: &Shell) {
139-
let version = cmd!(sh, "rustfmt --version").read().unwrap_or_default();
139+
let version = cmd!(sh, "rustup run stable rustfmt --version").read().unwrap_or_default();
140140
if !version.contains("stable") {
141141
panic!(
142142
"Failed to run rustfmt from toolchain 'stable'. \
@@ -147,13 +147,15 @@ fn ensure_rustfmt(sh: &Shell) {
147147

148148
pub fn reformat(text: String) -> String {
149149
let sh = Shell::new().unwrap();
150-
sh.set_var("RUSTUP_TOOLCHAIN", "stable");
151150
ensure_rustfmt(&sh);
152151
let rustfmt_toml = project_root().join("rustfmt.toml");
153-
let mut stdout = cmd!(sh, "rustfmt --config-path {rustfmt_toml} --config fn_single_line=true")
154-
.stdin(text)
155-
.read()
156-
.unwrap();
152+
let mut stdout = cmd!(
153+
sh,
154+
"rustup run stable rustfmt --config-path {rustfmt_toml} --config fn_single_line=true"
155+
)
156+
.stdin(text)
157+
.read()
158+
.unwrap();
157159
if !stdout.ends_with('\n') {
158160
stdout.push('\n');
159161
}

0 commit comments

Comments
 (0)