From 2934d062a30be177056fcded950bd5339b636b8f Mon Sep 17 00:00:00 2001 From: "Nicholas R. Smith" Date: Fri, 14 Jul 2023 10:47:42 -0700 Subject: [PATCH 01/47] fix: run cargo update to build proc-macro2 on nightly --- Cargo.lock | 192 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 126 insertions(+), 66 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a09d98f..a8268d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "aho-corasick" -version = "0.7.20" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" dependencies = [ "memchr", ] @@ -77,15 +77,15 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "console" -version = "0.15.5" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" dependencies = [ "encode_unicode", "lazy_static", "libc", "unicode-width", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -114,14 +114,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" +checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" dependencies = [ "cfg-if 1.0.0", "libc", "redox_syscall", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -176,11 +176,11 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "home" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747309b4b440c06d57b0b25f2aee03ee9b5e5397d288c60e21fc709bb98a7408" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" dependencies = [ - "winapi 0.3.9", + "windows-sys 0.48.0", ] [[package]] @@ -226,9 +226,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" [[package]] name = "kernel32-sys" @@ -254,18 +254,15 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.140" +version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] name = "log" -version = "0.4.17" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if 1.0.0", -] +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" [[package]] name = "memchr" @@ -318,9 +315,9 @@ dependencies = [ [[package]] name = "net2" -version = "0.2.38" +version = "0.2.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631" +checksum = "b13b648036a2339d06de780866fbdfda0dde886de7b3af2ddeba8b14f4ee34ac" dependencies = [ "cfg-if 0.1.10", "libc", @@ -397,18 +394,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.53" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73" +checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.26" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" dependencies = [ "proc-macro2", ] @@ -424,9 +421,21 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.2" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce168fea28d3e05f158bda4576cf0c844d5045bc2cc3620fa0292ed5bb5814c" +checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" dependencies = [ "aho-corasick", "memchr", @@ -435,9 +444,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" [[package]] name = "rustlings" @@ -459,9 +468,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" [[package]] name = "same-file" @@ -474,29 +483,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.158" +version = "1.0.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" +checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.158" +version = "1.0.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" +checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.25", ] [[package]] name = "serde_json" -version = "1.0.94" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +checksum = "b5062a995d481b2308b6064e9af76011f2921c35f97b0468811ed9f6cd91dfed" dependencies = [ "itoa", "ryu", @@ -525,9 +534,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.8" +version = "2.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9" +checksum = "15e3fc8c0c74267e2df136e5e5fb656a464158aa57624053375eb9c8c6e25ae2" dependencies = [ "proc-macro2", "quote", @@ -551,9 +560,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73" [[package]] name = "unicode-width" @@ -614,28 +623,22 @@ 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", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.1", ] [[package]] @@ -644,13 +647,28 @@ 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", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] @@ -659,42 +677,84 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + [[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_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + [[package]] name = "windows_i686_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + [[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_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + [[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_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + [[package]] name = "ws2_32-sys" version = "0.2.1" From f4d86f384c396ed0741e93f71c314c5ed503f12c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 17 Jul 2023 10:31:15 +0000 Subject: [PATCH 02/47] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 6c1ee1e..04ef1fc 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -316,6 +316,7 @@ authors. Anish
Anish

🖋 vnprc
vnprc

🖋 Joshua Carlson
Joshua Carlson

🖋 + Nicholas R. Smith
Nicholas R. Smith

💻 From 2c7dec73275a12f8e47e0f60c2f1686e579bdc7a Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 17 Jul 2023 10:31:16 +0000 Subject: [PATCH 03/47] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 37b8669..ac074d3 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2235,6 +2235,15 @@ "contributions": [ "content" ] + }, + { + "login": "johnDeSilencio", + "name": "Nicholas R. Smith", + "avatar_url": "https://avatars.githubusercontent.com/u/20136554?v=4", + "profile": "https://johndesilencio.me", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 8, From 662e5bddd7faf7ba383d964ef3c6a2d33168e66c Mon Sep 17 00:00:00 2001 From: Yamila Moreno Date: Mon, 17 Jul 2023 15:58:29 +0200 Subject: [PATCH 04/47] fix(primitives-4.rs): update hint so it's less confusing --- info.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.toml b/info.toml index e8a28cb..f484ecd 100644 --- a/info.toml +++ b/info.toml @@ -216,7 +216,7 @@ mode = "test" hint = """ Take a look at the Understanding Ownership -> Slices -> Other Slices section of the book: https://doc.rust-lang.org/book/ch04-03-slices.html -and use the starting and ending indices of the items in the Array +and use the starting and ending (plus one) indices of the items in the Array that you want to end up in the slice. If you're curious why the first argument of `assert_eq!` does not From 7f9f897945fbe764b240d51389cf933488b74910 Mon Sep 17 00:00:00 2001 From: Gabor Szabo Date: Thu, 20 Jul 2023 08:28:18 +0300 Subject: [PATCH 05/47] add test-case to if/if1 to check equal values --- exercises/if/if1.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/exercises/if/if1.rs b/exercises/if/if1.rs index d8108a0..4734d78 100644 --- a/exercises/if/if1.rs +++ b/exercises/if/if1.rs @@ -25,4 +25,9 @@ mod tests { fn fortytwo_is_bigger_than_thirtytwo() { assert_eq!(42, bigger(32, 42)); } + + #[test] + fn equal_numbers() { + assert_eq!(42, bigger(42, 42)); + } } From ef8f1f108ba2ed109eea93684ea29861085cea31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Gonz=C3=A1lez?= Date: Fri, 21 Jul 2023 14:42:19 +0200 Subject: [PATCH 06/47] docs: dedup repeated sentence --- exercises/quiz1.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/quiz1.rs b/exercises/quiz1.rs index a9904b8..4ee5ada 100644 --- a/exercises/quiz1.rs +++ b/exercises/quiz1.rs @@ -9,7 +9,7 @@ // - An apple costs 2 rustbucks. // - If Mary buys more than 40 apples, each apple only costs 1 rustbuck! // Write a function that calculates the price of an order of apples given the -// quantity bought. No hints this time! +// quantity bought. // // No hints this time ;) From 8283ae8c4c90acde71a98037107b018ec8fc454b Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 24 Jul 2023 08:29:17 +0000 Subject: [PATCH 07/47] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 04ef1fc..3dde840 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -317,6 +317,7 @@ authors. vnprc
vnprc

🖋 Joshua Carlson
Joshua Carlson

🖋 Nicholas R. Smith
Nicholas R. Smith

💻 + Alexander González
Alexander González

🖋 From bb5fa3f1e8b867f03d5db4d6ab53a1fdfdfad062 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 24 Jul 2023 08:29:18 +0000 Subject: [PATCH 08/47] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index ac074d3..8a3034d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2244,6 +2244,15 @@ "contributions": [ "code" ] + }, + { + "login": "alexfertel", + "name": "Alexander González", + "avatar_url": "https://avatars.githubusercontent.com/u/22298999?v=4", + "profile": "https://alexfertel.me", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From be8d1df8b90ad6f15c529e8460a6de72bba52de3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20H=C3=B6jvall?= Date: Fri, 28 Jul 2023 23:05:01 +0200 Subject: [PATCH 09/47] chore(errors4): improved comment --- exercises/error_handling/errors4.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/error_handling/errors4.rs b/exercises/error_handling/errors4.rs index e04bff7..d6d6fcb 100644 --- a/exercises/error_handling/errors4.rs +++ b/exercises/error_handling/errors4.rs @@ -16,7 +16,7 @@ enum CreationError { impl PositiveNonzeroInteger { fn new(value: i64) -> Result { - // Hmm...? Why is this only returning an Ok value? + // Hmm... Why is this always returning an Ok value? Ok(PositiveNonzeroInteger(value as u64)) } } From f39df76215fb06013e3d2fbbaf1b709de4729867 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 1 Aug 2023 08:50:13 +0000 Subject: [PATCH 10/47] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 3dde840..250e092 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -318,6 +318,7 @@ authors. Joshua Carlson
Joshua Carlson

🖋 Nicholas R. Smith
Nicholas R. Smith

💻 Alexander González
Alexander González

🖋 + Marcus Höjvall
Marcus Höjvall

🖋 From 62adbdf7f2d32981e3c44792008c23e5ac700739 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 1 Aug 2023 08:50:14 +0000 Subject: [PATCH 11/47] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 8a3034d..b5f81ce 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2253,6 +2253,15 @@ "contributions": [ "content" ] + }, + { + "login": "softarn", + "name": "Marcus Höjvall", + "avatar_url": "https://avatars.githubusercontent.com/u/517619?v=4", + "profile": "https://github.com/softarn", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 828e7246598d2d55ea4b379194120367163e397e Mon Sep 17 00:00:00 2001 From: Joshua Carlson <61999256+jrcarl624@users.noreply.github.com> Date: Tue, 1 Aug 2023 13:33:32 -0400 Subject: [PATCH 12/47] Added note related to tests. --- exercises/if/if3.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/if/if3.rs b/exercises/if/if3.rs index 73a7025..0040023 100644 --- a/exercises/if/if3.rs +++ b/exercises/if/if3.rs @@ -28,7 +28,7 @@ pub fn animal_habitat(animal: &str) -> &'static str { habitat } - +// No test changes needed. #[cfg(test)] mod tests { use super::*; From 2691a35102b0eab111706da0c27fc39541b64e0c Mon Sep 17 00:00:00 2001 From: Alon Hearter Date: Mon, 7 Aug 2023 18:22:49 +0300 Subject: [PATCH 13/47] Fix from_into.rs tests --- exercises/conversions/from_into.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/conversions/from_into.rs b/exercises/conversions/from_into.rs index aba471d..60911f3 100644 --- a/exercises/conversions/from_into.rs +++ b/exercises/conversions/from_into.rs @@ -127,14 +127,14 @@ mod tests { #[test] fn test_trailing_comma() { let p: Person = Person::from("Mike,32,"); - assert_eq!(p.name, "John"); - assert_eq!(p.age, 30); + assert_eq!(p.name, "Mike"); + assert_eq!(p.age, 32); } #[test] fn test_trailing_comma_and_some_string() { let p: Person = Person::from("Mike,32,man"); - assert_eq!(p.name, "John"); - assert_eq!(p.age, 30); + assert_eq!(p.name, "Mike"); + assert_eq!(p.age, 32); } } From 24c838bc0b8bbcc8d61d1af4fc611a7d1c7fbe80 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 15:38:51 +0000 Subject: [PATCH 14/47] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AUTHORS.md b/AUTHORS.md index 250e092..6d73d47 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -320,6 +320,9 @@ authors. Alexander González
Alexander González

🖋 Marcus Höjvall
Marcus Höjvall

🖋 + + Alon Hearter
Alon Hearter

🖋 + From 1ace9795f728562fecc548858172320d65c2029e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 15:38:52 +0000 Subject: [PATCH 15/47] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index b5f81ce..632a633 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2262,6 +2262,15 @@ "contributions": [ "content" ] + }, + { + "login": "barlevalon", + "name": "Alon Hearter", + "avatar_url": "https://avatars.githubusercontent.com/u/3397911?v=4", + "profile": "https://github.com/barlevalon", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 720f33eee642eafab3c03bc7caed5f8690b481e8 Mon Sep 17 00:00:00 2001 From: Mate Kovacs Date: Thu, 10 Aug 2023 19:56:47 +0900 Subject: [PATCH 16/47] add .to_mut() in test owned_mutation() --- exercises/smart_pointers/cow1.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/smart_pointers/cow1.rs b/exercises/smart_pointers/cow1.rs index 7ca9168..5ab5115 100644 --- a/exercises/smart_pointers/cow1.rs +++ b/exercises/smart_pointers/cow1.rs @@ -70,7 +70,7 @@ mod tests { // case the call to `to_mut()` returns a reference to the same data as // before. let slice = vec![-1, 0, 1]; - let mut input = Cow::from(slice); + let mut input = Cow::from(slice).to_mut(); match abs_all(&mut input) { // TODO } From ad1c29c512cbd39c05ebd07b9013f08fe8721017 Mon Sep 17 00:00:00 2001 From: Kevin C Date: Mon, 14 Aug 2023 12:49:28 -0700 Subject: [PATCH 17/47] Fix comment in errors2 --- exercises/error_handling/errors2.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/error_handling/errors2.rs b/exercises/error_handling/errors2.rs index d86f326..d4a5477 100644 --- a/exercises/error_handling/errors2.rs +++ b/exercises/error_handling/errors2.rs @@ -9,9 +9,9 @@ // // Right now, this function isn't handling the error case at all (and isn't // handling the success case properly either). What we want to do is: if we call -// the `parse` function on a string that is not a number, that function will -// return a `ParseIntError`, and in that case, we want to immediately return -// that error from our function and not try to multiply and add. +// the `total_cost` function on a string that is not a number, that function +// will return a `ParseIntError`, and in that case, we want to immediately +// return that error from our function and not try to multiply and add. // // There are at least two ways to implement this that are both correct-- but one // is a lot shorter! From 33a45d0f898317dbbb7bc9e9e057f54c36b62471 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 15 Aug 2023 09:20:01 +0000 Subject: [PATCH 18/47] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 6d73d47..28fa51a 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -322,6 +322,7 @@ authors. Alon Hearter
Alon Hearter

🖋 + shirts
shirts

🖋 From d67084730841399466089b867bc41f780e8c0281 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 15 Aug 2023 09:20:02 +0000 Subject: [PATCH 19/47] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 632a633..5d1c22b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2271,6 +2271,15 @@ "contributions": [ "content" ] + }, + { + "login": "shirts", + "name": "shirts", + "avatar_url": "https://avatars.githubusercontent.com/u/4952151?v=4", + "profile": "https://github.com/shirts", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From af76794627ac9252650c8d3ec41d9afe251ca5e5 Mon Sep 17 00:00:00 2001 From: Roi Gabay Date: Sun, 20 Aug 2023 21:09:10 +0300 Subject: [PATCH 20/47] info.toml: update threads2 text. the previous text does not appear in the provided link (https://doc.rust-lang.org/book/ch16-03-shared-state.html#atomic-reference-counting-with-arct). --- info.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.toml b/info.toml index e8a28cb..05bb0d5 100644 --- a/info.toml +++ b/info.toml @@ -1009,7 +1009,7 @@ and keep reading if you'd like more hints :) Do you now have an `Arc` `Mutex` `JobStatus` at the beginning of main? Like: `let status = Arc::new(Mutex::new(JobStatus { jobs_completed: 0 }));` Similar to the code in the example in the book that happens after the text -that says "We can use Arc to fix this.". If not, give that a try! If you +that says "Sharing a Mutex Between Multiple Threads". If not, give that a try! If you do and would like more hints, keep reading!! From fa0463b3b219f3d10e8ae2e04bc9fbb67e360e9b Mon Sep 17 00:00:00 2001 From: Ivan Vasiunyk Date: Fri, 25 Aug 2023 21:49:22 +0200 Subject: [PATCH 21/47] fix(errors1): change Result to Option in exersise description --- exercises/error_handling/errors1.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/error_handling/errors1.rs b/exercises/error_handling/errors1.rs index 13d2724..0ba59a5 100644 --- a/exercises/error_handling/errors1.rs +++ b/exercises/error_handling/errors1.rs @@ -3,7 +3,7 @@ // This function refuses to generate text to be printed on a nametag if you pass // it an empty string. It'd be nicer if it explained what the problem was, // instead of just sometimes returning `None`. Thankfully, Rust has a similar -// construct to `Result` that can be used to express error conditions. Let's use +// construct to `Option` that can be used to express error conditions. Let's use // it! // // Execute `rustlings hint errors1` or use the `hint` watch subcommand for a From e7ad540618048d4f4c1fee9666a7d49df0ccaed3 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 26 Aug 2023 20:27:32 +0000 Subject: [PATCH 22/47] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 28fa51a..e01c19c 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -323,6 +323,7 @@ authors. Alon Hearter
Alon Hearter

🖋 shirts
shirts

🖋 + Ivan Vasiunyk
Ivan Vasiunyk

🖋 From 77f0e177e67bddd3e5ed5a3460800cb1749e6b94 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 26 Aug 2023 20:27:33 +0000 Subject: [PATCH 23/47] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 5d1c22b..22d6841 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2280,6 +2280,15 @@ "contributions": [ "content" ] + }, + { + "login": "eLVas", + "name": "Ivan Vasiunyk", + "avatar_url": "https://avatars.githubusercontent.com/u/6797156?v=4", + "profile": "https://github.com/eLVas", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 571bab20c1136adf1443b0fc1778341e923e06e5 Mon Sep 17 00:00:00 2001 From: mo8it Date: Sat, 26 Aug 2023 23:07:20 +0200 Subject: [PATCH 24/47] Run clippy --fix --- src/exercise.rs | 18 +++++++++--------- src/main.rs | 12 ++++++------ src/project.rs | 2 +- src/verify.rs | 4 ++-- tests/integration_tests.rs | 34 +++++++++++++++++----------------- 5 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/exercise.rs b/src/exercise.rs index 2cde4e1..07251db 100644 --- a/src/exercise.rs +++ b/src/exercise.rs @@ -110,12 +110,12 @@ impl Exercise { pub fn compile(&self) -> Result { let cmd = match self.mode { 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_EDITION_ARGS) .output(), 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_EDITION_ARGS) .output(), @@ -141,7 +141,7 @@ path = "{}.rs""#, // compilation failure, this would silently fail. But we expect // clippy to reflect the same failure while compiling later. 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_EDITION_ARGS) .output() @@ -151,14 +151,14 @@ path = "{}.rs""#, // 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 Command::new("cargo") - .args(&["clean", "--manifest-path", CLIPPY_CARGO_TOML_PATH]) + .args(["clean", "--manifest-path", CLIPPY_CARGO_TOML_PATH]) .args(RUSTC_COLOR_ARGS) .output() .expect("Failed to run 'cargo clean'"); Command::new("cargo") - .args(&["clippy", "--manifest-path", CLIPPY_CARGO_TOML_PATH]) + .args(["clippy", "--manifest-path", CLIPPY_CARGO_TOML_PATH]) .args(RUSTC_COLOR_ARGS) - .args(&["--", "-D", "warnings", "-D", "clippy::float_cmp"]) + .args(["--", "-D", "warnings", "-D", "clippy::float_cmp"]) .output() } } @@ -183,7 +183,7 @@ path = "{}.rs""#, Mode::Test => "--show-output", _ => "", }; - let cmd = Command::new(&temp_file()) + let cmd = Command::new(temp_file()) .arg(arg) .output() .expect("Failed to run 'run' command"); @@ -260,7 +260,7 @@ impl Display for Exercise { #[inline] fn clean() { - let _ignored = remove_file(&temp_file()); + let _ignored = remove_file(temp_file()); } #[cfg(test)] @@ -270,7 +270,7 @@ mod test { #[test] fn test_clean() { - File::create(&temp_file()).unwrap(); + File::create(temp_file()).unwrap(); let exercise = Exercise { name: String::from("example"), path: PathBuf::from("tests/fixture/state/pending_exercise.rs"), diff --git a/src/main.rs b/src/main.rs index 0a9af2e..1a15086 100644 --- a/src/main.rs +++ b/src/main.rs @@ -169,7 +169,7 @@ fn main() { let filter_cond = filters .split(',') .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() { exercises_done += 1; "Done" @@ -429,7 +429,7 @@ fn watch( fn rustc_exists() -> bool { Command::new("rustc") - .args(&["--version"]) + .args(["--version"]) .stdout(Stdio::null()) .spawn() .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 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! | +-------------------------- ------------------------+ \\/ @@ -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! 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... _ _ _ _ __ _ _ ___| |_| (_)_ __ __ _ ___ | '__| | | / __| __| | | '_ \ / _` / __| | | | |_| \__ \ |_| | | | | | (_| \__ \ |_| \__,_|___/\__|_|_|_| |_|\__, |___/ - |___/"#; + |___/"; diff --git a/src/project.rs b/src/project.rs index ebebe27..bcbd7ad 100644 --- a/src/project.rs +++ b/src/project.rs @@ -86,7 +86,7 @@ impl RustAnalyzerProject { println!("Determined toolchain: {}\n", &toolchain); - self.sysroot_src = (std::path::Path::new(&*toolchain) + self.sysroot_src = (std::path::Path::new(toolchain) .join("lib") .join("rustlib") .join("src") diff --git a/src/verify.rs b/src/verify.rs index f3f3b56..4e0df86 100644 --- a/src/verify.rs +++ b/src/verify.rs @@ -123,9 +123,9 @@ fn compile_and_test(exercise: &Exercise, run_mode: RunMode, verbose: bool, succe // Compile the given Exercise and return an object with information // about the state of the compilation -fn compile<'a, 'b>( +fn compile<'a>( exercise: &'a Exercise, - progress_bar: &'b ProgressBar, + progress_bar: &ProgressBar, ) -> Result, ()> { let compilation_result = exercise.compile(); diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index 1a72923..4c236fd 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -44,7 +44,7 @@ fn verify_fails_if_some_fails() { fn run_single_compile_success() { Command::cargo_bin("rustlings") .unwrap() - .args(&["run", "compSuccess"]) + .args(["run", "compSuccess"]) .current_dir("tests/fixture/success/") .assert() .success(); @@ -54,7 +54,7 @@ fn run_single_compile_success() { fn run_single_compile_failure() { Command::cargo_bin("rustlings") .unwrap() - .args(&["run", "compFailure"]) + .args(["run", "compFailure"]) .current_dir("tests/fixture/failure/") .assert() .code(1); @@ -64,7 +64,7 @@ fn run_single_compile_failure() { fn run_single_test_success() { Command::cargo_bin("rustlings") .unwrap() - .args(&["run", "testSuccess"]) + .args(["run", "testSuccess"]) .current_dir("tests/fixture/success/") .assert() .success(); @@ -74,7 +74,7 @@ fn run_single_test_success() { fn run_single_test_failure() { Command::cargo_bin("rustlings") .unwrap() - .args(&["run", "testFailure"]) + .args(["run", "testFailure"]) .current_dir("tests/fixture/failure/") .assert() .code(1); @@ -84,7 +84,7 @@ fn run_single_test_failure() { fn run_single_test_not_passed() { Command::cargo_bin("rustlings") .unwrap() - .args(&["run", "testNotPassed.rs"]) + .args(["run", "testNotPassed.rs"]) .current_dir("tests/fixture/failure/") .assert() .code(1); @@ -104,7 +104,7 @@ fn run_single_test_no_filename() { fn run_single_test_no_exercise() { Command::cargo_bin("rustlings") .unwrap() - .args(&["run", "compNoExercise.rs"]) + .args(["run", "compNoExercise.rs"]) .current_dir("tests/fixture/failure") .assert() .code(1); @@ -114,7 +114,7 @@ fn run_single_test_no_exercise() { fn reset_single_exercise() { Command::cargo_bin("rustlings") .unwrap() - .args(&["reset", "intro1"]) + .args(["reset", "intro1"]) .assert() .code(0); } @@ -135,7 +135,7 @@ fn reset_no_exercise() { fn get_hint_for_single_test() { Command::cargo_bin("rustlings") .unwrap() - .args(&["hint", "testFailure"]) + .args(["hint", "testFailure"]) .current_dir("tests/fixture/failure") .assert() .code(0) @@ -171,7 +171,7 @@ fn all_exercises_require_confirmation() { fn run_compile_exercise_does_not_prompt() { Command::cargo_bin("rustlings") .unwrap() - .args(&["run", "pending_exercise"]) + .args(["run", "pending_exercise"]) .current_dir("tests/fixture/state") .assert() .code(0) @@ -182,7 +182,7 @@ fn run_compile_exercise_does_not_prompt() { fn run_test_exercise_does_not_prompt() { Command::cargo_bin("rustlings") .unwrap() - .args(&["run", "pending_test_exercise"]) + .args(["run", "pending_test_exercise"]) .current_dir("tests/fixture/state") .assert() .code(0) @@ -193,7 +193,7 @@ fn run_test_exercise_does_not_prompt() { fn run_single_test_success_with_output() { Command::cargo_bin("rustlings") .unwrap() - .args(&["--nocapture", "run", "testSuccess"]) + .args(["--nocapture", "run", "testSuccess"]) .current_dir("tests/fixture/success/") .assert() .code(0) @@ -204,7 +204,7 @@ fn run_single_test_success_with_output() { fn run_single_test_success_without_output() { Command::cargo_bin("rustlings") .unwrap() - .args(&["run", "testSuccess"]) + .args(["run", "testSuccess"]) .current_dir("tests/fixture/success/") .assert() .code(0) @@ -215,7 +215,7 @@ fn run_single_test_success_without_output() { fn run_rustlings_list() { Command::cargo_bin("rustlings") .unwrap() - .args(&["list"]) + .args(["list"]) .current_dir("tests/fixture/success") .assert() .success(); @@ -225,7 +225,7 @@ fn run_rustlings_list() { fn run_rustlings_list_no_pending() { Command::cargo_bin("rustlings") .unwrap() - .args(&["list"]) + .args(["list"]) .current_dir("tests/fixture/success") .assert() .success() @@ -236,7 +236,7 @@ fn run_rustlings_list_no_pending() { fn run_rustlings_list_both_done_and_pending() { Command::cargo_bin("rustlings") .unwrap() - .args(&["list"]) + .args(["list"]) .current_dir("tests/fixture/state") .assert() .success() @@ -247,7 +247,7 @@ fn run_rustlings_list_both_done_and_pending() { fn run_rustlings_list_without_pending() { Command::cargo_bin("rustlings") .unwrap() - .args(&["list", "--solved"]) + .args(["list", "--solved"]) .current_dir("tests/fixture/state") .assert() .success() @@ -258,7 +258,7 @@ fn run_rustlings_list_without_pending() { fn run_rustlings_list_without_done() { Command::cargo_bin("rustlings") .unwrap() - .args(&["list", "--unsolved"]) + .args(["list", "--unsolved"]) .current_dir("tests/fixture/state") .assert() .success() From 3cc9be0d115c8fd614dff9ab982c84c3d645173c Mon Sep 17 00:00:00 2001 From: mo8it Date: Sat, 26 Aug 2023 23:25:12 +0200 Subject: [PATCH 25/47] Avoid line numbers in hints --- info.toml | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/info.toml b/info.toml index e8a28cb..1afe338 100644 --- a/info.toml +++ b/info.toml @@ -22,8 +22,8 @@ name = "variables1" path = "exercises/variables/variables1.rs" mode = "compile" hint = """ -The declaration on line 8 is missing a keyword that is needed in Rust -to create a new variable binding.""" +The declaration in the first line in the main function is missing a keyword +that is needed in Rust to create a new variable binding.""" [[exercises]] name = "variables2" @@ -32,7 +32,7 @@ mode = "compile" hint = """ The compiler message is saying that Rust cannot infer the type that the variable binding `x` has with what is given here. -What happens if you annotate line 7 with a type annotation? +What happens if you annotate the first line in the main function with a type annotation? What if you give x a value? What if you do both? What type should x be, anyway? @@ -44,8 +44,9 @@ path = "exercises/variables/variables3.rs" mode = "compile" hint = """ Oops! In this exercise, we have a variable binding that we've created on -line 7, and we're trying to use it on line 8, but we haven't given it a -value. We can't print out something that isn't there; try giving x a value! +in the first line in the main function, and we're trying to use it in the next line, +but we haven't given it a value. +We can't print out something that isn't there; try giving x a value! This is an error that can cause bugs that's very easy to make in any programming language -- thankfully the Rust compiler has caught this for us!""" @@ -123,8 +124,8 @@ name = "functions4" path = "exercises/functions/functions4.rs" mode = "compile" hint = """ -The error message points to line 17 and says it expects a type after the -`->`. This is where the function's return type should be -- take a look at +The error message points to the function `sale_price` and says it expects a type +after the `->`. This is where the function's return type should be -- take a look at the `is_even` function for an example! Also: Did you figure out that, technically, u32 would be the more fitting type @@ -285,9 +286,10 @@ name = "move_semantics1" path = "exercises/move_semantics/move_semantics1.rs" mode = "compile" hint = """ -So you've got the "cannot borrow immutable local variable `vec1` as mutable" error on line 13, -right? The fix for this is going to be adding one keyword, and the addition is NOT on line 13 -where the error is. +So you've got the "cannot borrow immutable local variable `vec1` as mutable" error on the line +where we push an element to the vector, right? +The fix for this is going to be adding one keyword, and the addition is NOT on the line where +we push to the vector (where the error is). Also: Try accessing `vec0` after having called `fill_vec()`. See what happens!""" @@ -445,8 +447,9 @@ path = "exercises/strings/strings2.rs" 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 -12, though, that will coerce the `String` into a string slice. +string slice instead of a `String`, wouldn't it?? There is a way to add one character to the +line with the function call `is_a_color_word`, 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""" @@ -825,7 +828,6 @@ 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 [[exercises]] From c655612d2d151cbde90a8d054f3b72df2d5d7b59 Mon Sep 17 00:00:00 2001 From: mo8it Date: Sat, 26 Aug 2023 23:34:40 +0200 Subject: [PATCH 26/47] Update deps --- Cargo.lock | 335 +++++++++++++++++++++++++++++++++++------------------ Cargo.toml | 18 +-- 2 files changed, 233 insertions(+), 120 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a8268d9..5a40b6f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,24 @@ version = 3 [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" dependencies = [ "memchr", ] [[package]] -name = "argh" -version = "0.1.10" +name = "anstyle" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab257697eb9496bf75526f0217b5ed64636a9cfafa78b8365c71bd283fcef93e" +checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea" + +[[package]] +name = "argh" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7af5ba06967ff7214ce4c7419c7d185be7ecd6cc4965a8f6e1d8ce0398aad219" dependencies = [ "argh_derive", "argh_shared", @@ -23,32 +29,38 @@ dependencies = [ [[package]] name = "argh_derive" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b382dbd3288e053331f03399e1db106c9fb0d8562ad62cb04859ae926f324fa6" +checksum = "56df0aeedf6b7a2fc67d06db35b09684c3e8da0c95f8f27685cb17e08413d87a" dependencies = [ "argh_shared", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] name = "argh_shared" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cb94155d965e3d37ffbbe7cc5b82c3dd79dd33bd48e536f73d2cfb8d85506f" +checksum = "5693f39141bda5760ecc4111ab08da40565d1771038c4a0250f03457ec707531" +dependencies = [ + "serde", +] [[package]] name = "assert_cmd" -version = "0.11.1" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc477793bd82ec39799b6f6b3df64938532fdf2ab0d49ef817eac65856a5a1e" +checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6" dependencies = [ - "escargot", + "anstyle", + "bstr", + "doc-comment", "predicates", "predicates-core", "predicates-tree", + "wait-timeout", ] [[package]] @@ -63,6 +75,17 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bstr" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + [[package]] name = "cfg-if" version = "0.1.10" @@ -89,10 +112,22 @@ dependencies = [ ] [[package]] -name = "difference" -version = "2.0.0" +name = "difflib" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" +checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "encode_unicode" @@ -101,22 +136,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] -name = "escargot" -version = "0.4.0" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceb9adbf9874d5d028b5e4c5739d22b71988252b25c9c98fe7cf9738bee84597" -dependencies = [ - "lazy_static", - "log", - "serde", - "serde_json", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "filetime" -version = "0.2.21" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" +checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" dependencies = [ "cfg-if 1.0.0", "libc", @@ -126,9 +155,9 @@ dependencies = [ [[package]] name = "float-cmp" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1267f4ac4f343772758f7b1bdcbe767c218bbab93bb432acbf5162bbf85a6c4" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" dependencies = [ "num-traits", ] @@ -174,6 +203,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +[[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + [[package]] name = "home" version = "0.5.5" @@ -184,15 +219,26 @@ dependencies = [ ] [[package]] -name = "indicatif" -version = "0.16.2" +name = "indexmap" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "indicatif" +version = "0.17.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b297dc40733f23a0e52728a58fa9489a5b7638a324932de16b41adc3ef80730" dependencies = [ "console", - "lazy_static", + "instant", "number_prefix", - "regex", + "portable-atomic", + "unicode-width", ] [[package]] @@ -215,6 +261,15 @@ dependencies = [ "libc", ] +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if 1.0.0", +] + [[package]] name = "iovec" version = "0.1.4" @@ -225,10 +280,19 @@ dependencies = [ ] [[package]] -name = "itoa" -version = "1.0.8" +name = "itertools" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "kernel32-sys" @@ -260,9 +324,9 @@ checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "memchr" @@ -350,9 +414,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", ] @@ -364,13 +428,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] -name = "predicates" -version = "1.0.8" +name = "portable-atomic" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49cfaf7fdaa3bfacc6fa3e7054e65148878354a5cfddcf661df4c851f8021df" +checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b" + +[[package]] +name = "predicates" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9" dependencies = [ - "difference", + "anstyle", + "difflib", "float-cmp", + "itertools", "normalize-line-endings", "predicates-core", "regex", @@ -394,36 +466,36 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.64" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.29" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "bitflags", ] [[package]] name = "regex" -version = "1.9.1" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" dependencies = [ "aho-corasick", "memchr", @@ -433,9 +505,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.3" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" +checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" dependencies = [ "aho-corasick", "memchr", @@ -444,9 +516,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "rustlings" @@ -468,9 +540,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "same-file" @@ -483,29 +555,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.171" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.171" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn", ] [[package]] name = "serde_json" -version = "1.0.102" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5062a995d481b2308b6064e9af76011f2921c35f97b0468811ed9f6cd91dfed" +checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" dependencies = [ "itoa", "ryu", @@ -513,30 +585,28 @@ dependencies = [ ] [[package]] -name = "slab" -version = "0.4.8" +name = "serde_spanned" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "syn" -version = "1.0.109" +version = "2.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e3fc8c0c74267e2df136e5e5fb656a464158aa57624053375eb9c8c6e25ae2" +checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" dependencies = [ "proc-macro2", "quote", @@ -551,18 +621,43 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "toml" -version = "0.5.11" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" dependencies = [ "serde", ] [[package]] -name = "unicode-ident" -version = "1.0.10" +name = "toml_edit" +version = "0.19.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "unicode-ident" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-width" @@ -570,6 +665,15 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + [[package]] name = "walkdir" version = "2.3.3" @@ -638,7 +742,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -658,17 +762,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -679,9 +783,9 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" @@ -691,9 +795,9 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" @@ -703,9 +807,9 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" @@ -715,9 +819,9 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" @@ -727,9 +831,9 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" @@ -739,9 +843,9 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" @@ -751,9 +855,18 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winnow" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" +dependencies = [ + "memchr", +] [[package]] name = "ws2_32-sys" diff --git a/Cargo.toml b/Cargo.toml index eca091f..f627dd7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,21 +10,21 @@ edition = "2021" [dependencies] argh = "0.1" -indicatif = "0.16" +indicatif = "0.17" console = "0.15" notify = "4.0" -toml = "0.5" -regex = "1.5" +toml = "0.7" +regex = "1.9" serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0.81" -home = "0.5.3" -glob = "0.3.0" +serde_json = "1.0.105" +home = "0.5.5" +glob = "0.3.1" [[bin]] name = "rustlings" path = "src/main.rs" [dev-dependencies] -assert_cmd = "0.11.0" -predicates = "1.0.1" -glob = "0.3.0" +assert_cmd = "2.0.12" +predicates = "3.0.3" +glob = "0.3.1" From c0b8af2c42c5e116cb9f91b42da4dd5d92baeaed Mon Sep 17 00:00:00 2001 From: mo8it Date: Sat, 26 Aug 2023 23:35:07 +0200 Subject: [PATCH 27/47] Fix indicatif --- src/run.rs | 3 ++- src/verify.rs | 35 +++++++++++++++++++++++++---------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/run.rs b/src/run.rs index 1e2e56c..e0ada4c 100644 --- a/src/run.rs +++ b/src/run.rs @@ -1,4 +1,5 @@ use std::process::Command; +use std::time::Duration; use crate::exercise::{Exercise, Mode}; use crate::verify::test; @@ -36,7 +37,7 @@ pub fn reset(exercise: &Exercise) -> Result<(), ()> { fn compile_and_run(exercise: &Exercise) -> Result<(), ()> { let progress_bar = ProgressBar::new_spinner(); progress_bar.set_message(format!("Compiling {exercise}...")); - progress_bar.enable_steady_tick(100); + progress_bar.enable_steady_tick(Duration::from_millis(100)); let compilation_result = exercise.compile(); let compilation = match compilation_result { diff --git a/src/verify.rs b/src/verify.rs index f3f3b56..01dd87f 100644 --- a/src/verify.rs +++ b/src/verify.rs @@ -1,7 +1,7 @@ use crate::exercise::{CompiledExercise, Exercise, Mode, State}; use console::style; use indicatif::{ProgressBar, ProgressStyle}; -use std::env; +use std::{env, time::Duration}; // Verify that the provided container of Exercise objects // can be compiled and run without any failures. @@ -17,9 +17,11 @@ pub fn verify<'a>( let (num_done, total) = progress; let bar = ProgressBar::new(total as u64); let mut percentage = num_done as f32 / total as f32 * 100.0; - bar.set_style(ProgressStyle::default_bar() - .template("Progress: [{bar:60.green/red}] {pos}/{len} {msg}") - .progress_chars("#>-") + bar.set_style( + ProgressStyle::default_bar() + .template("Progress: [{bar:60.green/red}] {pos}/{len} {msg}") + .expect("Progressbar template should be valid!") + .progress_chars("#>-"), ); bar.set_position(num_done as u64); bar.set_message(format!("({:.1} %)", percentage)); @@ -55,7 +57,7 @@ pub fn test(exercise: &Exercise, verbose: bool) -> Result<(), ()> { fn compile_only(exercise: &Exercise, success_hints: bool) -> Result { let progress_bar = ProgressBar::new_spinner(); progress_bar.set_message(format!("Compiling {exercise}...")); - progress_bar.enable_steady_tick(100); + progress_bar.enable_steady_tick(Duration::from_millis(100)); let _ = compile(exercise, &progress_bar)?; progress_bar.finish_and_clear(); @@ -67,7 +69,7 @@ fn compile_only(exercise: &Exercise, success_hints: bool) -> Result { fn compile_and_run_interactively(exercise: &Exercise, success_hints: bool) -> Result { let progress_bar = ProgressBar::new_spinner(); progress_bar.set_message(format!("Compiling {exercise}...")); - progress_bar.enable_steady_tick(100); + progress_bar.enable_steady_tick(Duration::from_millis(100)); let compilation = compile(exercise, &progress_bar)?; @@ -85,15 +87,24 @@ fn compile_and_run_interactively(exercise: &Exercise, success_hints: bool) -> Re } }; - Ok(prompt_for_completion(exercise, Some(output.stdout), success_hints)) + Ok(prompt_for_completion( + exercise, + Some(output.stdout), + success_hints, + )) } // Compile the given Exercise as a test harness and display // the output if verbose is set to true -fn compile_and_test(exercise: &Exercise, run_mode: RunMode, verbose: bool, success_hints: bool) -> Result { +fn compile_and_test( + exercise: &Exercise, + run_mode: RunMode, + verbose: bool, + success_hints: bool, +) -> Result { let progress_bar = ProgressBar::new_spinner(); progress_bar.set_message(format!("Testing {exercise}...")); - progress_bar.enable_steady_tick(100); + progress_bar.enable_steady_tick(Duration::from_millis(100)); let compilation = compile(exercise, &progress_bar)?; let result = compilation.run(); @@ -143,7 +154,11 @@ fn compile<'a, 'b>( } } -fn prompt_for_completion(exercise: &Exercise, prompt_output: Option, success_hints: bool) -> bool { +fn prompt_for_completion( + exercise: &Exercise, + prompt_output: Option, + success_hints: bool, +) -> bool { let context = match exercise.state() { State::Done => return true, State::Pending(context) => context, From 7bb69f864188906b3731725df08157131bfe9e57 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 11:37:33 +0000 Subject: [PATCH 28/47] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index e01c19c..ed165b7 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -324,6 +324,7 @@ authors. Alon Hearter
Alon Hearter

🖋 shirts
shirts

🖋 Ivan Vasiunyk
Ivan Vasiunyk

🖋 + Mo
Mo

💻 From d258c30406ff17cb06b18128eac8eff44a594e99 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 11:37:34 +0000 Subject: [PATCH 29/47] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 22d6841..c3df1ad 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2289,6 +2289,15 @@ "contributions": [ "content" ] + }, + { + "login": "mo8it", + "name": "Mo", + "avatar_url": "https://avatars.githubusercontent.com/u/76752051?v=4", + "profile": "https://mo8it.com", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 8, From 9c0581bc0faea12b790e0fa0cafe8d08a5ed028e Mon Sep 17 00:00:00 2001 From: mo8it Date: Tue, 29 Aug 2023 00:52:11 +0200 Subject: [PATCH 30/47] Use u32 instead of i32 --- exercises/structs/structs3.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/exercises/structs/structs3.rs b/exercises/structs/structs3.rs index 4851317..7cda5af 100644 --- a/exercises/structs/structs3.rs +++ b/exercises/structs/structs3.rs @@ -13,13 +13,15 @@ struct Package { sender_country: String, recipient_country: String, - weight_in_grams: i32, + weight_in_grams: u32, } impl Package { - fn new(sender_country: String, recipient_country: String, weight_in_grams: i32) -> Package { - if weight_in_grams <= 0 { - panic!("Can not ship a weightless package.") + fn new(sender_country: String, recipient_country: String, weight_in_grams: u32) -> Package { + if weight_in_grams < 10 { + // This is not how you should handle errors in Rust, + // but we will learn about error handling later. + panic!("Can not ship a package with weight below 10 grams.") } else { Package { sender_country, @@ -33,7 +35,7 @@ impl Package { // Something goes here... } - fn get_fees(&self, cents_per_gram: i32) -> ??? { + fn get_fees(&self, cents_per_gram: u32) -> ??? { // Something goes here... } } @@ -48,7 +50,7 @@ mod tests { let sender_country = String::from("Spain"); let recipient_country = String::from("Austria"); - Package::new(sender_country, recipient_country, -2210); + Package::new(sender_country, recipient_country, 5); } #[test] From 013f22c89cba7dbd935b58392a1a7d8cdcdc7eb7 Mon Sep 17 00:00:00 2001 From: x10an14 Date: Wed, 30 Aug 2023 18:03:45 +0200 Subject: [PATCH 31/47] improvement(development): Add nix-direnv integration So as to automatically open a nix devShell for those who use direnv/want to use direnv to make their lives more automated. --- .envrc | 4 ++++ .gitignore | 1 + 2 files changed, 5 insertions(+) create mode 100644 .envrc diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..4854106 --- /dev/null +++ b/.envrc @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +# Automatically Load nix devShell w/dotenv +use flake diff --git a/.gitignore b/.gitignore index 88bf2b6..f319d39 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ rust-project.json *.iml *.o public/ +.direnv/ # Local Netlify folder .netlify From 60b848760033ee3f7a6522929f7b4aa21064c5e2 Mon Sep 17 00:00:00 2001 From: x10an14 Date: Wed, 30 Aug 2023 18:09:41 +0200 Subject: [PATCH 32/47] feat(flake): Add defaults to commands in flake So that: - `nix build .#`, and - `nix run .#` both work. --- flake.nix | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/flake.nix b/flake.nix index 5dbca5c..791c36f 100644 --- a/flake.nix +++ b/flake.nix @@ -60,5 +60,18 @@ clippy ] ++ cargoBuildInputs; }; + apps = let + rustlings-app = { + type = "app"; + program = "${rustlings}/bin/rustlings"; + }; + in { + default = rustlings-app; + rustlings = rustlings-app; + }; + packages = { + inherit rustlings; + default = rustlings; + }; }); } From e7bdc83a8f910b239a0d910410a9c95ff5fd99d3 Mon Sep 17 00:00:00 2001 From: x10an14 Date: Wed, 30 Aug 2023 19:41:29 +0200 Subject: [PATCH 33/47] fix(nix/tests): Add `git` to Nix's rust build/test sandbox The integration test `reset_single_exercise` depends on Git... --- flake.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/flake.nix b/flake.nix index 5dbca5c..c6360ee 100644 --- a/flake.nix +++ b/flake.nix @@ -25,6 +25,7 @@ version = "5.5.1"; buildInputs = cargoBuildInputs; + nativeBuildInputs = [pkgs.git]; src = with pkgs.lib; cleanSourceWith { src = self; From 5a93f2a4f14d83d34aac69254262da7aaa5b752c Mon Sep 17 00:00:00 2001 From: mo8it Date: Fri, 25 Aug 2023 23:18:01 +0200 Subject: [PATCH 34/47] Port to Clap --- Cargo.lock | 133 +++++++++++++++++++++++++++++++---- Cargo.toml | 15 ++-- src/main.rs | 195 +++++++++++++++++++++------------------------------- 3 files changed, 208 insertions(+), 135 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5a40b6f..e5b8553 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,19 +4,61 @@ version = 3 [[package]] name = "aho-corasick" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" +checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" dependencies = [ "memchr", ] +[[package]] +name = "anstream" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + [[package]] name = "anstyle" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea" +[[package]] +name = "anstyle-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "anstyle-wincon" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] + [[package]] name = "argh" version = "0.1.12" @@ -77,9 +119,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bstr" -version = "1.6.0" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05" +checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a" dependencies = [ "memchr", "regex-automata", @@ -98,6 +140,52 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "clap" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a13b88d2c62ff462f88e4a121f17a82c1af05693a2f192b5c38d14de73c19f6" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + [[package]] name = "console" version = "0.15.7" @@ -209,6 +297,12 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "home" version = "0.5.5" @@ -330,9 +424,9 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" [[package]] name = "mio" @@ -493,9 +587,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ "aho-corasick", "memchr", @@ -505,9 +599,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" dependencies = [ "aho-corasick", "memchr", @@ -526,6 +620,7 @@ version = "5.5.1" dependencies = [ "argh", "assert_cmd", + "clap", "console", "glob", "home", @@ -603,10 +698,16 @@ dependencies = [ ] [[package]] -name = "syn" -version = "2.0.29" +name = "strsim" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "2.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398" dependencies = [ "proc-macro2", "quote", @@ -665,6 +766,12 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "wait-timeout" version = "0.2.0" diff --git a/Cargo.toml b/Cargo.toml index f627dd7..2c2a92b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,15 +10,16 @@ edition = "2021" [dependencies] argh = "0.1" -indicatif = "0.17" +indicatif = "0.17.6" console = "0.15" notify = "4.0" -toml = "0.7" -regex = "1.9" +toml = "0.7.6" +regex = "1.5" serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0.105" -home = "0.5.5" -glob = "0.3.1" +serde_json = "1.0.81" +home = "0.5.3" +glob = "0.3.0" +clap = { version = "4.4.0", features = ["derive"] } [[bin]] name = "rustlings" @@ -27,4 +28,4 @@ path = "src/main.rs" [dev-dependencies] assert_cmd = "2.0.12" predicates = "3.0.3" -glob = "0.3.1" +glob = "0.3.0" diff --git a/src/main.rs b/src/main.rs index 1a15086..a4b764d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ use crate::exercise::{Exercise, ExerciseList}; use crate::project::RustAnalyzerProject; use crate::run::{reset, run}; use crate::verify::verify; -use argh::FromArgs; +use clap::{Parser, Subcommand}; use console::Emoji; use notify::DebouncedEvent; use notify::{RecommendedWatcher, RecursiveMode, Watcher}; @@ -25,111 +25,69 @@ mod project; mod run; mod verify; -// In sync with crate version -const VERSION: &str = "5.5.1"; - -#[derive(FromArgs, PartialEq, Debug)] /// Rustlings is a collection of small exercises to get you used to writing and reading Rust code +#[derive(Parser)] +#[command(version)] struct Args { - /// show outputs from the test exercises - #[argh(switch)] + /// Show outputs from the test exercises + #[arg(long)] nocapture: bool, - /// show the executable version - #[argh(switch, short = 'v')] - version: bool, - #[argh(subcommand)] - nested: Option, + #[command(subcommand)] + command: Option, } -#[derive(FromArgs, PartialEq, Debug)] -#[argh(subcommand)] +#[derive(Subcommand)] enum Subcommands { - Verify(VerifyArgs), - Watch(WatchArgs), - Run(RunArgs), - Reset(ResetArgs), - Hint(HintArgs), - List(ListArgs), - Lsp(LspArgs), -} - -#[derive(FromArgs, PartialEq, Debug)] -#[argh(subcommand, name = "verify")] -/// Verifies all exercises according to the recommended order -struct VerifyArgs {} - -#[derive(FromArgs, PartialEq, Debug)] -#[argh(subcommand, name = "watch")] -/// Reruns `verify` when files were edited -struct WatchArgs { - /// show hints on success - #[argh(switch)] - success_hints: bool, -} - -#[derive(FromArgs, PartialEq, Debug)] -#[argh(subcommand, name = "run")] -/// Runs/Tests a single exercise -struct RunArgs { - #[argh(positional)] - /// the name of the exercise - name: String, -} - -#[derive(FromArgs, PartialEq, Debug)] -#[argh(subcommand, name = "reset")] -/// Resets a single exercise using "git stash -- " -struct ResetArgs { - #[argh(positional)] - /// the name of the exercise - name: String, -} - -#[derive(FromArgs, PartialEq, Debug)] -#[argh(subcommand, name = "hint")] -/// Returns a hint for the given exercise -struct HintArgs { - #[argh(positional)] - /// the name of the exercise - name: String, -} - -#[derive(FromArgs, PartialEq, Debug)] -#[argh(subcommand, name = "lsp")] -/// Enable rust-analyzer for exercises -struct LspArgs {} - -#[derive(FromArgs, PartialEq, Debug)] -#[argh(subcommand, name = "list")] -/// Lists the exercises available in Rustlings -struct ListArgs { - #[argh(switch, short = 'p')] - /// show only the paths of the exercises - paths: bool, - #[argh(switch, short = 'n')] - /// show only the names of the exercises - names: bool, - #[argh(option, short = 'f')] - /// provide a string to match exercise names - /// comma separated patterns are acceptable - filter: Option, - #[argh(switch, short = 'u')] - /// display only exercises not yet solved - unsolved: bool, - #[argh(switch, short = 's')] - /// display only exercises that have been solved - solved: bool, + /// Verify all exercises according to the recommended order + Verify, + /// Rerun `verify` when files were edited + Watch { + /// Show hints on success + #[arg(long)] + success_hints: bool, + }, + /// Run/Test a single exercise + Run { + /// The name of the exercise + name: String, + }, + /// Reset a single exercise using "git stash -- " + Reset { + /// The name of the exercise + name: String, + }, + /// Return a hint for the given exercise + Hint { + /// The name of the exercise + name: String, + }, + /// List the exercises available in Rustlings + List { + /// Show only the paths of the exercises + #[arg(short, long)] + paths: bool, + /// Show only the names of the exercises + #[arg(short, long)] + names: bool, + /// Provide a string to match exercise names. + /// Comma separated patterns are accepted + #[arg(short, long)] + filter: Option, + /// Display only exercises not yet solved + #[arg(short, long)] + unsolved: bool, + /// Display only exercises that have been solved + #[arg(short, long)] + solved: bool, + }, + /// Enable rust-analyzer for exercises + Lsp, } fn main() { - let args: Args = argh::from_env(); + let args = Args::parse(); - if args.version { - println!("v{VERSION}"); - std::process::exit(0); - } - - if args.nested.is_none() { + if args.command.is_none() { println!("\n{WELCOME}\n"); } @@ -153,17 +111,24 @@ fn main() { let exercises = toml::from_str::(toml_str).unwrap().exercises; let verbose = args.nocapture; - let command = args.nested.unwrap_or_else(|| { + let command = args.command.unwrap_or_else(|| { println!("{DEFAULT_OUT}\n"); std::process::exit(0); }); + match command { - Subcommands::List(subargs) => { - if !subargs.paths && !subargs.names { + Subcommands::List { + paths, + names, + filter, + unsolved, + solved, + } => { + if !paths && !names { println!("{:<17}\t{:<46}\t{:<7}", "Name", "Path", "Status"); } let mut exercises_done: u16 = 0; - let filters = subargs.filter.clone().unwrap_or_default().to_lowercase(); + let filters = filter.clone().unwrap_or_default().to_lowercase(); exercises.iter().for_each(|e| { let fname = format!("{}", e.path.display()); let filter_cond = filters @@ -177,14 +142,14 @@ fn main() { "Pending" }; let solve_cond = { - (e.looks_done() && subargs.solved) - || (!e.looks_done() && subargs.unsolved) - || (!subargs.solved && !subargs.unsolved) + (e.looks_done() && solved) + || (!e.looks_done() && unsolved) + || (!solved && !unsolved) }; - if solve_cond && (filter_cond || subargs.filter.is_none()) { - let line = if subargs.paths { + if solve_cond && (filter_cond || filter.is_none()) { + let line = if paths { format!("{fname}\n") - } else if subargs.names { + } else if names { format!("{}\n", e.name) } else { format!("{:<17}\t{fname:<46}\t{status:<7}\n", e.name) @@ -214,30 +179,30 @@ fn main() { std::process::exit(0); } - Subcommands::Run(subargs) => { - let exercise = find_exercise(&subargs.name, &exercises); + Subcommands::Run { name } => { + let exercise = find_exercise(&name, &exercises); run(exercise, verbose).unwrap_or_else(|_| std::process::exit(1)); } - Subcommands::Reset(subargs) => { - let exercise = find_exercise(&subargs.name, &exercises); + Subcommands::Reset { name } => { + let exercise = find_exercise(&name, &exercises); reset(exercise).unwrap_or_else(|_| std::process::exit(1)); } - Subcommands::Hint(subargs) => { - let exercise = find_exercise(&subargs.name, &exercises); + Subcommands::Hint { name } => { + let exercise = find_exercise(&name, &exercises); println!("{}", exercise.hint); } - Subcommands::Verify(_subargs) => { + Subcommands::Verify => { verify(&exercises, (0, exercises.len()), verbose, false) .unwrap_or_else(|_| std::process::exit(1)); } - Subcommands::Lsp(_subargs) => { + Subcommands::Lsp => { let mut project = RustAnalyzerProject::new(); project .get_sysroot_src() @@ -256,7 +221,7 @@ fn main() { } } - Subcommands::Watch(_subargs) => match watch(&exercises, verbose, _subargs.success_hints) { + Subcommands::Watch { success_hints } => match watch(&exercises, verbose, success_hints) { Err(e) => { println!( "Error: Could not watch your progress. Error message was {:?}.", From 362318a6e04a1ffa80fe85e1f4c1cf03686d1109 Mon Sep 17 00:00:00 2001 From: mo8it Date: Sat, 26 Aug 2023 00:00:56 +0200 Subject: [PATCH 35/47] Adapt tests --- tests/integration_tests.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index 4c236fd..d1694a3 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -97,7 +97,10 @@ fn run_single_test_no_filename() { .arg("run") .current_dir("tests/fixture/") .assert() - .code(1); + .code(2) + .stderr(predicates::str::contains( + "required arguments were not provided", + )); } #[test] @@ -125,9 +128,9 @@ fn reset_no_exercise() { .unwrap() .arg("reset") .assert() - .code(1) + .code(2) .stderr(predicates::str::contains( - "positional arguments not provided", + "required arguments were not provided", )); } From 11f4ec93aceab5491e57cf10390b6838baaa2f98 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 11:37:09 +0000 Subject: [PATCH 36/47] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index ed165b7..8cfab68 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -325,6 +325,7 @@ authors. shirts
shirts

🖋 Ivan Vasiunyk
Ivan Vasiunyk

🖋 Mo
Mo

💻 + x10an14
x10an14

🚇 From 4a9699226a1777a5a98cb37eaf1b09e3d2427d6f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 11:37:10 +0000 Subject: [PATCH 37/47] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index c3df1ad..656bf1d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2298,6 +2298,15 @@ "contributions": [ "code" ] + }, + { + "login": "x10an14", + "name": "x10an14", + "avatar_url": "https://avatars.githubusercontent.com/u/710608?v=4", + "profile": "https://github.com/x10an14", + "contributions": [ + "infra" + ] } ], "contributorsPerLine": 8, From a059ded709b838a62dc2544553d749409e0c0b7e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 11:46:41 +0000 Subject: [PATCH 38/47] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 8cfab68..4b673e6 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -326,6 +326,7 @@ authors. Ivan Vasiunyk
Ivan Vasiunyk

🖋 Mo
Mo

💻 x10an14
x10an14

🚇 + Roi Gabay
Roi Gabay

🖋 From 7d53abdb0af4771ccb0917550636ef2e4100bb80 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 11:46:42 +0000 Subject: [PATCH 39/47] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 656bf1d..c4aabed 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2307,6 +2307,15 @@ "contributions": [ "infra" ] + }, + { + "login": "gabay", + "name": "Roi Gabay", + "avatar_url": "https://avatars.githubusercontent.com/u/5773610?v=4", + "profile": "https://github.com/gabay", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 27881a83d4b569871845261d57c9a65d0b1be440 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 11:52:11 +0000 Subject: [PATCH 40/47] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 4b673e6..7bc4468 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -327,6 +327,7 @@ authors. Mo
Mo

💻 x10an14
x10an14

🚇 Roi Gabay
Roi Gabay

🖋 + Máté Kovács
Máté Kovács

🖋 From 4aa5ca28183eb76b4e06bd6cfcfe1c0a80a93e48 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 11:52:13 +0000 Subject: [PATCH 41/47] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index c4aabed..6547936 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2316,6 +2316,15 @@ "contributions": [ "content" ] + }, + { + "login": "mkovaxx", + "name": "Máté Kovács", + "avatar_url": "https://avatars.githubusercontent.com/u/481354?v=4", + "profile": "https://github.com/mkovaxx", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From a09a0c47aec37215ed3ff5260ee77f732fc866de Mon Sep 17 00:00:00 2001 From: liv Date: Mon, 4 Sep 2023 13:53:54 +0200 Subject: [PATCH 42/47] fix: add extra line in if3 comment --- exercises/if/if3.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/exercises/if/if3.rs b/exercises/if/if3.rs index 0040023..1696274 100644 --- a/exercises/if/if3.rs +++ b/exercises/if/if3.rs @@ -28,6 +28,7 @@ pub fn animal_habitat(animal: &str) -> &'static str { habitat } + // No test changes needed. #[cfg(test)] mod tests { From bb550497d5211ff71d1fa4867a4e4ce2e1a67d04 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 11:55:27 +0000 Subject: [PATCH 43/47] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 7bc4468..cbf7436 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -328,6 +328,7 @@ authors. x10an14
x10an14

🚇 Roi Gabay
Roi Gabay

🖋 Máté Kovács
Máté Kovács

🖋 + Gábor Szabó
Gábor Szabó

🖋 From 8ca60f2cbbe635d921b471f0e9b7965e000e7a08 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 11:55:28 +0000 Subject: [PATCH 44/47] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 6547936..f1b1fe1 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2325,6 +2325,15 @@ "contributions": [ "content" ] + }, + { + "login": "szabgab", + "name": "Gábor Szabó", + "avatar_url": "https://avatars.githubusercontent.com/u/48833?v=4", + "profile": "https://szabgab.com/", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 47e14cff8da2de6f5bb2d328ac56275e65d00dde Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 11:58:24 +0000 Subject: [PATCH 45/47] docs: update AUTHORS.md [skip ci] --- AUTHORS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AUTHORS.md b/AUTHORS.md index cbf7436..76d3a58 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -330,6 +330,9 @@ authors. Máté Kovács
Máté Kovács

🖋 Gábor Szabó
Gábor Szabó

🖋 + + Yamila Moreno
Yamila Moreno

🖋 + From dce89aefb99bc6d774c98e45121989253fa8c5a3 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 11:58:25 +0000 Subject: [PATCH 46/47] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index f1b1fe1..8ceb899 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2334,6 +2334,15 @@ "contributions": [ "content" ] + }, + { + "login": "yamila-moreno", + "name": "Yamila Moreno", + "avatar_url": "https://avatars.githubusercontent.com/u/3340793?v=4", + "profile": "https://moduslaborandi.net", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, From 51e237d5f97610294798710ef8ba5349c2fd50c7 Mon Sep 17 00:00:00 2001 From: liv Date: Mon, 4 Sep 2023 14:20:37 +0200 Subject: [PATCH 47/47] fix: refactor move semantics 1-4 into tests --- exercises/move_semantics/move_semantics1.rs | 15 +++++---------- exercises/move_semantics/move_semantics2.rs | 18 ++++++------------ exercises/move_semantics/move_semantics3.rs | 13 ++++--------- exercises/move_semantics/move_semantics4.rs | 16 ++++++---------- info.toml | 16 ++++++---------- 5 files changed, 27 insertions(+), 51 deletions(-) diff --git a/exercises/move_semantics/move_semantics1.rs b/exercises/move_semantics/move_semantics1.rs index 710d20d..e063937 100644 --- a/exercises/move_semantics/move_semantics1.rs +++ b/exercises/move_semantics/move_semantics1.rs @@ -5,24 +5,19 @@ // I AM NOT DONE +#[test] fn main() { - let vec0 = Vec::new(); + let vec0 = vec![22, 44, 66]; let vec1 = fill_vec(vec0); - println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1); - - vec1.push(88); - - println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1); + assert_eq!(vec1, vec![22, 44, 66, 88]); } fn fill_vec(vec: Vec) -> Vec { - let mut vec = vec; + let vec = vec; - vec.push(22); - vec.push(44); - vec.push(66); + vec.push(88); vec } diff --git a/exercises/move_semantics/move_semantics2.rs b/exercises/move_semantics/move_semantics2.rs index 72d37fa..baf6bcc 100644 --- a/exercises/move_semantics/move_semantics2.rs +++ b/exercises/move_semantics/move_semantics2.rs @@ -1,32 +1,26 @@ // move_semantics2.rs // -// Expected output: -// vec0 has length 3, with contents `[22, 44, 66]` -// vec1 has length 4, with contents `[22, 44, 66, 88]` +// Make the test pass by finding a way to keep both Vecs separate! // // Execute `rustlings hint move_semantics2` or use the `hint` watch subcommand // for a hint. // I AM NOT DONE +#[test] fn main() { - let vec0 = Vec::new(); + let vec0 = vec![22, 44, 66]; let mut vec1 = fill_vec(vec0); - println!("{} has length {}, with contents: `{:?}`", "vec0", vec0.len(), vec0); - - vec1.push(88); - - println!("{} has length {}, with contents `{:?}`", "vec1", vec1.len(), vec1); + assert_eq!(vec0, vec![22, 44, 66]); + assert_eq!(vec1, vec![22, 44, 66, 88]); } fn fill_vec(vec: Vec) -> Vec { let mut vec = vec; - vec.push(22); - vec.push(44); - vec.push(66); + vec.push(88); vec } diff --git a/exercises/move_semantics/move_semantics3.rs b/exercises/move_semantics/move_semantics3.rs index ea21493..69e564a 100644 --- a/exercises/move_semantics/move_semantics3.rs +++ b/exercises/move_semantics/move_semantics3.rs @@ -8,22 +8,17 @@ // I AM NOT DONE +#[test] fn main() { - let vec0 = Vec::new(); + let vec0 = vec![22, 44, 66]; let mut vec1 = fill_vec(vec0); - println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1); - - vec1.push(88); - - println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1); + assert_eq!(vec1, vec![22, 44, 66, 88]); } fn fill_vec(vec: Vec) -> Vec { - vec.push(22); - vec.push(44); - vec.push(66); + vec.push(88); vec } diff --git a/exercises/move_semantics/move_semantics4.rs b/exercises/move_semantics/move_semantics4.rs index 75a3b6b..80b49db 100644 --- a/exercises/move_semantics/move_semantics4.rs +++ b/exercises/move_semantics/move_semantics4.rs @@ -9,25 +9,21 @@ // I AM NOT DONE +#[test] fn main() { - let vec0 = Vec::new(); + let vec0 = vec![22, 44, 66]; let mut vec1 = fill_vec(vec0); - println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1); - - vec1.push(88); - - println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1); + assert_eq!(vec1, vec![22, 44, 66, 88]); } -// `fill_vec()` no longer takes `vec: Vec` as argument +// `fill_vec()` no longer takes `vec: Vec` as argument - don't change this! fn fill_vec() -> Vec { + // Instead, let's create and fill the Vec in here - how do you do that? let mut vec = vec; - vec.push(22); - vec.push(44); - vec.push(66); + vec.push(88); vec } diff --git a/info.toml b/info.toml index 0aca022..b41985e 100644 --- a/info.toml +++ b/info.toml @@ -284,9 +284,9 @@ better. What do you think is the more commonly used pattern under Rust developer [[exercises]] name = "move_semantics1" path = "exercises/move_semantics/move_semantics1.rs" -mode = "compile" +mode = "test" hint = """ -So you've got the "cannot borrow immutable local variable `vec1` as mutable" error on the line +So you've got the "cannot borrow immutable local variable `vec` as mutable" error on the line where we push an element to the vector, right? The fix for this is going to be adding one keyword, and the addition is NOT on the line where we push to the vector (where the error is). @@ -296,7 +296,7 @@ Also: Try accessing `vec0` after having called `fill_vec()`. See what happens!"" [[exercises]] name = "move_semantics2" path = "exercises/move_semantics/move_semantics2.rs" -mode = "compile" +mode = "test" hint = """ When running this exercise for the first time, you'll notice an error about "borrow of moved value". In Rust, when an argument is passed to a function and @@ -309,16 +309,12 @@ Rust provides a couple of different ways to mitigate this issue, feel free to tr 2. Make `fill_vec` borrow its argument instead of taking ownership of it, and then copy the data within the function (`vec.clone()`) in order to return an owned `Vec`. -3. Or, you could make `fill_vec` *mutably* borrow a reference to its argument (which will need to be - mutable), modify it directly, then not return anything. This means that `vec0` will change over the - course of the function, and makes `vec1` redundant (make sure to change the parameters of the `println!` - statements if you go this route) """ [[exercises]] name = "move_semantics3" path = "exercises/move_semantics/move_semantics3.rs" -mode = "compile" +mode = "test" hint = """ The difference between this one and the previous ones is that the first line of `fn fill_vec` that had `let mut vec = vec;` is no longer there. You can, @@ -328,7 +324,7 @@ an existing binding to be a mutable binding instead of an immutable one :)""" [[exercises]] name = "move_semantics4" path = "exercises/move_semantics/move_semantics4.rs" -mode = "compile" +mode = "test" hint = """ Stop reading whenever you feel like you have enough direction :) Or try doing one step and then fixing the compiler errors that result! @@ -337,7 +333,7 @@ So the end goal is to: - so then `vec0` doesn't exist, so we can't pass it to `fill_vec` - `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`""" + a new vec in `fill_vec`, and fill it with the expected values""" [[exercises]] name = "move_semantics5"