From fef8314d3d45aa1ec3655cd6e9a52f877da51c23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20T=C3=B6rnquist?= Date: Sat, 18 Feb 2023 18:43:34 +0100 Subject: [PATCH 01/61] fix(move_semantics2): add expected output comment You can easily get this to compile with `vec0` being `[]` and `vec1` being `[22, 44, 66, 88]` --- exercises/move_semantics/move_semantics2.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/exercises/move_semantics/move_semantics2.rs b/exercises/move_semantics/move_semantics2.rs index 64870850..68dbf021 100644 --- a/exercises/move_semantics/move_semantics2.rs +++ b/exercises/move_semantics/move_semantics2.rs @@ -2,6 +2,10 @@ // Make me compile without changing line 13 or moving line 10! // Execute `rustlings hint move_semantics2` or use the `hint` watch subcommand for a hint. +// Expected output: +// vec0 has length 3 content `[22, 44, 66]` +// vec1 has length 4 content `[22, 44, 66, 88]` + // I AM NOT DONE fn main() { From 89069f78b165e2e10d0b0a72c8d6b246bb9e9c94 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 18 Feb 2023 19:26:40 +0000 Subject: [PATCH 02/61] chore: update move_semantics4.rs' hint after #144, the signature doesn't need changing anymore --- info.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/info.toml b/info.toml index 2f424033..431b49ff 100644 --- a/info.toml +++ b/info.toml @@ -325,8 +325,7 @@ doing one step and then fixing the compiler errors that result! So the end goal is to: - get rid of the first line in main that creates the new vector - so then `vec0` doesn't exist, so we can't pass it to `fill_vec` - - we don't want to pass anything to `fill_vec`, so its signature should - reflect that it does not take any arguments + - `fill_vec` has had its signature changed, which our call should reflect - since we're not creating a new vec in `main` anymore, we need to create a new vec in `fill_vec`, similarly to the way we did in `main`""" From 1ac66f372b670f5218334c1bb0dadcb67ca5cbd4 Mon Sep 17 00:00:00 2001 From: Aaron Suggs Date: Tue, 21 Feb 2023 09:45:59 -0500 Subject: [PATCH 03/61] docs: clarify instructions on iterators5.rs I changed the sentence that referenced the imperative implementation in iterators5.rs. That implementation was already removed and replaced with `todo!()` --- exercises/iterators/iterators5.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/exercises/iterators/iterators5.rs b/exercises/iterators/iterators5.rs index 0593d123..87097956 100644 --- a/exercises/iterators/iterators5.rs +++ b/exercises/iterators/iterators5.rs @@ -2,13 +2,11 @@ // Let's define a simple model to track Rustlings exercise progress. Progress // will be modelled using a hash map. The name of the exercise is the key and // the progress is the value. Two counting functions were created to count the -// number of exercises with a given progress. These counting functions use -// imperative style for loops. Recreate this counting functionality using -// iterators. Only the two iterator methods (count_iterator and -// count_collection_iterator) need to be modified. +// number of exercises with a given progress. Recreate this counting +// functionality using iterators. Try not to use imperative loops (for, while). +// Only the two iterator methods (count_iterator and count_collection_iterator) +// need to be modified. // Execute `rustlings hint iterators5` or use the `hint` watch subcommand for a hint. -// -// Make the code compile and the tests pass. // I AM NOT DONE From ec86b60e704520289acac180cc55058431ca2bdb Mon Sep 17 00:00:00 2001 From: Sven Siegmund Date: Fri, 10 Mar 2023 17:58:03 +0100 Subject: [PATCH 04/61] improve hint for strings2, #1407 --- info.toml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/info.toml b/info.toml index 2f424033..731db504 100644 --- a/info.toml +++ b/info.toml @@ -439,7 +439,9 @@ mode = "compile" hint = """ Yes, it would be really easy to fix this by just changing the value bound to `word` to be a string slice instead of a `String`, wouldn't it?? There is a way to add one character to line -9, though, that will coerce the `String` into a string slice.""" +9, though, that will coerce the `String` into a string slice. + +Side note: If you're interested in learning about how this kind of reference conversion works, you can jump ahead in the book and read this part in the smart pointers chapter: https://doc.rust-lang.org/stable/book/ch15-02-deref.html#implicit-deref-coercions-with-functions-and-methods""" [[exercises]] name = "strings3" From 31b208248bd47069ba592b575804c37c763be6bb Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 10 Mar 2023 17:03:20 +0000 Subject: [PATCH 05/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AUTHORS.md b/AUTHORS.md index 54157fcd..312dde05 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -270,6 +270,9 @@ authors. Nidhal Messaoudi
Nidhal Messaoudi

πŸ’» Mahdi Bahrami
Mahdi Bahrami

πŸ”§ + + Nagidal
Nagidal

πŸ–‹ + From 53a8318f32037c340d96488b46b6620d4ffbcd7f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 10 Mar 2023 17:03:21 +0000 Subject: [PATCH 06/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 2b0ffeaf..0c74225f 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1902,6 +1902,15 @@ "contributions": [ "tool" ] + }, + { + "login": "Nagidal", + "name": "Nagidal", + "avatar_url": "https://avatars.githubusercontent.com/u/7075397?v=4", + "profile": "https://github.com/Nagidal", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 7bab78c66d4c0fff4b9f7ca082964353215265e3 Mon Sep 17 00:00:00 2001 From: Adam Brewer Date: Fri, 10 Mar 2023 14:13:06 -0500 Subject: [PATCH 07/61] Rename iteration var names in vec2.rs for clarity Resolves #1417 --- exercises/vecs/vecs2.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/vecs/vecs2.rs b/exercises/vecs/vecs2.rs index 5bea09a2..1ea26071 100644 --- a/exercises/vecs/vecs2.rs +++ b/exercises/vecs/vecs2.rs @@ -9,7 +9,7 @@ // I AM NOT DONE fn vec_loop(mut v: Vec) -> Vec { - for i in v.iter_mut() { + for element in v.iter_mut() { // TODO: Fill this up so that each element in the Vec `v` is // multiplied by 2. ??? @@ -20,7 +20,7 @@ fn vec_loop(mut v: Vec) -> Vec { } fn vec_map(v: &Vec) -> Vec { - v.iter().map(|num| { + v.iter().map(|element| { // TODO: Do the same thing as above - but instead of mutating the // Vec, you can just return the new number! ??? From e8b44a39e023d83df0b1ba449f58f78361ef6847 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 14 Mar 2023 10:15:21 +0000 Subject: [PATCH 08/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 312dde05..7bf26c79 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -272,6 +272,7 @@ authors. Nagidal
Nagidal

πŸ–‹ + Adam Brewer
Adam Brewer

πŸ–‹ From 06fac0e5707071b573aaf6a465448d2e9d81dc54 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 14 Mar 2023 10:15:22 +0000 Subject: [PATCH 09/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 0c74225f..4d98014a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1911,6 +1911,15 @@ "contributions": [ "content" ] + }, + { + "login": "adamhb123", + "name": "Adam Brewer", + "avatar_url": "https://avatars.githubusercontent.com/u/25161597?v=4", + "profile": "https://adabrew.com", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 5d91c86cf294e503f5580ea648f0d9140b895d7b Mon Sep 17 00:00:00 2001 From: hxztnxt Date: Thu, 16 Mar 2023 00:56:15 +0100 Subject: [PATCH 10/61] change order of references in README.md --- exercises/lifetimes/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/lifetimes/README.md b/exercises/lifetimes/README.md index 72befb3e..db1931a5 100644 --- a/exercises/lifetimes/README.md +++ b/exercises/lifetimes/README.md @@ -13,5 +13,5 @@ restrictive of their callers. ## Further information -- [Validating References with Lifetimes](https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html) - [Lifetimes (in Rust By Example)](https://doc.rust-lang.org/stable/rust-by-example/scope/lifetime.html) +- [Validating References with Lifetimes](https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html) From 568767601427cccf11ef8ea0dd20ad1ac0dbee1e Mon Sep 17 00:00:00 2001 From: Ryan Whitehouse Date: Mon, 20 Mar 2023 12:04:47 +0100 Subject: [PATCH 11/61] docs:clarify instructions on hashmaps2.rs --- exercises/hashmaps/hashmaps2.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/exercises/hashmaps/hashmaps2.rs b/exercises/hashmaps/hashmaps2.rs index 454b3e1d..6d216589 100644 --- a/exercises/hashmaps/hashmaps2.rs +++ b/exercises/hashmaps/hashmaps2.rs @@ -1,11 +1,11 @@ // hashmaps2.rs - // A basket of fruits in the form of a hash map is given. The key // represents the name of the fruit and the value represents how many -// of that particular fruit is in the basket. You have to put *MORE -// THAN 11* fruits in the basket. Three types of fruits - Apple (4), -// Mango (2) and Lychee (5) are already given in the basket. You are -// not allowed to insert any more of these fruits! +// of that particular fruit is in the basket. +// Three types of fruits - Apple (4), Mango (2) and Lychee (5) are already given in the basket. +// You must add fruit to the basket so that there is at least +// one of each kind and more than 11 in total. +// You are not allowed to insert any more of these fruits! // // Make me pass the tests! // @@ -34,8 +34,8 @@ fn fruit_basket(basket: &mut HashMap) { ]; for fruit in fruit_kinds { - // TODO: Put new fruits if not already present. Note that you - // are not allowed to put any type of fruit that's already + // TODO: Insert new fruits if they are not already present in the basket. + // Note that you are not allowed to put any type of fruit that's already // present! } } @@ -44,6 +44,7 @@ fn fruit_basket(basket: &mut HashMap) { mod tests { use super::*; + // Don't modify this function! fn get_fruit_basket() -> HashMap { let mut basket = HashMap::::new(); basket.insert(Fruit::Apple, 4); From 6e9ed48f42df78b83c1693e6f495d7a9f571a498 Mon Sep 17 00:00:00 2001 From: Eugene Date: Fri, 24 Mar 2023 16:48:11 +0100 Subject: [PATCH 12/61] cargo update for to resolve #1430 --- Cargo.lock | 280 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 170 insertions(+), 110 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3d04953d..192a4ac0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] [[package]] name = "argh" -version = "0.1.5" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7317a549bc17c5278d9e72bb6e62c6aa801ac2567048e39ebc1c194249323e" +checksum = "ab257697eb9496bf75526f0217b5ed64636a9cfafa78b8365c71bd283fcef93e" dependencies = [ "argh_derive", "argh_shared", @@ -23,22 +23,21 @@ dependencies = [ [[package]] name = "argh_derive" -version = "0.1.5" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60949c42375351e9442e354434b0cba2ac402c1237edf673cac3a4bf983b8d3c" +checksum = "b382dbd3288e053331f03399e1db106c9fb0d8562ad62cb04859ae926f324fa6" dependencies = [ "argh_shared", - "heck", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "argh_shared" -version = "0.1.5" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a61eb019cb8f415d162cb9f12130ee6bbe9168b7d953c17f4ad049e4051ca00" +checksum = "64cb94155d965e3d37ffbbe7cc5b82c3dd79dd33bd48e536f73d2cfb8d85506f" [[package]] name = "assert_cmd" @@ -54,9 +53,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "bitflags" @@ -78,17 +77,15 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "console" -version = "0.15.0" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31" +checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" dependencies = [ "encode_unicode", + "lazy_static", "libc", - "once_cell", - "regex", - "terminal_size", "unicode-width", - "winapi 0.3.9", + "windows-sys 0.42.0", ] [[package]] @@ -117,14 +114,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.15" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" +checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" dependencies = [ "cfg-if 1.0.0", "libc", "redox_syscall", - "winapi 0.3.9", + "windows-sys 0.45.0", ] [[package]] @@ -173,24 +170,15 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "glob" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "home" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654" +checksum = "747309b4b440c06d57b0b25f2aee03ee9b5e5397d288c60e21fc709bb98a7408" dependencies = [ "winapi 0.3.9", ] @@ -238,9 +226,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "kernel32-sys" @@ -266,24 +254,24 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.100" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1fa8cddc8fbbee11227ef194b5317ed014b8acbf15139bd716a18ad3fe99ec5" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "log" -version = "0.4.14" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "mio" @@ -330,9 +318,9 @@ dependencies = [ [[package]] name = "net2" -version = "0.2.37" +version = "0.2.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" +checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631" dependencies = [ "cfg-if 0.1.10", "libc", @@ -365,9 +353,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] @@ -378,12 +366,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" -[[package]] -name = "once_cell" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" - [[package]] name = "predicates" version = "1.0.8" @@ -399,52 +381,52 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.3" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7dd0fd014130206c9352efbdc92be592751b2b9274dff685348341082c6ea3d" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", - "treeline", + "termtree", ] [[package]] name = "proc-macro2" -version = "1.0.28" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" +checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "quote" -version = "1.0.9" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] [[package]] name = "regex" -version = "1.5.5" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +checksum = "cce168fea28d3e05f158bda4576cf0c844d5045bc2cc3620fa0292ed5bb5814c" dependencies = [ "aho-corasick", "memchr", @@ -453,13 +435,13 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "rustlings" -version = "5.4.0" +version = "5.4.1" dependencies = [ "argh", "assert_cmd", @@ -477,9 +459,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "same-file" @@ -492,29 +474,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.129" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1f72836d2aa753853178eda473a3b9d8e4eefdaf20523b919677e6de489f8f1" +checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.129" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57ae87ad533d9a56427558b516d0adac283614e347abf85b0dc0cbbf0a249f3" +checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.8", ] [[package]] name = "serde_json" -version = "1.0.81" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" +checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" dependencies = [ "itoa", "ryu", @@ -523,72 +505,69 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.4" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] [[package]] name = "syn" -version = "1.0.75" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f58f7e8eaa0009c5fec437aabf511bd9933e4b2d7407bd05273c01a8906ea7" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] -name = "terminal_size" -version = "0.1.17" +name = "syn" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" +checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9" dependencies = [ - "libc", - "winapi 0.3.9", + "proc-macro2", + "quote", + "unicode-ident", ] +[[package]] +name = "termtree" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" + [[package]] name = "toml" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] [[package]] -name = "treeline" -version = "0.1.0" +name = "unicode-ident" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41" - -[[package]] -name = "unicode-segmentation" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-width" -version = "0.1.8" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" - -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi 0.3.9", "winapi-util", ] @@ -635,6 +614,87 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "ws2_32-sys" version = "0.2.1" From 4160b06c6ca5bdb1a363fdb130a3a3055b9d2eac Mon Sep 17 00:00:00 2001 From: Ed Sweeney Date: Fri, 24 Mar 2023 21:52:58 -0700 Subject: [PATCH 13/61] correct comments in errors2.rs --- exercises/error_handling/errors2.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/error_handling/errors2.rs b/exercises/error_handling/errors2.rs index aad3a93f..76b8d12c 100644 --- a/exercises/error_handling/errors2.rs +++ b/exercises/error_handling/errors2.rs @@ -2,7 +2,7 @@ // Say we're writing a game where you can buy items with tokens. All items cost // 5 tokens, and whenever you purchase items there is a processing fee of 1 // token. A player of the game will type in how many items they want to buy, -// and the `total_cost` function will calculate the total number of tokens. +// and the `total_cost` function will calculate the total cost of the tokens. // Since the player typed in the quantity, though, we get it as a string-- and // they might have typed anything, not just numbers! From d5449c992e8e7633ff929737fb6df4daa5413166 Mon Sep 17 00:00:00 2001 From: Tom Kunc Date: Sat, 25 Mar 2023 20:00:28 +1100 Subject: [PATCH 14/61] feat(lifetimekata): Add info about Lifetimekata project --- exercises/lifetimes/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/exercises/lifetimes/README.md b/exercises/lifetimes/README.md index 72befb3e..dc7ca797 100644 --- a/exercises/lifetimes/README.md +++ b/exercises/lifetimes/README.md @@ -11,6 +11,11 @@ be referenced outside. Lifetimes mean that calling code of e.g. functions can be checked to make sure their arguments are valid. Lifetimes are restrictive of their callers. +If you'd like to learn more about lifetime annotations, the +[lifetimekata](https://tfpk.github.io/lifetimekata/) project +has a similar style of exercises to Rustlings, but is all about +learning to write lifetime annotations. + ## Further information - [Validating References with Lifetimes](https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html) From efd4d83731e1d7bde5a041908fb3a81d7b02dfae Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 12:48:09 +0000 Subject: [PATCH 15/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 7bf26c79..9e5f1e86 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -273,6 +273,7 @@ authors. Nagidal
Nagidal

πŸ–‹ Adam Brewer
Adam Brewer

πŸ–‹ + Eugene
Eugene

πŸ”§ From 82f72c3ec6ea111a07f5dab9c0fa05528bb3068d Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 12:48:10 +0000 Subject: [PATCH 16/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 4d98014a..ecb7436e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1920,6 +1920,15 @@ "contributions": [ "content" ] + }, + { + "login": "eugkhp", + "name": "Eugene", + "avatar_url": "https://avatars.githubusercontent.com/u/25910599?v=4", + "profile": "https://github.com/eugkhp", + "contributions": [ + "tool" + ] } ], "contributorsPerLine": 8, From c28b78fae56e8a9aa30d627039ade17dd58547bd Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 12:50:13 +0000 Subject: [PATCH 17/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 9e5f1e86..29fc14b9 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -274,6 +274,7 @@ authors. Nagidal
Nagidal

πŸ–‹ Adam Brewer
Adam Brewer

πŸ–‹ Eugene
Eugene

πŸ”§ + Ed Sweeney
Ed Sweeney

πŸ–‹ From 766b83b513afbfb0a5a5c6b481887ff7c81f8909 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 12:50:14 +0000 Subject: [PATCH 18/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index ecb7436e..69aaf78a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1929,6 +1929,15 @@ "contributions": [ "tool" ] + }, + { + "login": "navicore", + "name": "Ed Sweeney", + "avatar_url": "https://avatars.githubusercontent.com/u/110999?v=4", + "profile": "https://social.linux.pizza/@navicore", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 864e741dd87eb8df192e6272ae4187bd95f61760 Mon Sep 17 00:00:00 2001 From: liv Date: Sun, 26 Mar 2023 15:21:21 +0200 Subject: [PATCH 19/61] reword hashmaps2 a bit more --- exercises/hashmaps/hashmaps2.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/exercises/hashmaps/hashmaps2.rs b/exercises/hashmaps/hashmaps2.rs index 6d216589..a4f069a8 100644 --- a/exercises/hashmaps/hashmaps2.rs +++ b/exercises/hashmaps/hashmaps2.rs @@ -1,10 +1,12 @@ // hashmaps2.rs -// A basket of fruits in the form of a hash map is given. The key -// represents the name of the fruit and the value represents how many -// of that particular fruit is in the basket. -// Three types of fruits - Apple (4), Mango (2) and Lychee (5) are already given in the basket. -// You must add fruit to the basket so that there is at least -// one of each kind and more than 11 in total. +// We're collecting different fruits to bake a delicious fruit cake. +// For this, we have a basket, which we'll represent in the form of a hash +// map. The key represents the name of each fruit we collect and the value +// represents how many of that particular fruit we have collected. +// Three types of fruits - Apple (4), Mango (2) and Lychee (5) are already +// in the basket hash map. +// You must add fruit to the basket so that there is at least +// one of each kind and more than 11 in total - we have a lot of mouths to feed. // You are not allowed to insert any more of these fruits! // // Make me pass the tests! @@ -34,7 +36,7 @@ fn fruit_basket(basket: &mut HashMap) { ]; for fruit in fruit_kinds { - // TODO: Insert new fruits if they are not already present in the basket. + // TODO: Insert new fruits if they are not already present in the basket. // Note that you are not allowed to put any type of fruit that's already // present! } From 18a9510048e20a40507f616a0b2fcbc849881ef8 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 13:23:18 +0000 Subject: [PATCH 20/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 29fc14b9..b300f3e3 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -275,6 +275,7 @@ authors. Adam Brewer
Adam Brewer

πŸ–‹ Eugene
Eugene

πŸ”§ Ed Sweeney
Ed Sweeney

πŸ–‹ + javihernant
javihernant

πŸ–‹ From faf4d9a888dc9ada907ff293e56fa0f3786584fc Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 13:23:19 +0000 Subject: [PATCH 21/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 69aaf78a..d86e9a2a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1938,6 +1938,15 @@ "contributions": [ "content" ] + }, + { + "login": "javihernant", + "name": "javihernant", + "avatar_url": "https://avatars.githubusercontent.com/u/73640929?v=4", + "profile": "https://github.com/javihernant", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 95e51f384ef4b600f86dc08fcb234f9715c9bc44 Mon Sep 17 00:00:00 2001 From: Vegard Matthey Date: Sun, 26 Mar 2023 23:25:59 +0200 Subject: [PATCH 22/61] fixed a spelling mistake in info.toml --- info.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.toml b/info.toml index 731db504..fde77e23 100644 --- a/info.toml +++ b/info.toml @@ -844,7 +844,7 @@ Create an iterator from the slice. Transform the iterated values by applying the `capitalize_first` function. Remember to collect the iterator. Step 3. -This is surprising similar to the previous solution. Collect is very powerful +This is surprisingly similar to the previous solution. Collect is very powerful and very general. Rust just needs to know the desired type.""" [[exercises]] From db993899d3120d85e3b6e29ff6bc3eb67d1d4718 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 11:30:56 +0000 Subject: [PATCH 23/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index b300f3e3..2561f744 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -276,6 +276,7 @@ authors. Eugene
Eugene

πŸ”§ Ed Sweeney
Ed Sweeney

πŸ–‹ javihernant
javihernant

πŸ–‹ + Vegard
Vegard

πŸ–‹ From 5e43c7aba503f71b6fc3afec2c37a7f0a2946376 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 11:30:57 +0000 Subject: [PATCH 24/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index d86e9a2a..1a218e5f 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1947,6 +1947,15 @@ "contributions": [ "content" ] + }, + { + "login": "VegardMatthey", + "name": "Vegard", + "avatar_url": "https://avatars.githubusercontent.com/u/59250656?v=4", + "profile": "https://github.com/VegardMatthey", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 592694036f7329b90712ea066f5f79d2396c6f50 Mon Sep 17 00:00:00 2001 From: Ali Afsharzadeh Date: Tue, 28 Mar 2023 09:58:59 +0330 Subject: [PATCH 25/61] docs(variables): wrap mut keyword with backtick --- exercises/variables/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/variables/README.md b/exercises/variables/README.md index 11a7a78a..7964ff29 100644 --- a/exercises/variables/README.md +++ b/exercises/variables/README.md @@ -2,7 +2,7 @@ In Rust, variables are immutable by default. When a variable is immutable, once a value is bound to a name, you can’t change that value. -You can make them mutable by adding mut in front of the variable name. +You can make them mutable by adding `mut` in front of the variable name. ## Further information From 13356e16a3994ead1d399cd879797a8f05d258aa Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 10:25:46 +0000 Subject: [PATCH 26/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 2561f744..4a687d80 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -277,6 +277,7 @@ authors. Ed Sweeney
Ed Sweeney

πŸ–‹ javihernant
javihernant

πŸ–‹ Vegard
Vegard

πŸ–‹ + Ryan Whitehouse
Ryan Whitehouse

πŸ–‹ From 78f4d6636469506b03c6c6b87fc567271f863a7c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 10:25:47 +0000 Subject: [PATCH 27/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 1a218e5f..23b1c061 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1956,6 +1956,15 @@ "contributions": [ "content" ] + }, + { + "login": "ryanwhitehouse", + "name": "Ryan Whitehouse", + "avatar_url": "https://avatars.githubusercontent.com/u/13400784?v=4", + "profile": "https://github.com/ryanwhitehouse", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 99bd7181f9f3ed59f382499796cadbca7c2509a1 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 10:26:45 +0000 Subject: [PATCH 28/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 4a687d80..48fbc53b 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -278,6 +278,7 @@ authors. javihernant
javihernant

πŸ–‹ Vegard
Vegard

πŸ–‹ Ryan Whitehouse
Ryan Whitehouse

πŸ–‹ + Ali Afsharzadeh
Ali Afsharzadeh

πŸ–‹ From 347462d87ed021cd62485404731a454a0d890193 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 10:26:46 +0000 Subject: [PATCH 29/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 23b1c061..9323238b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1965,6 +1965,15 @@ "contributions": [ "content" ] + }, + { + "login": "guoard", + "name": "Ali Afsharzadeh", + "avatar_url": "https://avatars.githubusercontent.com/u/65511355?v=4", + "profile": "https://github.com/guoard", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 1db646474e84fcf1c87118efb9ef0f6c3a96512c Mon Sep 17 00:00:00 2001 From: Ali Afsharzadeh Date: Wed, 29 Mar 2023 21:13:27 +0330 Subject: [PATCH 30/61] docs(error_handling): resolve markdown linter warnings --- exercises/error_handling/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/exercises/error_handling/README.md b/exercises/error_handling/README.md index 5255ace9..3b21f2b7 100644 --- a/exercises/error_handling/README.md +++ b/exercises/error_handling/README.md @@ -1,5 +1,6 @@ # Error handling -Most errors aren’t serious enough to require the program to stop entirely. + +Most errors aren’t serious enough to require the program to stop entirely. Sometimes, when a function fails, it’s for a reason that you can easily interpret and respond to. For example, if you try to open a file and that operation fails because the file doesn’t exist, you might want to create the file instead of terminating the process. From 382e16eb7ea66cddc4860f4b19453b031a2a8a8a Mon Sep 17 00:00:00 2001 From: Ali Afsharzadeh Date: Thu, 30 Mar 2023 19:53:22 +0330 Subject: [PATCH 31/61] feat(docs): add markdown linter for exercises README.md files --- .github/workflows/lint.yml | 18 ++++++++++++++++++ .markdownlint.yml | 2 ++ exercises/conversions/README.md | 4 +++- exercises/hashmaps/README.md | 3 ++- exercises/lifetimes/README.md | 12 ++++++------ exercises/macros/README.md | 2 +- exercises/options/README.md | 3 ++- exercises/smart_pointers/README.md | 1 + exercises/traits/README.md | 2 +- 9 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/lint.yml create mode 100644 .markdownlint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..67339d1b --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,18 @@ +name: Lint + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: DavidAnson/markdownlint-cli2-action@v9 + with: + globs: "exercises/**/*.md" diff --git a/.markdownlint.yml b/.markdownlint.yml new file mode 100644 index 00000000..d5f7e391 --- /dev/null +++ b/.markdownlint.yml @@ -0,0 +1,2 @@ +# MD013/line-length Line length, Expected: 80 +MD013: false diff --git a/exercises/conversions/README.md b/exercises/conversions/README.md index 8d7da93e..619a78c5 100644 --- a/exercises/conversions/README.md +++ b/exercises/conversions/README.md @@ -6,6 +6,7 @@ The simplest form of type conversion is a type cast expression. It is denoted wi Rust also offers traits that facilitate type conversions upon implementation. These traits can be found under the [`convert`](https://doc.rust-lang.org/std/convert/index.html) module. The traits are the following: + - `From` and `Into` covered in [`from_into`](from_into.rs) - `TryFrom` and `TryInto` covered in [`try_from_into`](try_from_into.rs) - `AsRef` and `AsMut` covered in [`as_ref_mut`](as_ref_mut.rs) @@ -17,5 +18,6 @@ These should be the main ways ***within the standard library*** to convert data ## Further information These are not directly covered in the book, but the standard library has a great documentation for it. + - [conversions](https://doc.rust-lang.org/std/convert/index.html) -- [`FromStr` trait](https://doc.rust-lang.org/std/str/trait.FromStr.html) \ No newline at end of file +- [`FromStr` trait](https://doc.rust-lang.org/std/str/trait.FromStr.html) diff --git a/exercises/hashmaps/README.md b/exercises/hashmaps/README.md index 30471cf9..80ec1441 100644 --- a/exercises/hashmaps/README.md +++ b/exercises/hashmaps/README.md @@ -1,6 +1,7 @@ # Hashmaps + A *hash map* allows you to associate a value with a particular key. -You may also know this by the names [*unordered map* in C++](https://en.cppreference.com/w/cpp/container/unordered_map), +You may also know this by the names [*unordered map* in C++](https://en.cppreference.com/w/cpp/container/unordered_map), [*dictionary* in Python](https://docs.python.org/3/tutorial/datastructures.html#dictionaries) or an *associative array* in other languages. This is the other data structure that we've been talking about before, when diff --git a/exercises/lifetimes/README.md b/exercises/lifetimes/README.md index 74a4a786..91373f73 100644 --- a/exercises/lifetimes/README.md +++ b/exercises/lifetimes/README.md @@ -3,17 +3,17 @@ Lifetimes tell the compiler how to check whether references live long enough to be valid in any given situation. For example lifetimes say "make sure parameter 'a' lives as long as parameter 'b' so that the return -value is valid". +value is valid". -They are only necessary on borrows, i.e. references, +They are only necessary on borrows, i.e. references, since copied parameters or moves are owned in their scope and cannot be referenced outside. Lifetimes mean that calling code of e.g. functions -can be checked to make sure their arguments are valid. Lifetimes are +can be checked to make sure their arguments are valid. Lifetimes are restrictive of their callers. -If you'd like to learn more about lifetime annotations, the -[lifetimekata](https://tfpk.github.io/lifetimekata/) project -has a similar style of exercises to Rustlings, but is all about +If you'd like to learn more about lifetime annotations, the +[lifetimekata](https://tfpk.github.io/lifetimekata/) project +has a similar style of exercises to Rustlings, but is all about learning to write lifetime annotations. ## Further information diff --git a/exercises/macros/README.md b/exercises/macros/README.md index e34bc3a8..337816d6 100644 --- a/exercises/macros/README.md +++ b/exercises/macros/README.md @@ -4,7 +4,7 @@ Rust's macro system is very powerful, but also kind of difficult to wrap your head around. We're not going to teach you how to write your own fully-featured macros. Instead, we'll show you how to use and create them. -If you'd like to learn more about writing your own macros, the +If you'd like to learn more about writing your own macros, the [macrokata](https://github.com/tfpk/macrokata) project has a similar style of exercises to Rustlings, but is all about learning to write Macros. diff --git a/exercises/options/README.md b/exercises/options/README.md index 6140a167..bdd33749 100644 --- a/exercises/options/README.md +++ b/exercises/options/README.md @@ -1,7 +1,8 @@ # Options -Type Option represents an optional value: every Option is either Some and contains a value, or None, and does not. +Type Option represents an optional value: every Option is either Some and contains a value, or None, and does not. Option types are very common in Rust code, as they have a number of uses: + - Initial values - Return values for functions that are not defined over their entire input range (partial functions) - Return value for otherwise reporting simple errors, where None is returned on error diff --git a/exercises/smart_pointers/README.md b/exercises/smart_pointers/README.md index c517ae31..d56d2b62 100644 --- a/exercises/smart_pointers/README.md +++ b/exercises/smart_pointers/README.md @@ -1,4 +1,5 @@ # Smart Pointers + In Rust, smart pointers are variables that contain an address in memory and reference some other data, but they also have additional metadata and capabilities. Smart pointers in Rust often own the data they point to, while references only borrow data. diff --git a/exercises/traits/README.md b/exercises/traits/README.md index de67acd0..ac87c64e 100644 --- a/exercises/traits/README.md +++ b/exercises/traits/README.md @@ -7,13 +7,13 @@ Data types can implement traits. To do so, the methods making up the trait are d In this way, traits are somewhat similar to Java interfaces and C++ abstract classes. Some additional common Rust traits include: + - `Clone` (the `clone` method) - `Display` (which allows formatted display via `{}`) - `Debug` (which allows formatted display via `{:?}`) Because traits indicate shared behavior between data types, they are useful when writing generics. - ## Further information - [Traits](https://doc.rust-lang.org/book/ch10-02-traits.html) From 8c4a7bea5fc9a4af6cb59dcb745aafa2d85bd2b9 Mon Sep 17 00:00:00 2001 From: Keogami <41939011+keogami@users.noreply.github.com> Date: Fri, 31 Mar 2023 02:26:23 +0530 Subject: [PATCH 32/61] docs(README.md): split quick installation commands into two separate code blocks Having the two quick installation commands in two separate code blocks makes it easy to copy them through the github's `copy to clipboard` button --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d16b7385..be470fdb 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,10 @@ Just run: ```bash curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh | bash -# Or if you want it to be installed to a different path: +``` +Or if you want it to be installed to a different path: + +```bash curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh | bash -s mypath/ ``` From 22bb662d3eb9efd081a5603640628bdeebab97b9 Mon Sep 17 00:00:00 2001 From: Alexandre ESSE Date: Fri, 31 Mar 2023 11:20:11 +0200 Subject: [PATCH 33/61] fix(exercises): remove trailing spaces --- exercises/hashmaps/README.md | 2 +- exercises/lifetimes/README.md | 12 ++++++------ exercises/macros/README.md | 2 +- exercises/options/README.md | 2 +- exercises/threads/threads1.rs | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/exercises/hashmaps/README.md b/exercises/hashmaps/README.md index 30471cf9..6afa04b2 100644 --- a/exercises/hashmaps/README.md +++ b/exercises/hashmaps/README.md @@ -1,6 +1,6 @@ # Hashmaps A *hash map* allows you to associate a value with a particular key. -You may also know this by the names [*unordered map* in C++](https://en.cppreference.com/w/cpp/container/unordered_map), +You may also know this by the names [*unordered map* in C++](https://en.cppreference.com/w/cpp/container/unordered_map), [*dictionary* in Python](https://docs.python.org/3/tutorial/datastructures.html#dictionaries) or an *associative array* in other languages. This is the other data structure that we've been talking about before, when diff --git a/exercises/lifetimes/README.md b/exercises/lifetimes/README.md index 74a4a786..91373f73 100644 --- a/exercises/lifetimes/README.md +++ b/exercises/lifetimes/README.md @@ -3,17 +3,17 @@ Lifetimes tell the compiler how to check whether references live long enough to be valid in any given situation. For example lifetimes say "make sure parameter 'a' lives as long as parameter 'b' so that the return -value is valid". +value is valid". -They are only necessary on borrows, i.e. references, +They are only necessary on borrows, i.e. references, since copied parameters or moves are owned in their scope and cannot be referenced outside. Lifetimes mean that calling code of e.g. functions -can be checked to make sure their arguments are valid. Lifetimes are +can be checked to make sure their arguments are valid. Lifetimes are restrictive of their callers. -If you'd like to learn more about lifetime annotations, the -[lifetimekata](https://tfpk.github.io/lifetimekata/) project -has a similar style of exercises to Rustlings, but is all about +If you'd like to learn more about lifetime annotations, the +[lifetimekata](https://tfpk.github.io/lifetimekata/) project +has a similar style of exercises to Rustlings, but is all about learning to write lifetime annotations. ## Further information diff --git a/exercises/macros/README.md b/exercises/macros/README.md index e34bc3a8..337816d6 100644 --- a/exercises/macros/README.md +++ b/exercises/macros/README.md @@ -4,7 +4,7 @@ Rust's macro system is very powerful, but also kind of difficult to wrap your head around. We're not going to teach you how to write your own fully-featured macros. Instead, we'll show you how to use and create them. -If you'd like to learn more about writing your own macros, the +If you'd like to learn more about writing your own macros, the [macrokata](https://github.com/tfpk/macrokata) project has a similar style of exercises to Rustlings, but is all about learning to write Macros. diff --git a/exercises/options/README.md b/exercises/options/README.md index 6140a167..5433fed8 100644 --- a/exercises/options/README.md +++ b/exercises/options/README.md @@ -1,6 +1,6 @@ # Options -Type Option represents an optional value: every Option is either Some and contains a value, or None, and does not. +Type Option represents an optional value: every Option is either Some and contains a value, or None, and does not. Option types are very common in Rust code, as they have a number of uses: - Initial values - Return values for functions that are not defined over their entire input range (partial functions) diff --git a/exercises/threads/threads1.rs b/exercises/threads/threads1.rs index d6376db2..ae124eeb 100644 --- a/exercises/threads/threads1.rs +++ b/exercises/threads/threads1.rs @@ -30,7 +30,7 @@ fn main() { if results.len() != 10 { panic!("Oh no! All the spawned threads did not finish!"); } - + println!(); for (i, result) in results.into_iter().enumerate() { println!("thread {} took {}ms", i, result); From d7111cb4a35b34c8e4e910a27ff10facb7efd917 Mon Sep 17 00:00:00 2001 From: Alexandre ESSE Date: Fri, 31 Mar 2023 11:20:30 +0200 Subject: [PATCH 34/61] fix(main.rs): remove trailing spaces --- src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 312a0a12..704398e5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -433,8 +433,8 @@ started, here's a couple of notes about how Rustlings operates: 4. If an exercise doesn't make sense to you, feel free to open an issue on GitHub! (https://github.com/rust-lang/rustlings/issues/new). We look at every issue, and sometimes, other learners do too so you can help each other out! -5. If you want to use `rust-analyzer` with exercises, which provides features like - autocompletion, run the command `rustlings lsp`. +5. If you want to use `rust-analyzer` with exercises, which provides features like + autocompletion, run the command `rustlings lsp`. Got all that? Great! To get started, run `rustlings watch` in order to get the first exercise. Make sure to have your editor open!"#; From e185e27273e6e64e9dcda6e7ab6c316716edceac Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 31 Mar 2023 13:29:29 +0000 Subject: [PATCH 35/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AUTHORS.md b/AUTHORS.md index 48fbc53b..df85b149 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -280,6 +280,9 @@ authors. Ryan Whitehouse
Ryan Whitehouse

πŸ–‹ Ali Afsharzadeh
Ali Afsharzadeh

πŸ–‹ + + Keogami
Keogami

πŸ“– + From 84dcd51d37846120cb9ff471a17e4c7c025d3ab3 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 31 Mar 2023 13:29:30 +0000 Subject: [PATCH 36/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 9323238b..55161bbe 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1974,6 +1974,15 @@ "contributions": [ "content" ] + }, + { + "login": "keogami", + "name": "Keogami", + "avatar_url": "https://avatars.githubusercontent.com/u/41939011?v=4", + "profile": "http://keogami.ml", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 8, From 391e5d121a7e68c2006c0cde8af0a4fcae3ed07a Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 31 Mar 2023 13:31:32 +0000 Subject: [PATCH 37/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index df85b149..125fc10b 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -282,6 +282,7 @@ authors. Keogami
Keogami

πŸ“– + Alexandre Esse
Alexandre Esse

πŸ–‹ From 75f0ab65d1d93be46440bf00bdaa211188f91db6 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 31 Mar 2023 13:31:33 +0000 Subject: [PATCH 38/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 55161bbe..0416dd8f 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1983,6 +1983,15 @@ "contributions": [ "doc" ] + }, + { + "login": "ahresse", + "name": "Alexandre Esse", + "avatar_url": "https://avatars.githubusercontent.com/u/28402488?v=4", + "profile": "https://github.com/ahresse", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From b1fb38e73c506e9f4aec643dc9ef167517fa5437 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Sun, 2 Apr 2023 12:25:24 +0530 Subject: [PATCH 39/61] fix: move lifetimes above tests in recommended order --- info.toml | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/info.toml b/info.toml index fde77e23..ef891435 100644 --- a/info.toml +++ b/info.toml @@ -748,6 +748,33 @@ hint = """ To find the best solution to this challenge you're going to need to think back to your knowledge of traits, specifically Trait Bound Syntax - you may also need this: `use std::fmt::Display;`.""" +# LIFETIMES + +[[exercises]] +name = "lifetimes1" +path = "exercises/lifetimes/lifetimes1.rs" +mode = "compile" +hint = """ +Let the compiler guide you. Also take a look at the book if you need help: +https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html""" + +[[exercises]] +name = "lifetimes2" +path = "exercises/lifetimes/lifetimes2.rs" +mode = "compile" +hint = """ +Remember that the generic lifetime 'a will get the concrete lifetime that is equal to the smaller of the lifetimes of x and y. +You can take at least two paths to achieve the desired result while keeping the inner block: +1. Move the string2 declaration to make it live as long as string1 (how is result declared?) +2. Move println! into the inner block""" + +[[exercises]] +name = "lifetimes3" +path = "exercises/lifetimes/lifetimes3.rs" +mode = "compile" +hint = """ +If you use a lifetime annotation in a struct's fields, where else does it need to be added?""" + # TESTS [[exercises]] @@ -780,33 +807,6 @@ You can call a function right where you're passing arguments to `assert!` -- so something like `assert!(having_fun())`. If you want to check that you indeed get false, you can negate the result of what you're doing using `!`, like `assert!(!having_fun())`.""" -# LIFETIMES - -[[exercises]] -name = "lifetimes1" -path = "exercises/lifetimes/lifetimes1.rs" -mode = "compile" -hint = """ -Let the compiler guide you. Also take a look at the book if you need help: -https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html""" - -[[exercises]] -name = "lifetimes2" -path = "exercises/lifetimes/lifetimes2.rs" -mode = "compile" -hint = """ -Remember that the generic lifetime 'a will get the concrete lifetime that is equal to the smaller of the lifetimes of x and y. -You can take at least two paths to achieve the desired result while keeping the inner block: -1. Move the string2 declaration to make it live as long as string1 (how is result declared?) -2. Move println! into the inner block""" - -[[exercises]] -name = "lifetimes3" -path = "exercises/lifetimes/lifetimes3.rs" -mode = "compile" -hint = """ -If you use a lifetime annotation in a struct's fields, where else does it need to be added?""" - # STANDARD LIBRARY TYPES [[exercises]] From 2f2fd43771c1b89b580d879e6f741364a5e76737 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 2 Apr 2023 10:45:42 +0000 Subject: [PATCH 40/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 125fc10b..cffd25eb 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -283,6 +283,7 @@ authors. Keogami
Keogami

πŸ“– Alexandre Esse
Alexandre Esse

πŸ–‹ + Sagar Vora
Sagar Vora

πŸ–‹ From 54d21dc7c11064aae647cd3893e2f4d07adf0ae7 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 2 Apr 2023 10:45:43 +0000 Subject: [PATCH 41/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 0416dd8f..97cd1b04 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1992,6 +1992,15 @@ "contributions": [ "content" ] + }, + { + "login": "sagarvora", + "name": "Sagar Vora", + "avatar_url": "https://avatars.githubusercontent.com/u/16315650?v=4", + "profile": "https://resilient.tech", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 27b75795666cddd3725c323cbc0b68b206fc150e Mon Sep 17 00:00:00 2001 From: poneciak Date: Wed, 5 Apr 2023 08:18:51 +0200 Subject: [PATCH 42/61] created task --- exercises/tests/tests4.rs | 40 +++++++++++++++++++++++++++++++++++++++ info.toml | 10 ++++++++++ 2 files changed, 50 insertions(+) create mode 100644 exercises/tests/tests4.rs diff --git a/exercises/tests/tests4.rs b/exercises/tests/tests4.rs new file mode 100644 index 00000000..2d8dd130 --- /dev/null +++ b/exercises/tests/tests4.rs @@ -0,0 +1,40 @@ +// tests4.rs +// Correct the tests to +// Do not change Rectangle::new body +// Execute `rustlings hint tests4` or use the `hint` watch subcommand for a hint. + +// I AM NOT DONE + +struct Rectangle { + width: i32, + height: i32 +} + +impl Rectangle { + pub fn new(width: i32, height: i32) -> Self { + if width < 0 || height < 0 { + panic!("Rectangle width and height cannot be negative!") + } + Rectangle {width, height} + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn correct_width_and_height() { + let _rect = Rectangle::new(10, 10); + } + + #[test] + fn negative_width() { + let _rect = Rectangle::new(-10, 10); + } + + #[test] + fn negative_height() { + let _rect = Rectangle::new(10, -10); + } +} diff --git a/info.toml b/info.toml index ef891435..ad06b888 100644 --- a/info.toml +++ b/info.toml @@ -807,6 +807,16 @@ You can call a function right where you're passing arguments to `assert!` -- so something like `assert!(having_fun())`. If you want to check that you indeed get false, you can negate the result of what you're doing using `!`, like `assert!(!having_fun())`.""" +[[exercises]] +name = "tests4" +path = "exercises/tests/tests4.rs" +mode = "test" +hint = """ +We expect method `Rectangle::new()` to panic for negative values. +To handle that you need to add special attribute to test function. +You can refer to the docs: https://doc.rust-lang.org/stable/book/ch11-01-writing-tests.html""" + + # STANDARD LIBRARY TYPES [[exercises]] From c4974ac7820784899592a26b4227683bca96bd2b Mon Sep 17 00:00:00 2001 From: poneciak Date: Wed, 5 Apr 2023 13:09:13 +0200 Subject: [PATCH 43/61] added required changes - fixed grammar in hint and added more specific link - added comments in test functions - changed introduction paragraph --- exercises/tests/tests4.rs | 11 ++++++++--- info.toml | 5 +++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/exercises/tests/tests4.rs b/exercises/tests/tests4.rs index 2d8dd130..727dbd7e 100644 --- a/exercises/tests/tests4.rs +++ b/exercises/tests/tests4.rs @@ -1,6 +1,5 @@ // tests4.rs -// Correct the tests to -// Do not change Rectangle::new body +// Make sure that we're testing for the correct conditions! // Execute `rustlings hint tests4` or use the `hint` watch subcommand for a hint. // I AM NOT DONE @@ -11,6 +10,7 @@ struct Rectangle { } impl Rectangle { + // Only change the test functions themselves pub fn new(width: i32, height: i32) -> Self { if width < 0 || height < 0 { panic!("Rectangle width and height cannot be negative!") @@ -25,16 +25,21 @@ mod tests { #[test] fn correct_width_and_height() { - let _rect = Rectangle::new(10, 10); + // This test should check if the rectangle is the size that we pass into its constructor + let rect = Rectangle::new(10, 20); + assert_eq!(???, 10); // check width + assert_eq!(???, 20); // check height } #[test] fn negative_width() { + // This test should check if thread panics when we try to create rectangle with negative width let _rect = Rectangle::new(-10, 10); } #[test] fn negative_height() { + // This test should check if thread panics when we try to create rectangle with negative height let _rect = Rectangle::new(10, -10); } } diff --git a/info.toml b/info.toml index ad06b888..fe79bdee 100644 --- a/info.toml +++ b/info.toml @@ -813,8 +813,9 @@ path = "exercises/tests/tests4.rs" mode = "test" hint = """ We expect method `Rectangle::new()` to panic for negative values. -To handle that you need to add special attribute to test function. -You can refer to the docs: https://doc.rust-lang.org/stable/book/ch11-01-writing-tests.html""" +To handle that you need to add a special attribute to the test function. +You can refer to the docs: +https://doc.rust-lang.org/stable/book/ch11-01-writing-tests.html#checking-for-panics-with-should_panic""" # STANDARD LIBRARY TYPES From 102d7f3d0ec8d9e6b0f4380c9ec199c47cf127f1 Mon Sep 17 00:00:00 2001 From: poneciak Date: Wed, 5 Apr 2023 13:24:14 +0200 Subject: [PATCH 44/61] changed comments in tests also fixed small logical issue in `Rectangle::new()` where u could create rectangle with width or height equals 0 --- exercises/tests/tests4.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/tests/tests4.rs b/exercises/tests/tests4.rs index 727dbd7e..1f34a2b2 100644 --- a/exercises/tests/tests4.rs +++ b/exercises/tests/tests4.rs @@ -12,7 +12,7 @@ struct Rectangle { impl Rectangle { // Only change the test functions themselves pub fn new(width: i32, height: i32) -> Self { - if width < 0 || height < 0 { + if width <= 0 || height <= 0 { panic!("Rectangle width and height cannot be negative!") } Rectangle {width, height} @@ -33,13 +33,13 @@ mod tests { #[test] fn negative_width() { - // This test should check if thread panics when we try to create rectangle with negative width + // This test should check if program panics when we try to create rectangle with negative width let _rect = Rectangle::new(-10, 10); } #[test] fn negative_height() { - // This test should check if thread panics when we try to create rectangle with negative height + // This test should check if program panics when we try to create rectangle with negative height let _rect = Rectangle::new(10, -10); } } From af365f444fb63d3f0cc7a86452d89ca6f73e9821 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 13:05:29 +0000 Subject: [PATCH 45/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index cffd25eb..f39c7642 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -284,6 +284,7 @@ authors. Keogami
Keogami

πŸ“– Alexandre Esse
Alexandre Esse

πŸ–‹ Sagar Vora
Sagar Vora

πŸ–‹ + Kacper Poneta
Kacper Poneta

πŸ–‹ From 63a467af31a8bda072db78c2dc0037a5498baf47 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 13:05:30 +0000 Subject: [PATCH 46/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 97cd1b04..bcf84753 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2001,6 +2001,15 @@ "contributions": [ "content" ] + }, + { + "login": "poneciak57", + "name": "Kacper Poneta", + "avatar_url": "https://avatars.githubusercontent.com/u/94321164?v=4", + "profile": "https://github.com/poneciak57", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 722c7910e411fb11cab5ada2222d6c52976a2411 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 13:06:58 +0000 Subject: [PATCH 47/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index f39c7642..e32782e8 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -285,6 +285,7 @@ authors. Alexandre Esse
Alexandre Esse

πŸ–‹ Sagar Vora
Sagar Vora

πŸ–‹ Kacper Poneta
Kacper Poneta

πŸ–‹ + Aaron Suggs
Aaron Suggs

πŸ–‹ From 16ca8715441dabd402dbdf431e117f3c9ad7ff8e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 13:06:59 +0000 Subject: [PATCH 48/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index bcf84753..01576d27 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2010,6 +2010,15 @@ "contributions": [ "content" ] + }, + { + "login": "ktheory", + "name": "Aaron Suggs", + "avatar_url": "https://avatars.githubusercontent.com/u/975?v=4", + "profile": "https://ktheory.com/", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From c7adaa7d14b66012d10f7e5ad55ee9c3e8615b8b Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 13:09:50 +0000 Subject: [PATCH 49/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index e32782e8..ed50669b 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -286,6 +286,7 @@ authors. Sagar Vora
Sagar Vora

πŸ–‹ Kacper Poneta
Kacper Poneta

πŸ–‹ Aaron Suggs
Aaron Suggs

πŸ–‹ + Alex
Alex

πŸ–‹ From d544bfcd6ddc3167a5a484b8ea8776d4828642ee Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 13:09:51 +0000 Subject: [PATCH 50/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 01576d27..e055aed7 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2019,6 +2019,15 @@ "contributions": [ "content" ] + }, + { + "login": "alexwh", + "name": "Alex", + "avatar_url": "https://avatars.githubusercontent.com/u/1723612?v=4", + "profile": "https://github.com/alexwh", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 2f338260632ae65bfd6febf28bde68b26e187b9e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 13:11:14 +0000 Subject: [PATCH 51/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index ed50669b..9e757bc2 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -287,6 +287,7 @@ authors. Kacper Poneta
Kacper Poneta

πŸ–‹ Aaron Suggs
Aaron Suggs

πŸ–‹ Alex
Alex

πŸ–‹ + Sebastian TΓΆrnquist
Sebastian TΓΆrnquist

πŸ–‹ From 5de7124eeedbff53a493cbff0e6d4e5b97706c42 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 13:11:15 +0000 Subject: [PATCH 52/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index e055aed7..bdcf53c6 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2028,6 +2028,15 @@ "contributions": [ "content" ] + }, + { + "login": "stornquist", + "name": "Sebastian TΓΆrnquist", + "avatar_url": "https://avatars.githubusercontent.com/u/42915664?v=4", + "profile": "https://github.com/stornquist", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From a4a5691a7b3fac8201cf2965d94267da12bae47f Mon Sep 17 00:00:00 2001 From: Sebastian LaVine Date: Sun, 16 Apr 2023 21:44:08 -0400 Subject: [PATCH 53/61] feat: Add "!" command to `rustlings watch` --- src/main.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 704398e5..793b826d 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!(" ! - 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}"); } From 4944488287ca28bb73b067c3b0321adb6fb010ae Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 18 Apr 2023 15:51:24 +0000 Subject: [PATCH 54/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 9e757bc2..f5accd79 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -288,6 +288,7 @@ authors. Aaron Suggs
Aaron Suggs

πŸ–‹ Alex
Alex

πŸ–‹ Sebastian TΓΆrnquist
Sebastian TΓΆrnquist

πŸ–‹ + Sebastian LaVine
Sebastian LaVine

πŸ’» From 6209e7004e24492776edc5408260707949e6ffee Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 18 Apr 2023 15:51:25 +0000 Subject: [PATCH 55/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index bdcf53c6..9c39e5ec 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2037,6 +2037,15 @@ "contributions": [ "content" ] + }, + { + "login": "smlavine", + "name": "Sebastian LaVine", + "avatar_url": "https://avatars.githubusercontent.com/u/33563640?v=4", + "profile": "http://smlavine.com", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 8, From 319a8253ba727d09a1c52c7d22b4e089137ecff9 Mon Sep 17 00:00:00 2001 From: Alan Gerber Date: Thu, 20 Apr 2023 12:15:31 -0400 Subject: [PATCH 56/61] fix(move_semantics2): fix line number comment Commit fef8314 added three lines of comments, which left the line numbers expected to stay unchanged mentioned on line 2 out of date. --- exercises/move_semantics/move_semantics2.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/move_semantics/move_semantics2.rs b/exercises/move_semantics/move_semantics2.rs index 68dbf021..ae76a7aa 100644 --- a/exercises/move_semantics/move_semantics2.rs +++ b/exercises/move_semantics/move_semantics2.rs @@ -1,5 +1,5 @@ // move_semantics2.rs -// Make me compile without changing line 13 or moving line 10! +// Make me compile without changing line 17 or moving line 14! // Execute `rustlings hint move_semantics2` or use the `hint` watch subcommand for a hint. // Expected output: From 065cd0170e46fbdf0f74aee4708c4e3a200ab6ce Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 22 Apr 2023 13:48:41 +0000 Subject: [PATCH 57/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AUTHORS.md b/AUTHORS.md index f5accd79..0f45c38f 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -290,6 +290,9 @@ authors. Sebastian TΓΆrnquist
Sebastian TΓΆrnquist

πŸ–‹ Sebastian LaVine
Sebastian LaVine

πŸ’» + + Alan Gerber
Alan Gerber

πŸ–‹ + From 545a7262523cfe3074e91314ad621d84e48d81c1 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 22 Apr 2023 13:48:42 +0000 Subject: [PATCH 58/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 9c39e5ec..8dd0d928 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2046,6 +2046,15 @@ "contributions": [ "code" ] + }, + { + "login": "akgerber", + "name": "Alan Gerber", + "avatar_url": "https://avatars.githubusercontent.com/u/201313?v=4", + "profile": "http://www.alangerber.us", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From c4627e7112f38a74e677f358bf5eafc7214c5a4f Mon Sep 17 00:00:00 2001 From: PiqqiDesigns Date: Thu, 27 Apr 2023 15:49:40 -0700 Subject: [PATCH 59/61] chore: clarified cow owned_no_mutation comments --- exercises/smart_pointers/cow1.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/exercises/smart_pointers/cow1.rs b/exercises/smart_pointers/cow1.rs index 885138a7..bc5b28e5 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) { From 72d0c53b33e45cc55a5eb0c82119b7e393c0c59b Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 28 Apr 2023 08:40:17 +0000 Subject: [PATCH 60/61] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 0f45c38f..8e4d0fab 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -292,6 +292,7 @@ authors. Alan Gerber
Alan Gerber

πŸ–‹ + Eric
Eric

πŸ–‹ From eb4079c674640b4fc307d5dca7a23dcef33129f2 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 28 Apr 2023 08:40:18 +0000 Subject: [PATCH 61/61] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 8dd0d928..a973b2d7 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2055,6 +2055,15 @@ "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,