mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-26 23:36:30 +00:00
commit
d79984dbda
5 changed files with 35 additions and 35 deletions
|
@ -110,12 +110,12 @@ impl Exercise {
|
||||||
pub fn compile(&self) -> Result<CompiledExercise, ExerciseOutput> {
|
pub fn compile(&self) -> Result<CompiledExercise, ExerciseOutput> {
|
||||||
let cmd = match self.mode {
|
let cmd = match self.mode {
|
||||||
Mode::Compile => Command::new("rustc")
|
Mode::Compile => Command::new("rustc")
|
||||||
.args(&[self.path.to_str().unwrap(), "-o", &temp_file()])
|
.args([self.path.to_str().unwrap(), "-o", &temp_file()])
|
||||||
.args(RUSTC_COLOR_ARGS)
|
.args(RUSTC_COLOR_ARGS)
|
||||||
.args(RUSTC_EDITION_ARGS)
|
.args(RUSTC_EDITION_ARGS)
|
||||||
.output(),
|
.output(),
|
||||||
Mode::Test => Command::new("rustc")
|
Mode::Test => Command::new("rustc")
|
||||||
.args(&["--test", self.path.to_str().unwrap(), "-o", &temp_file()])
|
.args(["--test", self.path.to_str().unwrap(), "-o", &temp_file()])
|
||||||
.args(RUSTC_COLOR_ARGS)
|
.args(RUSTC_COLOR_ARGS)
|
||||||
.args(RUSTC_EDITION_ARGS)
|
.args(RUSTC_EDITION_ARGS)
|
||||||
.output(),
|
.output(),
|
||||||
|
@ -141,7 +141,7 @@ path = "{}.rs""#,
|
||||||
// compilation failure, this would silently fail. But we expect
|
// compilation failure, this would silently fail. But we expect
|
||||||
// clippy to reflect the same failure while compiling later.
|
// clippy to reflect the same failure while compiling later.
|
||||||
Command::new("rustc")
|
Command::new("rustc")
|
||||||
.args(&[self.path.to_str().unwrap(), "-o", &temp_file()])
|
.args([self.path.to_str().unwrap(), "-o", &temp_file()])
|
||||||
.args(RUSTC_COLOR_ARGS)
|
.args(RUSTC_COLOR_ARGS)
|
||||||
.args(RUSTC_EDITION_ARGS)
|
.args(RUSTC_EDITION_ARGS)
|
||||||
.output()
|
.output()
|
||||||
|
@ -151,14 +151,14 @@ path = "{}.rs""#,
|
||||||
// This is already fixed on Clippy's master branch. See this issue to track merging into Cargo:
|
// This is already fixed on Clippy's master branch. See this issue to track merging into Cargo:
|
||||||
// https://github.com/rust-lang/rust-clippy/issues/3837
|
// https://github.com/rust-lang/rust-clippy/issues/3837
|
||||||
Command::new("cargo")
|
Command::new("cargo")
|
||||||
.args(&["clean", "--manifest-path", CLIPPY_CARGO_TOML_PATH])
|
.args(["clean", "--manifest-path", CLIPPY_CARGO_TOML_PATH])
|
||||||
.args(RUSTC_COLOR_ARGS)
|
.args(RUSTC_COLOR_ARGS)
|
||||||
.output()
|
.output()
|
||||||
.expect("Failed to run 'cargo clean'");
|
.expect("Failed to run 'cargo clean'");
|
||||||
Command::new("cargo")
|
Command::new("cargo")
|
||||||
.args(&["clippy", "--manifest-path", CLIPPY_CARGO_TOML_PATH])
|
.args(["clippy", "--manifest-path", CLIPPY_CARGO_TOML_PATH])
|
||||||
.args(RUSTC_COLOR_ARGS)
|
.args(RUSTC_COLOR_ARGS)
|
||||||
.args(&["--", "-D", "warnings", "-D", "clippy::float_cmp"])
|
.args(["--", "-D", "warnings", "-D", "clippy::float_cmp"])
|
||||||
.output()
|
.output()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -183,7 +183,7 @@ path = "{}.rs""#,
|
||||||
Mode::Test => "--show-output",
|
Mode::Test => "--show-output",
|
||||||
_ => "",
|
_ => "",
|
||||||
};
|
};
|
||||||
let cmd = Command::new(&temp_file())
|
let cmd = Command::new(temp_file())
|
||||||
.arg(arg)
|
.arg(arg)
|
||||||
.output()
|
.output()
|
||||||
.expect("Failed to run 'run' command");
|
.expect("Failed to run 'run' command");
|
||||||
|
@ -260,7 +260,7 @@ impl Display for Exercise {
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn clean() {
|
fn clean() {
|
||||||
let _ignored = remove_file(&temp_file());
|
let _ignored = remove_file(temp_file());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -270,7 +270,7 @@ mod test {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_clean() {
|
fn test_clean() {
|
||||||
File::create(&temp_file()).unwrap();
|
File::create(temp_file()).unwrap();
|
||||||
let exercise = Exercise {
|
let exercise = Exercise {
|
||||||
name: String::from("example"),
|
name: String::from("example"),
|
||||||
path: PathBuf::from("tests/fixture/state/pending_exercise.rs"),
|
path: PathBuf::from("tests/fixture/state/pending_exercise.rs"),
|
||||||
|
|
12
src/main.rs
12
src/main.rs
|
@ -169,7 +169,7 @@ fn main() {
|
||||||
let filter_cond = filters
|
let filter_cond = filters
|
||||||
.split(',')
|
.split(',')
|
||||||
.filter(|f| !f.trim().is_empty())
|
.filter(|f| !f.trim().is_empty())
|
||||||
.any(|f| e.name.contains(&f) || fname.contains(&f));
|
.any(|f| e.name.contains(f) || fname.contains(f));
|
||||||
let status = if e.looks_done() {
|
let status = if e.looks_done() {
|
||||||
exercises_done += 1;
|
exercises_done += 1;
|
||||||
"Done"
|
"Done"
|
||||||
|
@ -429,7 +429,7 @@ fn watch(
|
||||||
|
|
||||||
fn rustc_exists() -> bool {
|
fn rustc_exists() -> bool {
|
||||||
Command::new("rustc")
|
Command::new("rustc")
|
||||||
.args(&["--version"])
|
.args(["--version"])
|
||||||
.stdout(Stdio::null())
|
.stdout(Stdio::null())
|
||||||
.spawn()
|
.spawn()
|
||||||
.and_then(|mut child| child.wait())
|
.and_then(|mut child| child.wait())
|
||||||
|
@ -465,7 +465,7 @@ started, here's a couple of notes about how Rustlings operates:
|
||||||
Got all that? Great! To get started, run `rustlings watch` in order to get the first
|
Got all that? Great! To get started, run `rustlings watch` in order to get the first
|
||||||
exercise. Make sure to have your editor open!"#;
|
exercise. Make sure to have your editor open!"#;
|
||||||
|
|
||||||
const FENISH_LINE: &str = r#"+----------------------------------------------------+
|
const FENISH_LINE: &str = r"+----------------------------------------------------+
|
||||||
| You made it to the Fe-nish line! |
|
| You made it to the Fe-nish line! |
|
||||||
+-------------------------- ------------------------+
|
+-------------------------- ------------------------+
|
||||||
\\/
|
\\/
|
||||||
|
@ -490,12 +490,12 @@ If you noticed any issues, please don't hesitate to report them to our repo.
|
||||||
You can also contribute your own exercises to help the greater community!
|
You can also contribute your own exercises to help the greater community!
|
||||||
|
|
||||||
Before reporting an issue or contributing, please read our guidelines:
|
Before reporting an issue or contributing, please read our guidelines:
|
||||||
https://github.com/rust-lang/rustlings/blob/main/CONTRIBUTING.md"#;
|
https://github.com/rust-lang/rustlings/blob/main/CONTRIBUTING.md";
|
||||||
|
|
||||||
const WELCOME: &str = r#" welcome to...
|
const WELCOME: &str = r" welcome to...
|
||||||
_ _ _
|
_ _ _
|
||||||
_ __ _ _ ___| |_| (_)_ __ __ _ ___
|
_ __ _ _ ___| |_| (_)_ __ __ _ ___
|
||||||
| '__| | | / __| __| | | '_ \ / _` / __|
|
| '__| | | / __| __| | | '_ \ / _` / __|
|
||||||
| | | |_| \__ \ |_| | | | | | (_| \__ \
|
| | | |_| \__ \ |_| | | | | | (_| \__ \
|
||||||
|_| \__,_|___/\__|_|_|_| |_|\__, |___/
|
|_| \__,_|___/\__|_|_|_| |_|\__, |___/
|
||||||
|___/"#;
|
|___/";
|
||||||
|
|
|
@ -86,7 +86,7 @@ impl RustAnalyzerProject {
|
||||||
|
|
||||||
println!("Determined toolchain: {}\n", &toolchain);
|
println!("Determined toolchain: {}\n", &toolchain);
|
||||||
|
|
||||||
self.sysroot_src = (std::path::Path::new(&*toolchain)
|
self.sysroot_src = (std::path::Path::new(toolchain)
|
||||||
.join("lib")
|
.join("lib")
|
||||||
.join("rustlib")
|
.join("rustlib")
|
||||||
.join("src")
|
.join("src")
|
||||||
|
|
|
@ -134,9 +134,9 @@ fn compile_and_test(
|
||||||
|
|
||||||
// Compile the given Exercise and return an object with information
|
// Compile the given Exercise and return an object with information
|
||||||
// about the state of the compilation
|
// about the state of the compilation
|
||||||
fn compile<'a, 'b>(
|
fn compile<'a>(
|
||||||
exercise: &'a Exercise,
|
exercise: &'a Exercise,
|
||||||
progress_bar: &'b ProgressBar,
|
progress_bar: &ProgressBar,
|
||||||
) -> Result<CompiledExercise<'a>, ()> {
|
) -> Result<CompiledExercise<'a>, ()> {
|
||||||
let compilation_result = exercise.compile();
|
let compilation_result = exercise.compile();
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ fn verify_fails_if_some_fails() {
|
||||||
fn run_single_compile_success() {
|
fn run_single_compile_success() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["run", "compSuccess"])
|
.args(["run", "compSuccess"])
|
||||||
.current_dir("tests/fixture/success/")
|
.current_dir("tests/fixture/success/")
|
||||||
.assert()
|
.assert()
|
||||||
.success();
|
.success();
|
||||||
|
@ -54,7 +54,7 @@ fn run_single_compile_success() {
|
||||||
fn run_single_compile_failure() {
|
fn run_single_compile_failure() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["run", "compFailure"])
|
.args(["run", "compFailure"])
|
||||||
.current_dir("tests/fixture/failure/")
|
.current_dir("tests/fixture/failure/")
|
||||||
.assert()
|
.assert()
|
||||||
.code(1);
|
.code(1);
|
||||||
|
@ -64,7 +64,7 @@ fn run_single_compile_failure() {
|
||||||
fn run_single_test_success() {
|
fn run_single_test_success() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["run", "testSuccess"])
|
.args(["run", "testSuccess"])
|
||||||
.current_dir("tests/fixture/success/")
|
.current_dir("tests/fixture/success/")
|
||||||
.assert()
|
.assert()
|
||||||
.success();
|
.success();
|
||||||
|
@ -74,7 +74,7 @@ fn run_single_test_success() {
|
||||||
fn run_single_test_failure() {
|
fn run_single_test_failure() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["run", "testFailure"])
|
.args(["run", "testFailure"])
|
||||||
.current_dir("tests/fixture/failure/")
|
.current_dir("tests/fixture/failure/")
|
||||||
.assert()
|
.assert()
|
||||||
.code(1);
|
.code(1);
|
||||||
|
@ -84,7 +84,7 @@ fn run_single_test_failure() {
|
||||||
fn run_single_test_not_passed() {
|
fn run_single_test_not_passed() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["run", "testNotPassed.rs"])
|
.args(["run", "testNotPassed.rs"])
|
||||||
.current_dir("tests/fixture/failure/")
|
.current_dir("tests/fixture/failure/")
|
||||||
.assert()
|
.assert()
|
||||||
.code(1);
|
.code(1);
|
||||||
|
@ -104,7 +104,7 @@ fn run_single_test_no_filename() {
|
||||||
fn run_single_test_no_exercise() {
|
fn run_single_test_no_exercise() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["run", "compNoExercise.rs"])
|
.args(["run", "compNoExercise.rs"])
|
||||||
.current_dir("tests/fixture/failure")
|
.current_dir("tests/fixture/failure")
|
||||||
.assert()
|
.assert()
|
||||||
.code(1);
|
.code(1);
|
||||||
|
@ -114,7 +114,7 @@ fn run_single_test_no_exercise() {
|
||||||
fn reset_single_exercise() {
|
fn reset_single_exercise() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["reset", "intro1"])
|
.args(["reset", "intro1"])
|
||||||
.assert()
|
.assert()
|
||||||
.code(0);
|
.code(0);
|
||||||
}
|
}
|
||||||
|
@ -135,7 +135,7 @@ fn reset_no_exercise() {
|
||||||
fn get_hint_for_single_test() {
|
fn get_hint_for_single_test() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["hint", "testFailure"])
|
.args(["hint", "testFailure"])
|
||||||
.current_dir("tests/fixture/failure")
|
.current_dir("tests/fixture/failure")
|
||||||
.assert()
|
.assert()
|
||||||
.code(0)
|
.code(0)
|
||||||
|
@ -171,7 +171,7 @@ fn all_exercises_require_confirmation() {
|
||||||
fn run_compile_exercise_does_not_prompt() {
|
fn run_compile_exercise_does_not_prompt() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["run", "pending_exercise"])
|
.args(["run", "pending_exercise"])
|
||||||
.current_dir("tests/fixture/state")
|
.current_dir("tests/fixture/state")
|
||||||
.assert()
|
.assert()
|
||||||
.code(0)
|
.code(0)
|
||||||
|
@ -182,7 +182,7 @@ fn run_compile_exercise_does_not_prompt() {
|
||||||
fn run_test_exercise_does_not_prompt() {
|
fn run_test_exercise_does_not_prompt() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["run", "pending_test_exercise"])
|
.args(["run", "pending_test_exercise"])
|
||||||
.current_dir("tests/fixture/state")
|
.current_dir("tests/fixture/state")
|
||||||
.assert()
|
.assert()
|
||||||
.code(0)
|
.code(0)
|
||||||
|
@ -193,7 +193,7 @@ fn run_test_exercise_does_not_prompt() {
|
||||||
fn run_single_test_success_with_output() {
|
fn run_single_test_success_with_output() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["--nocapture", "run", "testSuccess"])
|
.args(["--nocapture", "run", "testSuccess"])
|
||||||
.current_dir("tests/fixture/success/")
|
.current_dir("tests/fixture/success/")
|
||||||
.assert()
|
.assert()
|
||||||
.code(0)
|
.code(0)
|
||||||
|
@ -204,7 +204,7 @@ fn run_single_test_success_with_output() {
|
||||||
fn run_single_test_success_without_output() {
|
fn run_single_test_success_without_output() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["run", "testSuccess"])
|
.args(["run", "testSuccess"])
|
||||||
.current_dir("tests/fixture/success/")
|
.current_dir("tests/fixture/success/")
|
||||||
.assert()
|
.assert()
|
||||||
.code(0)
|
.code(0)
|
||||||
|
@ -215,7 +215,7 @@ fn run_single_test_success_without_output() {
|
||||||
fn run_rustlings_list() {
|
fn run_rustlings_list() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["list"])
|
.args(["list"])
|
||||||
.current_dir("tests/fixture/success")
|
.current_dir("tests/fixture/success")
|
||||||
.assert()
|
.assert()
|
||||||
.success();
|
.success();
|
||||||
|
@ -225,7 +225,7 @@ fn run_rustlings_list() {
|
||||||
fn run_rustlings_list_no_pending() {
|
fn run_rustlings_list_no_pending() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["list"])
|
.args(["list"])
|
||||||
.current_dir("tests/fixture/success")
|
.current_dir("tests/fixture/success")
|
||||||
.assert()
|
.assert()
|
||||||
.success()
|
.success()
|
||||||
|
@ -236,7 +236,7 @@ fn run_rustlings_list_no_pending() {
|
||||||
fn run_rustlings_list_both_done_and_pending() {
|
fn run_rustlings_list_both_done_and_pending() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["list"])
|
.args(["list"])
|
||||||
.current_dir("tests/fixture/state")
|
.current_dir("tests/fixture/state")
|
||||||
.assert()
|
.assert()
|
||||||
.success()
|
.success()
|
||||||
|
@ -247,7 +247,7 @@ fn run_rustlings_list_both_done_and_pending() {
|
||||||
fn run_rustlings_list_without_pending() {
|
fn run_rustlings_list_without_pending() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["list", "--solved"])
|
.args(["list", "--solved"])
|
||||||
.current_dir("tests/fixture/state")
|
.current_dir("tests/fixture/state")
|
||||||
.assert()
|
.assert()
|
||||||
.success()
|
.success()
|
||||||
|
@ -258,7 +258,7 @@ fn run_rustlings_list_without_pending() {
|
||||||
fn run_rustlings_list_without_done() {
|
fn run_rustlings_list_without_done() {
|
||||||
Command::cargo_bin("rustlings")
|
Command::cargo_bin("rustlings")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.args(&["list", "--unsolved"])
|
.args(["list", "--unsolved"])
|
||||||
.current_dir("tests/fixture/state")
|
.current_dir("tests/fixture/state")
|
||||||
.assert()
|
.assert()
|
||||||
.success()
|
.success()
|
||||||
|
|
Loading…
Reference in a new issue