mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-26 00:00:03 +03:00
Avoid using RUSTFLAGS
to not trigger rebuilding, especially in rust-analyzer
This commit is contained in:
parent
bdf4960b6a
commit
286a455fa9
|
@ -129,13 +129,6 @@ impl<'out> CargoSubcommand<'out> {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// RUSTFLAGS="-A warnings"
|
|
||||||
#[inline]
|
|
||||||
pub fn hide_warnings(&mut self) -> &mut Self {
|
|
||||||
self.cmd.env("RUSTFLAGS", "-A warnings");
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The boolean in the returned `Result` is true if the command's exit status is success.
|
/// The boolean in the returned `Result` is true if the command's exit status is success.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn run(self, description: &str) -> Result<bool> {
|
pub fn run(self, description: &str) -> Result<bool> {
|
||||||
|
|
|
@ -78,27 +78,40 @@ pub trait RunnableExercise {
|
||||||
mut output: Option<&mut Vec<u8>>,
|
mut output: Option<&mut Vec<u8>>,
|
||||||
cmd_runner: &CmdRunner,
|
cmd_runner: &CmdRunner,
|
||||||
) -> Result<bool> {
|
) -> Result<bool> {
|
||||||
let output_is_none = if let Some(output) = output.as_deref_mut() {
|
if let Some(output) = output.as_deref_mut() {
|
||||||
output.clear();
|
output.clear();
|
||||||
false
|
|
||||||
} else {
|
|
||||||
true
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut build_cmd = cmd_runner.cargo("build", bin_name, output.as_deref_mut());
|
|
||||||
if output_is_none {
|
|
||||||
build_cmd.hide_warnings();
|
|
||||||
}
|
}
|
||||||
let build_success = build_cmd.run("cargo build …")?;
|
|
||||||
|
let build_success = cmd_runner
|
||||||
|
.cargo("build", bin_name, output.as_deref_mut())
|
||||||
|
.run("cargo build …")?;
|
||||||
if !build_success {
|
if !build_success {
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Discard the output of `cargo build` because it will be shown again by Clippy.
|
// Discard the compiler output because it will be shown again by `cargo test` or Clippy.
|
||||||
if let Some(output) = output.as_deref_mut() {
|
if let Some(output) = output.as_deref_mut() {
|
||||||
output.clear();
|
output.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.test() {
|
||||||
|
let output_is_some = output.is_some();
|
||||||
|
let mut test_cmd = cmd_runner.cargo("test", bin_name, output.as_deref_mut());
|
||||||
|
if output_is_some {
|
||||||
|
test_cmd.args(["--", "--color", "always", "--show-output"]);
|
||||||
|
}
|
||||||
|
let test_success = test_cmd.run("cargo test …")?;
|
||||||
|
if !test_success {
|
||||||
|
run_bin(bin_name, output, cmd_runner)?;
|
||||||
|
return Ok(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Discard the compiler output because it will be shown again by Clippy.
|
||||||
|
if let Some(output) = output.as_deref_mut() {
|
||||||
|
output.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let mut clippy_cmd = cmd_runner.cargo("clippy", bin_name, output.as_deref_mut());
|
let mut clippy_cmd = cmd_runner.cargo("clippy", bin_name, output.as_deref_mut());
|
||||||
|
|
||||||
// `--profile test` is required to also check code with `[cfg(test)]`.
|
// `--profile test` is required to also check code with `[cfg(test)]`.
|
||||||
|
@ -109,25 +122,9 @@ pub trait RunnableExercise {
|
||||||
}
|
}
|
||||||
|
|
||||||
let clippy_success = clippy_cmd.run("cargo clippy …")?;
|
let clippy_success = clippy_cmd.run("cargo clippy …")?;
|
||||||
if !clippy_success {
|
|
||||||
return Ok(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if !self.test() {
|
|
||||||
return run_bin(bin_name, output.as_deref_mut(), cmd_runner);
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut test_cmd = cmd_runner.cargo("test", bin_name, output.as_deref_mut());
|
|
||||||
if !output_is_none {
|
|
||||||
test_cmd.args(["--", "--color", "always", "--show-output"]);
|
|
||||||
}
|
|
||||||
// Hide warnings because they are shown by Clippy.
|
|
||||||
test_cmd.hide_warnings();
|
|
||||||
let test_success = test_cmd.run("cargo test …")?;
|
|
||||||
|
|
||||||
let run_success = run_bin(bin_name, output, cmd_runner)?;
|
let run_success = run_bin(bin_name, output, cmd_runner)?;
|
||||||
|
|
||||||
Ok(test_success && run_success)
|
Ok(clippy_success && run_success)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Compile, check and run the exercise.
|
/// Compile, check and run the exercise.
|
||||||
|
|
Loading…
Reference in a new issue