summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Wang <az0977776@yahoo.com>2023-05-01 19:10:56 -0400
committerGitHub <noreply@github.com>2023-05-01 19:10:56 -0400
commitd3fea5f15a106b024f0b4b4d71fce91843e7ed51 (patch)
tree9d896081583982e4df6aa45459b43aef71f81db8
parent8ed2cf7ef5209012f6948b55747a4142939f0930 (diff)
parentb75d2aa3f4e6c80668261fbcc6ac287e61029ca0 (diff)
Merge branch 'main' into patch-2
-rw-r--r--.all-contributorsrc27
-rw-r--r--AUTHORS.md5
-rw-r--r--exercises/smart_pointers/cow1.rs3
-rw-r--r--src/main.rs16
4 files changed, 46 insertions, 5 deletions
diff --git a/.all-contributorsrc b/.all-contributorsrc
index bdcf53c..a973b2d 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -2037,6 +2037,33 @@
"contributions": [
"content"
]
+ },
+ {
+ "login": "smlavine",
+ "name": "Sebastian LaVine",
+ "avatar_url": "https://avatars.githubusercontent.com/u/33563640?v=4",
+ "profile": "http://smlavine.com",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "akgerber",
+ "name": "Alan Gerber",
+ "avatar_url": "https://avatars.githubusercontent.com/u/201313?v=4",
+ "profile": "http://www.alangerber.us",
+ "contributions": [
+ "content"
+ ]
+ },
+ {
+ "login": "esotuvaka",
+ "name": "Eric",
+ "avatar_url": "https://avatars.githubusercontent.com/u/104941850?v=4",
+ "profile": "http://esotuvaka.github.io",
+ "contributions": [
+ "content"
+ ]
}
],
"contributorsPerLine": 8,
diff --git a/AUTHORS.md b/AUTHORS.md
index 9e757bc..8e4d0fa 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -288,6 +288,11 @@ authors.
<td align="center" valign="top" width="12.5%"><a href="https://ktheory.com/"><img src="https://avatars.githubusercontent.com/u/975?v=4?s=100" width="100px;" alt="Aaron Suggs"/><br /><sub><b>Aaron Suggs</b></sub></a><br /><a href="#content-ktheory" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/alexwh"><img src="https://avatars.githubusercontent.com/u/1723612?v=4?s=100" width="100px;" alt="Alex"/><br /><sub><b>Alex</b></sub></a><br /><a href="#content-alexwh" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/stornquist"><img src="https://avatars.githubusercontent.com/u/42915664?v=4?s=100" width="100px;" alt="Sebastian Törnquist"/><br /><sub><b>Sebastian Törnquist</b></sub></a><br /><a href="#content-stornquist" title="Content">🖋</a></td>
+ <td align="center" valign="top" width="12.5%"><a href="http://smlavine.com"><img src="https://avatars.githubusercontent.com/u/33563640?v=4?s=100" width="100px;" alt="Sebastian LaVine"/><br /><sub><b>Sebastian LaVine</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=smlavine" title="Code">💻</a></td>
+ </tr>
+ <tr>
+ <td align="center" valign="top" width="12.5%"><a href="http://www.alangerber.us"><img src="https://avatars.githubusercontent.com/u/201313?v=4?s=100" width="100px;" alt="Alan Gerber"/><br /><sub><b>Alan Gerber</b></sub></a><br /><a href="#content-akgerber" title="Content">🖋</a></td>
+ <td align="center" valign="top" width="12.5%"><a href="http://esotuvaka.github.io"><img src="https://avatars.githubusercontent.com/u/104941850?v=4?s=100" width="100px;" alt="Eric"/><br /><sub><b>Eric</b></sub></a><br /><a href="#content-esotuvaka" title="Content">🖋</a></td>
</tr>
</tbody>
</table>
diff --git a/exercises/smart_pointers/cow1.rs b/exercises/smart_pointers/cow1.rs
index 885138a..bc5b28e 100644
--- a/exercises/smart_pointers/cow1.rs
+++ b/exercises/smart_pointers/cow1.rs
@@ -52,7 +52,8 @@ mod tests {
fn owned_no_mutation() -> Result<(), &'static str> {
// We can also pass `slice` without `&` so Cow owns it directly.
// In this case no mutation occurs and thus also no clone,
- // but the result is still owned because it always was.
+ // but the result is still owned because it was never borrowed
+ // or mutated.
let slice = vec![0, 1, 2];
let mut input = Cow::from(slice);
match abs_all(&mut input) {
diff --git a/src/main.rs b/src/main.rs
index 704398e..793b826 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -298,13 +298,21 @@ fn spawn_watch_shell(
println!("Bye!");
} else if input.eq("help") {
println!("Commands available to you in watch mode:");
- println!(" hint - prints the current exercise's hint");
- println!(" clear - clears the screen");
- println!(" quit - quits watch mode");
- println!(" help - displays this help message");
+ println!(" hint - prints the current exercise's hint");
+ println!(" clear - clears the screen");
+ println!(" quit - quits watch mode");
+ println!(" !<cmd> - executes a command, like `!rustc --explain E0381`");
+ println!(" help - displays this help message");
println!();
println!("Watch mode automatically re-evaluates the current exercise");
println!("when you edit a file's contents.")
+ } else if let Some(cmd) = input.strip_prefix('!') {
+ let parts: Vec<&str> = cmd.split_whitespace().collect();
+ if parts.is_empty() {
+ println!("no command provided");
+ } else if let Err(e) = Command::new(parts[0]).args(&parts[1..]).status() {
+ println!("failed to execute command `{}`: {}", cmd, e);
+ }
} else {
println!("unknown command: {input}");
}