Compare commits

...

1611 Commits
5.4.0 ... main

Author SHA1 Message Date
mo8it
cb60c8887c Update deps
Some checks failed
Check / clippy (push) Has been cancelled
Check / fmt (push) Has been cancelled
Check / test (macos-latest) (push) Has been cancelled
Check / test (ubuntu-latest) (push) Has been cancelled
Check / test (windows-latest) (push) Has been cancelled
Check / dev-check (push) Has been cancelled
2025-06-03 10:30:36 +02:00
mo8it
46814d397a Fix path in action
Some checks failed
Check / clippy (push) Has been cancelled
Check / fmt (push) Has been cancelled
Check / test (macos-latest) (push) Has been cancelled
Check / test (ubuntu-latest) (push) Has been cancelled
Check / test (windows-latest) (push) Has been cancelled
Check / dev-check (push) Has been cancelled
2025-05-23 13:44:30 +02:00
mo8it
734fc482eb Make path relative 2025-05-23 13:37:15 +02:00
mo8it
520dfdc464 Add workflow_dispatch to website workflow 2025-05-23 13:33:51 +02:00
Mo Bitar
2267f99684
Merge pull request #2247 from rust-lang/website
Website
2025-05-23 13:26:52 +02:00
mo8it
bf74a3d0a7 Update the README with more context before the website link 2025-05-23 13:21:05 +02:00
mo8it
adf3ddd968 Remove rustywind from dev deps 2025-05-23 13:17:21 +02:00
mo8it
f80c2edc3d Remove fnm 2025-05-23 13:17:14 +02:00
mo8it
04520ae7ad Use the website link as header 2025-05-19 18:30:40 +02:00
mo8it
e36dd7a120 Update MSRV in the release hook
Some checks failed
Rustlings Tests / clippy (push) Has been cancelled
Rustlings Tests / fmt (push) Has been cancelled
Rustlings Tests / test (macos-latest) (push) Has been cancelled
Rustlings Tests / test (ubuntu-latest) (push) Has been cancelled
Rustlings Tests / test (windows-latest) (push) Has been cancelled
Rustlings Tests / dev-check (push) Has been cancelled
Web / Build and deploy site and docs (push) Has been cancelled
2025-05-19 18:21:40 +02:00
mo8it
edc8528dde Improve CI 2025-05-19 18:20:34 +02:00
mo8it
47e490a997 Run rustywind 2025-05-17 22:33:17 +02:00
mo8it
596e7f36cc Add website CI 2025-05-17 22:33:00 +02:00
mo8it
512ded81c4 Done community exercises page 2025-05-17 22:05:57 +02:00
mo8it
69a9e9cafc Less top margin for blockquotes 2025-05-17 22:05:48 +02:00
mo8it
54a74fd638 Use internal links for validation 2025-05-17 21:28:25 +02:00
mo8it
a51d6f1309 third-party/custom -> community 2025-05-17 21:25:19 +02:00
mo8it
f6a657a0c3 Finish the usage page 2025-05-17 21:02:45 +02:00
mo8it
8c24763259 Q/A -> Q&A 2025-05-17 21:02:01 +02:00
mo8it
dc468882cc Highlight platform 2025-05-17 20:45:28 +02:00
mo8it
5fc787f4e4 Style details body 2025-05-17 20:45:20 +02:00
mo8it
8fa598ae7e Add details shortcode 2025-05-17 20:20:19 +02:00
mo8it
2f700991f3 Remove macros 2025-05-17 19:53:30 +02:00
mo8it
b4a6b87e24 Less padding 2025-05-17 19:34:53 +02:00
mo8it
984e9fea7c Merge branch 'main' 2025-05-17 16:17:20 +02:00
mo8it
8339007633 Update setup and usage 2025-05-17 16:06:04 +02:00
mo8it
23b9aa3a15 Move Q/A menu item 2025-05-17 16:05:42 +02:00
mo8it
69fe9626da Update base URL 2025-05-17 16:05:26 +02:00
mo8it
f387f4c1d9 Add setup and usage pages 2025-05-17 15:49:26 +02:00
liv
40fe3aa741 remove oranda path_prefix
Some checks failed
Rustlings Tests / clippy (push) Has been cancelled
Rustlings Tests / fmt (push) Has been cancelled
Rustlings Tests / test (macos-latest) (push) Has been cancelled
Rustlings Tests / test (ubuntu-latest) (push) Has been cancelled
Rustlings Tests / test (windows-latest) (push) Has been cancelled
Rustlings Tests / dev-check (push) Has been cancelled
Web / Build and deploy site and docs (push) Has been cancelled
2025-05-17 15:48:04 +02:00
mo8it
b30973afa1 Compress the intro 2025-05-17 14:53:38 +02:00
mo8it
3d8bef4bc3 Remove landscape mode recommendation 2025-05-17 14:53:20 +02:00
mo8it
2673177b17 Update header and footer 2025-05-17 13:02:34 +02:00
mo8it
6d5369d4d0 Add more menu and footer items 2025-05-17 12:25:55 +02:00
mo8it
b9d1e636a4 Reduce the README to the website link 2025-05-17 12:25:32 +02:00
mo8it
7e26418952 Remove the third-party exercises file 2025-05-17 12:25:08 +02:00
mo8it
61c17cb349 Change syntax highlighting theme 2025-05-17 12:24:44 +02:00
mo8it
fda18e8895 Add Ferris SVGs 2025-05-17 12:24:27 +02:00
mo8it
7ec6986965 Add templates 2025-05-16 23:11:08 +02:00
mo8it
74ab9924b4 Start with Zola 2025-05-16 21:08:29 +02:00
mo8it
a28000acc4 Remove markdown lint 2025-05-16 11:35:46 +02:00
mo8it
08548abcc2 Remove .editorconfig 2025-05-16 11:35:24 +02:00
mo8it
5927a781a3 Remove Oranda 2025-05-16 11:29:32 +02:00
mo8it
e73fff3bd4 Add dev alias
Some checks failed
Rustlings Tests / clippy (push) Has been cancelled
Rustlings Tests / fmt (push) Has been cancelled
Rustlings Tests / test (macos-latest) (push) Has been cancelled
Rustlings Tests / test (ubuntu-latest) (push) Has been cancelled
Rustlings Tests / test (windows-latest) (push) Has been cancelled
Rustlings Tests / dev-check (push) Has been cancelled
Web / Build and deploy site and docs (push) Has been cancelled
2025-05-16 11:09:06 +02:00
mo8it
8dff0df266 Use std pipe 2025-05-16 11:09:06 +02:00
liv
5ee7dfb5c2 chore: build site with proper path prefix 2025-05-16 11:05:02 +02:00
mo8it
9a3586878d Sync solution
Some checks failed
Rustlings Tests / clippy (push) Has been cancelled
Rustlings Tests / fmt (push) Has been cancelled
Rustlings Tests / test (macos-latest) (push) Has been cancelled
Rustlings Tests / test (ubuntu-latest) (push) Has been cancelled
Rustlings Tests / test (windows-latest) (push) Has been cancelled
Rustlings Tests / dev-check (push) Has been cancelled
Web / Build and deploy site and docs (push) Has been cancelled
2025-05-13 16:24:42 +02:00
Mo Bitar
a99433c62d
Merge pull request #2215 from Rudxain/strim
test idempotence of `trim_me` in `strings3.rs`
2025-05-13 16:23:35 +02:00
mo8it
e76ca5e2b9 Use a separate target dir for rust analyzer
Some checks failed
Rustlings Tests / clippy (push) Has been cancelled
Rustlings Tests / fmt (push) Has been cancelled
Rustlings Tests / test (macos-latest) (push) Has been cancelled
Rustlings Tests / test (ubuntu-latest) (push) Has been cancelled
Rustlings Tests / test (windows-latest) (push) Has been cancelled
Rustlings Tests / dev-check (push) Has been cancelled
Web / Build and deploy site and docs (push) Has been cancelled
2025-05-12 20:38:04 +02:00
mo8it
48bab77609 Apply Clippy lints 2025-05-12 20:31:13 +02:00
mo8it
a063bcfb4c Update deps 2025-05-12 20:30:56 +02:00
mo8it
c5f49cfa48 Remove needless_option_as_deref exception 2025-05-12 20:30:51 +02:00
mo8it
9bcd4198c5 Fix formatting 2025-04-29 21:36:56 +02:00
mo8it
29dc8ea9fa Update deps 2025-04-29 21:35:58 +02:00
Mo Bitar
fa91814aa9
Merge pull request #2232 from ethdew19/main
Fix typo in traits hint
2025-04-29 21:34:47 +02:00
Mo Bitar
0b91db2195
Merge pull request #2236 from rahmatnazali/ice_cream
Fix possible typo of `icecream` to `ice cream` on `options1.rs`
2025-04-29 21:34:21 +02:00
Rahmat Nazali Salimi
7b2d42b0f0
Change icecream to ice cream 2025-04-10 15:38:43 +07:00
Ethan
bd3bdd620b Fix typo in traits hint 2025-04-08 20:23:11 -05:00
Mo Bitar
8b4562e102
Merge pull request #2219 from ubitux/no-todo
Remove TODO from 2 solutions
2025-04-03 19:36:06 +02:00
mo8it
63d8986f2a Update links 2025-04-03 18:22:55 +02:00
mo8it
ecaecc2f76 Update deps 2025-04-03 17:58:36 +02:00
Mo Bitar
78194b4441
Merge pull request #2224 from cassian-goode/patch-1
Fix typo - errors5.rs
2025-04-03 17:52:57 +02:00
Mo Bitar
44699e9b1b
Merge pull request #2227 from Hunter-Plus/patch-1
Update README.md
2025-04-03 17:52:15 +02:00
Hunter Z
9978c17d5f
Update README.md
Update the URL while add more reference.
2025-03-31 12:58:06 +08:00
cassian-goode
3cc7e0377c
Fix typo - errors5.rs
Minor typo correction in exercise instructions
2025-03-25 09:24:49 -04:00
Clément Bœsch
d2abc359cc Remove TODO from 2 solutions 2025-03-17 18:36:13 +01:00
mo8it
7c0d269279 Update README 2025-03-14 11:42:16 +01:00
mo8it
8db85946af Update deps 2025-03-14 11:33:56 +01:00
mo8it
7019f4d178 Update pipeline 2025-03-14 11:33:56 +01:00
Ricardo Fernández Serrata
fcd77a83cc
test trim idempotence 2025-03-07 19:17:11 -04:00
Mo Bitar
ae444eb3da
Merge pull request #2213 from peterneave/main
Use consistent apostrophes in markdown files
2025-03-02 17:30:29 +01:00
Peter Neave
425c9821e0 Use consistent apostrophes in markdown files 2025-02-28 11:46:39 +11:00
mo8it
46c6fb2c82 Update deps 2025-02-25 11:21:19 +01:00
mo8it
374c3874af Apply 2024 edition formatting to solutions 2025-02-21 13:08:34 +01:00
mo8it
1eb6c1e469 Update the edition of the solution format checker 2025-02-21 13:06:11 +01:00
mo8it
06af3ffc99 Bump MSRV in release hook 2025-02-18 20:17:27 +01:00
mo8it
65dc019fa6 Fix new Clippy error in solution 2025-02-18 20:15:50 +01:00
mo8it
a56ccb6f4f Fix new Clippy lint 2025-02-18 20:12:23 +01:00
mo8it
d9872f2615 Upgrade to edition 2024 2025-02-18 20:10:52 +01:00
mo8it
298be671b9 Update deps 2025-02-18 20:03:49 +01:00
mo8it
fbfd4f25e7 Disable following symlinks in the watcher 2025-01-16 10:41:48 +01:00
mo8it
d12735a573 Update deps 2025-01-16 10:41:17 +01:00
mo8it
1aec7c1152 Fix Windows CI 2025-01-01 22:07:41 +01:00
mo8it
0b55809bb9 Fix building from source on Windows 2025-01-01 22:01:39 +01:00
mo8it
bde6f7470c Co-ordinates -> Coordinates 2024-12-28 16:46:24 +01:00
mo8it
53ec59ed95 Rename translations 2024-12-28 16:41:43 +01:00
mo8it
ed1ee38923 Link to simplified Chinese translation 2024-12-28 16:40:07 +01:00
Mo
26cf4989a2
Merge pull request #2173 from JoelMarcey/if2-comment-fix
Fix argument comment in test of if2.rs
2024-12-13 19:48:16 +01:00
Joel Marcey
6e60f441e9
Fix argument comment in test of if2.rs 2024-12-13 10:44:21 -08:00
mo8it
d07de879a7 Update deps 2024-12-11 00:12:49 +01:00
Mo
dd0634c483
Merge pull request #2158 from mnshdw/mnshdw/feedback-errors6
errors6: Add alternative solution using From trait
2024-11-14 14:49:57 +01:00
Antoine Dupuis
fc0cd8f0f8 Switch comment style to // 2024-11-14 09:14:40 +01:00
Antoine Dupuis
d5cae8ff59 Add alternative solution using From trait 2024-11-13 23:51:09 +01:00
mo8it
38016cb2d6 clippy3: Make the intent more clear 2024-11-13 16:06:41 +01:00
mo8it
e6cb104294 chore: Release 2024-11-11 15:51:27 +01:00
mo8it
410eb69d25 Remove "chore: " from the commit message of releases 2024-11-11 15:49:50 +01:00
mo8it
243cf5f261 Update CHANGELOG 2024-11-11 15:49:24 +01:00
mo8it
eff2ce8a23 Ignore input while checking all exercises in watch mode 2024-11-11 14:55:58 +01:00
mo8it
fd33c29b26 Test with MSRV before release 2024-11-11 14:43:51 +01:00
mo8it
f49164e69b Fix typo 2024-11-11 14:43:38 +01:00
mo8it
9bc7bbe4b4 Update deps 2024-11-11 14:35:22 +01:00
mo8it
46ad25f925 Fix contrast in terminals with a light theme 2024-11-11 14:34:33 +01:00
mo8it
2a725fb137 Upgrade notify 2024-10-29 14:25:44 +01:00
mo8it
449858655d Update deps 2024-10-26 16:55:15 +02:00
mo8it
e8c2a79516 Deduplicate code for printing keys 2024-10-26 16:55:15 +02:00
Mo
ea85c1b46e
Merge pull request #2142 from cenviity/push-qoxkvmtkyvmv
threads1: Fix typos in description
2024-10-22 12:35:25 +02:00
Vincent Ging Ho Yim
6bec6f92c4 threads1: Fix typos in description 2024-10-22 16:53:23 +11:00
mo8it
930a0ea73b list: Highlight search match in exercise names 2024-10-17 16:00:10 +02:00
mo8it
7e2f56f41a Use the default hasher 2024-10-17 15:03:43 +02:00
mo8it
e90f5f03f3 Mention the Q&A category 2024-10-17 14:59:37 +02:00
mo8it
0e090ae112 Add required type annotation 2024-10-17 14:49:07 +02:00
mo8it
99496706c5 Apply new Clippy lints 2024-10-17 14:49:07 +02:00
mo8it
f146553dea hashmap3: Use or_default 2024-10-17 14:49:07 +02:00
Mo
0432e07864
Merge pull request #2130 from Nahor/typo
Fix typos
2024-10-14 20:06:30 +02:00
Nahor
f33ba139b4 Fix typos 2024-10-14 10:17:17 -07:00
mo8it
990a722852 Limit the maximum number of exercises to 999 2024-10-14 15:57:44 +02:00
mo8it
a675cb5754 Replace ahash with foldhash 2024-10-14 15:24:42 +02:00
Mo
baeeff389c
Merge pull request #2122 from Nahor/check_all
Improvement to "check all exercises"
2024-10-14 01:29:25 +02:00
mo8it
932bc25d88 Remove unneeded line 2024-10-14 01:28:34 +02:00
mo8it
bdc6dad8de Update names 2024-10-14 01:28:12 +02:00
mo8it
ea73af9ba3 Separate initialization with a struct 2024-10-14 01:06:11 +02:00
mo8it
fc5fc0920f Remove outdated comments 2024-10-14 00:48:12 +02:00
mo8it
9705c161b4 Remove the tracking of done and pending 2024-10-14 00:45:41 +02:00
mo8it
8cac21511c Small improvements to showing progress 2024-10-14 00:42:49 +02:00
mo8it
396ee4d618 Show progress with exercise numbers 2024-10-13 23:28:17 +02:00
mo8it
326169a7fa Improve check-all command 2024-10-13 22:02:41 +02:00
mo8it
685e069c58 First PR review changes 2024-10-10 19:43:35 +02:00
mo8it
84a42a2b24 Update third-party exercises section 2024-10-09 15:42:16 +02:00
Mo
ac6e1b7ce5
Merge pull request #2121 from sotanengel/add/link-to-THIRD_PARTY-repository-for-Japanese-translations
Add Third-Party List about rustlings-jp on README
2024-10-09 15:35:30 +02:00
mo8it
f516da4138 Avoid single char variables 2024-10-09 15:27:36 +02:00
Mo
e852e60416
Merge pull request #2124 from Polycarbohydrate/main
fix: typo in `exercises/23_conversions/from_str.rs`
2024-10-06 01:50:18 +02:00
Polycarbohydrate
bf7d171915
Update from_str.rs 2024-10-05 16:05:35 -04:00
Nahor
d3f819f86f Add command line command to check all exercises 2024-10-04 14:36:36 -07:00
Nahor
aa83fd6bc4 Show a progress bar when running check_all
Replace the "Progress: xxx/yyy" with a progress bar when checking all
the exercises
2024-10-02 15:28:42 -07:00
Nahor
e2f7734f37 Limit the amount of parallelism in check_all
Don't create more threads than there are CPU cores.
2024-10-02 14:42:50 -07:00
Nahor
5c17abd1bf Use a channel to update the check_all progress
The previous code was checking the threads in the order they were
created. So the progress update would be blocked on an earlier thread
even if later thread were already done.

Add to that that multiple instances of `cargo build` cannot run in
parallel, they will be serialized instead. So if the exercises needs to
be recompiled, depending on the order those `cargo build` are run,
the first update can be a long time coming.

So instead of relying on the thread terminating, use a channel to get
notified when an exercise check is done, regardless of the order they
finish in.
2024-10-02 14:10:26 -07:00
Nahor
c52867eb8b Add command to check all the exercises
This allows for skipping repeating "next" when multiple exercises
are done at once, or when earlier exercises have been updated/changed
(and thus must be redone) while still working of the whole set (i.e.
the final check_all is not yet available to flag those undone exercises)
2024-10-02 13:40:32 -07:00
Nahor
26fd97a209 Update all exercises during the final check
The previous code run the check on all exercises but only updates one
exercise (the first that failed) even if multiple failed. The user won't
be able to see all the failed exercises when viewing the list, and will
have to run check_all after each fixed exercise.

This change will update all the exercises so the user can see all that
failed, fix them all, and only then need run check_all again.
2024-10-02 11:45:55 -07:00
sotanengel
f0a2cdeb18
Merge branch 'rust-lang:main' into add/link-to-THIRD_PARTY-repository-for-Japanese-translations 2024-09-29 11:09:34 +09:00
mo8it
0c79f2ea3e Reset in prompt with confirmation 2024-09-26 18:15:45 +02:00
mo8it
0e9eb9e87e Replace three dots with dot in hint 2024-09-26 18:05:05 +02:00
mo8it
0d258b9e96 Update deps 2024-09-26 12:28:48 +02:00
mo8it
d4fa61e435 Debounce file change events 2024-09-26 12:26:24 +02:00
mo8it
554301b8e9 Clear terminal before final check in watch mode 2024-09-24 16:12:44 +02:00
sota.n
e3ec0abca4 add Third-Party List about rustlings-jp on README 2024-09-24 16:58:37 +09:00
Mo
a55e848359
Merge pull request #2114 from samueltardieu/push-ptorzrrnmxyp
Do not use `.as_bytes().len()` on strings
2024-09-22 11:40:45 +02:00
Samuel Tardieu
2653c3c4d4 Do not use .as_bytes().len() on strings 2024-09-22 10:49:55 +02:00
mo8it
4e4b65711a Only handle file changes for the current exercise, no jumping back 2024-09-18 01:44:13 +02:00
mo8it
89c40ba256 Optimize the file watcher 2024-09-18 01:43:48 +02:00
mo8it
e56ae6d651 Update deps 2024-09-17 23:33:48 +02:00
Mo
64b2f18d92
Merge pull request #2103 from senekor/senk/kvuzvzqqkskk
Remove redundant enum definition task
2024-09-16 12:56:28 +02:00
Mo
2894f3c45c
Merge pull request #2110 from senekor/remo/skkynvtqxkoz
Make if2 less confusing
2024-09-16 12:54:20 +02:00
Mo
1bae2dcb00
Merge pull request #2109 from bri-rose/main
grammatical error in info.toml
2024-09-14 23:52:54 +02:00
Remo Senekowitsch
b540c6df25 Make if2 less confusing
Some people would get stuck on this exercise, trying to understand the meaning
behind foo, fuzz, baz etc. Making the theme of the code make a little more sense
to humans should hopefully prevent people from getting confused by abstract and
non-sensical tests.
2024-09-14 10:03:52 +02:00
bri-rose
8b476e678a
Update info.toml
Fixed grammatical error, subject/verb agreement at line 124-125.
2024-09-13 10:23:05 -05:00
mo8it
47f8a0cbe5 Add rust-analyzer.toml on dev new 2024-09-13 16:39:28 +02:00
mo8it
9459eef032 Use Clippy with Rust-Analyzer 2024-09-13 16:38:53 +02:00
mo8it
5aaa8924a6 <s>earch isn't a typo 2024-09-13 15:07:53 +02:00
mo8it
4ffce1c297 Move lint to Rust lints 2024-09-13 14:59:34 +02:00
mo8it
0513660b05 Allow dead code for all exercises and solutions 2024-09-13 14:56:46 +02:00
mo8it
3947c4de28 Pause input while running an exercise 2024-09-12 17:46:06 +02:00
mo8it
664228ef8b Improve quit message 2024-09-12 17:46:06 +02:00
mo8it
234a61a3ee Update deps 2024-09-12 17:46:06 +02:00
mo8it
83d1275d72 Add missing # in comment 2024-09-12 17:46:06 +02:00
Mo
45abd7d59e
Merge pull request #2107 from alibektas/ratoml_for_rustlings
Add rust-analyzer.toml file
2024-09-12 15:49:31 +02:00
Ali Bektas
88e10a9e54 hardcode ratoml in init.rs 2024-09-12 15:46:09 +02:00
Ali Bektas
1f624d4c2a Add rust-analyzer.toml file 2024-09-12 15:26:40 +02:00
Remo Senekowitsch
9a25309c1c Remove redundant enum definition task
The exercise enums2.rs already contains a task where an identical enum
has to be defined.
2024-09-11 16:57:12 +02:00
mo8it
2b7caf6fcb Too polite :P 2024-09-06 16:36:36 +02:00
mo8it
938500fd2f Fix dev check in official repo 2024-09-06 16:35:12 +02:00
mo8it
2d26358602 Use the thread builder and handle the spawn error 2024-09-06 15:40:25 +02:00
mo8it
9faa5d3aa4 Avoid asking for terminal size on each rendering 2024-09-05 17:45:27 +02:00
mo8it
bcc2a136c8 Add error message when unable to get terminal size 2024-09-05 17:37:34 +02:00
mo8it
dcad002057 Only render when needed 2024-09-05 17:32:59 +02:00
mo8it
51b8d2ab25 Remove unused import 2024-09-05 17:23:56 +02:00
mo8it
aa3eda70e5 Simplify handling terminal events for unbuffered stdin 2024-09-05 17:12:26 +02:00
mo8it
2d0860fe1b Hide input and disable its line buffering 2024-09-05 02:11:19 +02:00
mo8it
17877366b7 Update deps 2024-09-05 01:55:31 +02:00
mo8it
5eb3dee59c Create solution even if the solution's directory is missing 2024-09-05 00:21:24 +02:00
mo8it
247bd19f93 Canonicalize exercise paths only once 2024-09-04 02:19:45 +02:00
mo8it
e5ed115288 Match filter once 2024-09-04 01:20:48 +02:00
mo8it
03baa471d9 Simplify handling p in list 2024-09-04 01:07:08 +02:00
mo8it
da8b3d143a Final touches to searching 2024-09-04 01:05:30 +02:00
Mo
20616ff954
Merge pull request #2098 from frroossst/main
Made the list of exercises searchable, ref #2093
2024-09-04 00:40:22 +02:00
Adhyan
f463cf8662 passes clippy lints and removed extra code from the merge 2024-09-03 15:10:44 -06:00
Adhyan
e9879eac91 merge of origin/main 2024-09-03 15:04:45 -06:00
Adhyan
47148e78a3 replaced enumerate() with position(); converted select_if_matches_search_query to apply_search_query 2024-09-03 15:03:25 -06:00
Adhyan
fea917c8f2 removed unnecessary update_rows() call and minor refactoring 2024-09-03 14:52:09 -06:00
Adhyan
948e16e3c7 moved continue to end of if-block 2024-09-03 14:40:24 -06:00
Adhyan
1e7fc46406 Merge branch 'main' of https://github.com/frroossst/rustlings 2024-09-02 11:02:21 -06:00
Adhyan
71494264ca fixed clippy lints 2024-09-02 11:02:17 -06:00
Adhyan H. Patel
3125561474
Merge branch 'rust-lang:main' into main 2024-09-02 12:00:22 -05:00
Adhyan
abf1228a0a search now filters the list first 2024-09-02 10:59:23 -06:00
Adhyan
547a9d947b escape/enter no longer exits the list, exits only the search 2024-09-02 10:45:45 -06:00
Mo
f696d98270
Merge pull request #2097 from jsejcksn/ux
style: reduce pre-formatted message line lengths to 80 columns
2024-09-02 14:20:18 +02:00
Adhyan
44ab7f995d Merge branch 'main' of https://github.com/frroossst/rustlings 2024-09-01 19:05:28 -06:00
Adhyan
92a1214dcd passes clippy lints 2024-09-01 19:05:23 -06:00
Adhyan
388f8da97f removed debug statements 2024-09-01 19:03:33 -06:00
Adhyan H. Patel
e96623588c
Merge branch 'rust-lang:main' into main 2024-09-01 19:57:35 -05:00
Adhyan
e1e316b931 Merge branch 'main' of https://github.com/frroossst/rustlings 2024-09-01 18:56:52 -06:00
Adhyan
c4fd29541b added a way to search through list, ref #2093 2024-09-01 18:52:26 -06:00
mo8it
a8b13f5a82 Remove "exercises" from the end of the progress bar 2024-09-01 22:04:09 +02:00
mo8it
86fc573d7a Remove the footer separators 2024-09-01 22:02:07 +02:00
Jesse Jackson
f82e47f2af style: reduce pre-formatted message line lengths to 80 columns 2024-09-01 14:48:28 -05:00
mo8it
75a38fa38b Add search to the help footer 2024-09-01 20:44:19 +02:00
mo8it
ac62a3713c Fix typo 2024-09-01 20:31:16 +02:00
Mo
ea52c99560
Merge pull request #2092 from wugalde19/fix-hint-example-for-primitive-types3
Fix example in 'primitive_types3' hint
2024-08-31 05:27:36 +02:00
William Ugalde Gamboa
7d4100ed8a Fix example in 'primitive_types3' hint 2024-08-30 20:27:26 -06:00
mo8it
c8d1d9c51f chore: Release 2024-08-29 17:20:17 +02:00
mo8it
ab2eb3442e Update changelog 2024-08-29 17:10:39 +02:00
mo8it
dbbeb7d4ed Fix displaying the list message in narrow mode 2024-08-29 17:06:37 +02:00
mo8it
bfa00ffbdc Update deps 2024-08-29 16:40:40 +02:00
mo8it
10eb1a3aee Fix header padding 2024-08-29 16:01:41 +02:00
mo8it
fd2bf9f6f6 Simplify next_pending_exercise_ind 2024-08-29 01:59:04 +02:00
mo8it
fc1f9f0124 Optimize reading and writing the state file 2024-08-29 01:56:45 +02:00
mo8it
789492d1a9 The number of exercises can't be zero, but still 2024-08-29 00:32:58 +02:00
mo8it
afc320bed4 Fix error about too many open files during the final check 2024-08-29 00:17:22 +02:00
mo8it
cba4a6f9c8 Only disable links in VS code in the list 2024-08-28 01:19:53 +02:00
mo8it
5556d42b46 Use sol_path 2024-08-28 01:10:19 +02:00
mo8it
7d2bc1c7a4 Use a Vec for the name col padding 2024-08-28 00:56:22 +02:00
mo8it
c209c874a9 Check the exercise name length 2024-08-28 00:34:24 +02:00
mo8it
dd52e9cd72 Separate the scroll state 2024-08-27 00:03:50 +02:00
mo8it
0f71a150ff Making code prettier :P 2024-08-26 22:03:09 +02:00
mo8it
74388d4bf4 Only trigger write when needed 2024-08-26 04:41:26 +02:00
mo8it
e811dd15b5 Fix list on terminals that don't disable line wrapping 2024-08-26 04:29:58 +02:00
mo8it
f22700a4ec Use the correct environment variable 2024-08-26 02:43:08 +02:00
mo8it
ee25a7d458 Disable terminal links in VS-Code 2024-08-26 02:41:22 +02:00
mo8it
594e212b8a Darker highlighting in the list 2024-08-26 00:53:42 +02:00
mo8it
5c355468c1 File link in the list? No problem :D 2024-08-26 00:49:56 +02:00
mo8it
d1571d18f9 Only reset color and underline after link 2024-08-26 00:48:12 +02:00
mo8it
cb86b44dea LOL, swapped colors 2024-08-26 00:40:30 +02:00
mo8it
833e6e0c92 Newline after resetting attributes 2024-08-26 00:24:39 +02:00
mo8it
159273e532 Take stdout as argument in watch mode 2024-08-26 00:09:04 +02:00
mo8it
631f2db1a3 Lower the maximum scroll padding 2024-08-25 23:54:18 +02:00
mo8it
a1f0eaab54 Add disallowed types and methods in Clippy 2024-08-25 23:54:04 +02:00
mo8it
b1898f6d8b Use queue instead of Stylize 2024-08-25 23:53:50 +02:00
mo8it
d29e9e7e07 Update deps 2024-08-25 20:42:13 +02:00
mo8it
360605e284 Merge branch 'rm-ratatui' 2024-08-25 20:31:08 +02:00
mo8it
64772544fa Final touches :D 2024-08-25 20:29:54 +02:00
mo8it
5f4875e2ba Almost done with list 2024-08-25 19:24:12 +02:00
mo8it
fd2a8c01cb Separate drawing rows 2024-08-24 19:18:13 +02:00
mo8it
b6129ad081 Use the full length for the wide footer 2024-08-24 17:45:38 +02:00
mo8it
28d0b0a21e Highlight selected row 2024-08-24 17:45:02 +02:00
mo8it
b779c43126 Almost done with list display 2024-08-24 17:17:56 +02:00
mo8it
4e12725616 Don't exit the list on "to current" if nothing is selected 2024-08-24 00:23:45 +02:00
mo8it
570bc9f32d Start list without Ratatui 2024-08-24 00:14:12 +02:00
mo8it
47976caa69 Import Ordering 2024-08-22 14:42:17 +02:00
mo8it
f1abd8577c Add missing Clippy allows to solutions 2024-08-22 14:41:25 +02:00
mo8it
423b50b068 Use match instead of comparison chain 2024-08-22 14:37:47 +02:00
mo8it
bedf0789f2 Always use strict Clippy when checking solutions 2024-08-22 14:25:14 +02:00
mo8it
a2d1cb3b22 Push newline after running an exercise instead on each rendering 2024-08-20 16:05:52 +02:00
mo8it
e7ba88f905 Highlight the solution file 2024-08-20 16:04:29 +02:00
mo8it
50f6e5232e Leak info_file and cmd_runner in dev check 2024-08-20 14:47:08 +02:00
mo8it
8854f0a5ed Use anyhow! 2024-08-20 14:32:47 +02:00
mo8it
13cc3acdfd Improve readability 2024-08-20 13:56:52 +02:00
mo8it
5b7368c46d Improve error message if no exercise exists 2024-08-20 13:54:20 +02:00
mo8it
27999f2d26 Check if exercise doesn't contain tests 2024-08-20 13:49:48 +02:00
mo8it
e74f2a4274 Check for #[test] with newline at the end 2024-08-20 13:39:14 +02:00
mo8it
d141a73493 threads3: Improve the test 2024-08-20 13:35:07 +02:00
mo8it
631f44331e Remove --show-output for tests and use --format pretty 2024-08-20 13:08:15 +02:00
mo8it
b01fddef8b Show progress of dev check 2024-08-19 23:52:22 +02:00
mo8it
78a8553f1c "Continue at" quits the list 2024-08-19 23:29:17 +02:00
mo8it
b70c1abd7c Update deps 2024-08-19 23:28:53 +02:00
mo8it
71f31d74bc Update deps 2024-08-17 16:57:58 +02:00
mo8it
72e557b3a9 Break help footer on narrow terminals 2024-08-17 16:54:44 +02:00
mo8it
3eaccbb61a Restore the terminal after an error in the list 2024-08-17 16:49:07 +02:00
mo8it
b678bd8ed2 Disable mouse in the list 2024-08-17 16:34:43 +02:00
mo8it
2baa140615 q only quits the list 2024-08-17 15:53:34 +02:00
mo8it
e760f07767 Make it clear that reset only resets one exercise 2024-08-17 15:53:24 +02:00
mo8it
ca5d5f0a49 Remove dot for copy-pasta 2024-08-17 15:45:02 +02:00
mo8it
69b4fd49fc Only take a u8 to avoid huge output 2024-08-17 14:59:00 +02:00
mo8it
36f315c344 Add "the" 2024-08-17 14:56:52 +02:00
mo8it
8016f5ca2d Remove unneeded comma 2024-08-17 14:55:58 +02:00
mo8it
8ef2ff1257 Remove "Hello and" 2024-08-17 14:54:13 +02:00
mo8it
6ce31defb6 Ignore stdout of git init 2024-08-17 14:40:09 +02:00
mo8it
0b3ad9141b Add exercise lints 2024-08-16 00:24:45 +02:00
mo8it
c903db5c53 Add project lints 2024-08-16 00:24:45 +02:00
Mo
8a038b946c
Merge pull request #2084 from crd477/patch-1
fix typo
2024-08-16 00:12:58 +02:00
Chad Dougherty
ed9740b72c
fix typo
Similarely -> Similarly in comment
2024-08-15 14:21:27 -04:00
mo8it
ce3dcc9856 Fix typo 2024-08-09 12:47:32 +02:00
mo8it
4472d50eba chore: Release 2024-08-09 11:52:31 +02:00
mo8it
a1d5702ba0 Ready for publish 2024-08-09 11:51:56 +02:00
mo8it
52a231ce2f Update Ratatui 2024-08-09 02:17:01 +02:00
mo8it
16af981772 Hide stderr of cargo locate-project 2024-08-09 01:27:31 +02:00
mo8it
fc141b8dfc Put Cargo.toml in `` 2024-08-09 01:16:45 +02:00
mo8it
82ebd29ff6 Add a special confirmation for initialization in a workspace 2024-08-09 01:14:08 +02:00
mo8it
f5737b5a49 Fix typos 2024-08-09 01:08:52 +02:00
mo8it
55e68d2c63 Update deps 2024-08-09 01:06:27 +02:00
mo8it
479f45da9b test_dir is a str anyway 2024-08-09 01:05:44 +02:00
mo8it
140c4e4812 Improve initialization in a Cargo workspace 2024-08-09 00:49:30 +02:00
mo8it
337460d299 Check the status of the cargo metadata command 2024-08-09 00:12:49 +02:00
mo8it
e41c3a7c92 Use fixed seeds with ahash 2024-08-08 23:48:54 +02:00
mo8it
1b9faa4d61 Update CHANGELOG 2024-08-08 23:48:54 +02:00
Mo
9f9a754a64
Merge pull request #2076 from senekor/remo/snryotxotoxv
Improve initialization in workspace
2024-08-08 23:48:09 +02:00
Mo
f7b0cfe8d1
Merge pull request #2075 from senekor/remo/swzqnkxqzutw
Replace hashbrown with ahash
2024-08-08 23:12:43 +02:00
mo8it
4ce8667b9d Show the exercise name in the waiting message 2024-08-08 22:48:53 +02:00
mo8it
0785b24192 Show a message before running the exercise 2024-08-08 22:41:41 +02:00
mo8it
34f02cf83d Attach error message as context 2024-08-08 22:37:56 +02:00
Remo Senekowitsch
8b43d79257 Fix integration tests 2024-08-08 14:08:06 +02:00
Remo Senekowitsch
dc086c6bf1 Improve initialization in workspace
- Detect if we are in a cargo project more reliably.
  (e.g. if `rustlings init` is run in the `src/` directory)

- Refuse to initialize rustlings in a non-workspace cargo project.

- Automatically populate the `workspace.members` field if `rustlings init` is
  run in a workspace.

  This may be considered risky, as there is no guarantee that's what the user
  wanted to do. However, it is consistent with the behavior of `cargo new`.
  Also, newcomers to Rust are unlikely to accidentally be in a cargo workspace,
  as they won't know how to create one in the first place.

  The use case for initialization in a workspace is when a workshop organizer
  wants to use rustlings alongside other exerices and provide a single
  repository with everything in one place.
2024-08-08 13:34:27 +02:00
Remo Senekowitsch
dc0ffbe16e Replace hashbrown with ahash
hashbrown is already used in the standard library, but we want the
improved performance of the different hash algorithm.
Using ahash directly conveys this intent more clearly.
2024-08-08 11:12:17 +02:00
mo8it
8df66f7991 Allow initialization in a workspace 2024-08-08 02:45:18 +02:00
mo8it
39580381fa rust-analyzer problem isn't fixed :( 2024-08-08 01:48:57 +02:00
mo8it
06a0f278e5 Don't recommend the builtin VS-Code terminal because it can't clear scrollback 2024-08-08 01:35:47 +02:00
mo8it
fd97470f35 Adapt type name in hint 2024-08-08 00:42:26 +02:00
mo8it
11fc3f1e56 Fix errors not being shown after the welcome message 2024-08-08 00:41:12 +02:00
mo8it
693bb708b2 Add README to the solutions dir 2024-08-08 00:41:12 +02:00
mo8it
97719fe8da Remove state file and solutions dir from .gitignore 2024-08-08 00:41:12 +02:00
mo8it
4933ace50b Add panic = "abort" for exercises 2024-08-08 00:41:12 +02:00
mo8it
81bf0a6430 Remove redundant rustfmt check for solutions 2024-08-08 00:41:12 +02:00
mo8it
24aed1b14e Update CHANGELOG 2024-08-08 00:41:12 +02:00
Mo
09c3ac02f8
Merge pull request #2062 from jimbo5922/jimbo5922-fix-hashmap3-struct-name
update struct name in hashmap3
2024-08-08 00:40:51 +02:00
Mo
45a39585b3
Merge pull request #2066 from matthewjnield/main
chore: Fix snakecase convention in errors6.rs
2024-08-08 00:36:46 +02:00
mo8it
286a455fa9 Avoid using RUSTFLAGS to not trigger rebuilding, especially in rust-analyzer 2024-08-07 23:35:50 +02:00
mo8it
bdf4960b6a Fix exercise name shift in exercise check 2024-08-07 23:25:22 +02:00
mo8it
13124aafe3 Update deps 2024-08-05 03:15:43 +02:00
Matt Nield
2128be8b28
chore: Fix snakecase convention in errors6.rs
Exercise errors6.rs prompts the user to add a method named `from_parseint`. This commit changes the method name to the corrected snakecase format, `from_parse_int`.
2024-08-04 02:36:45 -04:00
mo8it
175294fa5d Add rust-version 2024-08-02 16:40:06 +02:00
mo8it
5016c7cf7c Use trim_ascii instead of trim 2024-08-02 16:28:05 +02:00
mo8it
1468206052 Stop on first exercise solved 2024-08-02 15:54:14 +02:00
mo8it
d1ff4b5cf0 Remove newline 2024-08-01 19:19:25 +02:00
mo8it
700a065abd Fix rustfmt option 2024-08-01 19:19:14 +02:00
mo8it
3fc462f90f Fix tests 2024-08-01 19:17:40 +02:00
mo8it
65a8f6bb4b Run rustfmt on solutions in dev check 2024-08-01 19:14:09 +02:00
mo8it
e0f0944bff Refactor check_solutions 2024-08-01 15:53:32 +02:00
mo8it
c7590dd752 Improve the runner 2024-08-01 15:23:54 +02:00
mo8it
33a5680328 Hide cargo build warnings if there is no output 2024-08-01 11:28:26 +02:00
mo8it
455d87cadd Fix capacity 2024-08-01 11:26:30 +02:00
Yudai Kawabuchi
e65ae09789 fix format 2024-08-01 09:55:25 +09:00
Yudai Kawabuchi
dacdce1ea2 fix: update struct name in hashmap3 2024-08-01 09:47:50 +09:00
mo8it
766f3c50ec Add hint to run dev check again after dev update 2024-08-01 01:07:56 +02:00
mo8it
802b97b2ed Set stdin to null when running the binary of an exercise 2024-08-01 01:07:31 +02:00
mo8it
2ad408f2b8 Update deps 2024-07-31 18:54:24 +02:00
mo8it
c8fddd8f62 Add Github profile links for every author 2024-07-31 18:53:25 +02:00
mo8it
74fab994e2 Make the output optional 2024-07-28 20:30:23 +02:00
mo8it
3a99542f73 Run the final check in parallel 2024-07-28 17:39:46 +02:00
mo8it
2ae9f3555b Update deps 2024-07-28 13:30:31 +02:00
mo8it
1937b4bf66 Use the rexported crossterm from ratatui 2024-07-25 16:26:48 +02:00
mo8it
8beb290842 Test initialization 2024-07-25 16:14:38 +02:00
mo8it
8fec5155c7 Clean up tests 2024-07-25 15:12:14 +02:00
mo8it
3f49decce9 Remove assert_cmd and predicates 2024-07-25 14:34:43 +02:00
mo8it
e2492f65a0 Update deps 2024-07-25 12:51:44 +02:00
mo8it
5116a812fb tests3: Fix panic message 2024-07-22 12:02:59 +02:00
mo8it
82409c060f Update deps 2024-07-22 12:01:41 +02:00
mo8it
183ed3f88f Update dep 2024-07-17 14:33:29 +02:00
mo8it
447ac3c40b strings3: Improve hint 2024-07-17 14:32:45 +02:00
Mo
96f96927da
Merge pull request #2050 from yapjiahong/main
doc: enchane string3 exercise hint
2024-07-17 14:31:17 +02:00
yapjiahong
2c79e29483 doc: enchane string3 exercise hint 2024-07-17 00:43:42 +08:00
mo8it
362473dde0 Sync exercise and solution 2024-07-16 18:21:07 +02:00
Mo
8339682112
Merge pull request #2049 from Vexcited/patch-1
fix: Lyche becomes Lychee
2024-07-16 18:18:46 +02:00
Mikkel ALMONTE--RINGAUD
3f06d767b5
fix: Lyche becomes Lychee
Small typo.
2024-07-16 17:20:26 +02:00
mo8it
2854dc9ab3 Update CI and release hook 2024-07-13 12:32:23 +02:00
mo8it
516fcf9168 Update section 2024-07-13 12:07:52 +02:00
mo8it
12d1971b0d Update section about command not found 2024-07-13 12:02:39 +02:00
mo8it
3e09e509d6 Add section about rustlings not found 2024-07-13 12:00:22 +02:00
mo8it
99fb11cc72 Update syn 2024-07-13 11:53:59 +02:00
mo8it
d176ddd27e Improve TODO comment 2024-07-12 16:29:41 +02:00
mo8it
0847b3a4bf chore: Release 2024-07-10 16:51:34 +02:00
mo8it
6d2ea8dae3 Update CHANGELOG 2024-07-10 16:49:36 +02:00
mo8it
47ba4502e0 move_semantics2: Mention cloning in the hint 2024-07-10 15:55:18 +02:00
mo8it
6263cb6456 Add note about iterating over Option 2024-07-10 15:16:49 +02:00
mo8it
d7024d80ce move_semantics4: Avoid using the dereference operator 2024-07-10 13:50:39 +02:00
mo8it
59d6b852af move_semantics5: Move main to the end 2024-07-10 13:47:33 +02:00
mo8it
e512928df5 Update deps 2024-07-10 13:27:32 +02:00
Mo
a38029e3e7
Merge pull request #2037 from jaads/fix-iterators-2-hint
Updated name of variable name in hint
2024-07-10 11:33:45 +02:00
Jan Arends
b12b652a57 updated variable name in hint 2024-07-10 11:16:35 +02:00
mo8it
c793416495 Fix typo 2024-07-08 16:50:35 +02:00
mo8it
01343f187b Explain what a factorial is and link to wikipedia for more details 2024-07-08 16:29:43 +02:00
mo8it
69021e1497 Remove stable from book links 2024-07-08 16:00:12 +02:00
mo8it
08c408aae0 Add hint about string concatination with + 2024-07-08 15:20:56 +02:00
mo8it
bf698659b0 Sync comment from exercise 2024-07-08 15:20:23 +02:00
mo8it
2d5d70693a errors3: Add a comment to prevent changing the wrong line 2024-07-08 15:05:58 +02:00
mo8it
a4091ade5c iterators3: Add IntegerOverflow error variant 2024-07-08 14:40:35 +02:00
mo8it
a7a881809f Check is_terminal 2024-07-08 12:53:44 +02:00
mo8it
0f4cb94cfe quiz2: Use repeat 2024-07-07 20:28:31 +02:00
Mo
6469e9734b
Merge pull request #2031 from NewtonChutney/patch-1
Update iterator solution in quiz2.rs
2024-07-07 20:25:21 +02:00
NitinKM
5372caefb3
Update iterator sol in quiz2.rs 2024-07-07 23:19:38 +05:30
mo8it
9d7b973a62 Improve the comments in cow1 2024-07-07 17:03:00 +02:00
mo8it
a5f221aa39 Improve some messages 2024-07-07 15:53:48 +02:00
mo8it
e764b75aef This'll -> This will 2024-07-07 15:41:35 +02:00
mo8it
708cfef3f7 enums3: Avoid confusion with parentheses 2024-07-07 15:29:05 +02:00
mo8it
01b8432d58 Mark the last exercise as done 2024-07-07 13:55:39 +02:00
mo8it
9b5b652c71 Fix link on website 2024-07-07 00:28:17 +02:00
mo8it
981a4778a9 Add newline between functions 2024-07-06 22:23:19 +02:00
mo8it
5d4363d58d Add comma 2024-07-06 22:22:52 +02:00
Mo
48697b8225
Merge pull request #2027 from yerke/patch-2
Fix formatting in strings4.rs
2024-07-06 22:22:27 +02:00
Mo
1652bb67d9
Merge pull request #2026 from yerke/patch-1
Fix typo in structs3.rs
2024-07-06 22:21:15 +02:00
Yerkebulan Tulibergenov
1499f681a3
Fix formatting in strings4.rs 2024-07-06 12:53:14 -07:00
Yerkebulan Tulibergenov
a21fa6ff40
Fix typo in structs3.rs 2024-07-06 12:37:55 -07:00
Mo
186dc3c1ab
Merge pull request #2025 from mre/patch-1
Fix typo in `THIRD_PARTY_EXERCISES.md`
2024-07-06 17:06:03 +02:00
Matthias Endler
6b7a27d080
Fix typo in THIRD_PARTY_EXERCISES.md 2024-07-06 14:30:11 +02:00
Mo
c9017f9f7a
Merge pull request #2022 from matthewjnield/main
chore: Update errors5.rs exercise to be consistent with solution
2024-07-06 13:25:03 +02:00
Matt Nield
fdada8b3d4
chore: Update errors5.rs exercise to be consistent with solution
In errors5.rs, there are two lines of a pattern matching block for which the order is reversed between the exercise file and the solution file. Since these lines are not changed as part of the exercise, this commit updates the exercise to make the order of the lines consistent with the solution, so that users will focus only on the lines that change between the exercise and the solution.
2024-07-05 16:04:07 -04:00
Mo
9e2ff7d037
Merge pull request #2021 from matthewjnield/main
fix: Add clarification to instructions for hashmaps2.rs
2024-07-05 15:52:20 +02:00
mo8it
65834fc420 Improve quizes 2024-07-05 15:38:59 +02:00
mo8it
f5a4965de7 Improve wording in quiz1 2024-07-05 15:38:33 +02:00
mo8it
db5911eb73 Use *= 2024-07-05 15:31:39 +02:00
Matt Nield
2f4e63b443
fix: Add clarification to instructions for hashmaps2.rs
In the instructions for hashmaps2.rs, the last sentence of the include the phrase "these fruits", which refers to fruits that were mentioned two sentences prior.

Having a sentence in between the first sentence in which the fruits were described and a later sentence in which the phrase "these fruits" is used makes this confusing to read, since the phrase "these fruits" does not come immediately after the mention of the fruits that the phrase refers to.

This pull request expands the last sentence to explicitly refer to the fruits being mentioned, in order to add clarity about the requirement of the exercise.
2024-07-05 08:27:51 -04:00
mo8it
584164a6ff Adjust enums exercises 2024-07-05 14:11:03 +02:00
mo8it
e6f6d26d13 Import enum variants in all tests 2024-07-05 13:45:14 +02:00
Mo
67d8d5848c
Merge pull request #1774 from matthri/fix-enum-variant-inconsistency
Make enum variants more consistent between exercises
2024-07-05 13:43:25 +02:00
mo8it
43d15f09f0 Readd "structs" 2024-07-05 13:41:04 +02:00
mo8it
7123c7ae3a Merge remote-tracking branch 'upstream/main' into fix-enum-variant-inconsistency 2024-07-05 13:39:50 +02:00
Mo
4d9c346a17
Merge pull request #2019 from Nahor/iterator5
Add alternative solution for iterators5
2024-07-05 11:45:42 +02:00
Nahor
deed9d3943 Add alternative solution for iterators5 2024-07-04 16:35:39 -07:00
mo8it
652f0c7676 Fix tests 2024-07-04 23:39:06 +02:00
Mo
e479ec8fb6
Merge pull request #2018 from Nahor/iterators4
Unify fn signature in iterators4 exercise and solution
2024-07-04 23:37:38 +02:00
Nahor
a33501e6a7 Unify fn signature in iterators4 exercise and solution
Since this is not about conversion, prefer the option that doesn't
require one.
2024-07-04 14:23:34 -07:00
Mo
47f8199a99
Merge pull request #2017 from Nahor/main
Fix misleading test name
2024-07-04 21:14:02 +02:00
mo8it
4bf0ddc0e1 Check exercises unsolved 2024-07-04 21:12:57 +02:00
Nahor
4cd0ccce83 Fix misleading test name 2024-07-04 11:58:09 -07:00
mo8it
a3657188b6 Check for missing TODO comments 2024-07-04 20:28:46 +02:00
mo8it
b8fcd11286 chore: Release 2024-07-04 20:02:43 +02:00
mo8it
4810555038 Update CHANGELOG 2024-07-04 20:02:30 +02:00
mo8it
84b291852c Update deps 2024-07-04 19:48:09 +02:00
mo8it
74831dd88f Add TODO 2024-07-04 19:46:43 +02:00
mo8it
0b220f9fff Fix clippy1 2024-07-04 19:46:43 +02:00
Mo
d3cdeed871
Merge pull request #2015 from ramenhost/fix-move_semantics5
move_semantics5: change to fix misleading compiler error
2024-07-04 16:25:57 +02:00
Ramkumar
0524632199 fix move_semantics5 to change misleading compiler error 2024-07-04 18:48:09 +05:30
mo8it
30d5b7db92 Require solutions 2024-07-04 13:41:03 +02:00
mo8it
2f60f4d9ea Remove newline at the end of multiline strings 2024-07-04 13:38:57 +02:00
mo8it
b017b87866 Fix typo 2024-07-04 13:38:41 +02:00
mo8it
b87aa98634 Fix warnings 2024-07-04 13:38:35 +02:00
mo8it
a4c07ca948 Improve the comment in intro1 2024-07-04 13:10:18 +02:00
mo8it
b8826dd3b3 Remove comment about removing a semicolon 2024-07-04 13:08:59 +02:00
mo8it
d54c050985 Improve a comment in errors2 2024-07-04 13:03:05 +02:00
mo8it
248dd4415e Add comment to options1 2024-07-04 13:00:04 +02:00
mo8it
dec6772b05 Improve the comment of arc1 2024-07-04 12:58:04 +02:00
Mo
b4f4c79ac4
Merge pull request #2012 from cbochs/main
fix: typo s/unwarp/unwrap/
2024-07-04 09:00:31 +02:00
Calvin Bochulak
c1d5252b87
fix: typo s/unwarp/unwrap/ 2024-07-03 23:20:59 -06:00
Mo
0f71e12235
Merge pull request #2011 from rust-lang/ci
Update CI
2024-07-03 18:02:43 +02:00
mo8it
fa6b7d77b2 Run dev check only on Linux 2024-07-03 17:59:10 +02:00
mo8it
a72c26bdc3 Fix solution of options1 for stable Rust 2024-07-03 17:53:30 +02:00
mo8it
fe3292c170 Remove dtolnay/rust-toolchain 2024-07-03 17:52:44 +02:00
mo8it
ad66fe0074 Update checkout in web.yml 2024-07-03 17:51:06 +02:00
mo8it
df64893f2b Update CI 2024-07-03 17:49:41 +02:00
Mo
e5bc8588e0
Merge pull request #2010 from rust-lang/oranda
Remove install page for now, README is enough
2024-07-03 16:27:37 +02:00
mo8it
23bc5d23fe Remove install page for now, README is enough 2024-07-03 16:23:23 +02:00
mo8it
28d2bb0432 chore: Release 2024-07-03 15:32:46 +02:00
mo8it
1c010a129e Update deps 2024-07-03 15:28:53 +02:00
mo8it
f5ce4cf0a5 Merge branch 'v6' 2024-07-03 15:26:35 +02:00
mo8it
ff3e6c05a5 Merge branch 'main' 2024-07-03 15:26:05 +02:00
mo8it
33dfe5331a Update CHANGELOG 2024-07-03 15:24:07 +02:00
Mo
888ad35d10
Merge pull request #2009 from Yung-Beef/patch-2
Update README.md
2024-07-03 01:04:19 +02:00
Yung Beef 4.2
fa452b3a93
Update README.md 2024-07-02 18:30:54 -03:00
mo8it
2f8fa469ac Small writing changes 2024-07-02 16:26:59 +02:00
mo8it
d3a0c26999 Improve the placement of TODO comments 2024-07-02 16:26:28 +02:00
mo8it
95f10c8068 Update CHANGELOG 2024-07-02 16:10:42 +02:00
mo8it
9bb174e96e Add a guide for third-party exercises 2024-07-02 16:09:05 +02:00
mo8it
4c5573b09f Update CONTRIBUTING 2024-07-02 14:45:25 +02:00
mo8it
43eb014026 Update README 2024-07-02 14:45:19 +02:00
mo8it
2d792651ea chore: Release 2024-07-02 14:29:07 +02:00
mo8it
6cf75d569b Fix typos 2024-07-02 14:28:08 +02:00
mo8it
67ce9b9e56 Underline "next" 2024-07-02 01:50:05 +02:00
mo8it
bcebbb9df6 Update deps 2024-07-02 01:45:55 +02:00
mo8it
bdd76cdf77 Merge branch 'run-sols-in-parallel' 2024-07-02 01:43:22 +02:00
mo8it
825637f32c as_ref_mut solution 2024-07-02 01:35:38 +02:00
mo8it
8ef5d10da2 Import the error variants in the tests 2024-07-02 01:29:30 +02:00
mo8it
5217cdc5e2 try_from_into solution 2024-07-02 01:26:09 +02:00
mo8it
e3c8c457ba from_str solution 2024-07-02 01:03:55 +02:00
mo8it
cddaf4881e from_into solution 2024-07-01 22:09:48 +02:00
mo8it
428d64ffa0 using_as solution 2024-07-01 21:41:22 +02:00
mo8it
09c94bef2d clippy3 solution 2024-07-01 12:09:52 +02:00
mo8it
a0e810b471 clippy2 solution 2024-07-01 11:55:18 +02:00
mo8it
78728d5238 clippy1 solution 2024-07-01 11:54:35 +02:00
mo8it
cc2c0958c9 macros4 solution 2024-07-01 11:54:05 +02:00
mo8it
4cb15a4cda macros3 solution 2024-07-01 11:37:48 +02:00
mo8it
9845e046de macros2 solution 2024-07-01 11:31:37 +02:00
mo8it
cf90364fd7 macros1 solution 2024-07-01 11:28:38 +02:00
mo8it
a13e3cd07f threads3 solution 2024-07-01 11:23:40 +02:00
mo8it
dfa2b44f71 threads2 solution 2024-07-01 11:11:11 +02:00
mo8it
b000164eed threads1 solution 2024-07-01 10:59:33 +02:00
mo8it
663a03a17b cow1 solution 2024-06-29 02:07:56 +02:00
mo8it
a943f5ba32 arc1 solution 2024-06-29 01:48:00 +02:00
mo8it
f3842aa746 rc1 solution 2024-06-29 01:20:59 +02:00
Mo
18a9a2e791
Merge pull request #2007 from Yung-Beef/patch-1
docs: clarifying quiz 2 instructions
2024-06-28 23:16:20 +02:00
mo8it
61c7eaed62 box1 solution 2024-06-28 21:24:35 +02:00
Yung Beef 4.2
2dcf917fa1
docs: clarifying quiz 2 instructions 2024-06-28 15:49:09 -03:00
mo8it
f53d458920 iterators5 solution 2024-06-28 16:11:14 +02:00
mo8it
2af437fd90 iterators4 solution 2024-06-28 15:31:15 +02:00
mo8it
56a9197f55 iterators3 solution 2024-06-28 15:00:13 +02:00
mo8it
eddbb97934 iterators2 solution 2024-06-28 02:48:21 +02:00
mo8it
4f71f74b44 Use todo!() instead of ??? 2024-06-28 02:26:35 +02:00
mo8it
cf9041c0e4 iterators1 solution 2024-06-28 02:07:56 +02:00
mo8it
746cf6863d Remove tests3 and add solution to tests4 2024-06-27 17:29:33 +02:00
mo8it
803e32dad2 tests2 solution 2024-06-27 16:40:26 +02:00
mo8it
a4f8826301 tests1 solution 2024-06-27 16:29:03 +02:00
mo8it
6187216606 lifetimes3 solution 2024-06-27 16:15:53 +02:00
mo8it
275a854d6e lifetimes2 solution 2024-06-27 13:24:27 +02:00
mo8it
7efccc36b4 lifetimes1 solution 2024-06-27 13:24:21 +02:00
mo8it
64c2de95ca quiz3 solution 2024-06-27 13:01:52 +02:00
mo8it
c170740423 Highlight change in traits4 solution 2024-06-27 12:29:35 +02:00
mo8it
45cfe86fb0 traits5 solution 2024-06-27 12:29:25 +02:00
mo8it
db4d649e55 Remove move_semantics6 2024-06-27 12:27:53 +02:00
mo8it
c0452d160b traits4 solution 2024-06-27 12:23:33 +02:00
mo8it
b4b7ae63ad traits3 solution 2024-06-27 12:11:57 +02:00
mo8it
c07209b635 Unify info.toml 2024-06-27 12:00:28 +02:00
mo8it
091e1e7f7a traits2 solution 2024-06-27 11:58:44 +02:00
mo8it
92f249a52c Merge branch 'main' 2024-06-27 11:30:42 +02:00
mo8it
e6228e92b4 Merge remote-tracking branch 'refs/remotes/origin/main' 2024-06-27 11:18:41 +02:00
mo8it
3e9c4c8bb8 Update deps 2024-06-27 11:18:21 +02:00
Mo
22b650c092
Merge pull request #2004 from xavdid/fix-typo
chore(from_into): Add missing period in docs
2024-06-27 11:04:28 +02:00
David Brownman
f0849447ad chore(from_into): Add missing period in docs 2024-06-26 19:06:25 -07:00
mo8it
789223cc9e traits1 solution 2024-06-27 03:04:57 +02:00
mo8it
de3f846a53 generics2 solution 2024-06-27 02:25:11 +02:00
mo8it
46121b71cf generics1 rewrite and solution 2024-06-27 02:00:08 +02:00
mo8it
b1daea1fe8 errors6 solution 2024-06-27 01:12:50 +02:00
mo8it
129884aff7 errors5 solution 2024-06-26 18:21:19 +02:00
mo8it
720b280bc1 Update deps 2024-06-26 16:59:13 +02:00
mo8it
9b7a5c041e errors4 solution 2024-06-26 15:54:18 +02:00
mo8it
c46d8bdf95 errors3 solution 2024-06-26 15:44:33 +02:00
mo8it
050a23ce67 errors2 solution 2024-06-26 15:36:14 +02:00
mo8it
2afe6b38d3 Fix tests 2024-06-26 15:12:58 +02:00
mo8it
097f3c74ea errors1 solution 2024-06-26 15:06:29 +02:00
mo8it
25b5686dd2 options3 solution 2024-06-26 14:47:57 +02:00
mo8it
a91888e79e option2 solution 2024-06-26 14:35:05 +02:00
mo8it
c31e15c4cf options1 solution 2024-06-26 12:59:10 +02:00
mo8it
1694682aa4 Fix typos 2024-06-26 02:26:04 +02:00
mo8it
29bcb282da quiz2 solution 2024-06-26 02:25:59 +02:00
mo8it
f1bd444792 hashmaps3 solution 2024-06-26 01:52:33 +02:00
mo8it
fbc226a510 hashmaps2 solution 2024-06-24 16:50:03 +02:00
mo8it
5baa503bfc hashmaps1 solution 2024-06-24 13:20:50 +02:00
Mo
0cd96afe63
Merge pull request #1782 from danielsomerfield/main
Fix all_fruits_types_in_basket to fail if all fruit kinds are not  included
2024-06-24 13:00:53 +02:00
mo8it
3d540ed946 modules3 solution 2024-06-22 13:35:54 +02:00
mo8it
98cd00de63 modules2 solution 2024-06-22 13:24:06 +02:00
mo8it
ecbe9b7324 modules1 solution 2024-06-22 13:12:39 +02:00
mo8it
879f0cd5c6 strings4 solution 2024-06-22 12:51:21 +02:00
mo8it
613ec23f84 strings 3 solution 2024-06-22 12:22:24 +02:00
mo8it
f574905b8e strings2 solution 2024-06-22 12:14:04 +02:00
mo8it
bd63ece47c string1 solution 2024-06-22 12:05:28 +02:00
mo8it
2901d85662 enums3 solution 2024-06-21 23:18:25 +02:00
mo8it
020711fa97 enums3 solution 2024-06-21 23:05:40 +02:00
mo8it
a2dfbd86da enums1 solution 2024-06-21 23:00:38 +02:00
mo8it
d6fd251a73 structs3 solution 2024-06-21 22:54:00 +02:00
mo8it
1264510fc0 structs2 solution 2024-06-21 22:31:06 +02:00
mo8it
ef842d3a94 structs1 solution 2024-06-21 22:22:37 +02:00
mo8it
d768353806 Fix typo 2024-06-21 18:29:00 +02:00
mo8it
e4dbbbf5f5 Remove move_semantics4, add rest of move_semantics solutions 2024-06-21 18:14:19 +02:00
Mo
42b5c0a1f7
Merge pull request #1997 from jphilis/main
chore: update error message to error message given by rustc (error[E0596]) in hint
2024-06-21 17:11:48 +02:00
mo8it
fd558065c7 move_semantics3 solution 2024-06-21 17:04:51 +02:00
mo8it
68142aff7f move_semantics2 solution 2024-06-21 17:02:50 +02:00
mo8it
946c29679e move_semantics1 solution 2024-06-21 16:16:52 +02:00
mo8it
6a79ada7f2 Add comment to vecs2 2024-06-21 15:06:50 +02:00
mo8it
835ec72622 vecs2 solution + significant change to have a better comparison between both methods 2024-06-21 14:52:11 +02:00
mo8it
a9f0c7bf1f vecs1 solution 2024-06-20 01:00:06 +02:00
jphilis
1ede3a82e9
chore: update error message to error message given by rustc. error[E0596] 2024-06-19 14:55:34 +02:00
mo8it
0abcdeed42 primitive_types6 solution 2024-06-19 14:25:29 +02:00
mo8it
532c9ebb30 primitive_types5 solution 2024-06-19 14:17:06 +02:00
mo8it
2a1bc53771 Update deps 2024-06-19 14:03:06 +02:00
mo8it
5bf8d1fa1b Fix typos 2024-06-14 13:32:37 +02:00
mo8it
2ff1813746 Update deps 2024-06-14 13:32:02 +02:00
mo8it
42a3503906 Run solutions in parallel 2024-06-10 17:42:11 +02:00
mo8it
98db579014 primitive_types4 solution 2024-06-08 23:42:15 +02:00
mo8it
0338b1cbdf primitive_types3 solution 2024-06-08 21:43:38 +02:00
mo8it
e1051724c3 primitive_types2 solution 2024-06-08 21:35:44 +02:00
mo8it
0e4136d31e Update deps 2024-06-08 21:19:16 +02:00
mo8it
f8d38320cd Fix typos 2024-06-06 01:59:09 +02:00
mo8it
42bd0b8b75 Update deps 2024-06-06 01:58:05 +02:00
mo8it
08ac11ff22 Add --require-solutions option to dev check 2024-06-02 00:11:41 +02:00
mo8it
6ae4a979f4 Check for unexpected files in the solutions dir 2024-06-02 00:03:48 +02:00
mo8it
a3ada0eee8 Print the exercise solution on check 2024-06-01 21:51:45 +02:00
mo8it
50530fa3cf Don't try to check a solution that doesn't exist 2024-06-01 21:50:11 +02:00
mo8it
611f9d8722 Check that all solutions run successfully 2024-06-01 21:48:15 +02:00
mo8it
8e9c99ae5b Change condition order 2024-06-01 15:10:43 +02:00
mo8it
c324ea10df Update deps 2024-06-01 15:10:17 +02:00
mo8it
1984a8d38e Update Cargo.toml with the solution bins 2024-06-01 15:01:27 +02:00
mo8it
84a818dbda Update the bins buffer capacity 2024-06-01 15:01:18 +02:00
Mo
d140d49b61
Merge pull request #1978 from jkauerl/main
Change hints of exercises traits4 and traits5 for a better learning experience
2024-05-29 20:44:55 +02:00
mo8it
beb7b24e8e Add solutions to bins 2024-05-25 18:19:30 +02:00
Javier Kauer
5337620476 docs: improved syntaxis of hint of traits4 and traits5 2024-05-25 18:16:44 +02:00
mo8it
990c68efcb primitive_types1 solution 2024-05-25 16:31:21 +02:00
mo8it
8d4145038d Update deps 2024-05-25 16:15:35 +02:00
mo8it
f2c3dcab3a quiz1 solution 2024-05-22 16:35:57 +02:00
mo8it
73e84f8379 if3 solution 2024-05-22 15:54:35 +02:00
mo8it
eafb157d60 if2 solution 2024-05-22 15:16:50 +02:00
mo8it
7cdf6b7942 Add missing semicolons 2024-05-22 15:13:18 +02:00
mo8it
c8ad6c3960 if1 solution 2024-05-22 15:04:21 +02:00
mo8it
3bb71c6b0c Remove unneeded pub 2024-05-22 15:04:12 +02:00
mo8it
d0b843d6c4 Add solutions to functions 2024-05-21 02:43:18 +02:00
mo8it
0f4c42d54e Add solutions to intro and variables 2024-05-21 01:47:57 +02:00
mo8it
bde2524c3b Update deps 2024-05-20 18:11:19 +02:00
mo8it
cf3f6fd6a1 Fix typo 2024-05-14 01:50:03 +02:00
mo8it
c8481d35c1 Done documentation 2024-05-14 01:49:22 +02:00
mo8it
96a44f3dcf Make it more clear that only one char is expected 2024-05-14 01:23:58 +02:00
mo8it
0ae66d1860 Remove inline 2024-05-14 00:55:07 +02:00
mo8it
700605ff35 Document init 2024-05-14 00:35:12 +02:00
mo8it
a67e63cce0 Document info_file 2024-05-13 22:02:45 +02:00
mo8it
d48e86b154 Use public comments for public items 2024-05-13 21:40:40 +02:00
mo8it
39a19f9450 Document exercise 2024-05-13 21:36:20 +02:00
mo8it
2dfc7cdb1a Document embedded 2024-05-13 21:07:04 +02:00
mo8it
0add5ac240 chore: Release 2024-05-13 17:14:11 +02:00
mo8it
5a1d95028c Update version in README 2024-05-13 17:14:00 +02:00
mo8it
e80e91faf2 Thanks Clippy :) 2024-05-13 17:12:58 +02:00
mo8it
4ae3fcc3ca Don't skip exercises on file changes 2024-05-13 17:06:11 +02:00
mo8it
17a2d42ffd Better variable naming 2024-05-13 16:44:48 +02:00
mo8it
a7bc6d53a5 Only send Unrecognized on ENTER if the last input wasn't valid 2024-05-13 16:39:38 +02:00
mo8it
56eb4a5d65 chore: Release 2024-05-13 04:11:29 +02:00
mo8it
f6cf6c611c Fix Windows terminal links 2024-05-13 04:11:11 +02:00
mo8it
7a74a72dc8 Update beta version in README 2024-05-13 02:48:42 +02:00
mo8it
a4da216a5c chore: Release 2024-05-13 02:46:26 +02:00
mo8it
8b2d9ed503 Use PartialEq instead of matches! 2024-05-13 02:45:12 +02:00
mo8it
d2b5906be2 No more word input 2024-05-13 02:37:32 +02:00
mo8it
f9e35a4344 Improve input handling 2024-05-13 02:32:25 +02:00
mo8it
0525739046 Fix invisible input on Windows 2024-05-13 02:20:04 +02:00
mo8it
11fda5d70f Move info.toml to rustlings-macros/
This improves the experience for contributors on Windows becuase
Windows can't deal with git symbolic links out of the box…
2024-05-13 01:25:38 +02:00
Mo
c7a18b0781
Merge pull request #1974 from hamirmahal/refactor/remove-referent-for-readability
refactor: remove `referent` to improve readability
2024-05-13 00:15:28 +02:00
Hamir Mahal
01a78531ad
refactor: remove referent to improve readability 2024-05-12 15:10:50 -07:00
Mo
c2414b8891
Merge pull request #1951 from hamirmahal/ci/add-clippy-job-to-workflow
ci: add `clippy` job to `rust.yml` workflow
2024-05-12 22:47:45 +02:00
Mo
f03020a7e2
Merge pull request #1961 from Allupeng/main
docs : add a comma in structs3.rs file
2024-05-12 22:46:07 +02:00
mo8it
01509a2a84 Remove comma 2024-05-12 22:45:18 +02:00
Mo
66b3a9cdd7
Merge pull request #1973 from iamcult/main
chore: update flake.lock
2024-05-12 22:25:54 +02:00
iamcult
baca8c9667
chore: update flake.lock 2024-05-12 14:48:06 -04:00
mo8it
d9df809838 Optimize embedded dirs 2024-05-12 17:40:53 +02:00
mo8it
da9f97b0e0 Update deps 2024-05-12 01:35:30 +02:00
mo8it
2d0497bf3b Fix errors 2024-05-02 17:08:39 +02:00
mo8it
5e7afce019 Document dev 2024-05-01 19:47:35 +02:00
mo8it
74180ba1cc Check for tests while test=false 2024-05-01 19:16:59 +02:00
mo8it
d425dbe203 Test run_cmd 2024-05-01 18:08:18 +02:00
mo8it
32415e1e6c Document cmd 2024-05-01 17:55:49 +02:00
mo8it
8e178ac60d Document and test cargo_toml 2024-04-30 02:48:56 +02:00
mo8it
3ae6c208b2 Disable the pretty format because of --show-output 2024-04-30 02:43:51 +02:00
mo8it
563727f47f test next_pending_exercise_ind 2024-04-30 02:14:20 +02:00
mo8it
2b7ac91505 Add press_enter_prompt 2024-04-30 01:46:57 +02:00
mo8it
52c0f5b39e Fix clearing the terminal 2024-04-30 01:41:08 +02:00
mo8it
fef66b80ad Implement From<ExerciseInfo> for Exercise 2024-04-30 01:39:31 +02:00
mo8it
b6f40f2ec8 Document main and app_state 2024-04-29 17:01:47 +02:00
allupeng
8c3b8dcec4 doc : add a dot in hashmaps1.rs file to fill e.g. 2024-04-29 14:18:04 +08:00
mo8it
7f73219041 chore: Release 2024-04-29 00:36:50 +02:00
mo8it
196d3c1a98 Bump version 2024-04-29 00:36:13 +02:00
mo8it
8c60ac267e Add working environment section 2024-04-29 00:26:53 +02:00
mo8it
3c7e7368b2 Add solutions to the initialized .gitignore 2024-04-28 23:25:44 +02:00
mo8it
593f0e0916 Revert escaping with ESC in list to be able to clear the message 2024-04-28 23:22:11 +02:00
mo8it
1508938fed Highlight the active filter 2024-04-28 23:21:13 +02:00
allupeng
881d3e9441 doc : add a dot in structs3.rs file 2024-04-28 18:03:22 +08:00
mo8it
aedeff8b24 Reorder the footer keys 2024-04-27 23:45:26 +02:00
mo8it
75e2804c83 Esacpe the list with ESC 2024-04-27 23:42:09 +02:00
mo8it
c45d2c3255 Remove the I AM NOT DONE check 2024-04-27 23:38:38 +02:00
mo8it
ea40804371 Put long version in () 2024-04-27 23:38:26 +02:00
mo8it
ee2b772dd5 Update intro1 hint 2024-04-27 23:38:05 +02:00
mo8it
62a2c1a6d9 Put long version in () 2024-04-27 23:37:44 +02:00
mo8it
de0befef9c Update intro1 2024-04-27 23:37:17 +02:00
mo8it
5658998c0c Update welcome and final messages 2024-04-27 23:24:09 +02:00
mo8it
89e0f64279 chore: Release 2024-04-27 17:35:08 +02:00
mo8it
edea76b5b9 Bump version 2024-04-27 17:34:39 +02:00
mo8it
016e6a014e Update serde 2024-04-27 17:32:42 +02:00
mo8it
cdeb8ce229 Fix initialization 2024-04-27 17:31:51 +02:00
mo8it
12504b01e9 Disable unneeded features in deps 2024-04-27 04:32:06 +02:00
mo8it
c3a92b1248 Update deps 2024-04-27 04:21:29 +02:00
mo8it
181c81f016 chore: Release 2024-04-27 04:17:24 +02:00
mo8it
cb7ce006b5 Bump version 2024-04-27 04:17:10 +02:00
mo8it
2150d629b1 Use --show-output instead of --nocapture 2024-04-27 04:15:16 +02:00
mo8it
c82c367324 Respect the target-dir config and show tests' output 2024-04-27 04:14:59 +02:00
mo8it
dc5c72bc19 Update README.md 2024-04-26 03:44:16 +02:00
mo8it
0ce5d9d4d7 Update README.md 2024-04-26 03:39:38 +02:00
mo8it
37fcbeb596 Add indentation for details 2024-04-26 03:29:05 +02:00
mo8it
2f071c97b0 Update README.md 2024-04-26 03:25:31 +02:00
mo8it
9664f4357c Use HTML in the summary 2024-04-26 03:20:34 +02:00
mo8it
74ae506603 Update README 2024-04-26 03:17:35 +02:00
mo8it
2965867338 Add click to expand 2024-04-26 02:02:14 +02:00
mo8it
e63e668d86 Use <details> 2024-04-26 02:00:42 +02:00
mo8it
b7289e59aa Put --locked in the troubleshooting section 2024-04-26 01:55:44 +02:00
mo8it
be4dfe8be0 Add hint about updating Rust 2024-04-26 01:49:36 +02:00
mo8it
e230ffcf03 Update the contributing guide 2024-04-26 01:19:52 +02:00
mo8it
0d7b036137 chore: Release 2024-04-25 21:07:41 +02:00
mo8it
078142c43c Update dev/Cargo.toml 2024-04-25 21:07:10 +02:00
mo8it
5920a58e83 Include dev/Cargo.toml 2024-04-25 19:58:55 +02:00
mo8it
aaea5b490f chore: Release 2024-04-25 19:54:59 +02:00
mo8it
8d45cdb09d Fix missing info.toml in the macros crate 2024-04-25 19:54:03 +02:00
mo8it
a4e623ea94 Fix releasing rustlings 2024-04-25 19:33:24 +02:00
mo8it
5595e1c397 chore: Release 2024-04-25 19:32:10 +02:00
mo8it
ca41f9e2df Prepare for using cargo-release 2024-04-25 19:02:07 +02:00
mo8it
177e2870c5 Edit comment 2024-04-25 16:30:01 +02:00
mo8it
3ce3235294 Show warnings and errors in the tests 2024-04-25 16:08:07 +02:00
mo8it
c51f1b3f31 Thanks Clippy :D 2024-04-25 15:58:46 +02:00
mo8it
8bf8b19a5d Improve output after initialization 2024-04-25 15:51:12 +02:00
mo8it
6d1d42d2dd Try to run git init 2024-04-25 15:41:52 +02:00
mo8it
212c82c6f6 Don't ignore .vscode/extensions.json when developing third-party exercises 2024-04-25 15:34:58 +02:00
mo8it
fcefa3d614 Name the exercises' package exercises 2024-04-25 15:33:24 +02:00
mo8it
b3b4b7d59c Update initialized .gitignore 2024-04-25 15:23:24 +02:00
mo8it
29abaee4ec Update dep 2024-04-25 15:22:14 +02:00
mo8it
c7c8d99680 Moar responsive :P 2024-04-25 15:22:11 +02:00
mo8it
c1d28b502e Format test file :P 2024-04-25 14:51:14 +02:00
mo8it
14fe248b4b Optimize the notify event handler 2024-04-25 14:44:12 +02:00
Mo
88f27a5377
Merge pull request #1959 from rust-lang/output
Improve output
2024-04-25 14:43:28 +02:00
mo8it
1f1a62d83e Raise the output capacity 2024-04-25 14:43:02 +02:00
mo8it
428998a4cf Quicker response to file changes 2024-04-25 03:28:44 +02:00
mo8it
d26f47dddd Fix tests 2024-04-25 03:27:41 +02:00
mo8it
2af0cd9cce Replace mode by test and strict_clippy 2024-04-25 03:25:45 +02:00
mo8it
f92d45fa68 Use write macros instead of write_fmt 2024-04-25 02:03:26 +02:00
mo8it
67fa017742 Use os_pipe 2024-04-25 01:56:01 +02:00
mo8it
d8c2ab8349 Fix tests 2024-04-24 16:26:48 +02:00
mo8it
0df0be8352 Update Cargo.lock 2024-04-24 16:26:34 +02:00
mo8it
8ebd2f9df2 Update Cargo.toml files 2024-04-24 16:15:14 +02:00
mo8it
4ef345e706 Update dependency 2024-04-24 15:58:34 +02:00
mo8it
0a2d4dae5a Merge branch 'main' 2024-04-24 15:48:29 +02:00
mo8it
71053101c3 Add --locked 2024-04-24 13:28:25 +02:00
Mo
53fdb9044d
Merge pull request #1955 from rust-lang/solutions
Solutions
2024-04-24 02:56:20 +02:00
mo8it
8a085a0a85 Dump solution and show its path 2024-04-24 02:52:30 +02:00
mo8it
edf5762612 Preallocate path 2024-04-24 01:17:39 +02:00
mo8it
ef02c6c6ab Use the embedded info.toml in debug mode 2024-04-24 00:58:52 +02:00
mo8it
e4ee2cd548 Don't write solutions in debug mode 2024-04-24 00:48:58 +02:00
mo8it
b77007887c Write the solution file on done 2024-04-24 00:47:46 +02:00
mo8it
2dac8e509b Refactor embedded files to add solutions 2024-04-23 19:18:25 +02:00
mo8it
e5a19a4c33 Update deps 2024-04-23 15:32:07 +02:00
mo8it
5349f0e8d4 Add README to the quizzes directory 2024-04-23 15:32:01 +02:00
mo8it
ad8e544483 Move quizzes 2024-04-22 01:07:36 +02:00
mo8it
86684b7fc9 Document dev commands 2024-04-22 00:45:16 +02:00
mo8it
4ce2714da1 Add --no-git 2024-04-22 00:38:34 +02:00
mo8it
e93a99e19e Third-party exercises should be in a separate Git repo 2024-04-22 00:34:55 +02:00
mo8it
61a84a2c11 dev init -> dev new PATH 2024-04-21 23:43:49 +02:00
mo8it
30040d7778 Add a disclaimer to the state file 2024-04-21 23:39:44 +02:00
mo8it
e3b9124b85 Add a confirmation prompt to the init subcommand 2024-04-21 23:24:10 +02:00
mo8it
642c3bd37e Fix the generated Cargo.toml after rustlings init 2024-04-21 20:22:01 +02:00
mo8it
49e4a1fab0 Catch the usage of the old method 2024-04-21 19:34:55 +02:00
mo8it
04d36996dd Update deps 2024-04-21 19:27:00 +02:00
mo8it
f1a60780b9 Rename constant 2024-04-21 19:26:19 +02:00
mo8it
d83c91edc6 Ignore all lock files but the one in root 2024-04-21 18:20:15 +02:00
mo8it
ea504e6bf1 Update deps 2024-04-19 12:41:13 +02:00
mo8it
a2be6754bf Make the exercise name option for the hint subcommand 2024-04-18 17:17:39 +02:00
mo8it
daa090981a Update README 2024-04-18 17:17:21 +02:00
mo8it
aaf183142e Bring back the thanks to contributors ❤️ 2024-04-18 16:17:33 +02:00
Mo
7525ecd8c1
Merge pull request #1952 from rust-lang/remove-all-contributors
Remove all contributors
2024-04-18 13:12:08 +02:00
mo8it
09d8bc83ff Remove README reference 2024-04-18 13:08:02 +02:00
mo8it
cc35a8431f Remove "All-Contributors" 2024-04-18 13:07:07 +02:00
Mo
819dea2500
Merge pull request #1949 from rust-lang/third-party-exercises
Support for third-party exercises
2024-04-18 13:02:35 +02:00
mo8it
01e6732e4d Improve resetting 2024-04-18 12:41:17 +02:00
mo8it
f04089b8bc Only take a reference 2024-04-18 11:40:54 +02:00
mo8it
2566f9aaf6 Place mods under all imports 2024-04-18 11:31:08 +02:00
mo8it
1eac00e89a Disable init command during development 2024-04-18 11:28:28 +02:00
mo8it
2e9b9a9f13 Move constant 2024-04-18 11:21:39 +02:00
mo8it
9f5be60b40 Use git stash to reset third-party exercises 2024-04-18 11:20:51 +02:00
mo8it
d64836f317 Avoid an unneeded syscall 2024-04-18 01:49:32 +02:00
mo8it
634e17a5ab Fix tests 2024-04-17 23:37:31 +02:00
mo8it
2f810a4da6 Clean up and unify exercises 2024-04-17 23:34:27 +02:00
mo8it
cb9f1ac9ce Require a main function in all exercises 2024-04-17 22:46:21 +02:00
mo8it
d83cc69afe Trim before checking if the hint is empty 2024-04-17 19:16:48 +02:00
mo8it
d6bb27ec20 Check for empty field values 2024-04-17 19:12:10 +02:00
mo8it
d42a6e7415 Print the path of the missing file 2024-04-17 18:59:40 +02:00
mo8it
b9167e9299 Remove redundant checks 2024-04-17 18:19:28 +02:00
mo8it
28ec0f864a Check the info file 2024-04-17 18:19:08 +02:00
mo8it
7005d8a400 Fix typo 2024-04-17 16:11:44 +02:00
mo8it
7f433ae28f Check the format version in dev check 2024-04-17 16:09:25 +02:00
mo8it
a2506f154b Update serde 2024-04-17 15:56:24 +02:00
mo8it
501b973c25 Add "dev update" 2024-04-17 15:55:50 +02:00
Hamir Mahal
4eec81a113
ci: add clippy job to rust.yml workflow 2024-04-17 01:35:53 -07:00
Hamir Mahal
9a13bccd63
chore: changes from formatting on save 2024-04-17 01:35:29 -07:00
mo8it
30636e7cf3 Use colors inside the test 2024-04-16 21:46:07 +02:00
liv
67a15ef27f fix: remove bad hint in functions4
Technically it's correct, but playing around with this will very quickly
throw you into having to handle `Option`s and futzing around with
`try_into`. Not really something we want to throw upon the user here.

Closes #1948.
2024-04-16 15:23:08 +02:00
mo8it
d322bcfcec Add description 2024-04-16 04:04:45 +02:00
mo8it
0ac5aa7af2 Fix typo 2024-04-16 04:00:42 +02:00
mo8it
f9be652b3b Ready to publish 2024-04-16 03:56:08 +02:00
mo8it
932f6b53a9 Add myself to the list of authors :) 2024-04-16 03:47:09 +02:00
mo8it
4d9eb35ad7 Prepare for publishing the first alpha version 2024-04-16 03:46:04 +02:00
mo8it
86d716cf8a Add comment about keeping dependencies 2024-04-16 03:43:34 +02:00
mo8it
87db9129bc Add the mode field 2024-04-16 03:37:58 +02:00
mo8it
6566c5904f Tell about updating Cargo.toml 2024-04-16 03:35:23 +02:00
mo8it
aa813fbce1 Update Cargo.toml on dev check 2024-04-16 03:30:28 +02:00
mo8it
d1ebbaa6f6 Add format_version to test info.toml files 2024-04-16 03:18:22 +02:00
mo8it
c07cf5bffe Fix typo 2024-04-16 03:18:06 +02:00
mo8it
df448c069c Fix running dev commands 2024-04-16 03:15:14 +02:00
mo8it
25e7696565 Done dev init 2024-04-16 03:08:45 +02:00
mo8it
92777c0a44 Add the format version 2024-04-16 01:22:54 +02:00
mo8it
7ebc260924 Scetch the dev subcommand 2024-04-15 23:54:57 +02:00
mo8it
f5eaa578b9 Update deps 2024-04-15 23:35:30 +02:00
mo8it
6f04570dd0 Revert "Implement third-party exercises trust handling"
This reverts commit 15ca847c37c170590abe6caa53dba5606d956341.
See https://rust-lang.zulipchat.com/#narrow/stream/334454-rustlings/topic/Proposal.3A.20Third-party.20exercises/near/433183449
2024-04-15 03:36:12 +02:00
mo8it
15ca847c37 Implement third-party exercises trust handling 2024-04-15 02:11:27 +02:00
mo8it
c613b70363 Print the trimmed final message 2024-04-14 17:28:01 +02:00
Mo
dc02c38a94
Merge pull request #1942 from rust-lang/tui
TUI
2024-04-14 17:13:32 +02:00
mo8it
7526c6b1f9 Update POST_INIT_MSG 2024-04-14 17:11:27 +02:00
mo8it
1cbabc3d28 Add the manual-run option 2024-04-14 17:10:53 +02:00
mo8it
bd10b154fe Clear the terminal after showing the welcome message 2024-04-14 16:07:17 +02:00
mo8it
070a780d7f Trim the final message 2024-04-14 16:04:05 +02:00
mo8it
8aef915ee7 Show the welcome message 2024-04-14 16:03:49 +02:00
mo8it
3da860927d Use push instead of extend_from_slice on chars 2024-04-14 14:53:32 +02:00
mo8it
1c90575b9f Update deps 2024-04-14 05:13:50 +02:00
mo8it
9dcc4b7df5 Simplify the state file 2024-04-14 05:13:27 +02:00
mo8it
9831cbb139 Fix tests 2024-04-14 03:13:33 +02:00
mo8it
bee62c89de Add terminal links 2024-04-14 02:41:19 +02:00
mo8it
5c0073a948 Tolerate changes in the state file 2024-04-14 01:15:43 +02:00
mo8it
2a26dfcb00 Remove unused ContextLine 2024-04-13 15:30:35 +02:00
mo8it
24539666af Show the final message 2024-04-12 20:06:56 +02:00
mo8it
757723a7e8 Add missing newline 2024-04-12 19:30:36 +02:00
mo8it
ff4c752984 Print FAILED 2024-04-12 19:30:29 +02:00
mo8it
06d1089714 Set pending on fail in run mode 2024-04-12 19:24:26 +02:00
mo8it
6e827da570 It doesn't take minutes :P 2024-04-12 19:18:16 +02:00
mo8it
279ebdc153 Remove the modifier filter in the list mode 2024-04-12 19:16:52 +02:00
mo8it
9b0eeb815a Fix Display for Exercise 2024-04-12 19:07:17 +02:00
mo8it
44824718b2 Remove unused import 2024-04-12 18:58:01 +02:00
mo8it
8bd03093eb Add newline at the end of the generated .gitignore 2024-04-12 18:57:39 +02:00
mo8it
d5a6dee1b3 Handle the case when all exercises are done 2024-04-12 18:57:04 +02:00
mo8it
a534de0312 Implement going to the next exercise 2024-04-12 15:27:29 +02:00
mo8it
98c5088a39 Update deps 2024-04-12 14:52:50 +02:00
mo8it
6807e63c5f Show done message 2024-04-12 02:45:54 +02:00
mo8it
2a95a3e966 Deal with long strings 2024-04-12 01:24:01 +02:00
mo8it
1e3745ccdf Update winnow 2024-04-12 00:58:26 +02:00
mo8it
d8160f9113 Remove outdated installation methods 2024-04-12 00:56:40 +02:00
mo8it
6494a8c50b Remove the watch subcommand 2024-04-11 16:54:27 +02:00
mo8it
864cfa725b Remove outdated tests 2024-04-11 15:10:15 +02:00
mo8it
e79bc727f0 Don't listen on keys with modifiers 2024-04-11 15:08:46 +02:00
mo8it
2e1a87d7d3 Take care of filters when resolving the selected exercise 2024-04-11 14:58:56 +02:00
mo8it
f53a0e8700 Panic if there are no exercises 2024-04-11 14:39:19 +02:00
mo8it
470dc65956 Fix selected when there are no rows 2024-04-11 14:35:30 +02:00
mo8it
686143100f Update intro1 2024-04-11 02:55:58 +02:00
mo8it
c3933904f6 Update deps 2024-04-11 02:51:50 +02:00
mo8it
65849629f5 Remove glob 2024-04-11 02:51:23 +02:00
mo8it
fa1f239a70 Remove "I AM NOT DONE" and the verify mode and add AppState 2024-04-11 02:51:02 +02:00
mo8it
4bb6bda9f6 Separate event handlers 2024-04-10 16:02:12 +02:00
mo8it
256c4013b7 Keep hint displayed after resizing the terminal 2024-04-10 15:56:38 +02:00
mo8it
27e9520665 Add deny_unknown_fields 2024-04-10 14:40:49 +02:00
mo8it
b3642b0219 Remove todo 2024-04-10 14:35:42 +02:00
mo8it
193e0a03b2 Use light blue for the message 2024-04-10 14:31:08 +02:00
mo8it
a59acf8835 Show the current exercise path 2024-04-10 14:29:31 +02:00
mo8it
62e92476e6 Fix typo 2024-04-10 04:10:05 +02:00
mo8it
6255efe8b2 Show the invalid command to avoid confusion after resizing the terminal 2024-04-10 04:08:40 +02:00
mo8it
a46d66134b Fix shift of first output line 2024-04-10 03:56:41 +02:00
mo8it
f034899c7f Capture terminal resize events 2024-04-10 03:54:48 +02:00
mo8it
c9a5fa6097 Accept repeat keyboard events 2024-04-10 02:19:14 +02:00
mo8it
d1a965f019 Make the list mode part of the watch mode 2024-04-10 02:12:50 +02:00
mo8it
533a009257 Show the progress in the progress bar, not the current exercise index 2024-04-10 00:51:41 +02:00
mo8it
4a80bf6441 Colorize the progress bar 2024-04-10 00:42:32 +02:00
mo8it
c8d217ad50 Fix showing stdout and stderr 2024-04-09 22:20:12 +02:00
mo8it
a8ddc07a9a Add "exercises" to the end of the progress bar 2024-04-09 22:15:41 +02:00
mo8it
af85f2036c Print a newline before the progress bar 2024-04-09 22:06:55 +02:00
mo8it
ff6c15f9c1 Don't try to join the input thread 2024-04-09 22:04:10 +02:00
mo8it
4110ae21af Handle notify errors 2024-04-09 21:46:55 +02:00
mo8it
b15e0a279b Use shrink to fit before leaking the vector 2024-04-09 21:23:02 +02:00
mo8it
787bec9875 Use exercises as leaked 2024-04-09 21:16:27 +02:00
mo8it
f0ce2c1afa Improve event handling in the watch mode 2024-04-09 21:07:53 +02:00
mo8it
850c1d0234 Add progress bar to list 2024-04-09 19:37:39 +02:00
mo8it
ee7d976283 Use a green color on successful run 2024-04-09 17:15:12 +02:00
liv
258ff6f462
Merge pull request #1946 from rust-lang/all-contributors/add-Selflocking
docs: add Selflocking as a contributor for content
2024-04-08 22:49:11 +02:00
allcontributors[bot]
95a3fe17fa
docs: update .all-contributorsrc [skip ci] 2024-04-08 20:49:03 +00:00
allcontributors[bot]
501861e435
docs: update AUTHORS.md [skip ci] 2024-04-08 20:49:02 +00:00
liv
f3890cbae6
Merge pull request #1944 from Selflocking/patch-1
docs: add more info in threads
2024-04-08 22:48:43 +02:00
YunShu
f714534393
docs: add more info in threads
info.toml: 

```toml
[[exercises]]
name = "threads3"
path = "exercises/threads/threads3.rs"
mode = "test"
hint = """
An alternate way to handle concurrency between threads is to use
a mpsc (multiple producer, single consumer) channel to communicate.
With both a sending end and a receiving end, it's possible to
send values in one thread and receive them in another.
Multiple producers are possible by using clone() to create a duplicate
of the original sending end.
See https://doc.rust-lang.org/book/ch16-02-message-passing.html for more info.
"""
```

threads3'hint contains this link, so it should be placed in Further Information
2024-04-08 22:07:26 +08:00
mo8it
d0fcd8ae8a Use a color for the message 2024-04-08 03:21:13 +02:00
mo8it
7c46e7ac69 Simplify building rows.
No more lifetimes championship :(
2024-04-08 03:16:38 +02:00
mo8it
1db5de9653 Fix selection after applying filters 2024-04-08 03:08:05 +02:00
mo8it
b5fc06bd56 Show more exercises before the selected one 2024-04-08 02:46:35 +02:00
mo8it
7c4d33654f Implement done/pending filters 2024-04-08 02:41:48 +02:00
mo8it
05729b27a0 Set a list offset 2024-04-08 01:49:38 +02:00
mo8it
0bf3f7e01f Lowercase "filter" in help footer 2024-04-08 01:34:41 +02:00
mo8it
bd5503a0d3 Show message on reset 2024-04-08 01:33:11 +02:00
mo8it
25e855a009 Merge imports 2024-04-08 00:36:26 +02:00
mo8it
c2501ae733 Remove list tests because of the TUI 2024-04-08 00:36:10 +02:00
mo8it
3a4f2bebb4 Remove test because of defaulting to watch mode 2024-04-08 00:35:51 +02:00
mo8it
394ca402a8 Remove the info_toml_content field 2024-04-07 23:57:54 +02:00
mo8it
db25cc9157 Ignore .rustlings-state.json 2024-04-07 23:54:32 +02:00
mo8it
93f8d1610d Some renamings 2024-04-07 23:37:40 +02:00
mo8it
99c9ab467b Implement resetting 2024-04-07 22:43:59 +02:00
mo8it
db43efe3ec Update .gitignore 2024-04-07 22:40:50 +02:00
mo8it
9a4ee47c52 Separate WatchState 2024-04-07 19:29:16 +02:00
mo8it
0a674a158d Separate UiState 2024-04-07 19:05:29 +02:00
mo8it
3bd26c7a24 State -> StateFile 2024-04-07 19:01:08 +02:00
mo8it
8c31d38fa1 Better variable name 2024-04-07 17:57:20 +02:00
mo8it
d988054ad8 Add UiState 2024-04-07 16:33:00 +02:00
mo8it
2db86833a9 Fix lifetimes 2024-04-07 13:12:40 +02:00
mo8it
b0a4750624 Implement "continue at" 2024-04-07 04:59:22 +02:00
mo8it
4f69285375 Shorten the help footer 2024-04-07 04:39:03 +02:00
mo8it
e640b4a1ff Add "Next" column 2024-04-07 04:36:27 +02:00
mo8it
7f5a18fa34 Show help message 2024-04-07 04:19:50 +02:00
mo8it
c4897139ae Prevent unneeded redraws 2024-04-07 03:41:23 +02:00
mo8it
372290a796 Done navigation 2024-04-07 03:38:18 +02:00
mo8it
729385362c Update deps 2024-04-07 03:03:59 +02:00
mo8it
f6db88aca8 Started with list 2024-04-07 03:03:37 +02:00
mo8it
0819bbe21f Can't use Ratatui for the watch mode :( 2024-04-07 01:17:53 +02:00
mo8it
18342b3aa3 Verify starting with some index 2024-04-07 01:16:56 +02:00
mo8it
c2daad8340 Return an error instead of exiting 2024-04-07 01:15:47 +02:00
mo8it
de9a0ed522 Update state 2024-04-06 01:46:22 +02:00
mo8it
06e7216c83 Elimintate an itermediate variable 2024-04-06 01:46:09 +02:00
mo8it
60155294e9 Rename packages 2024-04-06 01:45:54 +02:00
mo8it
3f2d41de9e Start with the state 2024-04-05 03:05:07 +02:00
mo8it
b0f19fd862 Start with the TUI 2024-04-05 03:04:53 +02:00
mo8it
0bf51c6a0d Ignore .ignore 2024-04-05 00:59:21 +02:00
mo8it
1d2c2cffd2 Remove .gitattributes 2024-04-05 00:59:13 +02:00
mo8it
157fe016e5 Remove ui.rs 2024-04-05 00:49:22 +02:00
mo8it
5a233398eb Fix tests 2024-04-05 00:44:43 +02:00
mo8it
919ba88413 Use the pretty format when testing even with -q 2024-04-05 00:43:36 +02:00
mo8it
445441ce25 Make gen-dev-cargo-toml a separate package
so that `cargo install` only installs `rustlings`
2024-04-04 23:16:57 +02:00
mo8it
34375b2ebf Clean up as a preparation for the TUI 2024-04-04 21:06:11 +02:00
mo8it
9ea744a710 Remove deps not needed in the TUI 2024-04-04 20:27:30 +02:00
mo8it
2b6f9fb6a7 Add Ratatui 2024-04-04 20:21:55 +02:00
Mo
8c8f30d8ce
Merge pull request #1931 from mo8it/standalone-binary
Standalone binary
2024-04-04 15:48:07 +02:00
mo8it
b6c434c445 Remove optional version field 2024-04-04 15:45:53 +02:00
mo8it
569a68eb73 Minify generated Cargo.toml 2024-04-04 15:44:48 +02:00
mo8it
1885ece2dc Merge branch 'main' 2024-04-04 15:31:59 +02:00
Mo
459c52137a
Merge pull request #1765 from junderw/junderw/fix-gitignore
Fix gitignore for clippy exercise
2024-04-01 19:33:28 +02:00
mo8it
190945352a Add comments about dev/Cargo.toml 2024-04-01 18:52:43 +02:00
mo8it
def8d2c569 Add VerifyState 2024-04-01 18:38:01 +02:00
mo8it
fdd7de00bd Improvements to verify 2024-04-01 18:21:56 +02:00
mo8it
2f30eac27f Remove unneeded .iter() 2024-04-01 17:36:42 +02:00
mo8it
14f3585816 Make cargo run work 2024-04-01 02:11:52 +02:00
mo8it
8ad18de54c Use var_os to avoid conversion to String 2024-03-31 20:11:08 +02:00
mo8it
7560aec66b Inline reset 2024-03-31 20:08:23 +02:00
mo8it
fb32d0b86f Remove redundant test 2024-03-31 18:59:07 +02:00
mo8it
7090fffeae Fix tests 2024-03-31 18:59:01 +02:00
mo8it
c1de4d46aa Some improvements to error handling 2024-03-31 18:25:54 +02:00
mo8it
82b563f165 Use Cargo instead of rustc 2024-03-31 16:55:33 +02:00
liv
9cb25e16f9
Merge pull request #1928 from mo8it/v1-readme
Remove the reference to v1
2024-03-31 16:25:00 +02:00
liv
ca07abf3dc
Merge pull request #1929 from mo8it/threads2
threads2: simplify the exercise
2024-03-31 16:22:54 +02:00
mo8it
b711dd692a Add .gitignore 2024-03-31 02:04:41 +01:00
mo8it
1e1f031713 Fix path comparison 2024-03-31 00:49:19 +01:00
mo8it
b5e17c965d Add an error message when a file is not embedded 2024-03-30 21:15:11 +01:00
mo8it
23f0fae1c8 Show a success message after resetting 2024-03-30 21:13:28 +01:00
mo8it
79ca821e26 Fix tests 2024-03-30 20:48:30 +01:00
mo8it
fe7d775818 Remove the installation scripts 2024-03-30 18:52:49 +01:00
Mo
4e59857228
Merge pull request #1934 from rust-lang/all-contributors/add-loshz
docs: add loshz as a contributor for code
2024-03-29 20:04:20 +01:00
allcontributors[bot]
c2b7f45806
docs: update .all-contributorsrc [skip ci] 2024-03-29 19:03:58 +00:00
allcontributors[bot]
c6597d0010
docs: update AUTHORS.md [skip ci] 2024-03-29 19:03:57 +00:00
Mo
1a4f55e0e6
Merge pull request #1933 from loshz/main
options1: slightly update grammar
2024-03-29 20:03:23 +01:00
Dan
30273a6ee5
Merge branch 'main' into main 2024-03-29 18:29:38 +00:00
mo8it
8e3cc9d70c Improve printed information 2024-03-29 01:52:05 +01:00
mo8it
2b01811fe9 Fix typo 2024-03-29 01:51:22 +01:00
mo8it
a561a0f7f0 Avoid reinitialization by mistake 2024-03-29 01:51:08 +01:00
mo8it
36a8e3ac0e Replace rust-project.json with Cargo.toml 2024-03-29 01:29:41 +01:00
mo8it
0f18d599e9 Add panic = "abort" 2024-03-29 01:25:32 +01:00
mo8it
3959570221 Bump version to v6 2024-03-29 01:25:21 +01:00
mo8it
3ff9b0cd2a POC done 2024-03-28 22:11:16 +01:00
mo8it
5b4103bbac Remove unneeded ./ from relative paths 2024-03-28 21:10:31 +01:00
mo8it
d5ed749e9f Add embedded.rs 2024-03-28 21:06:36 +01:00
mo8it
39bdd086a7 Use concat explicitly from std 2024-03-28 18:18:20 +01:00
mo8it
dd025391f2 Make everything static 2024-03-28 17:52:51 +01:00
mo8it
e5efc68a91 Done macro 2024-03-28 17:34:48 +01:00
Daniel Somerfield
62afbb034f Move test array to be in test module as vec 2024-03-27 20:37:19 -07:00
Mo
9691c3cb55
Merge pull request #1930 from rust-lang/all-contributors/add-jbouganim-parallel
docs: add jbouganim-parallel as a contributor for code
2024-03-28 02:10:25 +01:00
allcontributors[bot]
24cb4a3bc9
docs: update .all-contributorsrc [skip ci] 2024-03-28 01:10:06 +00:00
allcontributors[bot]
0888952cb9
docs: update AUTHORS.md [skip ci] 2024-03-28 01:10:05 +00:00
Mo
b8437bea73
Merge pull request #1773 from jbouganim-parallel/patch-1
fix broken link in windows installation instructions
2024-03-28 02:06:10 +01:00
mo8it
842e341895 threads2: simplify threads2 2024-03-27 21:24:36 +01:00
mo8it
3df59379de Remove the reference to v1 2024-03-27 20:28:31 +01:00
Mo
58b03af587
Merge pull request #1927 from mo8it/docs
doc: Update outdated info
2024-03-27 18:14:56 +01:00
Mo
5652862b23
Merge pull request #1926 from rust-lang/all-contributors/add-NicolasRoelandt
docs: add NicolasRoelandt as a contributor for doc
2024-03-27 17:29:18 +01:00
allcontributors[bot]
9895c1f9bd
docs: update .all-contributorsrc [skip ci] 2024-03-27 16:29:04 +00:00
allcontributors[bot]
4e7f9ca1b3
docs: update AUTHORS.md [skip ci] 2024-03-27 16:29:03 +00:00
Mo
c7cf3720bd
Merge pull request #1799 from NicolasRoelandt/patch-1
Remove confusing aside in 23_conversions/from_str.rs
2024-03-27 17:28:35 +01:00
Mo
d2996b4cc6
Merge pull request #1925 from rust-lang/all-contributors/add-wznmickey
docs: add wznmickey as a contributor for doc
2024-03-27 17:24:16 +01:00
Mo
19675008c8
Merge pull request #1923 from wznmickey/main
chore: update the chapter of macros
2024-03-27 17:23:58 +01:00
allcontributors[bot]
4937cb5b7c
docs: update .all-contributorsrc [skip ci] 2024-03-27 16:23:46 +00:00
allcontributors[bot]
7b20ca9d04
docs: update AUTHORS.md [skip ci] 2024-03-27 16:23:45 +00:00
Mo
217c6d42fb
Merge pull request #1924 from rust-lang/all-contributors/add-paul-leydier
docs: add paul-leydier as a contributor for doc
2024-03-27 17:21:48 +01:00
allcontributors[bot]
fb8dd57d1f
docs: update .all-contributorsrc [skip ci] 2024-03-27 16:21:14 +00:00
allcontributors[bot]
669adbeb60
docs: update AUTHORS.md [skip ci] 2024-03-27 16:21:13 +00:00
wznmickey
dd72429af4 Merge remote-tracking branch 'origin/main' 2024-03-28 00:11:19 +08:00
mo8it
971e7f94dc Update the link to conventionalcommits.org 2024-03-27 17:08:38 +01:00
wznmickey
92183a74c4 chore: update the chapter of macros 2024-03-28 00:06:16 +08:00
mo8it
e7bb832bf3 Remove outdated info about the command line parser 2024-03-27 17:03:53 +01:00
Mo
34d04139cd
Merge pull request #1805 from paul-leydier/chapters-table
docs: sort exercise to book chapter mapping by exercise
2024-03-27 16:59:52 +01:00
Mo
c4d434a2b4
Merge pull request #1922 from mo8it/deps
Update deps
2024-03-27 15:21:13 +01:00
mo8it
76764633b4 Update deps 2024-03-27 15:16:42 +01:00
Mo
8e87c35c88
Merge pull request #1907 from honeywest/feat/ui-format
feat: ui format
2024-03-27 15:08:28 +01:00
Mo
45a1a74559
Merge pull request #1917 from mo8it/project
Rewrite `project.rs`
2024-03-27 15:07:30 +01:00
mo8it
b24f256f2a Merge branch 'main' into project 2024-03-27 15:06:58 +01:00
Mo
864d046058
Merge pull request #1912 from mo8it/performance
Optimizations 1
2024-03-27 15:02:25 +01:00
mo8it
a27741b131 Merge branch 'main' into performance 2024-03-27 15:00:57 +01:00
Mo
b13bafa13e
Merge pull request #1911 from mo8it/watch
Improvements to watch mode
2024-03-27 14:42:17 +01:00
mo8it
f995b4c041 Merge branch 'main' into watch 2024-03-27 14:41:26 +01:00
Mo
b8a5886db4
Merge pull request #1914 from mo8it/toml
Reading the `info.toml` file
2024-03-27 14:30:59 +01:00
mo8it
b9d2756ce8 Merge branch 'main' into toml 2024-03-27 14:30:10 +01:00
Mo
07dec76f7c
Merge pull request #1916 from mo8it/command
Pipe the output of command to null instead of capturing and ignoring it
2024-03-27 14:24:16 +01:00
Mo
deeefcf16c
Merge pull request #1913 from mo8it/which
Use `which` instead of running `rustc --version`
2024-03-27 14:21:11 +01:00
mo8it
8e0f7e56f7 Merge branch 'main' into which 2024-03-27 14:18:20 +01:00
Mo
87ca05b4bb
Merge pull request #1915 from mo8it/home
Remove the home dependency since it is not used
2024-03-27 12:58:30 +01:00
Mo
d69a8a7045
Merge pull request #1921 from mo8it/style
Style
2024-03-27 12:57:26 +01:00
mo8it
87001a68c0 The string doesn't have to be a raw string 2024-03-26 17:50:29 +01:00
mo8it
a610fc1bc2 Remove unneeded closure 2024-03-26 17:50:10 +01:00
mo8it
e89028581c Use == instead of eq 2024-03-26 17:49:55 +01:00
mo8it
980ffa2a2b Use == on simple enums 2024-03-26 17:49:48 +01:00
mo8it
1f2029ae55 Add missing semicolon 2024-03-26 17:49:25 +01:00
mo8it
ed0fcf8e3d Formatting 2024-03-26 17:49:05 +01:00
mo8it
f36efae25d Only use arg instead of args AND arg 2024-03-26 17:48:06 +01:00
mo8it
853d0593d0 Derive Eq when PartialEq is derived 2024-03-26 17:47:33 +01:00
mo8it
078f6ffc1c Add comments 2024-03-26 02:26:26 +01:00
mo8it
7a6f71f090 Fix context of previous lines and improve readability 2024-03-26 02:14:25 +01:00
mo8it
a158c77d81 Add comment 2024-03-25 23:21:14 +01:00
mo8it
8ddbf9635d Add write_project_json 2024-03-25 23:01:56 +01:00
mo8it
8d3ec24c11 Optimize the serialized data types 2024-03-25 22:41:14 +01:00
mo8it
a5ba44bd6a RustAnalyzerProject is not deserialized 2024-03-25 22:30:16 +01:00
mo8it
f5135ae4df Remove unneeded check if crates is empty 2024-03-25 22:29:33 +01:00
mo8it
87e55ccffd Use the parsed exercises instead of glob 2024-03-25 22:20:00 +01:00
mo8it
d911586788 Pipe the output to null instead of capturing and ignoring it 2024-03-25 17:21:54 +01:00
mo8it
b932ed1f67 Don't capture stderr 2024-03-25 17:14:41 +01:00
mo8it
dca3ea355e Remove the home dependency since it is not used 2024-03-25 14:10:51 +01:00
mo8it
d095a307dd Avoid allocations on every call to Path::join 2024-03-25 03:59:21 +01:00
mo8it
51712cc19f Merge get_sysroot_src into the constructor 2024-03-25 03:49:10 +01:00
mo8it
efa9f57048 Add anyhow 2024-03-25 03:46:56 +01:00
mo8it
b3aef377be Use a custom capacity for the JSON buffer 2024-03-25 03:33:14 +01:00
mo8it
e4520602f5 Use the NotFound variant of the IO error 2024-03-25 02:41:45 +01:00
mo8it
83cd91ccca Replace toml with toml_edit 2024-03-25 02:35:51 +01:00
mo8it
51b4c240ed Use which instead of running rustc --version 2024-03-25 00:30:01 +01:00
mo8it
bdf826a026 Make "I AM NOT DONE" caseless 2024-03-24 22:22:55 +01:00
mo8it
c0c112985b Replace regex with winnow 2024-03-24 19:18:19 +01:00
mo8it
f205ee3d4c Call looks_done only once 2024-03-24 18:50:46 +01:00
mo8it
e1375ef431 Use to_string_lossy 2024-03-24 18:47:27 +01:00
mo8it
0aeaccc3a5 Optimize state 2024-03-24 18:34:46 +01:00
mo8it
01b7d6334c Remove unneeded to_string call 2024-03-23 22:08:25 +01:00
mo8it
a325df55d1 Cache filters 2024-03-23 21:56:40 +01:00
mo8it
27fa7c3e4a Move the const string to the bottom like others 2024-03-23 19:00:15 +01:00
mo8it
0d93266462 Initialize the input buffer with some capacity 2024-03-23 18:56:30 +01:00
mo8it
3dce7e5696 Improvements to watch mode 2024-03-23 18:51:25 +01:00
honeywest
e276c12192 feat: ui format 2024-03-21 15:18:50 +08:00
Dan Bond
eb952a480d
verify: fix success message spacing
Signed-off-by: Dan Bond <danbond@protonmail.com>
2024-03-18 16:47:54 -07:00
Dan Bond
f2833c5279
options1: Update wording & fix grammar
Signed-off-by: Dan Bond <danbond@protonmail.com>
2024-03-18 16:47:15 -07:00
liv
9c6f56b836
Merge pull request #1903 from mo8it/threads3
Remove unneeded Arc
2024-03-18 18:43:30 +01:00
liv
f3fdb07507
Merge pull request #1904 from mo8it/lsp
Fix the sysroot path when it contains whitespaces
2024-03-18 18:43:07 +01:00
mo8it
1fe32a7ff2 Fix the sysroot path when it contains whitespaces 2024-03-18 01:44:25 +01:00
mo8it
71700c506c Remove unneeded Arc 2024-03-18 01:12:37 +01:00
liv
18d0f3411f
Merge pull request #1902 from rust-lang/all-contributors/add-kazu728
docs: add kazu728 as a contributor for code
2024-03-17 13:19:44 +01:00
allcontributors[bot]
e1fa6cf30b
docs: update .all-contributorsrc [skip ci] 2024-03-17 12:19:37 +00:00
allcontributors[bot]
a07172a069
docs: update AUTHORS.md [skip ci] 2024-03-17 12:19:36 +00:00
liv
32d2c38aa2
Merge pull request #1899 from kazu728/fix-verify-stdout-buffering
show stdout of the final line
2024-03-17 13:19:20 +01:00
Kazuki Matsuo
80388c042b
fix(verify): show stdout of the last line 2024-03-16 13:56:34 +09:00
liv
c723bcd594
Merge pull request #1897 from rust-lang/all-contributors/add-guizo792
docs: add guizo792 as a contributor for content
2024-03-15 20:57:03 +01:00
allcontributors[bot]
d4233f8166
docs: update .all-contributorsrc [skip ci] 2024-03-15 19:56:55 +00:00
allcontributors[bot]
60f44cc509
docs: update AUTHORS.md [skip ci] 2024-03-15 19:56:54 +00:00
liv
14ca4e8197
Merge pull request #1866 from guizo792/guizo792
docs: Added comment for handling equal numbers in if/if1.rs `bigger` function
2024-03-15 20:56:38 +01:00
guizo792
ae69f423cd
Update exercises/03_if/if1.rs
Co-authored-by: liv <shadows@with.al>
2024-03-15 17:36:28 +00:00
liv
d8ecf4bc2d fix: clean up "return" wording in iterators4 2024-03-15 15:01:39 +01:00
liv
3eabf2aafc
Merge pull request #1878 from mo8it/deps
Update dependencies
2024-03-15 14:56:56 +01:00
liv
02acf83e99
Merge pull request #1895 from rust-lang/all-contributors/add-0Ahmed-0
docs: add 0Ahmed-0 as a contributor for content
2024-03-15 14:40:49 +01:00
allcontributors[bot]
d53ae18918
docs: update .all-contributorsrc [skip ci] 2024-03-15 13:40:37 +00:00
allcontributors[bot]
0d37f9011c
docs: update AUTHORS.md [skip ci] 2024-03-15 13:40:36 +00:00
liv
244ec8fbf2
Merge pull request #1797 from 0Ahmed-0/typos
chore: fix a minor typo
2024-03-15 14:40:19 +01:00
liv
57984ae9f3
Merge pull request #1894 from rust-lang/all-contributors/add-parnavh
docs: add parnavh as a contributor for content
2024-03-15 14:39:28 +01:00
allcontributors[bot]
1e69e67997
docs: update .all-contributorsrc [skip ci] 2024-03-15 13:39:19 +00:00
allcontributors[bot]
1c3b129a53
docs: update AUTHORS.md [skip ci] 2024-03-15 13:39:18 +00:00
liv
a449d39bdc
Merge pull request #1785 from parnavh/main
Cleaned Up Unused Mutability
2024-03-15 14:38:58 +01:00
liv
34df327d2a
Merge pull request #1893 from rust-lang/all-contributors/add-LeverImmy
docs: add LeverImmy as a contributor for content
2024-03-15 14:37:25 +01:00
allcontributors[bot]
b7b74910d8
docs: update .all-contributorsrc [skip ci] 2024-03-15 13:37:02 +00:00
allcontributors[bot]
b7add6a1a8
docs: update AUTHORS.md [skip ci] 2024-03-15 13:37:01 +00:00
liv
ce5df2d84b
Merge pull request #1848 from LeverImmy/main
chore: fixed minor typo
2024-03-15 14:36:47 +01:00
liv
76acf613c5
Merge branch 'main' into main 2024-03-15 14:36:23 +01:00
liv
2966a29449
Merge pull request #1892 from rust-lang/all-contributors/add-luvchurchill
docs: add luvchurchill as a contributor for code
2024-03-15 14:35:29 +01:00
allcontributors[bot]
c01ddbc747
docs: update .all-contributorsrc [skip ci] 2024-03-15 13:35:17 +00:00
allcontributors[bot]
f8f627b6f7
docs: update AUTHORS.md [skip ci] 2024-03-15 13:35:16 +00:00
liv
c3f1183815
Merge pull request #1850 from luvchurchill/main
Fix(Installation) Added .git to end of Repo's https URL
2024-03-15 14:34:48 +01:00
liv
f08fd02f33
Merge pull request #1891 from rust-lang/all-contributors/add-evanmiller2112
docs: add evanmiller2112 as a contributor for content
2024-03-15 14:32:52 +01:00
allcontributors[bot]
8d1258f26a
docs: update .all-contributorsrc [skip ci] 2024-03-15 13:32:31 +00:00
allcontributors[bot]
4304b3981e
docs: update AUTHORS.md [skip ci] 2024-03-15 13:32:30 +00:00
liv
31e7920cee
Merge pull request #1869 from evanmiller2112/main
Clarify language in hashmap3.rs (sum vs per match)
2024-03-15 14:32:12 +01:00
liv
6fb45305f8
Merge pull request #1890 from rust-lang/all-contributors/add-hyphena
docs: add hyphena as a contributor for content
2024-03-15 14:29:00 +01:00
allcontributors[bot]
9cf5a2f83f
docs: update .all-contributorsrc [skip ci] 2024-03-15 13:22:14 +00:00
allcontributors[bot]
3d6b5e8102
docs: update AUTHORS.md [skip ci] 2024-03-15 13:22:13 +00:00
liv
8c5d091513
Merge pull request #1875 from hyphena/patch-1
chore: minor typo fix
2024-03-15 14:21:56 +01:00
liv
91df875847
Merge pull request #1889 from rust-lang/all-contributors/add-pavedroad
docs: add pavedroad as a contributor for content
2024-03-15 14:21:36 +01:00
allcontributors[bot]
1ac392a551
docs: update .all-contributorsrc [skip ci] 2024-03-15 13:19:34 +00:00
allcontributors[bot]
3f0dc81a9c
docs: update AUTHORS.md [skip ci] 2024-03-15 13:19:33 +00:00
liv
44ef58be43
Merge pull request #1881 from pavedroad/main
chore: fix typo
2024-03-15 14:19:17 +01:00
liv
803e0a4fbb
Merge pull request #1888 from rust-lang/all-contributors/add-kylev
docs: add kylev as a contributor for infra
2024-03-15 14:17:26 +01:00
allcontributors[bot]
62b435a309
docs: update .all-contributorsrc [skip ci] 2024-03-15 13:17:18 +00:00
allcontributors[bot]
fe28feba1e
docs: update AUTHORS.md [skip ci] 2024-03-15 13:17:17 +00:00
liv
cc27966980
Merge pull request #1877 from kylev/kv_faster_devcon
Simplify and shrink development container
2024-03-15 14:17:00 +01:00
liv
6b0a2ff0d0
Merge pull request #1871 from rust-lang/dependabot/cargo/mio-0.8.11
chore(deps): bump mio from 0.8.9 to 0.8.11
2024-03-15 14:15:04 +01:00
liv
b0c50b3bc7
Merge pull request #1887 from rust-lang/all-contributors/add-JanB1
docs: add JanB1 as a contributor for content
2024-03-15 14:02:17 +01:00
allcontributors[bot]
4c51cb0909
docs: update .all-contributorsrc [skip ci] 2024-03-15 13:02:10 +00:00
allcontributors[bot]
032e3c9f30
docs: update AUTHORS.md [skip ci] 2024-03-15 13:02:09 +00:00
liv
9bae712453
Merge pull request #1856 from JanB1/main
Clarified hint text
2024-03-15 14:01:54 +01:00
liv
b057e09156
Merge pull request #1886 from rust-lang/all-contributors/add-peterneave
docs: add peterneave as a contributor for infra
2024-03-15 13:57:03 +01:00
allcontributors[bot]
0d5c105c15
docs: update .all-contributorsrc [skip ci] 2024-03-15 12:56:53 +00:00
allcontributors[bot]
fe698d9096
docs: update AUTHORS.md [skip ci] 2024-03-15 12:56:52 +00:00
liv
c54ec23b9e
Merge pull request #1837 from peterneave/main
fix: Ensure scripts have LF line endings
2024-03-15 13:56:35 +01:00
liv
6f1d309308
Merge pull request #1885 from rust-lang/all-contributors/add-reifenrath-dev
docs: add reifenrath-dev as a contributor for content
2024-03-15 13:53:11 +01:00
allcontributors[bot]
6f88dd437e
docs: update .all-contributorsrc [skip ci] 2024-03-15 12:52:54 +00:00
allcontributors[bot]
557bbe2b85
docs: update AUTHORS.md [skip ci] 2024-03-15 12:52:53 +00:00
liv
32c19c2e47
Merge pull request #1832 from reifenrath-dev/main
chore: update from_into.rs task description to fit the code
2024-03-15 13:52:38 +01:00
liv
27d1a31eb6
Merge pull request #1884 from rust-lang/all-contributors/add-AnonimAnonim2245
docs: add AnonimAnonim2245 as a contributor for code
2024-03-15 13:52:01 +01:00
allcontributors[bot]
3c6c29e19e
docs: update .all-contributorsrc [skip ci] 2024-03-15 12:51:44 +00:00
allcontributors[bot]
2b97faa1d3
docs: update AUTHORS.md [skip ci] 2024-03-15 12:51:43 +00:00
Luca Plian
17ee0e3c7a
optimized the UI code (#1830) 2024-03-15 13:51:24 +01:00
liv
c46a711526 fix: revert from_into test change 2024-03-15 13:48:57 +01:00
Ahmed
098ff228d7 chore: fix a minor typo 2024-03-13 00:39:45 +00:00
pavedroad
f5e9db90cc chore: fix typo
Signed-off-by: pavedroad <qcqs@outlook.com>
2024-03-12 14:35:48 +08:00
mo8it
36db08340d Update dependencies 2024-03-10 23:57:35 +01:00
Kyle VanderBeek
2fb135026c Add back the post-attach watch. 2024-03-09 23:18:31 +00:00
Kyle VanderBeek
77903200a0 Remove duplicate vscode extension list.
It's already in the vendor-specific .vscode files.
2024-03-09 20:20:14 +00:00
Kyle VanderBeek
e424e9f6c7 Add target directory to $PATH
Makes the pre-built command work in the shell right away.
2024-03-09 20:07:51 +00:00
Kyle VanderBeek
11f0fd7fd9 Convert to lightweight dev container; simplify.
Instead of running `rustup` on a multi-gigabyte general-purpose Linux base, use the premade devcontainers/rust:1 which closely tracks the rust toolchain releases. Rip out excess setup steps since devcontainers come with the repo checked out; just compile/update the binary.
2024-03-09 19:45:50 +00:00
luna
547f3ac835
chore: minor typo fix 2024-03-07 18:31:33 -05:00
dependabot[bot]
373676a576
chore(deps): bump mio from 0.8.9 to 0.8.11
Bumps [mio](https://github.com/tokio-rs/mio) from 0.8.9 to 0.8.11.
- [Release notes](https://github.com/tokio-rs/mio/releases)
- [Changelog](https://github.com/tokio-rs/mio/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tokio-rs/mio/compare/v0.8.9...v0.8.11)

---
updated-dependencies:
- dependency-name: mio
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-04 22:02:08 +00:00
Evan Miller
9bda8598e1
Merge pull request #1 from evanmiller2112/evanmiller2112-hashmap3-description
Update hashmaps3.rs description for clarity
2024-03-04 10:39:01 -05:00
Evan Miller
19b5e24d5c
Update hashmaps3.rs description for clarity
I struggled with this exercise and didn't understand that it was looking for a summary of goals scored/conceded per team, instead of per match.

My goal here is just to clarify the language, essentially saying "the total number of goals the team scored" to indicate that we are looking for a sum.

Updated the exercise description to clarify this point.

Relates loosely to closed issue https://github.com/rust-lang/rustlings/issues/1361
2024-03-04 10:38:09 -05:00
Guizoul
1da82a0eab docs: Added comment for handling equal numbers in if/if1.rs bigger function 2024-02-28 14:19:05 +01:00
Jan
75ee0e4245
Clarified hint text 2024-02-12 18:13:20 +01:00
luvchurchill
53c40024d8
Added .git to end of Repo's https URL
The install.sh script didn't work for me, after I changed this locally it worked
URL needs to end in .git
2024-02-06 01:54:04 +02:00
LeverImmy
bcb192c707 chore: fixed minor typo 2024-02-04 10:51:06 +08:00
Peter Neave
6072ec16a0 fix: Ensure scripts have LF line endings
Use gitattributes file to ensure script files have LF line endings. This solves a problem for users who wish to use DevContainers on Windows machines and the file has been cloned from the repository with CRLF line endings.
2024-01-24 09:30:49 +11:00
reifenrath-dev
b70ed105db chore: update from_into.rs task description to fit the code 2024-01-19 11:18:54 +01:00
liv
8d0aa11a35
Merge pull request #1826 from rust-lang/all-contributors/add-gerases
docs: add gerases as a contributor for content
2024-01-15 14:52:04 +00:00
allcontributors[bot]
e2674498c6
docs: update .all-contributorsrc [skip ci] 2024-01-15 14:51:48 +00:00
allcontributors[bot]
3200581d4d
docs: update AUTHORS.md [skip ci] 2024-01-15 14:51:47 +00:00
liv
6afc4840b4
Merge pull request #1819 from gerases/grammar-fix
Correct for more standard English
2024-01-15 14:51:31 +00:00
Sergei Gerasenko
93aef73eb5 Correct for more standard English 2024-01-09 10:17:03 -06:00
Paul Leydier
5453fad991 docs: sort exercise to book chapter mapping by exercise 2023-12-18 21:16:18 -05:00
NicolasRoelandt
f35f63fa57
Remove confusing aside in 23_conversions/from_str.rs
The advice tell us how to return as String error message. Unless I missed something, we can't even return a String error message here, so this advice is more confusing than anything and should better be removed.
2023-12-08 17:52:21 +00:00
liv
88b583f2bb
Merge pull request #1793 from rust-lang/all-contributors/add-bastianpedersen
docs: add bastianpedersen as a contributor for content
2023-11-29 17:39:57 +01:00
allcontributors[bot]
8863855627
docs: update .all-contributorsrc [skip ci] 2023-11-29 16:39:44 +00:00
allcontributors[bot]
5bbdb3d5ba
docs: update AUTHORS.md [skip ci] 2023-11-29 16:39:43 +00:00
liv
9f4b5566db
Merge pull request #1769 from bastianpedersen/patch-1
docs: reword `clippy1` exercise to be more readable
2023-11-29 17:39:28 +01:00
liv
f97f4bc4f1
Merge pull request #1792 from rust-lang/all-contributors/add-neuschaefer
docs: add neuschaefer as a contributor for code
2023-11-29 17:34:16 +01:00
allcontributors[bot]
3e7f1e3ff2
docs: update .all-contributorsrc [skip ci] 2023-11-29 16:33:59 +00:00
allcontributors[bot]
4b80097817
docs: update AUTHORS.md [skip ci] 2023-11-29 16:33:58 +00:00
liv
7f530ebf20
Merge pull request #1783 from neuschaefer/fe-nish
Fe-nish line rendering improvements
2023-11-29 17:33:41 +01:00
liv
11e74147ae
Merge pull request #1791 from rust-lang/all-contributors/add-matthri
docs: add matthri as a contributor for code
2023-11-29 17:20:27 +01:00
allcontributors[bot]
5d78a2f103
docs: update .all-contributorsrc [skip ci] 2023-11-29 16:10:38 +00:00
allcontributors[bot]
194e0b951d
docs: update AUTHORS.md [skip ci] 2023-11-29 16:10:37 +00:00
liv
369a3d3678
Merge pull request #1775 from matthri/update-notify-v6
Update `notify` dependency to v6
2023-11-29 17:10:21 +01:00
parnavh
21b1e6ecf8 fix(move_semantics): removed unused mut 2023-11-22 22:06:17 +05:30
J. Neuschäfer
12d1bf407a feat(watch): Add red color to the finishing ferris
This adds some eye-candy for users who finish Rustlings. It is based on
ANSI terminal escape sequences and should work in most environments.
2023-11-22 02:07:52 +01:00
J. Neuschäfer
5c4821ac6f fix(watch): Fix rendering of the finishing ferris
In commit 571bab2 ("Run clippy --fix"), the "" string was changed to
r"", even though it contains an intentional escape sequence, which now
looks wrong. My commit undoes this change:

Before:

	+----------------------------------------------------+
	|          You made it to the Fe-nish line!          |
	+--------------------------  ------------------------+
				  \\/
	     ▒▒          ▒▒▒▒▒▒▒▒      ▒▒▒▒▒▒▒▒          ▒▒
	   ▒▒▒▒  ▒▒    ▒▒        ▒▒  ▒▒        ▒▒    ▒▒  ▒▒▒▒
	   ▒▒▒▒  ▒▒  ▒▒            ▒▒            ▒▒  ▒▒  ▒▒▒▒
	 ░░▒▒▒▒░░▒▒  ▒▒            ▒▒            ▒▒  ▒▒░░▒▒▒▒
	   ▓▓▓▓▓▓▓▓  ▓▓      ▓▓██  ▓▓  ▓▓██      ▓▓  ▓▓▓▓▓▓▓▓
	     ▒▒▒▒    ▒▒      ████  ▒▒  ████      ▒▒░░  ▒▒▒▒
	       ▒▒  ▒▒▒▒▒▒        ▒▒▒▒▒▒        ▒▒▒▒▒▒  ▒▒
		 ▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▒▒▒▒▒▒▒▒▓▓▒▒▓▓▒▒▒▒▒▒▒▒
		   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
		     ▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒
		   ▒▒  ▒▒▒▒▒▒▒▒▒▒██████▒▒▒▒▒▒▒▒▒▒  ▒▒
		 ▒▒    ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒    ▒▒
	       ▒▒    ▒▒    ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒    ▒▒    ▒▒
	       ▒▒  ▒▒    ▒▒                  ▒▒    ▒▒  ▒▒
		   ▒▒  ▒▒                      ▒▒  ▒▒


After:

	+----------------------------------------------------+
	|          You made it to the Fe-nish line!          |
	+--------------------------  ------------------------+
				   \/
	     ▒▒          ▒▒▒▒▒▒▒▒      ▒▒▒▒▒▒▒▒          ▒▒
	   ▒▒▒▒  ▒▒    ▒▒        ▒▒  ▒▒        ▒▒    ▒▒  ▒▒▒▒
	   ▒▒▒▒  ▒▒  ▒▒            ▒▒            ▒▒  ▒▒  ▒▒▒▒
	 ░░▒▒▒▒░░▒▒  ▒▒            ▒▒            ▒▒  ▒▒░░▒▒▒▒
	   ▓▓▓▓▓▓▓▓  ▓▓      ▓▓██  ▓▓  ▓▓██      ▓▓  ▓▓▓▓▓▓▓▓
	     ▒▒▒▒    ▒▒      ████  ▒▒  ████      ▒▒░░  ▒▒▒▒
	       ▒▒  ▒▒▒▒▒▒        ▒▒▒▒▒▒        ▒▒▒▒▒▒  ▒▒
		 ▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▒▒▒▒▒▒▒▒▓▓▒▒▓▓▒▒▒▒▒▒▒▒
		   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
		     ▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒
		   ▒▒  ▒▒▒▒▒▒▒▒▒▒██████▒▒▒▒▒▒▒▒▒▒  ▒▒
		 ▒▒    ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒    ▒▒
	       ▒▒    ▒▒    ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒    ▒▒    ▒▒
	       ▒▒  ▒▒    ▒▒                  ▒▒    ▒▒  ▒▒
		   ▒▒  ▒▒                      ▒▒  ▒▒

Running `cargo clippy` (version 0.1.70) after this commit does not
reveal any new warnings.

Fixes: 571bab2 ("Run clippy --fix")
2023-11-22 02:07:36 +01:00
Daniel Somerfield
8bfe2ec71e Fix all_fruits_types_in_basket to fail if all fruit kinds are not included 2023-11-21 14:02:26 -08:00
Matthias Richter
adf7d1b975 chore(watch): update notify dependency to v6
closes #1640
2023-11-17 00:56:02 +01:00
liv
14e423fe53
Merge pull request #1770 from a-rustacean/revert-1761-all-contributors/add-sarupbanskota
Revert "docs: add sarupbanskota as a contributor for doc"
2023-11-16 18:16:46 +01:00
liv
a49f231b5d
Merge pull request #1768 from adwsingh/main
Revert "Add CodeCrafters"
2023-11-16 18:12:34 +01:00
liv
70f472484f docs: revert fancy install aliases 2023-11-14 15:49:52 +01:00
Matthias Richter
77b687d501 fix(enums) make enum variants more consistent
closes #1545
2023-11-14 08:19:40 +01:00
jbouganim-parallel
0f629a47a5
fix broken link in windows installation instructions
https://github.com/rust-lang/rustlings/issues/1759
2023-11-13 17:30:38 -08:00
Dilshad
f01f2d13c7
Revert "docs: add sarupbanskota as a contributor for doc" 2023-11-12 22:19:40 +05:30
Bastian Pedersen
3461c4f73d
Reword clippy1 exercise to be more readable 2023-11-12 11:39:14 +01:00
Adwait Kumar Singh
4d6cd0ebb4 Revert "Add CodeCrafters"
This reverts commit dad22169849a4d16d6a74c69a45017dab07677ff.
2023-11-11 16:39:44 -08:00
junderw
3080141c5f
Fix gitignore for clippy exercise 2023-11-10 23:19:23 -07:00
liv
bc3808cf29
Merge pull request #1761 from rust-lang/all-contributors/add-sarupbanskota
docs: add sarupbanskota as a contributor for doc
2023-11-07 10:14:14 +01:00
allcontributors[bot]
761fced786
docs: update .all-contributorsrc [skip ci] 2023-11-07 09:13:12 +00:00
allcontributors[bot]
706e075908
docs: update AUTHORS.md [skip ci] 2023-11-07 09:13:11 +00:00
liv
a13c7b0ae3
Merge pull request #1760 from sarupbanskota/patch-3
Add CodeCrafters to `Continuing On`
2023-11-07 10:12:55 +01:00
Sarup Banskota
dad2216984
Add CodeCrafters 2023-11-07 13:02:59 +08:00
liv
7e12aaa24a
Merge pull request #1758 from rust-lang/all-contributors/add-raymon-roos
docs: add raymon-roos as a contributor for content
2023-11-06 12:42:13 +01:00
allcontributors[bot]
6e7f1f5f07
docs: update .all-contributorsrc [skip ci] 2023-11-06 11:39:55 +00:00
allcontributors[bot]
e0904de6ea
docs: update AUTHORS.md [skip ci] 2023-11-06 11:39:54 +00:00
liv
4ecc35131c
Merge pull request #1754 from raymon-roos/fix/traits-03-hint
fix(traits3): grammar mistake in the hint for traits3
2023-11-06 12:39:38 +01:00
liv
22838ba227
Merge pull request #1757 from rust-lang/all-contributors/add-danieltinazzi
docs: add danieltinazzi as a contributor for content
2023-11-06 12:38:27 +01:00
allcontributors[bot]
3b34167924
docs: update .all-contributorsrc [skip ci] 2023-11-06 11:38:20 +00:00
allcontributors[bot]
cb47760978
docs: update AUTHORS.md [skip ci] 2023-11-06 11:38:19 +00:00
liv
fb327612f8
Merge pull request #1753 from danieltinazzi/main
Fix progress bar
2023-11-06 12:38:01 +01:00
Raymon Roos
7e16e7721a fix(traits3): grammar mistake in the hint for traits3 2023-11-05 15:30:47 +01:00
danieltinazzi
3181d9f3f8 fix progress bar count 2023-11-04 17:29:10 +01:00
liv
02b1b5f6ab
Merge pull request #1749 from rust-lang/all-contributors/add-0atman
docs: add 0atman as a contributor for content
2023-11-02 10:03:46 +01:00
allcontributors[bot]
9de432e6bf
docs: update .all-contributorsrc [skip ci] 2023-11-02 09:03:38 +00:00
allcontributors[bot]
24f819d823
docs: update AUTHORS.md [skip ci] 2023-11-02 09:03:37 +00:00
liv
13837b25cf
Merge pull request #1735 from 0atman/main
fix(intro2): Changed intro2 to be a name error, not a format string error
2023-11-02 10:01:48 +01:00
Tristram Oaten
2ac6606c6c fix(intro2): changed intro2 to be a name error, not a format string error. 2023-10-20 17:31:56 +01:00
liv
c306792449
Merge pull request #1728 from markgreene74/fix/small-typo-in-intro1.rs
fix(intro1.rs): typo in the exercise body
2023-10-18 23:35:25 +02:00
liv
1d16528542
Merge pull request #1733 from rust-lang/all-contributors/add-VeeDeltaVee
docs: add VeeDeltaVee as a contributor for doc
2023-10-18 23:34:54 +02:00
allcontributors[bot]
e74a7001ef
docs: update .all-contributorsrc [skip ci] 2023-10-18 21:34:41 +00:00
allcontributors[bot]
c5c33578d9
docs: update AUTHORS.md [skip ci] 2023-10-18 21:34:40 +00:00
liv
0d65d17f10
Merge pull request #1729 from VeeDeltaVee/main
docs: fix windows installation instructions
2023-10-18 23:34:17 +02:00
liv
98096d9859
Merge pull request #1732 from rust-lang/all-contributors/add-markgreene74
docs: add markgreene74 as a contributor for code
2023-10-18 23:33:45 +02:00
allcontributors[bot]
5b25de927e
docs: update .all-contributorsrc [skip ci] 2023-10-18 21:33:38 +00:00
allcontributors[bot]
a4698d8e10
docs: update AUTHORS.md [skip ci] 2023-10-18 21:33:37 +00:00
liv
078de99c61
Merge pull request #1727 from markgreene74/fix/clippy-exercises-failing-after-rename
fix(watch): update the CLIPPY_CARGO_TOML_PATH
2023-10-18 23:33:20 +02:00
liv
02a122c2e7
Merge pull request #1731 from rust-lang/all-contributors/add-TheBearodactyl
docs: add TheBearodactyl as a contributor for code
2023-10-18 23:32:53 +02:00
allcontributors[bot]
faa261e3e2
docs: update .all-contributorsrc [skip ci] 2023-10-18 21:32:33 +00:00
allcontributors[bot]
9394825018
docs: update AUTHORS.md [skip ci] 2023-10-18 21:32:32 +00:00
liv
efd6b8b9c7
Merge pull request #1730 from TheBearodactyl/main
Update install.sh
2023-10-18 23:31:19 +02:00
The Bearodactyl
be6630bec6
Update install.sh 2023-10-18 18:59:58 +00:00
Versha Dhankar
d757726aca
docs: fix windows installation instructions
Currently, the windows installation instructions download a script from the URL ps1.rustlings.cool. This URL isn't detected as a URL in some cases, which means that PowerShell tries to load the data from a local file called ps1.rustlings.cool.

This was breaking my install, and adding the https:// fixed it.
2023-10-17 11:54:59 -07:00
markgreene74
3545c5a7a4 fix(intro1.rs): typo in the exercise body 2023-10-16 22:53:21 +01:00
markgreene74
3c4fde4610 fix(watch): update the CLIPPY_CARGO_TOML_PATH
... to reflect the changes to the exercise directory names.

The path exercises/clippy replaced with exercises/22_clippy.

closes #1726
2023-10-16 22:41:34 +01:00
liv
33220c5109
Merge pull request #1723 from adamhb123/exercise-directory-structure-update
Update Exercises Directory Names to Reflect Order
2023-10-16 14:02:51 +02:00
Adam Brewer
64d95837e9 Update Exercises Directory Names to Reflect Order 2023-10-16 07:37:12 -04:00
liv
c3941323e2
Merge pull request #1725 from rust-lang/all-contributors/add-matthewjnield
docs: add matthewjnield as a contributor for content
2023-10-16 11:27:42 +02:00
allcontributors[bot]
9a7d88f139
docs: update .all-contributorsrc [skip ci] 2023-10-16 09:27:26 +00:00
allcontributors[bot]
c7fccf74c9
docs: update AUTHORS.md [skip ci] 2023-10-16 09:27:25 +00:00
liv
54c0ac1f91
Merge pull request #1718 from matthewjnield/main
chore(errors): fix grammar typo and wording in errors exercises
2023-10-16 11:27:07 +02:00
Matt Nield
642aac6f43
chore(errors2): minor description wording change
This commit makes a minor change in the wording of the description of the errors2 exercise to avoid potential confusion, changing:

"A player of the game will type in how many items they want to buy, and the `total_cost` function will calculate the total cost of the tokens."
to
"A player of the game will type in how many items they want to buy, and the `total_cost` function will calculate the total cost of the items."
2023-10-13 15:47:38 -04:00
Matt Nield
5374811f96
chore(errors1): fix grammar typo in hint for exercise errors1
This commit corrects a grammar typo in the hint of the errors1 exercise, changing from:
"`Ok` and `Err` are one of the variants of `Result`,"
to:
"`Ok` and `Err` are the two variants of `Result`,"
2023-10-13 15:28:14 -04:00
liv
b97c88f202
docs: use new fancy install aliases 2023-10-13 13:28:45 +02:00
liv
d15096f0df
Merge pull request #1700 from docwilco/proper-markdown-hints
chore: make hints proper markdown
2023-09-29 12:32:16 +02:00
Rogier 'DocWilco' Mulhuijzen
8e6c83b4cf chore: make hints proper markdown
Also rewrapped some hints to 80 columns so that they also look good in a
terminal.

closes #1698
2023-09-29 00:39:51 +02:00
liv
3bfd857a27
Merge pull request #1696 from docwilco/docwilco/fix-spawn-windows-debugging
fix(cli): make debugging in windows work
2023-09-28 11:03:08 +02:00
liv
c03bc1ec3e
Merge pull request #1699 from rust-lang/all-contributors/add-docwilco
docs: add docwilco as a contributor for code
2023-09-28 11:02:51 +02:00
allcontributors[bot]
2fcafc6602
docs: update .all-contributorsrc [skip ci] 2023-09-28 09:02:44 +00:00
allcontributors[bot]
11227403ce
docs: update AUTHORS.md [skip ci] 2023-09-28 09:02:43 +00:00
liv
177981d1cd
chore: fix missing opening brace 2023-09-28 11:02:25 +02:00
liv
579735b1c3
Merge pull request #1697 from docwilco/docwilco/stop-littering-pdb-files-on-windows
fix(cli): stop littering .pdb files on windows
2023-09-28 11:01:33 +02:00
DocWilco
511e334365 fix(cli): stop littering pdb files on windows 2023-09-27 22:02:14 +02:00
DocWilco
cc658eb288 fix(cli): make debugging in windows work
On windows, if `stderr` or `stdin` aren't also set to `Stdio::null()`
the `spawn()` fails with `The handle is invalid`, and `rustlings`
thinks that there's no `rustc` installed.
2023-09-27 21:33:49 +02:00
liv
da3d55ba03
Merge pull request #1690 from jyn514/error-handling
Give a more helpful error when a file is missing
2023-09-26 11:02:05 +02:00
liv
e1bd5ef858
Merge pull request #1692 from rust-lang/all-contributors/add-offbyone
docs: add offbyone as a contributor for infra
2023-09-26 11:01:35 +02:00
liv
5c405ea0f5
Merge branch 'main' into all-contributors/add-offbyone 2023-09-26 11:01:28 +02:00
liv
92f96c1d45
Merge pull request #1693 from rust-lang/all-contributors/add-dieterplex
docs: add dieterplex as a contributor for infra
2023-09-26 11:00:22 +02:00
allcontributors[bot]
00e16b49e5
docs: update .all-contributorsrc [skip ci] 2023-09-26 08:59:26 +00:00
allcontributors[bot]
463e23e006
docs: update AUTHORS.md [skip ci] 2023-09-26 08:59:25 +00:00
liv
d7e1064b13
Merge pull request #1686 from dieterplex/mrv4clap
fix(installation): bump MinRustVersion to 1.70
2023-09-26 10:59:08 +02:00
allcontributors[bot]
e58c8322e9
docs: update .all-contributorsrc [skip ci] 2023-09-26 08:58:46 +00:00
allcontributors[bot]
be78831ac0
docs: update AUTHORS.md [skip ci] 2023-09-26 08:58:45 +00:00
liv
fb2840ede5
Merge pull request #1684 from offbyone/drop-envrc
Remove .envrc
2023-09-26 10:58:28 +02:00
jyn
b88c23897f Give a more helpful error when a file is missing
Previously, this would just say "missing file". Now it shows the path of the file that was missing,
which should make it easier to debug what went wrong.
2023-09-25 03:41:13 -04:00
d1t2
6aa47be78e
fix(installation): bump MinRustVersion to 1.70
Since #1633 porting to Clap, min Rust version reqirement changes.
2023-09-22 11:32:39 +08:00
Chris Rose
c63c44ac70
Remove .envrc 2023-09-21 11:00:04 -06:00
liv
06f865307f
Merge pull request #1683 from rust-lang/all-contributors/add-OfirLauber
docs: add OfirLauber as a contributor for content
2023-09-21 12:12:36 +02:00
allcontributors[bot]
f86a3c5ddc
docs: update .all-contributorsrc [skip ci] 2023-09-21 10:01:31 +00:00
allcontributors[bot]
666857dc4e
docs: update AUTHORS.md [skip ci] 2023-09-21 10:01:30 +00:00
liv
1552822404
Merge pull request #1682 from OfirLauber/main
chore: fix comment in enums3.rs
2023-09-21 12:01:16 +02:00
Ofir Lauber
83ac243c00 chore: fix comment in enums3.rs 2023-09-21 01:54:11 +03:00
liv
9a743f80c5 release: 5.6.1 2023-09-18 10:16:05 +02:00
liv
170aaabe9b
Merge pull request #1673 from husjon/fix-enums3-formatting
Fixed formatting of `enums3` with rustfmt
2023-09-18 10:07:39 +02:00
liv
ef122c9973
Merge pull request #1681 from rust-lang/all-contributors/add-jurglic
docs: add jurglic as a contributor for content
2023-09-18 10:06:13 +02:00
allcontributors[bot]
8e8c74c6c0
docs: update .all-contributorsrc [skip ci] 2023-09-18 08:05:52 +00:00
allcontributors[bot]
a38840ae92
docs: update AUTHORS.md [skip ci] 2023-09-18 08:05:51 +00:00
liv
2e48fe9cc7
Merge pull request #1675 from jurglic/fix-rand-typo
fix: test name typo
2023-09-18 10:05:37 +02:00
liv
3b451e4ab1
Merge pull request #1680 from rust-lang/all-contributors/add-krmpotic
docs: add krmpotic as a contributor for content
2023-09-18 10:03:57 +02:00
allcontributors[bot]
746180b153
docs: update .all-contributorsrc [skip ci] 2023-09-18 08:03:49 +00:00
allcontributors[bot]
62415f758b
docs: update AUTHORS.md [skip ci] 2023-09-18 08:03:48 +00:00
liv
0807353bf0
Merge pull request #1678 from krmpotic/main
remove hint comments when no hint exists
2023-09-18 10:03:35 +02:00
liv
a808cf71a3
Merge pull request #1679 from rust-lang/revert-1620-fix_1611
Revert "Fix 1611"
2023-09-18 09:54:20 +02:00
liv
8716558696
Revert "Fix 1611" 2023-09-18 09:54:08 +02:00
Luka Krmpotic
eb84eaf151 remove hint comments when no hint exists 2023-09-15 22:29:55 +02:00
Jurglic
a0699bd917 fix: test name typo 2023-09-14 17:10:06 +02:00
Jon Erling Hustadnes
0ee9c5b776 Fixed formatting with rust-analyzer 2023-09-13 20:26:47 +02:00
liv
51c8da06b0
Merge pull request #1672 from rust-lang/all-contributors/add-CobaltCause
docs: add CobaltCause as a contributor for infra
2023-09-12 10:57:20 +02:00
allcontributors[bot]
95640cba23
docs: update .all-contributorsrc [skip ci] 2023-09-12 08:57:12 +00:00
allcontributors[bot]
241889159a
docs: update AUTHORS.md [skip ci] 2023-09-12 08:57:11 +00:00
liv
edb8813cc7
Merge pull request #1671 from CobaltCause/nix-flake-update
chore: update flake.lock
2023-09-12 10:56:54 +02:00
Charles Hall
4a1290cb66
chore: update flake.lock
Flake lock file updates:

• Updated input 'flake-compat':
    'github:edolstra/flake-compat/b4a34015c698c7793d592d66adbab377907a2be8' (2022-04-19)
  → 'github:edolstra/flake-compat/35bb57c0c8d8b62bbfd284272c928ceb64ddbde9' (2023-01-17)
• Updated input 'flake-utils':
    'github:numtide/flake-utils/c0e246b9b83f637f4681389ecabcb2681b4f3af0' (2022-08-07)
  → 'github:numtide/flake-utils/f9e7cf818399d17d347f847525c5a5a8032e4e44' (2023-08-23)
• Added input 'flake-utils/systems':
    'github:nix-systems/default/da67096a3b9bf56a91d16901293e51ba5b49a27e' (2023-04-09)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/b39fd6e4edef83cb4a135ebef98751ce23becc33' (2022-10-24)
  → 'github:nixos/nixpkgs/db9208ab987cdeeedf78ad9b4cf3c55f5ebd269b' (2023-09-08)
2023-09-11 20:04:37 -07:00
liv
d52ce2d354
Merge pull request #1670 from rust-lang/all-contributors/add-husjon
docs: add husjon as a contributor for content
2023-09-09 14:58:45 +02:00
allcontributors[bot]
b33ef03ac6
docs: update .all-contributorsrc [skip ci] 2023-09-09 12:58:36 +00:00
allcontributors[bot]
dceba07e82
docs: update AUTHORS.md [skip ci] 2023-09-09 12:58:35 +00:00
liv
e12504a61d
Merge pull request #1667 from husjon/update-primitive_types3-requirement
Make `primitive_types3` require at least 100 elements
2023-09-09 14:58:14 +02:00
liv
9de22c9afa
Merge pull request #1669 from rust-lang/all-contributors/add-ob
docs: add ob as a contributor for content
2023-09-09 01:23:54 +02:00
allcontributors[bot]
e17d603201
docs: update .all-contributorsrc [skip ci] 2023-09-08 23:23:32 +00:00
allcontributors[bot]
47fbd6d160
docs: update AUTHORS.md [skip ci] 2023-09-08 23:23:31 +00:00
liv
9dc8f13925
Merge pull request #1668 from ob/ob/fix-bug
Fix compiler error and clarify instructions
2023-09-09 01:23:15 +02:00
Oscar Bonilla
33a4f4e454 Fix compiler error and clarify instructions 2023-09-08 09:49:11 -07:00
Jon Erling Hustadnes
a5e4133516
Make primitive_types3 require at least 100 elements
Made the function panic if it's not long enough
2023-09-08 16:42:16 +02:00
liv
4d04aad890
Merge pull request #1641 from mo8it/move-semantics5-test
Convert exercises with assertions to tests
2023-09-06 09:31:46 +02:00
liv
847b57423f update for page build 2023-09-04 15:26:22 +02:00
liv
58cabf2ebd release: 5.6.0 2023-09-04 15:23:04 +02:00
liv
ae28d2fa2d
Merge pull request #1665 from rust-lang/chore/better-ci
chore: consolidate CI workflows
2023-09-04 15:02:14 +02:00
liv
de45998f69 chore: remove argh 2023-09-04 15:02:02 +02:00
liv
0d36050b36 chore: remove link checker 2023-09-04 14:58:13 +02:00
liv
f31a18429b chore: consolidate CI workflows 2023-09-04 14:57:16 +02:00
liv
3ad30308ec feat: add oranda deploy workflow 2023-09-04 14:50:31 +02:00
liv
6c0c397507 fix: absolut-ize readme links 2023-09-04 14:49:52 +02:00
liv
42da308140
Merge pull request #1664 from rust-lang/all-contributors/add-Jak-Ch-ll
docs: add Jak-Ch-ll as a contributor for content
2023-09-04 14:39:54 +02:00
allcontributors[bot]
680a32a85c
docs: update .all-contributorsrc [skip ci] 2023-09-04 12:39:46 +00:00
allcontributors[bot]
951dde4e94
docs: update AUTHORS.md [skip ci] 2023-09-04 12:39:45 +00:00
liv
14fbdd20ac
Merge pull request #1473 from Jak-Ch-ll/update-hints-for-vecs2
docs(vecs2): update hints
2023-09-04 14:39:28 +02:00
liv
ad0fad4218
Merge branch 'main' into update-hints-for-vecs2 2023-09-04 14:39:16 +02:00
liv
a5fe578e79
Merge pull request #1663 from rust-lang/all-contributors/add-pksadiq
docs: add pksadiq as a contributor for content
2023-09-04 14:38:06 +02:00
allcontributors[bot]
d5525794f8
docs: update .all-contributorsrc [skip ci] 2023-09-04 12:37:58 +00:00
allcontributors[bot]
3f7ef6fe33
docs: update AUTHORS.md [skip ci] 2023-09-04 12:37:56 +00:00
liv
992e5163d3
Merge pull request #1565 from pksadiq/fix-enum3-message-modification
fix(enums3): modify message string in test
2023-09-04 14:37:44 +02:00
liv
d03f624357
Merge pull request #1662 from rust-lang/all-contributors/add-bean5
docs: add bean5 as a contributor for content
2023-09-04 14:35:42 +02:00
allcontributors[bot]
b547321868
docs: update .all-contributorsrc [skip ci] 2023-09-04 12:35:35 +00:00
allcontributors[bot]
9a0e5bd003
docs: update AUTHORS.md [skip ci] 2023-09-04 12:35:34 +00:00
liv
c57ad35e5b
Merge pull request #1477 from bean5/main
small changes to a few README files
2023-09-04 14:35:15 +02:00
liv
f7ef198e3a
Merge pull request #1661 from rust-lang/all-contributors/add-willhack
docs: add willhack as a contributor for content
2023-09-04 14:34:46 +02:00
allcontributors[bot]
fcac2b553c
docs: update .all-contributorsrc [skip ci] 2023-09-04 12:34:38 +00:00
allcontributors[bot]
e8c2d27b4a
docs: update AUTHORS.md [skip ci] 2023-09-04 12:34:37 +00:00
liv
630cbf8f85
Merge pull request #1587 from willhack/chore/update-hints
chore: update line reference in strings2 hint
2023-09-04 14:34:20 +02:00
liv
0aa9418736
Merge branch 'main' into chore/update-hints 2023-09-04 14:34:13 +02:00
liv
abc3013096
Merge pull request #1660 from rust-lang/fix/move-semantics-tests
fix: refactor move semantics 1-4 into tests
2023-09-04 14:32:01 +02:00
liv
51e237d5f9 fix: refactor move semantics 1-4 into tests 2023-09-04 14:29:06 +02:00
liv
6eb9bde786
Merge pull request #1659 from rust-lang/all-contributors/add-yamila-moreno
docs: add yamila-moreno as a contributor for content
2023-09-04 13:58:37 +02:00
allcontributors[bot]
dce89aefb9
docs: update .all-contributorsrc [skip ci] 2023-09-04 11:58:25 +00:00
allcontributors[bot]
47e14cff8d
docs: update AUTHORS.md [skip ci] 2023-09-04 11:58:24 +00:00
liv
4d9b68b377
Merge pull request #1598 from yamila-moreno/fix/hint-in-primitives-4
fix(primitives-4.rs): update hint so it's less confusing
2023-09-04 13:58:05 +02:00
liv
a8f4994935
Merge pull request #1658 from rust-lang/all-contributors/add-szabgab
docs: add szabgab as a contributor for content
2023-09-04 13:55:38 +02:00
allcontributors[bot]
8ca60f2cbb
docs: update .all-contributorsrc [skip ci] 2023-09-04 11:55:28 +00:00
allcontributors[bot]
bb550497d5
docs: update AUTHORS.md [skip ci] 2023-09-04 11:55:27 +00:00
liv
849e4a3647
Merge pull request #1599 from szabgab/if1-test-case
add test-case to if/if1 to check equal values
2023-09-04 13:55:10 +02:00
liv
c177507db3
Merge pull request #1610 from jrcarl624/patch-1
Updated if3.rs: Added a note that states that the test does not need to be changed.
2023-09-04 13:54:20 +02:00
liv
a09a0c47ae fix: add extra line in if3 comment 2023-09-04 13:53:54 +02:00
liv
a26c396335
Merge pull request #1657 from rust-lang/all-contributors/add-mkovaxx
docs: add mkovaxx as a contributor for content
2023-09-04 13:52:22 +02:00
allcontributors[bot]
4aa5ca2818
docs: update .all-contributorsrc [skip ci] 2023-09-04 11:52:13 +00:00
allcontributors[bot]
27881a83d4
docs: update AUTHORS.md [skip ci] 2023-09-04 11:52:11 +00:00
liv
6378c2a81f
Merge pull request #1620 from mkovaxx/fix_1611
Fix 1611
2023-09-04 13:51:57 +02:00
liv
45cadcf020
Merge pull request #1656 from rust-lang/all-contributors/add-gabay
docs: add gabay as a contributor for content
2023-09-04 13:46:50 +02:00
allcontributors[bot]
7d53abdb0a
docs: update .all-contributorsrc [skip ci] 2023-09-04 11:46:42 +00:00
allcontributors[bot]
a059ded709
docs: update AUTHORS.md [skip ci] 2023-09-04 11:46:41 +00:00
liv
4de3b4a635
Merge pull request #1630 from gabay/chore/threads2-text
info.toml: update threads2 text.
2023-09-04 13:46:28 +02:00
liv
64162d3a24
Merge pull request #1649 from x10an14/main
improvement(development): Add nix-direnv integration
2023-09-04 13:42:52 +02:00
liv
626e2749a6
Merge pull request #1650 from x10an14/fork/add-flake-outputs
feat(flake): Add defaults to commands in flake
2023-09-04 13:41:37 +02:00
liv
b39d896db7
Merge pull request #1655 from rust-lang/all-contributors/add-x10an14
docs: add x10an14 as a contributor for infra
2023-09-04 13:37:20 +02:00
allcontributors[bot]
4a9699226a
docs: update .all-contributorsrc [skip ci] 2023-09-04 11:37:10 +00:00
allcontributors[bot]
11f4ec93ac
docs: update AUTHORS.md [skip ci] 2023-09-04 11:37:09 +00:00
liv
e57797a8ff
Merge pull request #1653 from x10an14/fork/fix-nix-build-of-reset-test
fix(nix/tests): Add `git` to Nix's rust build/test sandbox
2023-09-04 13:36:24 +02:00
liv
0b7975b195
Merge pull request #1633 from mo8it/clap
Port to Clap
2023-09-04 13:35:33 +02:00
mo8it
362318a6e0 Adapt tests 2023-09-04 13:30:49 +02:00
mo8it
5a93f2a4f1 Port to Clap 2023-09-04 13:30:46 +02:00
x10an14
e7bdc83a8f
fix(nix/tests): Add git to Nix's rust build/test sandbox
The integration test `reset_single_exercise` depends on Git...
2023-08-30 19:41:29 +02:00
x10an14
60b8487600
feat(flake): Add defaults to commands in flake
So that:
- `nix build .#`, and
- `nix run .#` both work.
2023-08-30 18:09:41 +02:00
x10an14
013f22c89c
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.
2023-08-30 18:03:45 +02:00
liv
2d1da2ab57
Merge pull request #1645 from mo8it/prober-types-structs3
Use u32 instead of i32
2023-08-29 10:20:36 +02:00
mo8it
9c0581bc0f Use u32 instead of i32 2023-08-29 00:52:11 +02:00
liv
d79984dbda
Merge pull request #1637 from mo8it/fix-warnings
Run clippy --fix
2023-08-28 13:38:21 +02:00
liv
c2eaa8f019
Merge pull request #1638 from mo8it/fix-line-numbers
Avoid line numbers in hints
2023-08-28 13:38:02 +02:00
liv
6c517199bf
Merge pull request #1644 from rust-lang/all-contributors/add-mo8it
docs: add mo8it as a contributor for code
2023-08-28 13:37:42 +02:00
allcontributors[bot]
d258c30406
docs: update .all-contributorsrc [skip ci] 2023-08-28 11:37:34 +00:00
allcontributors[bot]
7bb69f8641
docs: update AUTHORS.md [skip ci] 2023-08-28 11:37:33 +00:00
liv
c1051f3f52
Merge pull request #1639 from mo8it/update-deps
Update deps
2023-08-28 13:37:20 +02:00
mo8it
193b600382 Convert other exercises that have assertions to test mode 2023-08-27 01:06:01 +02:00
mo8it
16936d95d1 Fix typo 2023-08-27 00:50:35 +02:00
mo8it
64224d3918 Make move_semantics5 a test 2023-08-27 00:48:19 +02:00
mo8it
c0b8af2c42 Fix indicatif 2023-08-26 23:35:07 +02:00
mo8it
c655612d2d Update deps 2023-08-26 23:34:40 +02:00
mo8it
3cc9be0d11 Avoid line numbers in hints 2023-08-26 23:25:12 +02:00
mo8it
571bab20c1 Run clippy --fix 2023-08-26 23:07:20 +02:00
liv
c663f06669
Merge pull request #1636 from rust-lang/all-contributors/add-eLVas
docs: add eLVas as a contributor for content
2023-08-26 22:27:41 +02:00
allcontributors[bot]
77f0e177e6
docs: update .all-contributorsrc [skip ci] 2023-08-26 20:27:33 +00:00
allcontributors[bot]
e7ad540618
docs: update AUTHORS.md [skip ci] 2023-08-26 20:27:32 +00:00
liv
38b4327f41
Merge pull request #1632 from eLVas/main
fix(errors1): change Result to Option in exersise description
2023-08-26 22:27:18 +02:00
Ivan Vasiunyk
fa0463b3b2
fix(errors1): change Result to Option in exersise description 2023-08-25 21:49:22 +02:00
Roi Gabay
af76794627 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).
2023-08-21 16:19:30 +03:00
liv
464cb5566d
Merge pull request #1625 from rust-lang/all-contributors/add-shirts
docs: add shirts as a contributor for content
2023-08-15 11:20:10 +02:00
allcontributors[bot]
d670847308
docs: update .all-contributorsrc [skip ci] 2023-08-15 09:20:02 +00:00
allcontributors[bot]
33a45d0f89
docs: update AUTHORS.md [skip ci] 2023-08-15 09:20:01 +00:00
liv
da395fed20
Merge pull request #1624 from shirts/shirts/errors-2-comments
Fix comment in errors2
2023-08-15 11:19:43 +02:00
Kevin C
ad1c29c512 Fix comment in errors2 2023-08-14 12:49:28 -07:00
Mate Kovacs
720f33eee6 add .to_mut() in test owned_mutation() 2023-08-10 19:56:47 +09:00
liv
64035f766f
Merge pull request #1618 from rust-lang/all-contributors/add-barlevalon
docs: add barlevalon as a contributor for content
2023-08-07 17:40:45 +02:00
allcontributors[bot]
1ace9795f7
docs: update .all-contributorsrc [skip ci] 2023-08-07 15:38:52 +00:00
allcontributors[bot]
24c838bc0b
docs: update AUTHORS.md [skip ci] 2023-08-07 15:38:51 +00:00
liv
b64aa9993b
Merge pull request #1617 from barlevalon/from_into_tests_fix
fix(conversions/from_into.rs): test_trailing_comma() and test_trailing_comma_and_some_string()
2023-08-07 17:38:37 +02:00
Alon Hearter
2691a35102
Fix from_into.rs tests 2023-08-07 18:22:49 +03:00
Joshua Carlson
828e724659
Added note related to tests. 2023-08-01 13:33:32 -04:00
liv
11d8aea96f
Merge pull request #1609 from rust-lang/all-contributors/add-softarn
docs: add softarn as a contributor for content
2023-08-01 10:50:22 +02:00
allcontributors[bot]
62adbdf7f2
docs: update .all-contributorsrc [skip ci] 2023-08-01 08:50:14 +00:00
allcontributors[bot]
f39df76215
docs: update AUTHORS.md [skip ci] 2023-08-01 08:50:13 +00:00
liv
4d26307cfc
Merge pull request #1607 from softarn/main
chore(errors4): improved comment
2023-08-01 10:49:55 +02:00
Marcus Höjvall
be8d1df8b9
chore(errors4): improved comment 2023-07-28 23:05:01 +02:00
liv
4592b4c409
Merge pull request #1603 from rust-lang/all-contributors/add-alexfertel
docs: add alexfertel as a contributor for content
2023-07-24 10:29:34 +02:00
allcontributors[bot]
bb5fa3f1e8
docs: update .all-contributorsrc [skip ci] 2023-07-24 08:29:18 +00:00
allcontributors[bot]
8283ae8c4c
docs: update AUTHORS.md [skip ci] 2023-07-24 08:29:17 +00:00
liv
478e9d67df
Merge pull request #1601 from alexfertel/patch-1
docs: dedup repeated sentence
2023-07-24 10:29:00 +02:00
Alexander González
ef8f1f108b
docs: dedup repeated sentence 2023-07-21 14:42:19 +02:00
Gabor Szabo
7f9f897945 add test-case to if/if1 to check equal values 2023-07-20 08:28:18 +03:00
Yamila Moreno
662e5bddd7 fix(primitives-4.rs): update hint so it's less confusing 2023-07-17 15:58:29 +02:00
liv
b949422d46
Merge pull request #1597 from rust-lang/all-contributors/add-johnDeSilencio
docs: add johnDeSilencio as a contributor for code
2023-07-17 12:31:25 +02:00
allcontributors[bot]
2c7dec7327
docs: update .all-contributorsrc [skip ci] 2023-07-17 10:31:16 +00:00
allcontributors[bot]
f4d86f384c
docs: update AUTHORS.md [skip ci] 2023-07-17 10:31:15 +00:00
liv
13bbe9c07d
Merge pull request #1594 from johnDeSilencio/bugfix/proc-macro2-cargo-update
fix: building rustlings on nightly
2023-07-17 12:30:48 +02:00
Nicholas R. Smith
2934d062a3 fix: run cargo update to build proc-macro2 on nightly 2023-07-14 12:12:05 -07:00
Will Hack
37cdea9183 Merge branch 'main' into chore/update-hints 2023-07-04 12:05:19 -04:00
liv
a7300da78d
Merge pull request #1590 from rust-lang/all-contributors/add-jrcarl624
docs: add jrcarl624 as a contributor for content
2023-07-04 11:57:39 +02:00
allcontributors[bot]
176fb7c447
docs: update .all-contributorsrc [skip ci] 2023-07-04 09:57:31 +00:00
allcontributors[bot]
0e0c5dfe99
docs: update AUTHORS.md [skip ci] 2023-07-04 09:57:30 +00:00
liv
6cc34fa1f7
Merge pull request #1588 from jrcarl624/main
added if3 based on: `Using if in a let Statement`
2023-07-04 11:57:11 +02:00
Joshua Carlson
287172698a added if3 based on: Using if in a let Statement 2023-07-03 14:52:13 -04:00
Will Hack
0ab781c7a7 chore: remove line reference from strings2 hint 2023-07-03 14:20:38 -04:00
liv
c5b0627180 chore: update oranda config for 0.1.0 2023-07-03 18:50:50 +02:00
Will Hack
b99c7b8c37 chore: update line reference in strings2 hint 2023-07-02 13:46:59 -04:00
liv
a6b562b8e4
Merge pull request #1580 from rust-lang/all-contributors/add-vnprc
docs: add vnprc as a contributor for content
2023-06-26 15:20:06 +02:00
allcontributors[bot]
a46d42f45e
docs: update .all-contributorsrc [skip ci] 2023-06-26 13:19:53 +00:00
allcontributors[bot]
47b3a53132
docs: update AUTHORS.md [skip ci] 2023-06-26 13:19:52 +00:00
liv
a470500a43
Merge pull request #1579 from vnprc/docs
chore: use correct line number in strings2.rs hint
2023-06-26 15:19:37 +02:00
vnprc
405b32e77a
chore: use correct line number in strings2.rs hint 2023-06-26 09:17:39 -04:00
liv
2584ff0440
Merge pull request #1577 from rust-lang/all-contributors/add-novanish
docs: add novanish as a contributor for content
2023-06-26 09:58:32 +02:00
allcontributors[bot]
2e4022dd73
docs: update .all-contributorsrc [skip ci] 2023-06-26 07:58:24 +00:00
allcontributors[bot]
f03a915c75
docs: update AUTHORS.md [skip ci] 2023-06-26 07:58:23 +00:00
liv
9379d06275
Merge pull request #1573 from novanish/refactor-error-1-comment
refactor: Update comment to use correct construct name 'Result' inste…
2023-06-26 09:58:08 +02:00
Anish
eacf7db6f3
refactor: Update comment to use correct construct name 'Result' instead of 'Option'
Refactor the comment in the code to provide a more accurate description of the construct being used. Replace the mention of Option with Result.
2023-06-23 17:18:17 +05:45
liv
adc7ca5690 fix(move_semantics2): change type back to compile 2023-06-22 10:10:44 +02:00
Mohammed Sadiq
c5231f0ce3 fix(enums3): modify message string in test
Otherwise it won't actually test the change of state.message and
it would fail to check if the user missed changing state.message

This happened to me as I had a catch-all line in `match`
2023-06-16 13:50:54 +05:30
liv
c2264cabae
fix: install into $home on windows for now
Stopgap measure so that people stop installing into System32 (since that's the default Powershell elevated prompt directory for some reason).
2023-06-15 10:56:53 +02:00
liv
f3d0ba2f51
Merge pull request #1563 from rust-lang/all-contributors/add-tajo48
docs: add tajo48 as a contributor for content
2023-06-15 10:42:10 +02:00
allcontributors[bot]
0cb63cdd01
docs: update .all-contributorsrc [skip ci] 2023-06-15 08:42:02 +00:00
allcontributors[bot]
c236a80a37
docs: update AUTHORS.md [skip ci] 2023-06-15 08:42:01 +00:00
liv
4b9e77d2ef
Merge pull request #1562 from tajo48/main
chore: update hint for vecs2
2023-06-15 10:41:46 +02:00
tajo48
e1704a2f1b
Merge branch 'main' into main 2023-06-15 00:46:45 +02:00
liv
0282da6881
Merge pull request #1559 from rust-lang/all-contributors/add-robertefry
docs: add robertefry as a contributor for content
2023-06-12 12:39:41 +02:00
allcontributors[bot]
846e68e1aa
docs: update .all-contributorsrc [skip ci] 2023-06-12 10:39:27 +00:00
allcontributors[bot]
33cf4f7eca
docs: update AUTHORS.md [skip ci] 2023-06-12 10:39:26 +00:00
liv
132d5ca943
Merge pull request #1535 from robertefry/comment_cleanup
docs: cleanup the explanation paragraphs at the start of each exercise.
2023-06-12 12:39:09 +02:00
liv
b44472b237
Merge branch 'main' into comment_cleanup 2023-06-12 12:39:02 +02:00
liv
4cfcf2ccd7
Merge pull request #1558 from rust-lang/all-contributors/add-Frosthage
docs: add Frosthage as a contributor for content
2023-06-12 12:36:40 +02:00
allcontributors[bot]
a2f99ad00d
docs: update .all-contributorsrc [skip ci] 2023-06-12 10:36:23 +00:00
allcontributors[bot]
eb3c9658b1
docs: update AUTHORS.md [skip ci] 2023-06-12 10:36:22 +00:00
liv
06ddcfb0bb
Merge pull request #1113 from Frosthage/main
Improve hint for as_ref_mut
2023-06-12 12:36:06 +02:00
liv
d6bb8547b3
Merge pull request #1557 from rust-lang/all-contributors/add-luhem7
docs: add luhem7 as a contributor for content
2023-06-12 12:33:53 +02:00
allcontributors[bot]
5219621595
docs: update .all-contributorsrc [skip ci] 2023-06-12 10:33:45 +00:00
allcontributors[bot]
a14f0c3f55
docs: update AUTHORS.md [skip ci] 2023-06-12 10:33:44 +00:00
liv
44f706a5e7
Merge pull request #1542 from luhem7/main
fix(threads, smart pointers): Swap order of threads and smart pointers exercises
2023-06-12 12:33:29 +02:00
liv
55636e6978
Merge pull request #1556 from rust-lang/all-contributors/add-FWDekker
docs: add FWDekker as a contributor for content
2023-06-12 12:33:01 +02:00
allcontributors[bot]
5921948de8
docs: update .all-contributorsrc [skip ci] 2023-06-12 10:32:26 +00:00
allcontributors[bot]
bd05bab4bf
docs: update AUTHORS.md [skip ci] 2023-06-12 10:32:25 +00:00
liv
c6c7dd2fce
Merge pull request #1544 from FWDekker/main
fix(vecs): rename outdated variable name in hint
2023-06-12 12:32:10 +02:00
liv
171d20ce3e
Merge pull request #1546 from b-apperlo/b-apperlo-patch-1
feat: added test function to hashmaps2.rs
2023-06-12 12:20:36 +02:00
liv
c2bb9ebd8e
Merge pull request #1555 from rust-lang/all-contributors/add-b-apperlo
docs: add b-apperlo as a contributor for content
2023-06-12 12:19:02 +02:00
allcontributors[bot]
d35a352fe6
docs: update .all-contributorsrc [skip ci] 2023-06-12 10:18:55 +00:00
allcontributors[bot]
4fd52390ee
docs: update AUTHORS.md [skip ci] 2023-06-12 10:18:54 +00:00
liv
974717ca11
Merge pull request #1547 from b-apperlo/b-apperlo-patch-2
fix: update hashmaps3.rs
2023-06-12 12:18:36 +02:00
liv
d77e6c0d05
Merge pull request #1553 from rust-lang/all-contributors/add-IVIURRAY
docs: add IVIURRAY as a contributor for content
2023-06-12 12:17:30 +02:00
allcontributors[bot]
47fcab1e60
docs: update .all-contributorsrc [skip ci] 2023-06-12 10:17:22 +00:00
allcontributors[bot]
a1188ca0ee
docs: update AUTHORS.md [skip ci] 2023-06-12 10:17:21 +00:00
liv
0d2a1bdef1
Merge pull request #1549 from IVIURRAY/enums3-message-test
fix(enums3): add test for message
2023-06-12 12:17:07 +02:00
liv
369ae2e63d feat(move_semantics2): rewrite hint 2023-06-12 12:07:18 +02:00
liv
1ce9d93e94
Merge pull request #1552 from rust-lang/all-contributors/add-proofconstruction
docs: add proofconstruction as a contributor for infra
2023-06-12 11:50:10 +02:00
allcontributors[bot]
e0ea03dc56
docs: update .all-contributorsrc [skip ci] 2023-06-12 09:50:03 +00:00
allcontributors[bot]
3cced07c13
docs: update AUTHORS.md [skip ci] 2023-06-12 09:50:02 +00:00
liv
dca6e869df
Merge pull request #1550 from proofconstruction/check-lockfile-sync
chore(ci): add action step to check if lockfile is synced
2023-06-12 11:49:21 +02:00
alex
f30f0bf148 chore(ci): add action step to check if lockfile is synced 2023-06-11 16:30:01 -05:00
IVIURARY
d0a1783083 fix(enums3): add test for message
closes #1548
2023-06-08 22:14:25 +01:00
Bert Apperlo
a4fe3602b2
fix: updated comment for struct 2023-06-08 16:46:45 +02:00
Bert Apperlo
8974e33f69
fix: update hashmaps3.rs 2023-06-08 16:44:39 +02:00
Bert Apperlo
bbfb4c7e63
feat: added test function to hashmaps2.rs
The existing test functions only check if a kind of fruit exists in the hashmap, but not if the amount of fruits is higher than zero. This new test function solves this.
2023-06-08 15:49:07 +02:00
Florine W. Dekker
479574e88e
fix(vecs): rename outdated variable name in hint 2023-06-07 16:58:02 +02:00
luhem7
a96bbcd967 fix(threads, smart pointers): Swap order of threads and smart pointers exercises
closes #1541
2023-06-03 10:20:29 -04:00
tajo48
1e02f194fd update hint for vecs2 to match with exercise as it was updated to fix clarity 2023-05-31 16:37:41 +02:00
Robert Fry
7eef5d15ee
docs: cleanup the explanation paragraphs at the start of each exercise. 2023-05-29 18:41:51 +01:00
liv
30291a3c25
Merge pull request #1527 from rust-lang/all-contributors/add-lazywalker
docs: add lazywalker as a contributor for content
2023-05-23 11:06:10 +02:00
allcontributors[bot]
33224370eb
docs: update .all-contributorsrc [skip ci] 2023-05-23 09:05:59 +00:00
allcontributors[bot]
b9cb931167
docs: update AUTHORS.md [skip ci] 2023-05-23 09:05:58 +00:00
liv
10d8357876
Merge pull request #1526 from lazywalker/fix-iterators5
fix(exercises): use snake_case variables to avoid warning
2023-05-23 11:05:43 +02:00
lazywalker
9604ab6621 fix(exercises): use snake_case variables 2023-05-23 15:00:55 +08:00
liv
e35a84fcb3 chore(oranda): don't generate changelog pages 2023-05-22 11:09:57 +02:00
liv
e910205c19
Merge pull request #1524 from rust-lang/all-contributors/add-b1ue64
docs: add b1ue64 as a contributor for content
2023-05-21 11:39:36 +02:00
allcontributors[bot]
15ad02c984
docs: update .all-contributorsrc [skip ci] 2023-05-21 09:39:26 +00:00
allcontributors[bot]
8e62346f86
docs: update AUTHORS.md [skip ci] 2023-05-21 09:39:25 +00:00
liv
59344c679d
Merge pull request #1523 from b1ue64/b1ue64-patch-1
feat(iterators5): remove outdated part of hint
2023-05-21 11:39:12 +02:00
b1ue64
a7257a1d1e
feat(iterators5): remove outdated part of hint 2023-05-20 16:38:33 -04:00
liv
f2de12aa34 release: 5.5.1 2023-05-17 21:05:51 +02:00
liv
2d544f18b5 fix: revert back to using relative paths 2023-05-17 21:04:32 +02:00
liv
0667ee7c4d fix: add oranda-hide class to readme 2023-05-17 17:11:49 +02:00
liv
19cee73209 chore: set up oranda
Sets up oranda so we can get nice website things for free. Some caveats we have right now:

- Absolutely manual, I have to do `oranda build` and the deploy manually right now
- I had to pop the Readme into a new Markdown file because the first header in there was looking very strange
2023-05-17 16:56:01 +02:00
liv
4c638e365f Merge branch 'main' of github.com:rust-lang/rustlings 2023-05-17 16:30:31 +02:00
liv
f452fd7bb0 release: 5.5.0 2023-05-17 16:30:22 +02:00
liv
6d1f8c5111
Merge pull request #1520 from rust-lang/all-contributors/add-Ben2917
docs: add Ben2917 as a contributor for content
2023-05-17 16:14:54 +02:00
allcontributors[bot]
ab61a0d5c7
docs: update .all-contributorsrc [skip ci] 2023-05-17 14:14:44 +00:00
allcontributors[bot]
af52fce275
docs: update AUTHORS.md [skip ci] 2023-05-17 14:14:43 +00:00
liv
656140d9e6
Merge pull request #1478 from Ben2917/improved_tests_for_iterators5
fix: Added some extra tests to validate iterators5 solution
2023-05-17 16:14:29 +02:00
liv
9508e97914 feat: write absolute root module paths for lsp 2023-05-17 16:14:10 +02:00
liv
a6f99645c6 chore: rustfmt 2023-05-17 16:02:39 +02:00
liv
fd84c2d8f7
Merge pull request #1519 from rust-lang/all-contributors/add-lionel-rowe
docs: add lionel-rowe as a contributor for content
2023-05-17 15:57:26 +02:00
allcontributors[bot]
eeb439eaf9
docs: update .all-contributorsrc [skip ci] 2023-05-17 13:57:11 +00:00
allcontributors[bot]
58cbdd71b6
docs: update AUTHORS.md [skip ci] 2023-05-17 13:57:10 +00:00
liv
81cd97902a
Merge pull request #1487 from lionel-rowe/patch-1
feat(options2): better test for layered_option
2023-05-17 15:56:55 +02:00
liv
ccf4a78f5d
Merge pull request #1518 from rust-lang/all-contributors/add-deedy5
docs: add deedy5 as a contributor for content
2023-05-17 15:56:10 +02:00
allcontributors[bot]
6abff39549
docs: update .all-contributorsrc [skip ci] 2023-05-17 13:55:29 +00:00
allcontributors[bot]
94c6131c59
docs: update AUTHORS.md [skip ci] 2023-05-17 13:55:28 +00:00
liv
05fcc246ae
Merge pull request #1490 from deedy5/main
modules2.rs: add more information to hint
2023-05-17 15:55:13 +02:00
liv
9bfb7055e2
Merge pull request #1517 from rust-lang/all-contributors/add-rb5014
docs: add rb5014 as a contributor for content
2023-05-17 15:54:49 +02:00
allcontributors[bot]
c5fe42089d
docs: update .all-contributorsrc [skip ci] 2023-05-17 13:54:40 +00:00
allcontributors[bot]
70cf7698ac
docs: update AUTHORS.md [skip ci] 2023-05-17 13:54:39 +00:00
liv
b07680108b
Merge pull request #1504 from rb5014/success-hints-feature
feat(main, verify): Show hint(s) after exercise completion
2023-05-17 15:54:24 +02:00
liv
d45ec21b3c
Merge pull request #1513 from rust-lang/all-contributors/add-nmay231
docs: add nmay231 as a contributor for content
2023-05-10 10:50:01 +02:00
allcontributors[bot]
0d252636be
docs: update .all-contributorsrc [skip ci] 2023-05-10 08:49:45 +00:00
allcontributors[bot]
70da26f649
docs: update AUTHORS.md [skip ci] 2023-05-10 08:49:44 +00:00
liv
b882da1ad4
Merge pull request #1512 from nmay231/main
fix(options3): panic when not matching to avoid false positives
2023-05-10 10:49:36 +02:00
Noah May
3ecb47ff2c fix(options3): panic when not matching to avoid false positives
Closes #1503
2023-05-09 15:13:18 -05:00
Romain Bayle
c44e3025f9 option success_hints added to the struct Watchargs instead of Args 2023-05-02 22:46:41 +02:00
liv
9ffcab07bf
Merge pull request #1506 from rust-lang/all-contributors/add-az0977776
docs: add az0977776 as a contributor for content
2023-05-02 11:15:57 +00:00
allcontributors[bot]
583925c085
docs: update .all-contributorsrc [skip ci] 2023-05-02 11:15:49 +00:00
allcontributors[bot]
e631f3c78b
docs: update AUTHORS.md [skip ci] 2023-05-02 11:15:48 +00:00
liv
9a6e57eec9
Merge pull request #1471 from az0977776/patch-2
docs: update line numbers in move_semantics2
2023-05-02 11:15:33 +00:00
Aaron Wang
d3fea5f15a
Merge branch 'main' into patch-2 2023-05-01 19:10:56 -04:00
Romain Bayle
5d3696a9e6 feat(cli): added success-hints option for the rustlings command
closes #1373
2023-05-01 03:04:06 +02:00
liv
b75d2aa3f4
Merge pull request #1499 from rust-lang/all-contributors/add-esotuvaka
docs: add esotuvaka as a contributor for content
2023-04-28 08:40:25 +00:00
allcontributors[bot]
eb4079c674
docs: update .all-contributorsrc [skip ci] 2023-04-28 08:40:18 +00:00
allcontributors[bot]
72d0c53b33
docs: update AUTHORS.md [skip ci] 2023-04-28 08:40:17 +00:00
liv
6ae0525f7a
Merge pull request #1498 from esotuvaka/main
chore: clarified cow owned_no_mutation comments
2023-04-28 08:39:59 +00:00
PiqqiDesigns
c4627e7112 chore: clarified cow owned_no_mutation comments 2023-04-27 15:49:40 -07:00
liv
6d4a980b04
Merge pull request #1491 from rust-lang/all-contributors/add-akgerber
docs: add akgerber as a contributor for content
2023-04-22 13:48:59 +00:00
allcontributors[bot]
545a726252
docs: update .all-contributorsrc [skip ci] 2023-04-22 13:48:42 +00:00
allcontributors[bot]
065cd0170e
docs: update AUTHORS.md [skip ci] 2023-04-22 13:48:41 +00:00
liv
a7eeaa3a4b
Merge pull request #1484 from akgerber/move2_comment_fix
fix(move_semantics2): fix line number comment
2023-04-22 13:48:23 +00:00
deedy5
e2da663628
Update info.toml
modules2.rs: add more information to hint
2023-04-21 15:51:52 +00:00
lionel-rowe
836134202e
feat(options2): better tests for layered_option
The existing test can be solved with the following:

```rs
        while let Some(integer) = optional_integers.pop() {
            assert_eq!(integer.unwrap(), range);
```

Similarly with `expect(...)`, `unwrap_or(0)`, `unwrap_or_default()`, etc. However, none of these solutions use the learning point of stacking `Option<T>`s.

The updated test can _only_ be solved by stacking `Option<T>`s:

```rs
        while let Some(Some(integer)) = optional_integers.pop() {
            assert_eq!(integer, cursor);
```

With the updated test, using `unwrap` or `expect` will panic when it hits the `None` value, and using `unwrap_or` or `unwrap_or_default` will cause the final `assert_eq!(cursor, 0)`  to panic.
2023-04-21 06:05:25 +01:00
Alan Gerber
319a8253ba fix(move_semantics2): fix line number comment
Commit fef8314 added three lines of comments, which left the line
numbers expected to stay unchanged mentioned on line 2 out of date.
2023-04-20 12:15:31 -04:00
liv
fc81bb15fe
Merge pull request #1482 from rust-lang/all-contributors/add-smlavine
docs: add smlavine as a contributor for code
2023-04-18 15:54:06 +00:00
allcontributors[bot]
6209e7004e
docs: update .all-contributorsrc [skip ci] 2023-04-18 15:51:25 +00:00
allcontributors[bot]
4944488287
docs: update AUTHORS.md [skip ci] 2023-04-18 15:51:24 +00:00
liv
0dc9c33b01
Merge pull request #1480 from smlavine/main
feat: Add "!" command to `rustlings watch`
2023-04-18 15:51:06 +00:00
Sebastian LaVine
a4a5691a7b
feat: Add "!" command to rustlings watch 2023-04-16 21:44:08 -04:00
Your Name
352267871c fix: Added some extra tests to validate iterators5 solution
closes: #1387
2023-04-15 17:34:52 +01:00
bean5
15ae83f868 docs: Replace apostrophe (for consistency with other README files) 2023-04-13 20:32:18 -06:00
bean5
e6b1ef2049 docs: Apply fixes that linter noticed 2023-04-13 20:31:59 -06:00
Aaron Wang
8ed2cf7ef5
Update move_semantics2.rs 2023-04-10 22:36:21 -04:00
J.c
8cb5cba775 docs(vecs2): update hints 2023-04-08 10:50:50 +02:00
Aaron Wang
c74e0bfd18
docs: update line numbers in move_semantics2 2023-04-07 01:56:20 -04:00
liv
9fc336c7f7
Merge pull request #1469 from rust-lang/all-contributors/add-stornquist
docs: add stornquist as a contributor for content
2023-04-05 13:11:24 +00:00
allcontributors[bot]
5de7124eee
docs: update .all-contributorsrc [skip ci] 2023-04-05 13:11:15 +00:00
allcontributors[bot]
2f33826063
docs: update AUTHORS.md [skip ci] 2023-04-05 13:11:14 +00:00
liv
087e076ec0
Merge pull request #1384 from stornquist/patch-1
fix(move_semantics2): add expected output comment
2023-04-05 13:10:57 +00:00
liv
b39b819725
Merge pull request #1468 from rust-lang/all-contributors/add-alexwh
docs: add alexwh as a contributor for content
2023-04-05 13:10:02 +00:00
allcontributors[bot]
d544bfcd6d
docs: update .all-contributorsrc [skip ci] 2023-04-05 13:09:51 +00:00
allcontributors[bot]
c7adaa7d14
docs: update AUTHORS.md [skip ci] 2023-04-05 13:09:50 +00:00
liv
f86fa1e909
Merge pull request #1385 from alexwh/patch-1
chore: update move_semantics4.rs' hint
2023-04-05 13:09:20 +00:00
liv
2285b89aea
Merge pull request #1467 from rust-lang/all-contributors/add-ktheory
docs: add ktheory as a contributor for content
2023-04-05 13:07:58 +00:00
allcontributors[bot]
16ca871544
docs: update .all-contributorsrc [skip ci] 2023-04-05 13:06:59 +00:00
allcontributors[bot]
722c7910e4
docs: update AUTHORS.md [skip ci] 2023-04-05 13:06:58 +00:00
liv
ab6aa23cec
Merge pull request #1391 from ktheory/ktheory/iter5
docs: clarify instructions on iterators5.rs
2023-04-05 13:06:43 +00:00
liv
5fd3dfe01b
Merge pull request #1452 from guoard/markdown-linter
feat(docs): add markdown linter for exercises README.md files
2023-04-05 13:06:17 +00:00
liv
8a7f437641
Merge pull request #1466 from rust-lang/all-contributors/add-poneciak57
docs: add poneciak57 as a contributor for content
2023-04-05 13:05:38 +00:00
allcontributors[bot]
63a467af31
docs: update .all-contributorsrc [skip ci] 2023-04-05 13:05:30 +00:00
allcontributors[bot]
af365f444f
docs: update AUTHORS.md [skip ci] 2023-04-05 13:05:29 +00:00
liv
9a9b487abd
Merge pull request #1463 from poneciak57/feature/test4_panic
feat: add tests4.rs exercise
2023-04-05 13:05:14 +00:00
poneciak
102d7f3d0e changed comments in tests
also fixed small logical issue in `Rectangle::new()` where u could create rectangle with width or height equals 0
2023-04-05 13:24:14 +02:00
poneciak
c4974ac782 added required changes
- fixed grammar in hint and added more specific link
- added comments in test functions
- changed introduction paragraph
2023-04-05 13:09:13 +02:00
poneciak
27b7579566 created task 2023-04-05 08:18:51 +02:00
liv
01fa21f160
Merge pull request #1461 from rust-lang/all-contributors/add-sagarvora
docs: add sagarvora as a contributor for content
2023-04-02 10:46:50 +00:00
allcontributors[bot]
54d21dc7c1
docs: update .all-contributorsrc [skip ci] 2023-04-02 10:45:43 +00:00
allcontributors[bot]
2f2fd43771
docs: update AUTHORS.md [skip ci] 2023-04-02 10:45:42 +00:00
liv
2ca4ee2a54
Merge pull request #1460 from sagarvora/lifetimes-first
fix: move lifetimes above tests in recommended order
2023-04-02 10:45:28 +00:00
Sagar Vora
b1fb38e73c fix: move lifetimes above tests in recommended order 2023-04-02 12:25:24 +05:30
liv
09dc7058c9
Merge pull request #1456 from rust-lang/all-contributors/add-ahresse
docs: add ahresse as a contributor for content
2023-03-31 13:31:47 +00:00
allcontributors[bot]
75f0ab65d1
docs: update .all-contributorsrc [skip ci] 2023-03-31 13:31:33 +00:00
allcontributors[bot]
391e5d121a
docs: update AUTHORS.md [skip ci] 2023-03-31 13:31:32 +00:00
liv
6f84887f60
Merge pull request #1454 from ahresse/ahresse/remove_trailing_spaces
fix: remove trailing spaces
2023-03-31 13:31:16 +00:00
liv
3e44060b5b
Merge pull request #1455 from rust-lang/all-contributors/add-keogami
docs: add keogami as a contributor for doc
2023-03-31 13:29:40 +00:00
allcontributors[bot]
84dcd51d37
docs: update .all-contributorsrc [skip ci] 2023-03-31 13:29:30 +00:00
allcontributors[bot]
e185e27273
docs: update AUTHORS.md [skip ci] 2023-03-31 13:29:29 +00:00
liv
e2eb24761f
Merge pull request #1453 from keogami/patch-1
Split quick installation commands into two separate blocks
2023-03-31 13:29:16 +00:00
Alexandre ESSE
d7111cb4a3 fix(main.rs): remove trailing spaces 2023-03-31 11:58:15 +02:00
Alexandre ESSE
22bb662d3e fix(exercises): remove trailing spaces 2023-03-31 11:58:15 +02:00
Keogami
8c4a7bea5f
docs(README.md): split quick installation commands into two separate code blocks
Having the two quick installation commands in two separate code blocks makes it easy to copy them through the github's `copy to clipboard` button
2023-03-31 02:26:23 +05:30
Ali Afsharzadeh
382e16eb7e feat(docs): add markdown linter for exercises README.md files 2023-03-30 19:53:22 +03:30
liv
362c1b0d11
Merge pull request #1450 from guoard/patch-2
docs(error_handling): resolve markdownlint warnings
2023-03-30 09:19:20 +00:00
Ali Afsharzadeh
1db646474e
docs(error_handling): resolve markdown linter warnings 2023-03-29 21:13:27 +03:30
liv
fbec311844
Merge pull request #1447 from rust-lang/all-contributors/add-guoard
docs: add guoard as a contributor for content
2023-03-28 10:27:00 +00:00
allcontributors[bot]
347462d87e
docs: update .all-contributorsrc [skip ci] 2023-03-28 10:26:46 +00:00
allcontributors[bot]
99bd7181f9
docs: update AUTHORS.md [skip ci] 2023-03-28 10:26:45 +00:00
liv
92f09dbe81
Merge pull request #1445 from guoard/patch-1
docs(variables): wrap mut keyword with backtick
2023-03-28 10:26:32 +00:00
liv
4b1fe0a1cc
Merge pull request #1446 from rust-lang/all-contributors/add-ryanwhitehouse
docs: add ryanwhitehouse as a contributor for content
2023-03-28 10:26:10 +00:00
allcontributors[bot]
78f4d66364
docs: update .all-contributorsrc [skip ci] 2023-03-28 10:25:47 +00:00
allcontributors[bot]
13356e16a3
docs: update AUTHORS.md [skip ci] 2023-03-28 10:25:46 +00:00
liv
e0e0b3f387
Merge pull request #1432 from ryanwhitehouse/main
docs:clarify instructions on hashmaps2.rs
2023-03-28 10:25:31 +00:00
Ali Afsharzadeh
592694036f
docs(variables): wrap mut keyword with backtick 2023-03-28 09:58:59 +03:30
liv
b21a4ac12b
Merge pull request #1443 from rust-lang/all-contributors/add-VegardMatthey
docs: add VegardMatthey as a contributor for content
2023-03-27 11:31:07 +00:00
allcontributors[bot]
5e43c7aba5
docs: update .all-contributorsrc [skip ci] 2023-03-27 11:30:57 +00:00
allcontributors[bot]
db993899d3
docs: update AUTHORS.md [skip ci] 2023-03-27 11:30:56 +00:00
liv
e2de7b8ae3
Merge pull request #1442 from VegardMatthey/main
docs: fixed a spelling mistake for the hint in exercise iterators2
2023-03-27 11:30:42 +00:00
Vegard Matthey
95e51f384e fixed a spelling mistake in info.toml 2023-03-26 23:25:59 +02:00
liv
4ff38c7bf3
Merge pull request #1441 from rust-lang/all-contributors/add-javihernant
docs: add javihernant as a contributor for content
2023-03-26 13:23:36 +00:00
allcontributors[bot]
faf4d9a888
docs: update .all-contributorsrc [skip ci] 2023-03-26 13:23:19 +00:00
allcontributors[bot]
18a9510048
docs: update AUTHORS.md [skip ci] 2023-03-26 13:23:18 +00:00
liv
2012641610
Merge pull request #1428 from javihernant/changeLtReadme
change order of references in README.md
2023-03-26 13:23:02 +00:00
liv
864e741dd8 reword hashmaps2 a bit more 2023-03-26 15:21:21 +02:00
liv
22eb7e3847
Merge pull request #1440 from rust-lang/all-contributors/add-navicore
docs: add navicore as a contributor for content
2023-03-26 12:50:45 +00:00
allcontributors[bot]
766b83b513
docs: update .all-contributorsrc [skip ci] 2023-03-26 12:50:14 +00:00
allcontributors[bot]
c28b78fae5
docs: update AUTHORS.md [skip ci] 2023-03-26 12:50:13 +00:00
liv
6d4a87227d
Merge pull request #1437 from navicore/errors2-comment-error
correct comments in errors2.rs
2023-03-26 12:49:59 +00:00
liv
65b8770ce9
Merge pull request #1438 from tfpk/patch-2
feat(lifetimekata): Add info about Lifetimekata project
2023-03-26 12:49:26 +00:00
liv
2ef6fb66ac
Merge pull request #1439 from rust-lang/all-contributors/add-eugkhp
docs: add eugkhp as a contributor for tool
2023-03-26 12:48:21 +00:00
allcontributors[bot]
82f72c3ec6
docs: update .all-contributorsrc [skip ci] 2023-03-26 12:48:10 +00:00
allcontributors[bot]
efd4d83731
docs: update AUTHORS.md [skip ci] 2023-03-26 12:48:09 +00:00
liv
8bab260587
Merge pull request #1435 from eugkhp/update-deps
cargo update to resolve #1430
2023-03-26 12:47:45 +00:00
Tom Kunc
d5449c992e
feat(lifetimekata): Add info about Lifetimekata project 2023-03-25 20:00:28 +11:00
Ed Sweeney
4160b06c6c correct comments in errors2.rs 2023-03-24 21:52:58 -07:00
Eugene
6e9ed48f42 cargo update for to resolve #1430 2023-03-24 16:48:11 +01:00
Ryan Whitehouse
5687676014 docs:clarify instructions on hashmaps2.rs 2023-03-20 15:19:36 +01:00
hxztnxt
5d91c86cf2 change order of references in README.md 2023-03-16 00:56:15 +01:00
liv
9acefe8b3a
Merge pull request #1425 from rust-lang/all-contributors/add-adamhb123
docs: add adamhb123 as a contributor for content
2023-03-14 11:15:30 +01:00
allcontributors[bot]
06fac0e570
docs: update .all-contributorsrc [skip ci] 2023-03-14 10:15:22 +00:00
allcontributors[bot]
e8b44a39e0
docs: update AUTHORS.md [skip ci] 2023-03-14 10:15:21 +00:00
liv
a55c8dc1a8
Merge pull request #1418 from adamhb123/vecs2.rs-naming-suggestion
Rename iteration var names in vec2.rs for clarity
2023-03-14 11:15:07 +01:00
Adam Brewer
7bab78c66d Rename iteration var names in vec2.rs for clarity
Resolves #1417
2023-03-10 14:13:06 -05:00
liv
5c5cd4c658
Merge pull request #1416 from rust-lang/all-contributors/add-Nagidal
docs: add Nagidal as a contributor for content
2023-03-10 18:03:30 +01:00
allcontributors[bot]
53a8318f32
docs: update .all-contributorsrc [skip ci] 2023-03-10 17:03:21 +00:00
allcontributors[bot]
31b208248b
docs: update AUTHORS.md [skip ci] 2023-03-10 17:03:20 +00:00
liv
9c515c7863
Merge pull request #1415 from Nagidal/improve-hint-strings2
improve hint for strings2, #1407
2023-03-10 18:03:06 +01:00
Sven Siegmund
ec86b60e70 improve hint for strings2, #1407 2023-03-10 17:58:03 +01:00
liv
7f1754ecc5 release: 5.4.1 2023-03-10 17:39:59 +01:00
liv
e4971ec7b3
Merge pull request #1414 from rust-lang/all-contributors/add-MahdiBM
docs: add MahdiBM as a contributor for tool
2023-03-10 17:28:22 +01:00
allcontributors[bot]
ec974f5dac
docs: update .all-contributorsrc [skip ci] 2023-03-10 16:28:13 +00:00
allcontributors[bot]
7b2bfda37f
docs: update AUTHORS.md [skip ci] 2023-03-10 16:28:12 +00:00
liv
2f34370f2f
Merge pull request #1402 from MahdiBM/patch-1
Better error message when failing
2023-03-10 17:27:53 +01:00
liv
94799b1e98
Merge pull request #1413 from rust-lang/all-contributors/add-nidhalmessaoudi
docs: add nidhalmessaoudi as a contributor for code
2023-03-10 11:51:36 +01:00
allcontributors[bot]
d334e0c66c
docs: update .all-contributorsrc [skip ci] 2023-03-10 10:51:24 +00:00
allcontributors[bot]
3da5816db2
docs: update AUTHORS.md [skip ci] 2023-03-10 10:51:23 +00:00
liv
c8273e06c6
Merge pull request #1404 from nidhalmessaoudi/master
Always showing correct progress percentages.
2023-03-10 11:51:08 +01:00
liv
ff50159a3d fix: remove repl.it support for now
It stopped working and needs too much manual fixing, until someone
comes along to fix it, it's not great to have in the README section.

Closes #1352.
2023-03-03 21:27:57 +01:00
Nidhal Messaoudi
34aafa82f9 Main exercises 2023-02-27 21:37:25 +01:00
Nidhal Messaoudi
278a1f103b Original exercises 2023-02-27 21:33:28 +01:00
Nidhal Messaoudi
1acbbb6d43 Fixing the progress percentage 2023-02-27 21:17:45 +01:00
Nidhal Messaoudi
e3a20b8bc8 Learning about vectors 2023-02-27 21:16:40 +01:00
Nidhal Messaoudi
f7678b4a9e Learning about primitive data types 2023-02-27 12:57:40 +01:00
Nidhal Messaoudi
52ed5dbcf9 First quiz and its related modules 2023-02-26 17:28:24 +01:00
Mahdi Bahrami
6c5ba7cc01
Better error message when failing 2023-02-26 19:30:57 +03:30
liv
36e66b545e
Merge pull request #1396 from 0lhi/main
fix(macros4.rs): Add rustfmt::skip to prevent auto-fix.
2023-02-26 13:10:24 +01:00
liv
0e9966d6a4
Merge pull request #1397 from crd477/patch-1
rustfmt
2023-02-26 13:10:04 +01:00
liv
75fbf7a8f3
Merge pull request #1401 from rust-lang/all-contributors/add-mdmundo
docs: add mdmundo as a contributor for infra
2023-02-26 13:09:26 +01:00
liv
e700a3cc4d
Merge branch 'main' into all-contributors/add-mdmundo 2023-02-26 13:09:20 +01:00
allcontributors[bot]
eb7f21df04
docs: update .all-contributorsrc [skip ci] 2023-02-26 12:08:07 +00:00
allcontributors[bot]
ac9c1adb75
docs: update AUTHORS.md [skip ci] 2023-02-26 12:08:06 +00:00
liv
d06f7bf1ff
Merge pull request #1400 from rust-lang/all-contributors/add-eroullit
docs: add eroullit as a contributor for infra
2023-02-26 13:07:02 +01:00
allcontributors[bot]
7f06bb5fa7
docs: update AUTHORS.md [skip ci] 2023-02-26 12:06:57 +00:00
allcontributors[bot]
0ad8eec3eb
docs: update .all-contributorsrc [skip ci] 2023-02-26 12:06:51 +00:00
allcontributors[bot]
3c841c4685
docs: update AUTHORS.md [skip ci] 2023-02-26 12:06:50 +00:00
liv
d5b647d5ab
Merge pull request #1399 from eroullit/codespaces
Codespaces ❤️ Rustlings
2023-02-26 13:05:05 +01:00
Emmanuel Roullit
86f8fa8e6e
Update README.md
Fix refs from master to main
2023-02-25 17:57:34 +01:00
Emmanuel Roullit
351e4e2460
Update devcontainer.json 2023-02-25 17:56:00 +01:00
Emmanuel Roullit
1afc7ed8c5
Update README.md
Create Rustlings Codespace in one click
2023-02-25 17:20:31 +01:00
Emmanuel Roullit
fcadbfc70d
Merge branch 'rust-lang:main' into codespaces 2023-02-25 17:11:43 +01:00
Chad Dougherty
8c88f769b6
rustfmt
rustfmt converts "main ()" -> "main()"
2023-02-24 08:51:03 -05:00
0lhi
de24536187
macros4.rs: Add rustfmt::skip to prevent auto-fix.
The `macros4.rs` challenge can automatically be solved by rustfmt without the user noticing.

Adding `#[rustfmt::skip]` above the `macro_rules!` line fixes this issue.
2023-02-24 01:43:23 +01:00
Aaron Suggs
1ac66f372b docs: clarify instructions on iterators5.rs
I changed the sentence that referenced the imperative implementation in iterators5.rs.

That implementation was already removed and replaced with `todo!()`
2023-02-21 09:45:59 -05:00
liv
701b4bef51
Merge pull request #1386 from cyril-marpaud/cmp_arc1
refactor(arc1): improve readability by avoiding implicit dereference
2023-02-19 12:34:52 +01:00
Cyril MARPAUD
045d86aa42 refactor(arc1): improve readability by avoiding implicit dereference 2023-02-18 21:38:43 +01:00
Alex
89069f78b1
chore: update move_semantics4.rs' hint
after #144, the signature doesn't need changing anymore
2023-02-18 19:26:40 +00:00
Sebastian Törnquist
fef8314d3d
fix(move_semantics2): add expected output comment
You can easily get this to compile with `vec0` being `[]` and `vec1` being `[22, 44, 66, 88]`
2023-02-18 18:43:34 +01:00
liv
bec7be05f5
Merge pull request #1383 from rust-lang/all-contributors/add-shgew
docs: add shgew as a contributor for content
2023-02-18 14:26:58 +01:00
allcontributors[bot]
d42ac49de4
docs: update .all-contributorsrc [skip ci] 2023-02-18 13:26:38 +00:00
allcontributors[bot]
1272d0b990
docs: update AUTHORS.md [skip ci] 2023-02-18 13:26:37 +00:00
liv
cf86e734f2
Merge pull request #1381 from shgew/fix/errors5-comment
fix: unify undisclosed type notation in errors5.rs
2023-02-18 14:26:23 +01:00
Gleb Shevchenko
238a496af5 fix: unify undisclosed type notation in errors5.rs 2023-02-18 14:09:04 +01:00
liv
a3670d267b
Merge pull request #1380 from rust-lang/all-contributors/add-Anush008
docs: add Anush008 as a contributor for doc
2023-02-17 19:04:09 +01:00
allcontributors[bot]
65f05f0541
docs: update .all-contributorsrc [skip ci] 2023-02-17 18:03:59 +00:00
allcontributors[bot]
338c95f120
docs: update AUTHORS.md [skip ci] 2023-02-17 18:03:58 +00:00
liv
2b9dc4424e
Merge pull request #1379 from Anush008/patch-1
Removed verbose instructions from the uninstall section
2023-02-17 19:03:41 +01:00
Anush
ef0b25c392
Removed verbose instructions from the uninstall section 2023-02-17 22:51:42 +05:30
liv
6f0e5d13ed
Merge pull request #1372 from rust-lang/all-contributors/add-black-puppydog
docs: add black-puppydog as a contributor for content
2023-02-15 14:17:07 +01:00
allcontributors[bot]
046a18cd16
docs: update .all-contributorsrc [skip ci] 2023-02-15 13:16:59 +00:00
allcontributors[bot]
e1e67d0d41
docs: update AUTHORS.md [skip ci] 2023-02-15 13:16:58 +00:00
liv
216d08d013
Merge pull request #1244 from black-puppydog/cow-rework
refactor(cow1):  replace main with tests
2023-02-15 14:16:22 +01:00
Daan Wynen
bbdc5c6039 refactor(cow1): replace main with tests
Following the discussion in #1195 this is the best I could come up with.
The issue for me (and apparently a few other learners) was that the code
needed to complete the exercise was not _missing_, but was rather there
but wrong.

In the end, what made the difference between this exercise and others
(for me) was that in this exercise I was supposed to learn what to
*expect* of an output. So I think it makes sense here to let the learner
modify the tests and not the code itself.

Fixes #1195

Signed-off-by: Daan Wynen <black.puppydog@gmx.de>

# Conflicts:
#	info.toml
2023-02-14 20:37:33 +01:00
liv
149e0c8ac2
Merge pull request #1370 from magnusrodseth/main
docs: add link to docs about `iter_mut` and `map`
2023-02-13 11:01:48 +01:00
magnusrodseth
48ce9d2fd8 docs: add link to docs about iter_mut and map 2023-02-12 18:26:13 +01:00
Emmanuel Roullit
b653d4848a doc: add hint on how to create codespace
Signed-off-by: Emmanuel Roullit <emmanuel.roullit@gmail.com>
2022-12-01 16:15:13 +01:00
Emmanuel Roullit
4972bede48 dev: source cargo env files to find rustup
Signed-off-by: Emmanuel Roullit <emmanuel.roullit@gmail.com>
2022-12-01 14:30:03 +01:00
Emmanuel Roullit
f94f365e14 dev: add basic devcontainer settings file
Theses settings files are the base needed to declare and
bootstrap development environment on codespaces

Signed-off-by: Emmanuel Roullit <emmanuel.roullit@gmail.com>
2022-12-01 14:15:35 +01:00
Mikael Frosthage
5ff23a2861 Improve hint for as_ref_mut 2022-07-26 22:02:50 +02:00
377 changed files with 14041 additions and 8740 deletions

File diff suppressed because it is too large Load Diff

2
.cargo/config.toml Normal file
View File

@ -0,0 +1,2 @@
[alias]
dev = ["run", "--", "dev"]

View File

@ -1,7 +0,0 @@
root = true
[*.rs]
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4

View File

@ -1,20 +1,47 @@
name: Rustlings Tests
name: Check
on:
push:
branches: [ main ]
branches: [main]
paths-ignore:
- website
- '*.md'
pull_request:
branches: [ main ]
branches: [main]
paths-ignore:
- website
- '*.md'
env:
CARGO_TERM_COLOR: always
jobs:
build:
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build
run: cargo build --verbose
- name: Run tests
run: cargo test --verbose
- uses: actions/checkout@v4
- name: Clippy
run: cargo clippy -- --deny warnings
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: rustfmt
run: cargo fmt --all --check
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v4
- uses: swatinem/rust-cache@v2
- name: cargo test
run: cargo test --workspace
dev-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: swatinem/rust-cache@v2
- name: rustlings dev check
run: cargo dev check --require-solutions

43
.github/workflows/website.yml vendored Normal file
View File

@ -0,0 +1,43 @@
name: Website
on:
workflow_dispatch:
push:
branches: [main]
paths: [website]
jobs:
build:
defaults:
run:
working-directory: website
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install TailwindCSS
run: npm install
- name: Build CSS
run: npx @tailwindcss/cli -m -i input.css -o static/main.css
- name: Download Zola
run: curl -fsSL https://github.com/getzola/zola/releases/download/v0.20.0/zola-v0.20.0-x86_64-unknown-linux-gnu.tar.gz | tar xz
- name: Build site
run: ./zola build
- name: Upload static files as artifact
uses: actions/upload-pages-artifact@v3
with:
path: website/public/
deploy:
needs: build
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
permissions:
pages: write # to deploy to Pages
id-token: write # to verify the deployment originates from an appropriate source
# Deploy to the github-pages environment
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
uses: actions/deploy-pages@v4

24
.gitignore vendored
View File

@ -1,13 +1,19 @@
*.swp
# Cargo
target/
**/*.rs.bk
Cargo.lock
!/Cargo.lock
# State file
.rustlings-state.txt
# OS
.DS_Store
*.pdb
exercises/clippy/Cargo.toml
exercises/clippy/Cargo.lock
rust-project.json
.direnv/
# Editor
*.swp
.idea
.vscode/*
!.vscode/extensions.json
*.iml
*.o
# Ignore file for editors like Helix
.ignore

View File

@ -1,7 +0,0 @@
tasks:
- init: /workspace/rustlings/install.sh
command: /workspace/.cargo/bin/rustlings watch
vscode:
extensions:
- rust-lang.rust-analyzer@0.3.1348

View File

@ -1,2 +0,0 @@
language = "rust"
run = "[ -x ~/.cargo/bin/rustlings ] && ~/.cargo/bin/rustlings watch || ./install.sh"

7
.typos.toml Normal file
View File

@ -0,0 +1,7 @@
[default.extend-words]
"earch" = "earch" # Because of <s>earch in the list footer
[files]
extend-exclude = [
"CHANGELOG.md",
]

View File

@ -1,5 +0,0 @@
{
"recommendations": [
"rust-lang.rust-analyzer"
]
}

View File

@ -1,274 +0,0 @@
## Authors
This file lists the people that have contributed to this project.
Excluded from this list are @carols10cents and @diannasoreil, the principal
authors.
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="12.5%"><a href="http://carol-nichols.com"><img src="https://avatars2.githubusercontent.com/u/193874?v=4?s=100" width="100px;" alt="Carol (Nichols &#124;&#124; Goulding)"/><br /><sub><b>Carol (Nichols &#124;&#124; Goulding)</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=carols10cents" title="Code">💻</a> <a href="#content-carols10cents" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://twitter.com/QuietMisdreavus"><img src="https://avatars2.githubusercontent.com/u/5217170?v=4?s=100" width="100px;" alt="QuietMisdreavus"/><br /><sub><b>QuietMisdreavus</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=QuietMisdreavus" title="Code">💻</a> <a href="#content-QuietMisdreavus" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/robertlugg"><img src="https://avatars0.githubusercontent.com/u/6054540?v=4?s=100" width="100px;" alt="Robert M Lugg"/><br /><sub><b>Robert M Lugg</b></sub></a><br /><a href="#content-robertlugg" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://hynek.me/about/"><img src="https://avatars3.githubusercontent.com/u/41240?v=4?s=100" width="100px;" alt="Hynek Schlawack"/><br /><sub><b>Hynek Schlawack</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=hynek" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://spacekookie.de"><img src="https://avatars0.githubusercontent.com/u/7669898?v=4?s=100" width="100px;" alt="Katharina Fey"/><br /><sub><b>Katharina Fey</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=spacekookie" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/lukabavdaz"><img src="https://avatars0.githubusercontent.com/u/9624558?v=4?s=100" width="100px;" alt="lukabavdaz"/><br /><sub><b>lukabavdaz</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=lukabavdaz" title="Code">💻</a> <a href="#content-lukabavdaz" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://vestera.as"><img src="https://avatars2.githubusercontent.com/u/4187449?v=4?s=100" width="100px;" alt="Erik Vesteraas"/><br /><sub><b>Erik Vesteraas</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=evestera" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Delet0r"><img src="https://avatars1.githubusercontent.com/u/23195618?v=4?s=100" width="100px;" alt="delet0r"/><br /><sub><b>delet0r</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=Delet0r" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="http://phinary.ca"><img src="https://avatars1.githubusercontent.com/u/10522375?v=4?s=100" width="100px;" alt="Shaun Bennett"/><br /><sub><b>Shaun Bennett</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=shaunbennett" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/abagshaw"><img src="https://avatars2.githubusercontent.com/u/8594541?v=4?s=100" width="100px;" alt="Andrew Bagshaw"/><br /><sub><b>Andrew Bagshaw</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=abagshaw" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://ai6ua.net/"><img src="https://avatars2.githubusercontent.com/u/175578?v=4?s=100" width="100px;" alt="Kyle Isom"/><br /><sub><b>Kyle Isom</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=kisom" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/ColinPitrat"><img src="https://avatars3.githubusercontent.com/u/1541863?v=4?s=100" width="100px;" alt="Colin Pitrat"/><br /><sub><b>Colin Pitrat</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=ColinPitrat" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://zacanger.com"><img src="https://avatars3.githubusercontent.com/u/12520493?v=4?s=100" width="100px;" alt="Zac Anger"/><br /><sub><b>Zac Anger</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=zacanger" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/mgeier"><img src="https://avatars1.githubusercontent.com/u/705404?v=4?s=100" width="100px;" alt="Matthias Geier"/><br /><sub><b>Matthias Geier</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=mgeier" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/cjpearce"><img src="https://avatars1.githubusercontent.com/u/3453268?v=4?s=100" width="100px;" alt="Chris Pearce"/><br /><sub><b>Chris Pearce</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=cjpearce" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://yvan-sraka.github.io"><img src="https://avatars2.githubusercontent.com/u/705213?v=4?s=100" width="100px;" alt="Yvan Sraka"/><br /><sub><b>Yvan Sraka</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=yvan-sraka" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/dendi239"><img src="https://avatars3.githubusercontent.com/u/16478650?v=4?s=100" width="100px;" alt="Denys Smirnov"/><br /><sub><b>Denys Smirnov</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=dendi239" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/eddyp"><img src="https://avatars2.githubusercontent.com/u/123772?v=4?s=100" width="100px;" alt="eddyp"/><br /><sub><b>eddyp</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=eddyp" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://about.me/BrianKung"><img src="https://avatars1.githubusercontent.com/u/2836167?v=4?s=100" width="100px;" alt="Brian Kung"/><br /><sub><b>Brian Kung</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=briankung" title="Code">💻</a> <a href="#content-briankung" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://rcousineau.gitlab.io"><img src="https://avatars3.githubusercontent.com/u/281039?v=4?s=100" width="100px;" alt="Russell"/><br /><sub><b>Russell</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=miller-time" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://danwilhelm.com"><img src="https://avatars3.githubusercontent.com/u/6137185?v=4?s=100" width="100px;" alt="Dan Wilhelm"/><br /><sub><b>Dan Wilhelm</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=danwilhelm" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Jesse-Cameron"><img src="https://avatars3.githubusercontent.com/u/3723654?v=4?s=100" width="100px;" alt="Jesse"/><br /><sub><b>Jesse</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=Jesse-Cameron" title="Code">💻</a> <a href="#content-Jesse-Cameron" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/MrFroop"><img src="https://avatars3.githubusercontent.com/u/196700?v=4?s=100" width="100px;" alt="Fredrik Jambrén"/><br /><sub><b>Fredrik Jambrén</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=MrFroop" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/petemcfarlane"><img src="https://avatars3.githubusercontent.com/u/3472717?v=4?s=100" width="100px;" alt="Pete McFarlane"/><br /><sub><b>Pete McFarlane</b></sub></a><br /><a href="#content-petemcfarlane" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/nkanderson"><img src="https://avatars0.githubusercontent.com/u/4128825?v=4?s=100" width="100px;" alt="nkanderson"/><br /><sub><b>nkanderson</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=nkanderson" title="Code">💻</a> <a href="#content-nkanderson" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/ajaxm"><img src="https://avatars0.githubusercontent.com/u/13360138?v=4?s=100" width="100px;" alt="Ajax M"/><br /><sub><b>Ajax M</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=ajaxm" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://dylnuge.com"><img src="https://avatars2.githubusercontent.com/u/118624?v=4?s=100" width="100px;" alt="Dylan Nugent"/><br /><sub><b>Dylan Nugent</b></sub></a><br /><a href="#content-Dylnuge" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/vyaslav"><img src="https://avatars0.githubusercontent.com/u/1385427?v=4?s=100" width="100px;" alt="vyaslav"/><br /><sub><b>vyaslav</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=vyaslav" title="Code">💻</a> <a href="#content-vyaslav" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://join.sfxd.org"><img src="https://avatars1.githubusercontent.com/u/17297466?v=4?s=100" width="100px;" alt="George"/><br /><sub><b>George</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=gdoenlen" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/nyxtom"><img src="https://avatars2.githubusercontent.com/u/222763?v=4?s=100" width="100px;" alt="Thomas Holloway"/><br /><sub><b>Thomas Holloway</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=nyxtom" title="Code">💻</a> <a href="#content-nyxtom" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/workingjubilee"><img src="https://avatars1.githubusercontent.com/u/46493976?v=4?s=100" width="100px;" alt="Jubilee"/><br /><sub><b>Jubilee</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=workingjubilee" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/WofWca"><img src="https://avatars1.githubusercontent.com/u/39462442?v=4?s=100" width="100px;" alt="WofWca"/><br /><sub><b>WofWca</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=WofWca" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/jrvidal"><img src="https://avatars0.githubusercontent.com/u/1636604?v=4?s=100" width="100px;" alt="Roberto Vidal"/><br /><sub><b>Roberto Vidal</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=jrvidal" title="Code">💻</a> <a href="https://github.com/rust-lang/rustlings/commits?author=jrvidal" title="Documentation">📖</a> <a href="#ideas-jrvidal" title="Ideas, Planning, & Feedback">🤔</a> <a href="#maintenance-jrvidal" title="Maintenance">🚧</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/jensim"><img src="https://avatars0.githubusercontent.com/u/3663856?v=4?s=100" width="100px;" alt="Jens"/><br /><sub><b>Jens</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=jensim" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://rahatah.me/d"><img src="https://avatars3.githubusercontent.com/u/3174006?v=4?s=100" width="100px;" alt="Rahat Ahmed"/><br /><sub><b>Rahat Ahmed</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=rahatarmanahmed" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/AbdouSeck"><img src="https://avatars2.githubusercontent.com/u/6490055?v=4?s=100" width="100px;" alt="Abdou Seck"/><br /><sub><b>Abdou Seck</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=AbdouSeck" title="Code">💻</a> <a href="#content-AbdouSeck" title="Content">🖋</a> <a href="https://github.com/rust-lang/rustlings/pulls?q=is%3Apr+reviewed-by%3AAbdouSeck" title="Reviewed Pull Requests">👀</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://codehearts.com"><img src="https://avatars0.githubusercontent.com/u/2885412?v=4?s=100" width="100px;" alt="Katie"/><br /><sub><b>Katie</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=codehearts" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Socratides"><img src="https://avatars3.githubusercontent.com/u/27732983?v=4?s=100" width="100px;" alt="Socrates"/><br /><sub><b>Socrates</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=Socratides" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/gnodarse"><img src="https://avatars3.githubusercontent.com/u/46761795?v=4?s=100" width="100px;" alt="gnodarse"/><br /><sub><b>gnodarse</b></sub></a><br /><a href="#content-gnodarse" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/harrisonmetz"><img src="https://avatars1.githubusercontent.com/u/7883408?v=4?s=100" width="100px;" alt="Harrison Metzger"/><br /><sub><b>Harrison Metzger</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=harrisonmetz" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/TorbenJ"><img src="https://avatars2.githubusercontent.com/u/9077102?v=4?s=100" width="100px;" alt="Torben Jonas"/><br /><sub><b>Torben Jonas</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=TorbenJ" title="Code">💻</a> <a href="#content-TorbenJ" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://paulbissex.com/"><img src="https://avatars0.githubusercontent.com/u/641?v=4?s=100" width="100px;" alt="Paul Bissex"/><br /><sub><b>Paul Bissex</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=pbx" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/sjmann"><img src="https://avatars0.githubusercontent.com/u/6589896?v=4?s=100" width="100px;" alt="Steven Mann"/><br /><sub><b>Steven Mann</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=sjmann" title="Code">💻</a> <a href="#content-sjmann" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://smmdb.net/"><img src="https://avatars2.githubusercontent.com/u/5855071?v=4?s=100" width="100px;" alt="Mario Reder"/><br /><sub><b>Mario Reder</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=Tarnadas" title="Code">💻</a> <a href="#content-Tarnadas" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://keybase.io/skim"><img src="https://avatars0.githubusercontent.com/u/47347?v=4?s=100" width="100px;" alt="skim"/><br /><sub><b>skim</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=sl4m" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/sanjaykdragon"><img src="https://avatars1.githubusercontent.com/u/10261698?v=4?s=100" width="100px;" alt="Sanjay K"/><br /><sub><b>Sanjay K</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=sanjaykdragon" title="Code">💻</a> <a href="#content-sanjaykdragon" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://www.rohanjain.in"><img src="https://avatars1.githubusercontent.com/u/343499?v=4?s=100" width="100px;" alt="Rohan Jain"/><br /><sub><b>Rohan Jain</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=crodjer" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://www.saidaspen.se"><img src="https://avatars1.githubusercontent.com/u/7727687?v=4?s=100" width="100px;" alt="Said Aspen"/><br /><sub><b>Said Aspen</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=saidaspen" title="Code">💻</a> <a href="#content-saidaspen" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/uce"><img src="https://avatars3.githubusercontent.com/u/1756620?v=4?s=100" width="100px;" alt="Ufuk Celebi"/><br /><sub><b>Ufuk Celebi</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=uce" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/lebedevsergey"><img src="https://avatars2.githubusercontent.com/u/7325764?v=4?s=100" width="100px;" alt="lebedevsergey"/><br /><sub><b>lebedevsergey</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=lebedevsergey" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/avrong"><img src="https://avatars2.githubusercontent.com/u/6342851?v=4?s=100" width="100px;" alt="Aleksei Trifonov"/><br /><sub><b>Aleksei Trifonov</b></sub></a><br /><a href="#content-avrong" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://drn.ie"><img src="https://avatars2.githubusercontent.com/u/411136?v=4?s=100" width="100px;" alt="Darren Meehan"/><br /><sub><b>Darren Meehan</b></sub></a><br /><a href="#content-Darrenmeehan" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/jihchi"><img src="https://avatars1.githubusercontent.com/u/87983?v=4?s=100" width="100px;" alt="Jihchi Lee"/><br /><sub><b>Jihchi Lee</b></sub></a><br /><a href="#content-jihchi" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/bertonha"><img src="https://avatars3.githubusercontent.com/u/1225902?v=4?s=100" width="100px;" alt="Christofer Bertonha"/><br /><sub><b>Christofer Bertonha</b></sub></a><br /><a href="#content-bertonha" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/apatniv"><img src="https://avatars2.githubusercontent.com/u/22565917?v=4?s=100" width="100px;" alt="Vivek Bharath Akupatni"/><br /><sub><b>Vivek Bharath Akupatni</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=apatniv" title="Code">💻</a> <a href="https://github.com/rust-lang/rustlings/commits?author=apatniv" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/DiD92"><img src="https://avatars3.githubusercontent.com/u/6002416?v=4?s=100" width="100px;" alt="Dídac Sementé Fernández"/><br /><sub><b>Dídac Sementé Fernández</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=DiD92" title="Code">💻</a> <a href="#content-DiD92" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/wrobstory"><img src="https://avatars3.githubusercontent.com/u/2601457?v=4?s=100" width="100px;" alt="Rob Story"/><br /><sub><b>Rob Story</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=wrobstory" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/siobhanjacobson"><img src="https://avatars2.githubusercontent.com/u/28983835?v=4?s=100" width="100px;" alt="Siobhan Jacobson"/><br /><sub><b>Siobhan Jacobson</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=siobhanjacobson" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/evancarroll/"><img src="https://avatars2.githubusercontent.com/u/19922?v=4?s=100" width="100px;" alt="Evan Carroll"/><br /><sub><b>Evan Carroll</b></sub></a><br /><a href="#content-EvanCarroll" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://www.jawaadmahmood.com"><img src="https://avatars3.githubusercontent.com/u/95606?v=4?s=100" width="100px;" alt="Jawaad Mahmood"/><br /><sub><b>Jawaad Mahmood</b></sub></a><br /><a href="#content-jmahmood" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/GaurangTandon"><img src="https://avatars1.githubusercontent.com/u/6308683?v=4?s=100" width="100px;" alt="Gaurang Tandon"/><br /><sub><b>Gaurang Tandon</b></sub></a><br /><a href="#content-GaurangTandon" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/dev-cyprium"><img src="https://avatars1.githubusercontent.com/u/6002628?v=4?s=100" width="100px;" alt="Stefan Kupresak"/><br /><sub><b>Stefan Kupresak</b></sub></a><br /><a href="#content-dev-cyprium" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/greg-el"><img src="https://avatars3.githubusercontent.com/u/45019882?v=4?s=100" width="100px;" alt="Greg Leonard"/><br /><sub><b>Greg Leonard</b></sub></a><br /><a href="#content-greg-el" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://ryanpcmcquen.org"><img src="https://avatars3.githubusercontent.com/u/772937?v=4?s=100" width="100px;" alt="Ryan McQuen"/><br /><sub><b>Ryan McQuen</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=ryanpcmcquen" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/AnnikaCodes"><img src="https://avatars3.githubusercontent.com/u/56906084?v=4?s=100" width="100px;" alt="Annika"/><br /><sub><b>Annika</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/pulls?q=is%3Apr+reviewed-by%3AAnnikaCodes" title="Reviewed Pull Requests">👀</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://darnuria.eu"><img src="https://avatars1.githubusercontent.com/u/2827553?v=4?s=100" width="100px;" alt="Axel Viala"/><br /><sub><b>Axel Viala</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=darnuria" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://sazid.github.io"><img src="https://avatars1.githubusercontent.com/u/2370167?v=4?s=100" width="100px;" alt="Mohammed Sazid Al Rashid"/><br /><sub><b>Mohammed Sazid Al Rashid</b></sub></a><br /><a href="#content-sazid" title="Content">🖋</a> <a href="https://github.com/rust-lang/rustlings/commits?author=sazid" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://codingthemsoftly.com"><img src="https://avatars1.githubusercontent.com/u/17479099?v=4?s=100" width="100px;" alt="Caleb Webber"/><br /><sub><b>Caleb Webber</b></sub></a><br /><a href="#maintenance-seeplusplus" title="Maintenance">🚧</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/pcn"><img src="https://avatars2.githubusercontent.com/u/1056756?v=4?s=100" width="100px;" alt="Peter N"/><br /><sub><b>Peter N</b></sub></a><br /><a href="#maintenance-pcn" title="Maintenance">🚧</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/seancad"><img src="https://avatars1.githubusercontent.com/u/47405611?v=4?s=100" width="100px;" alt="seancad"/><br /><sub><b>seancad</b></sub></a><br /><a href="#maintenance-seancad" title="Maintenance">🚧</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://willhayworth.com"><img src="https://avatars3.githubusercontent.com/u/181174?v=4?s=100" width="100px;" alt="Will Hayworth"/><br /><sub><b>Will Hayworth</b></sub></a><br /><a href="#content-wsh" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/chrizel"><img src="https://avatars3.githubusercontent.com/u/20802?v=4?s=100" width="100px;" alt="Christian Zeller"/><br /><sub><b>Christian Zeller</b></sub></a><br /><a href="#content-chrizel" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/jfchevrette"><img src="https://avatars.githubusercontent.com/u/3001?v=4?s=100" width="100px;" alt="Jean-Francois Chevrette"/><br /><sub><b>Jean-Francois Chevrette</b></sub></a><br /><a href="#content-jfchevrette" title="Content">🖋</a> <a href="https://github.com/rust-lang/rustlings/commits?author=jfchevrette" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/jbaber"><img src="https://avatars.githubusercontent.com/u/1908117?v=4?s=100" width="100px;" alt="John Baber-Lucero"/><br /><sub><b>John Baber-Lucero</b></sub></a><br /><a href="#content-jbaber" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tal-zvon"><img src="https://avatars.githubusercontent.com/u/3195851?v=4?s=100" width="100px;" alt="Tal"/><br /><sub><b>Tal</b></sub></a><br /><a href="#content-tal-zvon" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/apogeeoak"><img src="https://avatars.githubusercontent.com/u/59737221?v=4?s=100" width="100px;" alt="apogeeoak"/><br /><sub><b>apogeeoak</b></sub></a><br /><a href="#content-apogeeoak" title="Content">🖋</a> <a href="https://github.com/rust-lang/rustlings/commits?author=apogeeoak" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://www.garfieldtech.com/"><img src="https://avatars.githubusercontent.com/u/254863?v=4?s=100" width="100px;" alt="Larry Garfield"/><br /><sub><b>Larry Garfield</b></sub></a><br /><a href="#content-Crell" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/circumspect"><img src="https://avatars.githubusercontent.com/u/40770208?v=4?s=100" width="100px;" alt="circumspect"/><br /><sub><b>circumspect</b></sub></a><br /><a href="#content-circumspect" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/cjwyett"><img src="https://avatars.githubusercontent.com/u/34195737?v=4?s=100" width="100px;" alt="Cyrus Wyett"/><br /><sub><b>Cyrus Wyett</b></sub></a><br /><a href="#content-cjwyett" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/cadolphs"><img src="https://avatars.githubusercontent.com/u/13894820?v=4?s=100" width="100px;" alt="cadolphs"/><br /><sub><b>cadolphs</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=cadolphs" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://www.haveneer.com"><img src="https://avatars.githubusercontent.com/u/26146722?v=4?s=100" width="100px;" alt="Pascal H."/><br /><sub><b>Pascal H.</b></sub></a><br /><a href="#content-hpwxf" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://twitter.com/chapeupreto"><img src="https://avatars.githubusercontent.com/u/834048?v=4?s=100" width="100px;" alt="Rod Elias"/><br /><sub><b>Rod Elias</b></sub></a><br /><a href="#content-chapeupreto" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/blerchy"><img src="https://avatars.githubusercontent.com/u/2555355?v=4?s=100" width="100px;" alt="Matt Lebl"/><br /><sub><b>Matt Lebl</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=blerchy" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://flakolefluk.dev"><img src="https://avatars.githubusercontent.com/u/11986564?v=4?s=100" width="100px;" alt="Ignacio Le Fluk"/><br /><sub><b>Ignacio Le Fluk</b></sub></a><br /><a href="#content-flakolefluk" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tlyu"><img src="https://avatars.githubusercontent.com/u/431873?v=4?s=100" width="100px;" alt="Taylor Yu"/><br /><sub><b>Taylor Yu</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=tlyu" title="Code">💻</a> <a href="#content-tlyu" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://zerotask.github.io"><img src="https://avatars.githubusercontent.com/u/20150243?v=4?s=100" width="100px;" alt="Patrick Hintermayer"/><br /><sub><b>Patrick Hintermayer</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=Zerotask" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://petkopavlovski.com/"><img src="https://avatars.githubusercontent.com/u/32264020?v=4?s=100" width="100px;" alt="Pete Pavlovski"/><br /><sub><b>Pete Pavlovski</b></sub></a><br /><a href="#content-arthas168" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/k12ish"><img src="https://avatars.githubusercontent.com/u/45272873?v=4?s=100" width="100px;" alt="k12ish"/><br /><sub><b>k12ish</b></sub></a><br /><a href="#content-k12ish" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/hongshaoyang"><img src="https://avatars.githubusercontent.com/u/19281800?v=4?s=100" width="100px;" alt="Shao Yang Hong"/><br /><sub><b>Shao Yang Hong</b></sub></a><br /><a href="#content-hongshaoyang" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/bmacer"><img src="https://avatars.githubusercontent.com/u/13931806?v=4?s=100" width="100px;" alt="Brandon Macer"/><br /><sub><b>Brandon Macer</b></sub></a><br /><a href="#content-bmacer" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/stoiandan"><img src="https://avatars.githubusercontent.com/u/10388612?v=4?s=100" width="100px;" alt="Stoian Dan"/><br /><sub><b>Stoian Dan</b></sub></a><br /><a href="#content-stoiandan" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://about.me/pjdelport"><img src="https://avatars.githubusercontent.com/u/630271?v=4?s=100" width="100px;" alt="Pi Delport"/><br /><sub><b>Pi Delport</b></sub></a><br /><a href="#content-PiDelport" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/sateeshkumarb"><img src="https://avatars.githubusercontent.com/u/429263?v=4?s=100" width="100px;" alt="Sateesh "/><br /><sub><b>Sateesh </b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=sateeshkumarb" title="Code">💻</a> <a href="#content-sateeshkumarb" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/kayuapi"><img src="https://avatars.githubusercontent.com/u/10304328?v=4?s=100" width="100px;" alt="ZC"/><br /><sub><b>ZC</b></sub></a><br /><a href="#content-kayuapi" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/hyperparabolic"><img src="https://avatars.githubusercontent.com/u/12348474?v=4?s=100" width="100px;" alt="hyperparabolic"/><br /><sub><b>hyperparabolic</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=hyperparabolic" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://www.net4visions.at"><img src="https://avatars.githubusercontent.com/u/5228369?v=4?s=100" width="100px;" alt="arlecchino"/><br /><sub><b>arlecchino</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=kolbma" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://richthofen.io/"><img src="https://avatars.githubusercontent.com/u/7576730?v=4?s=100" width="100px;" alt="Richthofen"/><br /><sub><b>Richthofen</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=jazzplato" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/cseltol"><img src="https://avatars.githubusercontent.com/u/64264529?v=4?s=100" width="100px;" alt="Ivan Nerazumov"/><br /><sub><b>Ivan Nerazumov</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=cseltol" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/lauralindzey"><img src="https://avatars.githubusercontent.com/u/65185744?v=4?s=100" width="100px;" alt="lauralindzey"/><br /><sub><b>lauralindzey</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=lauralindzey" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/sinharaksh1t"><img src="https://avatars.githubusercontent.com/u/28585848?v=4?s=100" width="100px;" alt="Rakshit Sinha"/><br /><sub><b>Rakshit Sinha</b></sub></a><br /><a href="#content-sinharaksh1t" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/dbednar230"><img src="https://avatars.githubusercontent.com/u/54457902?v=4?s=100" width="100px;" alt="Damian"/><br /><sub><b>Damian</b></sub></a><br /><a href="#content-dbednar230" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://benarmstead.co.uk"><img src="https://avatars.githubusercontent.com/u/70973680?v=4?s=100" width="100px;" alt="Ben Armstead"/><br /><sub><b>Ben Armstead</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=benarmstead" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/anuk909"><img src="https://avatars.githubusercontent.com/u/34924662?v=4?s=100" width="100px;" alt="anuk909"/><br /><sub><b>anuk909</b></sub></a><br /><a href="#content-anuk909" title="Content">🖋</a> <a href="https://github.com/rust-lang/rustlings/commits?author=anuk909" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://granddaifuku.com/"><img src="https://avatars.githubusercontent.com/u/49578068?v=4?s=100" width="100px;" alt="granddaifuku"/><br /><sub><b>granddaifuku</b></sub></a><br /><a href="#content-granddaifuku" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://weilet.me"><img src="https://avatars.githubusercontent.com/u/32561597?v=4?s=100" width="100px;" alt="Weilet"/><br /><sub><b>Weilet</b></sub></a><br /><a href="#content-Weilet" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Millione"><img src="https://avatars.githubusercontent.com/u/38575932?v=4?s=100" width="100px;" alt="LIU JIE"/><br /><sub><b>LIU JIE</b></sub></a><br /><a href="#content-Millione" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/abusch"><img src="https://avatars.githubusercontent.com/u/506344?v=4?s=100" width="100px;" alt="Antoine Büsch"/><br /><sub><b>Antoine Büsch</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=abusch" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://frogtd.com/"><img src="https://avatars.githubusercontent.com/u/31412003?v=4?s=100" width="100px;" alt="frogtd"/><br /><sub><b>frogtd</b></sub></a><br /><a href="#content-frogtd" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/EmisonLu"><img src="https://avatars.githubusercontent.com/u/54395432?v=4?s=100" width="100px;" alt="Zhenghao Lu"/><br /><sub><b>Zhenghao Lu</b></sub></a><br /><a href="#content-EmisonLu" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://soundtrackyourbrand.com"><img src="https://avatars.githubusercontent.com/u/762956?v=4?s=100" width="100px;" alt="Fredrik Enestad"/><br /><sub><b>Fredrik Enestad</b></sub></a><br /><a href="#content-fredr" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://xuesong.pydevops.com"><img src="https://avatars.githubusercontent.com/u/18476085?v=4?s=100" width="100px;" alt="xuesong"/><br /><sub><b>xuesong</b></sub></a><br /><a href="#content-xuesongbj" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/MpdWalsh"><img src="https://avatars.githubusercontent.com/u/48160144?v=4?s=100" width="100px;" alt="Michael Walsh"/><br /><sub><b>Michael Walsh</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=MpdWalsh" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/alirezaghey"><img src="https://avatars.githubusercontent.com/u/26653424?v=4?s=100" width="100px;" alt="alirezaghey"/><br /><sub><b>alirezaghey</b></sub></a><br /><a href="#content-alirezaghey" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/frvannes16"><img src="https://avatars.githubusercontent.com/u/3188475?v=4?s=100" width="100px;" alt="Franklin van Nes"/><br /><sub><b>Franklin van Nes</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=frvannes16" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://nekonako.github.io"><img src="https://avatars.githubusercontent.com/u/46141275?v=4?s=100" width="100px;" alt="nekonako"/><br /><sub><b>nekonako</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=nekonako" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tan-zx"><img src="https://avatars.githubusercontent.com/u/67887489?v=4?s=100" width="100px;" alt="ZX"/><br /><sub><b>ZX</b></sub></a><br /><a href="#content-tan-zx" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/sundevilyang"><img src="https://avatars.githubusercontent.com/u/1499214?v=4?s=100" width="100px;" alt="Yang Wen"/><br /><sub><b>Yang Wen</b></sub></a><br /><a href="#content-sundevilyang" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://brandon-high.com"><img src="https://avatars.githubusercontent.com/u/759848?v=4?s=100" width="100px;" alt="Brandon High"/><br /><sub><b>Brandon High</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=highb" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/x-hgg-x"><img src="https://avatars.githubusercontent.com/u/39058530?v=4?s=100" width="100px;" alt="x-hgg-x"/><br /><sub><b>x-hgg-x</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=x-hgg-x" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://kisaragieffective.github.io"><img src="https://avatars.githubusercontent.com/u/48310258?v=4?s=100" width="100px;" alt="Kisaragi"/><br /><sub><b>Kisaragi</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=KisaragiEffective" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Kallu-A"><img src="https://avatars.githubusercontent.com/u/73198738?v=4?s=100" width="100px;" alt="Lucas Aries"/><br /><sub><b>Lucas Aries</b></sub></a><br /><a href="#content-Kallu-A" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/ragreenburg"><img src="https://avatars.githubusercontent.com/u/24358100?v=4?s=100" width="100px;" alt="ragreenburg"/><br /><sub><b>ragreenburg</b></sub></a><br /><a href="#content-ragreenburg" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/stevenfukase"><img src="https://avatars.githubusercontent.com/u/66785624?v=4?s=100" width="100px;" alt="stevenfukase"/><br /><sub><b>stevenfukase</b></sub></a><br /><a href="#content-stevenfukase" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/J-S-Kim"><img src="https://avatars.githubusercontent.com/u/17569303?v=4?s=100" width="100px;" alt="J-S-Kim"/><br /><sub><b>J-S-Kim</b></sub></a><br /><a href="#content-J-S-Kim" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Fointard"><img src="https://avatars.githubusercontent.com/u/9333398?v=4?s=100" width="100px;" alt="Fointard"/><br /><sub><b>Fointard</b></sub></a><br /><a href="#content-Fointard" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/rytheo"><img src="https://avatars.githubusercontent.com/u/22184325?v=4?s=100" width="100px;" alt="Ryan Lowe"/><br /><sub><b>Ryan Lowe</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=rytheo" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://www.dashen.tech"><img src="https://avatars.githubusercontent.com/u/15921519?v=4?s=100" width="100px;" alt="cui fliter"/><br /><sub><b>cui fliter</b></sub></a><br /><a href="#content-cuishuang" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/luskwater"><img src="https://avatars.githubusercontent.com/u/42529?v=4?s=100" width="100px;" alt="Ron Lusk"/><br /><sub><b>Ron Lusk</b></sub></a><br /><a href="#content-luskwater" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="http://liby.github.io/liby/"><img src="https://avatars.githubusercontent.com/u/38807139?v=4?s=100" width="100px;" alt="Bryan Lee"/><br /><sub><b>Bryan Lee</b></sub></a><br /><a href="#content-liby" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://nandaja.space"><img src="https://avatars.githubusercontent.com/u/2624550?v=4?s=100" width="100px;" alt="Nandaja Varma"/><br /><sub><b>Nandaja Varma</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=nandajavarma" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/merelymyself"><img src="https://avatars.githubusercontent.com/u/88221256?v=4?s=100" width="100px;" alt="pwygab"/><br /><sub><b>pwygab</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=merelymyself" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://linkedin.com/in/lucasgrvarela"><img src="https://avatars.githubusercontent.com/u/37870368?v=4?s=100" width="100px;" alt="Lucas Grigolon Varela"/><br /><sub><b>Lucas Grigolon Varela</b></sub></a><br /><a href="#content-lucasgrvarela" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/bufo24"><img src="https://avatars.githubusercontent.com/u/32884105?v=4?s=100" width="100px;" alt="Bufo"/><br /><sub><b>Bufo</b></sub></a><br /><a href="#content-bufo24" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://rustnote.com"><img src="https://avatars.githubusercontent.com/u/77730378?v=4?s=100" width="100px;" alt="Jack Clayton"/><br /><sub><b>Jack Clayton</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=jackos" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/klkl0808"><img src="https://avatars.githubusercontent.com/u/24694249?v=4?s=100" width="100px;" alt="Konstantin"/><br /><sub><b>Konstantin</b></sub></a><br /><a href="#content-klkl0808" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/0pling"><img src="https://avatars.githubusercontent.com/u/104090344?v=4?s=100" width="100px;" alt="0pling"/><br /><sub><b>0pling</b></sub></a><br /><a href="#content-0pling" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/KatanaFluorescent"><img src="https://avatars.githubusercontent.com/u/60199077?v=4?s=100" width="100px;" alt="KatanaFluorescent"/><br /><sub><b>KatanaFluorescent</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=KatanaFluorescent" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Drew-Morris"><img src="https://avatars.githubusercontent.com/u/95818166?v=4?s=100" width="100px;" alt="Drew Morris"/><br /><sub><b>Drew Morris</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=Drew-Morris" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/camperdue42"><img src="https://avatars.githubusercontent.com/u/43047763?v=4?s=100" width="100px;" alt="camperdue42"/><br /><sub><b>camperdue42</b></sub></a><br /><a href="#content-camperdue42" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/YsuOS"><img src="https://avatars.githubusercontent.com/u/30138661?v=4?s=100" width="100px;" alt="YsuOS"/><br /><sub><b>YsuOS</b></sub></a><br /><a href="#content-YsuOS" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://lichess.org/@/StevenEmily"><img src="https://avatars.githubusercontent.com/u/58114641?v=4?s=100" width="100px;" alt="Steven Nguyen"/><br /><sub><b>Steven Nguyen</b></sub></a><br /><a href="#content-icecream17" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://noahcairns.dev"><img src="https://avatars.githubusercontent.com/u/94420090?v=4?s=100" width="100px;" alt="nacairns1"/><br /><sub><b>nacairns1</b></sub></a><br /><a href="#content-nacairns1" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/pgjbz"><img src="https://avatars.githubusercontent.com/u/22059237?v=4?s=100" width="100px;" alt="Paulo Gabriel Justino Bezerra"/><br /><sub><b>Paulo Gabriel Justino Bezerra</b></sub></a><br /><a href="#content-pgjbz" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/jaystile"><img src="https://avatars.githubusercontent.com/u/46078028?v=4?s=100" width="100px;" alt="Jason"/><br /><sub><b>Jason</b></sub></a><br /><a href="#content-jaystile" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://exdx.github.io"><img src="https://avatars.githubusercontent.com/u/31546601?v=4?s=100" width="100px;" alt="exdx"/><br /><sub><b>exdx</b></sub></a><br /><a href="#content-exdx" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Jzow"><img src="https://avatars.githubusercontent.com/u/68860495?v=4?s=100" width="100px;" alt="James Zow"/><br /><sub><b>James Zow</b></sub></a><br /><a href="#content-Jzow" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://jamesabromley.wordpress.com/"><img src="https://avatars.githubusercontent.com/u/2474334?v=4?s=100" width="100px;" alt="James Bromley"/><br /><sub><b>James Bromley</b></sub></a><br /><a href="#content-jayber" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/swhiteCQC"><img src="https://avatars.githubusercontent.com/u/77438466?v=4?s=100" width="100px;" alt="swhiteCQC"/><br /><sub><b>swhiteCQC</b></sub></a><br /><a href="#content-swhiteCQC" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/neilpate"><img src="https://avatars.githubusercontent.com/u/7802334?v=4?s=100" width="100px;" alt="Neil Pate"/><br /><sub><b>Neil Pate</b></sub></a><br /><a href="#content-neilpate" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://wojexe.com"><img src="https://avatars.githubusercontent.com/u/21208490?v=4?s=100" width="100px;" alt="wojexe"/><br /><sub><b>wojexe</b></sub></a><br /><a href="#content-wojexe" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Tostapunk"><img src="https://avatars.githubusercontent.com/u/25140297?v=4?s=100" width="100px;" alt="Mattia Schiavon"/><br /><sub><b>Mattia Schiavon</b></sub></a><br /><a href="#content-Tostapunk" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://toucantoco.com"><img src="https://avatars.githubusercontent.com/u/18406791?v=4?s=100" width="100px;" alt="Eric Jolibois"/><br /><sub><b>Eric Jolibois</b></sub></a><br /><a href="#content-PrettyWood" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="http://edwinchang.vercel.app"><img src="https://avatars.githubusercontent.com/u/88263098?v=4?s=100" width="100px;" alt="Edwin Chang"/><br /><sub><b>Edwin Chang</b></sub></a><br /><a href="#content-EdwinChang24" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://saikat.dev/"><img src="https://avatars.githubusercontent.com/u/7412443?v=4?s=100" width="100px;" alt="Saikat Das"/><br /><sub><b>Saikat Das</b></sub></a><br /><a href="#content-saikatdas0790" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/thatlittleboy"><img src="https://avatars.githubusercontent.com/u/30731072?v=4?s=100" width="100px;" alt="Jeremy Goh"/><br /><sub><b>Jeremy Goh</b></sub></a><br /><a href="#content-thatlittleboy" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Lioness100"><img src="https://avatars.githubusercontent.com/u/65814829?v=4?s=100" width="100px;" alt="Lioness100"/><br /><sub><b>Lioness100</b></sub></a><br /><a href="#content-Lioness100" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tvkn"><img src="https://avatars.githubusercontent.com/u/79277926?v=4?s=100" width="100px;" alt="Tristan Nicholls"/><br /><sub><b>Tristan Nicholls</b></sub></a><br /><a href="#content-tvkn" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://clairewang.net"><img src="https://avatars.githubusercontent.com/u/9344258?v=4?s=100" width="100px;" alt="Claire"/><br /><sub><b>Claire</b></sub></a><br /><a href="#content-clairew" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Mouwrice"><img src="https://avatars.githubusercontent.com/u/56763273?v=4?s=100" width="100px;" alt="Maurice Van Wassenhove"/><br /><sub><b>Maurice Van Wassenhove</b></sub></a><br /><a href="#content-Mouwrice" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://jmthree.com"><img src="https://avatars.githubusercontent.com/u/77524?v=4?s=100" width="100px;" alt="John Mendelewski"/><br /><sub><b>John Mendelewski</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=johnmendel" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="http://fakhoury.xyz"><img src="https://avatars.githubusercontent.com/u/20828724?v=4?s=100" width="100px;" alt="Brian Fakhoury"/><br /><sub><b>Brian Fakhoury</b></sub></a><br /><a href="#content-brianfakhoury" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/markusboehme"><img src="https://avatars.githubusercontent.com/u/5074759?v=4?s=100" width="100px;" alt="Markus Boehme"/><br /><sub><b>Markus Boehme</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=markusboehme" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/nico-vromans"><img src="https://avatars.githubusercontent.com/u/48183857?v=4?s=100" width="100px;" alt="Nico Vromans"/><br /><sub><b>Nico Vromans</b></sub></a><br /><a href="#content-nico-vromans" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/vostok92"><img src="https://avatars.githubusercontent.com/u/540339?v=4?s=100" width="100px;" alt="vostok92"/><br /><sub><b>vostok92</b></sub></a><br /><a href="#content-vostok92" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://magnusrodseth.vercel.app"><img src="https://avatars.githubusercontent.com/u/59113973?v=4?s=100" width="100px;" alt="Magnus Rødseth"/><br /><sub><b>Magnus Rødseth</b></sub></a><br /><a href="#content-magnusrodseth" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/rubiesonthesky"><img src="https://avatars.githubusercontent.com/u/2591240?v=4?s=100" width="100px;" alt="rubiesonthesky"/><br /><sub><b>rubiesonthesky</b></sub></a><br /><a href="#content-rubiesonthesky" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://www.gabrielbianconi.com/"><img src="https://avatars.githubusercontent.com/u/1275491?v=4?s=100" width="100px;" alt="Gabriel Bianconi"/><br /><sub><b>Gabriel Bianconi</b></sub></a><br /><a href="#content-GabrielBianconi" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Kodylow"><img src="https://avatars.githubusercontent.com/u/74332828?v=4?s=100" width="100px;" alt="Kody Low"/><br /><sub><b>Kody Low</b></sub></a><br /><a href="#content-Kodylow" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/rzrymiak"><img src="https://avatars.githubusercontent.com/u/106121613?v=4?s=100" width="100px;" alt="rzrymiak"/><br /><sub><b>rzrymiak</b></sub></a><br /><a href="#content-rzrymiak" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/miguelraz"><img src="https://avatars.githubusercontent.com/u/13056181?v=4?s=100" width="100px;" alt="Miguel Raz Guzmán Macedo"/><br /><sub><b>Miguel Raz Guzmán Macedo</b></sub></a><br /><a href="#content-miguelraz" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/memark"><img src="https://avatars.githubusercontent.com/u/318504?v=4?s=100" width="100px;" alt="Magnus Markling"/><br /><sub><b>Magnus Markling</b></sub></a><br /><a href="#content-memark" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/gasparitiago"><img src="https://avatars.githubusercontent.com/u/3237254?v=4?s=100" width="100px;" alt="Tiago De Gaspari"/><br /><sub><b>Tiago De Gaspari</b></sub></a><br /><a href="#content-gasparitiago" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/skaunov"><img src="https://avatars.githubusercontent.com/u/65976143?v=4?s=100" width="100px;" alt="skaunov"/><br /><sub><b>skaunov</b></sub></a><br /><a href="#content-skaunov" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://caljacobson.dev"><img src="https://avatars.githubusercontent.com/u/9152032?v=4?s=100" width="100px;" alt="Cal Jacobson"/><br /><sub><b>Cal Jacobson</b></sub></a><br /><a href="#content-cj81499" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/duchonic"><img src="https://avatars.githubusercontent.com/u/34117620?v=4?s=100" width="100px;" alt="Duchoud Nicolas"/><br /><sub><b>Duchoud Nicolas</b></sub></a><br /><a href="#content-duchonic" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/gfaugere"><img src="https://avatars.githubusercontent.com/u/11901979?v=4?s=100" width="100px;" alt="Gaëtan Faugère"/><br /><sub><b>Gaëtan Faugère</b></sub></a><br /><a href="#tool-gfaugere" title="Tools">🔧</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/bhbuehler"><img src="https://avatars.githubusercontent.com/u/25541343?v=4?s=100" width="100px;" alt="bhbuehler"/><br /><sub><b>bhbuehler</b></sub></a><br /><a href="#content-bhbuehler" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/nyurik"><img src="https://avatars.githubusercontent.com/u/1641515?v=4?s=100" width="100px;" alt="Yuri Astrakhan"/><br /><sub><b>Yuri Astrakhan</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=nyurik" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://azzamsa.com"><img src="https://avatars.githubusercontent.com/u/17734314?v=4?s=100" width="100px;" alt="azzamsa"/><br /><sub><b>azzamsa</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=azzamsa" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/mvanschellebeeck"><img src="https://avatars.githubusercontent.com/u/17671052?v=4?s=100" width="100px;" alt="mvanschellebeeck"/><br /><sub><b>mvanschellebeeck</b></sub></a><br /><a href="#content-mvanschellebeeck" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/aaarkid"><img src="https://avatars.githubusercontent.com/u/39987510?v=4?s=100" width="100px;" alt="Arkid"/><br /><sub><b>Arkid</b></sub></a><br /><a href="#content-aaarkid" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://tfpk.dev"><img src="https://avatars.githubusercontent.com/u/10906982?v=4?s=100" width="100px;" alt="Tom Kunc"/><br /><sub><b>Tom Kunc</b></sub></a><br /><a href="#content-tfpk" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/mfurak"><img src="https://avatars.githubusercontent.com/u/38523093?v=4?s=100" width="100px;" alt="Marek Furák"/><br /><sub><b>Marek Furák</b></sub></a><br /><a href="#content-mfurak" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://winter.cafe"><img src="https://avatars.githubusercontent.com/u/78392041?v=4?s=100" width="100px;" alt="Winter"/><br /><sub><b>Winter</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=winterqt" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://moritzboeh.me"><img src="https://avatars.githubusercontent.com/u/42215704?v=4?s=100" width="100px;" alt="Moritz Böhme"/><br /><sub><b>Moritz Böhme</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=MoritzBoehme" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/craymel"><img src="https://avatars.githubusercontent.com/u/71062756?v=4?s=100" width="100px;" alt="craymel"/><br /><sub><b>craymel</b></sub></a><br /><a href="#content-craymel" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tkburis"><img src="https://avatars.githubusercontent.com/u/20501289?v=4?s=100" width="100px;" alt="TK Buristrakul"/><br /><sub><b>TK Buristrakul</b></sub></a><br /><a href="#content-tkburis" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/HerschelW"><img src="https://avatars.githubusercontent.com/u/17935816?v=4?s=100" width="100px;" alt="Kent Worthington"/><br /><sub><b>Kent Worthington</b></sub></a><br /><a href="#content-HerschelW" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/seporterfield"><img src="https://avatars.githubusercontent.com/u/107010978?v=4?s=100" width="100px;" alt="seporterfield"/><br /><sub><b>seporterfield</b></sub></a><br /><a href="#content-seporterfield" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/dbarrosop"><img src="https://avatars.githubusercontent.com/u/6246622?v=4?s=100" width="100px;" alt="David Barroso"/><br /><sub><b>David Barroso</b></sub></a><br /><a href="#infra-dbarrosop" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://distanz.ch"><img src="https://avatars.githubusercontent.com/u/539708?v=4?s=100" width="100px;" alt="Tobias Klauser"/><br /><sub><b>Tobias Klauser</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=tklauser" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/0xMySt1c"><img src="https://avatars.githubusercontent.com/u/101825630?v=4?s=100" width="100px;" alt="0xMySt1c"/><br /><sub><b>0xMySt1c</b></sub></a><br /><a href="#tool-0xMySt1c" title="Tools">🔧</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/AxolotlTears"><img src="https://avatars.githubusercontent.com/u/87157047?v=4?s=100" width="100px;" alt="Ten"/><br /><sub><b>Ten</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=AxolotlTears" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://h4x5p4c3.xyz"><img src="https://avatars.githubusercontent.com/u/66133688?v=4?s=100" width="100px;" alt="jones martin"/><br /><sub><b>jones martin</b></sub></a><br /><a href="#content-h4x5p4c3" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/cloppingemu"><img src="https://avatars.githubusercontent.com/u/12227963?v=4?s=100" width="100px;" alt="cloppingemu"/><br /><sub><b>cloppingemu</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=cloppingemu" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://github.com/zeromicro/go-zero"><img src="https://avatars.githubusercontent.com/u/1918356?v=4?s=100" width="100px;" alt="Kevin Wan"/><br /><sub><b>Kevin Wan</b></sub></a><br /><a href="#content-kevwan" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://kurowasaruby.cn"><img src="https://avatars.githubusercontent.com/u/43495006?v=4?s=100" width="100px;" alt="Ruby"/><br /><sub><b>Ruby</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=wjwrh" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/alexandergill"><img src="https://avatars.githubusercontent.com/u/7033716?v=4?s=100" width="100px;" alt="Alexander Gill"/><br /><sub><b>Alexander Gill</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=alexandergill" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/jarrod-sanders/"><img src="https://avatars.githubusercontent.com/u/50600614?v=4?s=100" width="100px;" alt="Jarrod Sanders"/><br /><sub><b>Jarrod Sanders</b></sub></a><br /><a href="#content-kawaiiPlat" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/platformer"><img src="https://avatars.githubusercontent.com/u/40146328?v=4?s=100" width="100px;" alt="Andrew Sen"/><br /><sub><b>Andrew Sen</b></sub></a><br /><a href="#content-platformer" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://grzegorz-zur.com/"><img src="https://avatars.githubusercontent.com/u/5297583?v=4?s=100" width="100px;" alt="Grzegorz Żur"/><br /><sub><b>Grzegorz Żur</b></sub></a><br /><a href="#content-grzegorz-zur" title="Content">🖋</a></td>
</tr>
</tbody>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!

View File

@ -1,4 +1,289 @@
<a name="5.4.0"></a>
## Unreleased
### Changed
- Upgrade to Rust edition 2024
- Raise the minimum supported Rust version to `1.87`
## 6.4.0 (2024-11-11)
### Added
- The list of exercises is now searchable by pressing `s` or `/` 🔍️ (thanks to [@frroossst](https://github.com/frroossst))
- New option `c` in the prompt to manually check all exercises ✅ (thanks to [@Nahor](https://github.com/Nahor))
- New command `check-all` to manually check all exercises ✅ (thanks to [@Nahor](https://github.com/Nahor))
- Addictive animation for showing the progress of checking all exercises. A nice showcase of parallelism in Rust ✨
- New option `x` in the prompt to reset the file of the current exercise 🔄
- Allow `dead_code` for all exercises and solutions ⚰️ (thanks to [@huss4in](https://github.com/huss4in))
- Pause input while running an exercise to avoid unexpected prompt interactions ⏸️
- Limit the maximum number of exercises to 999. Any community exercises willing to reach that limit? 🔝
### Changed
- `enums3`: Remove redundant enum definition task (thanks to [@senekor](https://github.com/senekor))
- `if2`: Make the exercise less confusing by avoiding "fizz", "fuzz", "foo", "bar" and "baz" (thanks to [@senekor](https://github.com/senekor))
- `hashmap3`: Use the method `Entry::or_default`.
- Update the state of all exercises when checking all of them (thanks to [@Nahor](https://github.com/Nahor))
- The main prompt doesn't need a confirmation with ENTER on Unix-like systems anymore.
- No more jumping back to a previous exercise when its file is changed. Use the list to jump between exercises.
- Dump the solution file after an exercise is done even if the solution's directory doesn't exist.
- Rework the footer in the list.
- Optimize the file watcher.
### Fixed
- Fix bad contrast in the list on terminals with a light theme.
## 6.3.0 (2024-08-29)
### Added
- Add the following exercise lints:
- `forbid(unsafe_code)`: You shouldn't write unsafe code in Rustlings.
- `forbid(unstable_features)`: You don't need unstable features in Rustlings and shouldn't rely on them while learning Rust.
- `forbid(todo)`: You forgot a `todo!()`.
- `forbid(empty_loop)`: This can only happen by mistake in Rustlings.
- `deny(infinite_loop)`: No infinite loops are needed in Rustlings.
- `deny(mem_forget)`: You shouldn't leak memory while still learning Rust.
- Show a link to every exercise file in the list.
- Add scroll padding in the list.
- Break the help footer of the list into two lines when the terminal width isn't big enough.
- Enable scrolling with the mouse in the list.
- `dev check`: Show the progress of checks.
- `dev check`: Check that the length of all exercise names is lower than 32.
- `dev check`: Check if exercise contains no tests and isn't marked with `test = false`.
### Changed
- The compilation time when installing Rustlings is reduced.
- Pressing `c` in the list for "continue on" now quits the list after setting the selected exercise as the current one.
- Better highlighting of the solution file after an exercise is done.
- Don't show the output of successful tests anymore. Instead, show the pretty output for tests.
- Be explicit about `q` only quitting the list and not the whole program in the list.
- Be explicit about `r` only resetting one exercise (the selected one) in the list.
- Ignore the standard output of `git init`.
- `threads3`: Remove the queue length and improve tests.
- `errors4`: Use match instead of a comparison chain in the solution.
- `functions3`: Only take `u8` to avoid using a too high number of iterations by mistake.
- `dev check`: Always check with strict Clippy (warnings to errors) when checking the solutions.
### Fixed
- Fix the error on some systems about too many open files during the final check of all exercises.
- Fix the list when the terminal height is too low.
- Restore the terminal after an error in the list.
## 6.2.0 (2024-08-09)
### Added
- Show a message before checking and running an exercise. This gives the user instant feedback and avoids confusion if the checks take too long.
- Show a helpful error message when trying to install Rustlings with a Rust version lower than the minimum one that Rustlings supports.
- Add a `README.md` file to the `solutions/` directory.
- Allow initializing Rustlings in a Cargo workspace.
- `dev check`: Check that all solutions are formatted with `rustfmt`.
### Changed
- Remove the state file and the solutions directory from the generated `.gitignore` file.
- Run the final check of all exercises in parallel.
- Small exercise improvements.
## 6.1.0 (2024-07-10)
#### Added
- `dev check`: Check that all exercises (including community ones) include at least one `TODO` comment.
- `dev check`: Check that all exercises actually fail to run (not already solved).
#### Changed
- Make enum variants more consistent between enum exercises.
- `iterators3`: Teach about the possible case of integer overflow during division.
#### Fixed
- Exit with a helpful error message on missing/unsupported terminal/TTY.
- Mark the last exercise as done.
## 6.0.1 (2024-07-04)
Small exercise improvements and fixes.
Most importantly, fixed that the exercise `clippy1` was already solved 😅
## 6.0.0 (2024-07-03)
This release is the result of a complete rewrite to deliver a ton of new features and improvements ✨
The most important changes are highlighted below.
### Installation
The installation has been simplified a lot!
To install Rustlings after installing Rust, all what you need to do now is running the following command:
```bash
cargo install rustlings
```
Yes, this means that Rustlings is now on [crates.io](https://crates.io/crates/rustlings) 🎉
You can read about the motivations of this change in [this issue](https://github.com/rust-lang/rustlings/issues/1919).
### UI/UX
- The UI is now responsive when the terminal is resized.
- The progress bar was moved to the bottom so that you can always see your progress and the current exercise to work on.
- The current exercise path is now a terminal link. It will open the exercise file in your default editor when you click on it.
- A small prompt is now always shown at the bottom. It allows you to choose an action by entering a character. For example, entering `h` will show you the hint of the current exercise.
- The comment "I AM NOT DONE!" doesn't exist anymore. Instead of needing to remove it to go to the next exercise, you need to enter `n` in the terminal.
### List mode
A new list mode was added!
You can enter it by entering `l` in the watch mode.
It offers the following features:
- Browse all exercises and see their state (pending/done).
- Filter exercises based on their state (pending/done).
- Continue at another exercise. This allows you to skip some exercises or go back to previous ones.
- Reset an exercise so you can start over and revert your changes.
### Solutions
After finishing an exercise, a solution file will be available and Rustlings will show you its path in green.
This allows you to compare your solution with an idiomatic solution and maybe learn about other ways to solve a problem.
While writing the solutions, all exercises have been polished 🌟
For example, every exercise now contains `TODO` comments to highlight what the user needs to change and where.
### LSP support out of the box
Instead of creating a `project.json` file using `rustlings lsp`, Rustlings now works with a `Cargo.toml` file out of the box.
No actions are needed to activate the language server `rust-analyzer`.
This should avoid issues related to the language server or to running exercises, especially the ones with Clippy.
### Clippy
Clippy lints are now shown on all exercises, not only the Clippy exercises 📎
Make Clippy your friend from early on 🥰
### Community Exercises
Rustlings now supports community exercises!
Do you want to create your own set of Rustlings exercises to focus on some specific topic?
Or do you want to translate the original Rustlings exercises?
Then follow the link to the guide about [community exercises](https://rustlings.rust-lang.org/community-exercises)!
## 5.6.1 (2023-09-18)
#### Changed
- Converted all exercises with assertions to test mode.
#### Fixed
- `cow1`: Reverted regression introduced by calling `to_mut` where it
shouldn't have been called, and clarified comment.
- `primitive_types3`: Require at least an array of 100 elements.
- Removed hint comments when no hint exists for the exercise.
- `as_ref_mut`: Fixed a typo in a test function name.
- `enums3`: Fixed formatting with `rustfmt`.
## 5.6.0 (2023-09-04)
#### Added
- New exercise: `if3`, teaching the user about `if let` statements.
- `hashmaps2`: Added an extra test function to check if the amount of fruits is higher than zero.
- `enums3`: Added a test for `Message`.
- `if1`: Added a test case to check equal values.
- `if3`: Added a note specifying that there are no test changes needed.
#### Changed
- Swapped the order of threads and smart pointer exercises.
- Rewrote the CLI to use `clap` - it's matured much since we switched to `argh` :)
- `structs3`: Switched from i32 to u32.
- `move_semantics`: Switched 1-4 to tests, and rewrote them to be way simpler, while still teaching about the same
concepts.
#### Fixed
- `iterators5`:
- Removed an outdated part of the hint.
- Renamed variables to use snake_case.
- `vecs2`: Updated the hint to reference the renamed loop variable.
- `enums3`: Changed message string in test so that it gets properly tested.
- `strings2`: Corrected line number in hint, then removed it (this both happened as part of this release cycle).
- `primitive_types4`: Updated hint to the correct ending index.
- `quiz1`: Removed duplicated sentence from exercise comments.
- `errors4`: Improved comment.
- `from_into`: Fixed test values.
- `cow1`: Added `.to_mut()` to distinguish from the previous test case.
- `threads2`: Updated hint text to reference the correct book heading.
#### Housekeeping
- Cleaned up the explanation paragraphs at the start of each exercise.
- Lots of Nix housekeeping that I don't feel qualified to write about!
- Improved CI workflows, we're now testing on multiple platforms at once.
## 5.5.1 (2023-05-17)
#### Fixed
- Reverted `rust-project.json` path generation due to an upstream `rust-analyzer` fix.
## 5.5.0 (2023-05-17)
#### Added
- `strings2`: Added a reference to the book chapter for reference conversion
- `lifetimes`: Added a link to the lifetimekata project
- Added a new `tests4` exercises, which teaches about testing for panics
- Added a `!` prefix command to watch mode that runs an external command
- Added a `--success-hints` option to watch mode that shows hints on exercise success
#### Changed
- `vecs2`: Renamed iterator variable bindings for clarify
- `lifetimes`: Changed order of book references
- `hashmaps2`: Clarified instructions in the todo block
- Moved lifetime exercises before test exercises (via the recommended book ordering)
- `options2`: Improved tests for layering options
- `modules2`: Added more information to the hint
#### Fixed
- `errors2`: Corrected a comment wording
- `iterators2`: Fixed a spelling mistake in the hint text
- `variables`: Wrapped the mut keyword with backticks for readability
- `move_semantics2`: Removed references to line numbers
- `cow1`: Clarified the `owned_no_mutation` comments
- `options3`: Changed exercise to panic when no match is found
- `rustlings lsp` now generates absolute paths, which should fix VSCode `rust-analyzer` usage on Windows
#### Housekeeping
- Added a markdown linter to run on GitHub actions
- Split quick installation section into two code blocks
## 5.4.1 (2023-03-10)
#### Changed
- `vecs`: Added links to `iter_mut` and `map` to README.md
- `cow1`: Changed main to tests
- `iterators1`: Formatted according to rustfmt
#### Fixed
- `errors5`: Unified undisclosed type notation
- `arc1`: Improved readability by avoiding implicit dereference
- `macros4`: Prevented auto-fix by adding `#[rustfmt::skip]`
- `cli`: Actually show correct progress percentages
## 5.4.0 (2023-02-12)
@ -28,8 +313,6 @@
- Bumped min Rust version to 1.58 in installation script
<a name="5.3.0"></a>
## 5.3.0 (2022-12-23)
#### Added
@ -53,7 +336,7 @@
- **structs3**: Clarifed the hint
- **quiz2, as_ref_mut, options1, traits1, traits2**: Clarified hints
- **traits1, traits2, cli**: Tidied up unmatching backticks
- **enums2**: Removed unneccessary indirection of self
- **enums2**: Removed unnecessary indirection of self
- **enums3**: Added an extra tuple comment
#### Housekeeping
@ -62,8 +345,6 @@
- Applied some Clippy and rustfmt formatting
- Added a note on Windows PowerShell and other shell compatibility
<a name="5.2.1"></a>
## 5.2.1 (2022-09-06)
#### Fixed
@ -77,8 +358,6 @@
- Fixed a typo in README.md
<a name="5.2.0"></a>
## 5.2.0 (2022-08-27)
#### Added
@ -95,16 +374,12 @@
- **quiz1**: Adjusted the explanations to be consistent with
the tests
<a name="5.1.1"></a>
## 5.1.1 (2022-08-17)
#### Bug Fixes
- Fixed an incorrect assertion in options1
<a name="5.1.0"></a>
## 5.1.0 (2022-08-16)
#### Features
@ -139,8 +414,6 @@
- Clarified manual installation instructions using `cargo install --path .`
- Added a link to our Zulip in the readme file
<a name="5.0.0"></a>
## 5.0.0 (2022-07-16)
#### Features
@ -213,8 +486,6 @@
- Updated spacing in Cargo.toml.
- Added a GitHub actions config so that tests run on every PR/commit.
<a name="4.8.0"></a>
## 4.8.0 (2022-07-01)
#### Features
@ -235,8 +506,6 @@
- Replaced the git.io URL with the fully qualified URL because of git.io's sunsetting.
- Removed the deprecated Rust GitPod extension.
<a name="4.7.1"></a>
## 4.7.1 (2022-04-20)
#### Features
@ -257,8 +526,6 @@
- The changelog will now be manually written instead of being automatically generated by the
Git log.
<a name="4.7.0"></a>
## 4.7.0 (2022-04-14)
#### Features
@ -299,8 +566,6 @@
- Add hints on how to get GCC installed (#741) ([bc56861](https://github.com/rust-lang/rustlings/commit/bc5686174463ad6f4f6b824b0e9b97c3039d4886))
- Fix some code blocks that were not highlighted ([17f9d74](https://github.com/rust-lang/rustlings/commit/17f9d7429ccd133a72e815fb5618e0ce79560929))
<a name="4.6.0"></a>
## 4.6.0 (2021-09-25)
#### Features
@ -323,8 +588,6 @@
- Clarify instructions ([df25684c](https://github.com/rust-lang/rustlings/commit/df25684cb79f8413915e00b5efef29369849cef1))
- **quiz1:** Fix inconsistent wording (#826) ([03131a3d](https://github.com/rust-lang/rustlings/commit/03131a3d35d9842598150f9da817f7cc26e2669a))
<a name="4.5.0"></a>
## 4.5.0 (2021-07-07)
#### Features
@ -345,8 +608,6 @@
- **try_from_into, from_str:** hints for dyn Error ([11d2cf0d](https://github.com/rust-lang/rustlings/commit/11d2cf0d604dee3f5023c17802d69438e69fa50e))
- **variables5:** confine the answer further ([48ffcbd2](https://github.com/rust-lang/rustlings/commit/48ffcbd2c4cc4d936c2c7480019190f179813cc5))
<a name="4.4.0"></a>
## 4.4.0 (2021-04-24)
#### Bug Fixes
@ -388,8 +649,6 @@
- updated progress percentage ([1c6f7e4b](https://github.com/rust-lang/rustlings/commit/1c6f7e4b7b9b3bd36f4da2bb2b69c549cc8bd913))
- added progress info ([c0e3daac](https://github.com/rust-lang/rustlings/commit/c0e3daacaf6850811df5bc57fa43e0f249d5cfa4))
<a name="4.3.0"></a>
## 4.3.0 (2020-12-29)
#### Features
@ -412,8 +671,6 @@
- Update description (#584) ([96347df9](https://github.com/rust-lang/rustlings/commit/96347df9df294f01153b29d9ad4ba361f665c755))
- **vec1:** Have test compare every element in a and v ([9b6c6293](https://github.com/rust-lang/rustlings/commit/9b6c629397b24b944f484f5b2bbd8144266b5695))
<a name="4.2.0"></a>
## 4.2.0 (2020-11-07)
#### Features
@ -434,8 +691,6 @@
- missing comma in test ([4fb230da](https://github.com/rust-lang/rustlings/commit/4fb230daf1251444fcf29e085cee222a91f8a37e))
- **quiz3:** Second test is for odd numbers, not even. (#553) ([18e0bfef](https://github.com/rust-lang/rustlings/commit/18e0bfef1de53071e353ba1ec5837002ff7290e6))
<a name="4.1.0"></a>
## 4.1.0 (2020-10-05)
#### Bug Fixes
@ -458,8 +713,6 @@
- **cli:** Added 'cls' command to 'watch' mode (#474) ([4f2468e1](https://github.com/rust-lang/rustlings/commit/4f2468e14f574a93a2e9b688367b5752ed96ae7b))
- **try_from_into:** Add insufficient length test (#469) ([523d18b8](https://github.com/rust-lang/rustlings/commit/523d18b873a319f7c09262f44bd40e2fab1830e5))
<a name="4.0.0"></a>
## 4.0.0 (2020-07-08)
#### Breaking Changes
@ -501,8 +754,6 @@
- **test2:** name of type String and &str (#394) ([d6c0a688](https://github.com/rust-lang/rustlings/commit/d6c0a688e6a96f93ad60d540d4b326f342fc0d45))
- **variables6:** minor typo (#419) ([524e17df](https://github.com/rust-lang/rustlings/commit/524e17df10db95f7b90a0f75cc8997182a8a4094))
<a name="3.0.0"></a>
## 3.0.0 (2020-04-11)
#### Breaking Changes
@ -525,8 +776,6 @@
- add new exercises for generics (#280) ([76be5e4e](https://github.com/rust-lang/rustlings/commit/76be5e4e991160f5fd9093f03ee2ba260e8f7229))
- **ci:** add buildkite config ([b049fa2c](https://github.com/rust-lang/rustlings/commit/b049fa2c84dba0f0c8906ac44e28fd45fba51a71))
<a name="2.2.1"></a>
### 2.2.1 (2020-02-27)
#### Bug Fixes
@ -537,13 +786,11 @@
- Add clippy lints (#269) ([1e2fd9c9](https://github.com/rust-lang/rustlings/commit/1e2fd9c92f8cd6e389525ca1a999fca4c90b5921))
<a name="2.2.0"></a>
## 2.2.0 (2020-02-25)
#### Bug Fixes
- Update deps to version compatable with aarch64-pc-windows (#263) ([19a93428](https://github.com/rust-lang/rustlings/commit/19a93428b3c73d994292671f829bdc8e5b7b3401))
- Update deps to version compatible with aarch64-pc-windows (#263) ([19a93428](https://github.com/rust-lang/rustlings/commit/19a93428b3c73d994292671f829bdc8e5b7b3401))
- **docs:**
- Added a necessary step to Windows installation process (#242) ([3906efcd](https://github.com/rust-lang/rustlings/commit/3906efcd52a004047b460ed548037093de3f523f))
- Fixed mangled sentence from book; edited for clarity (#266) ([ade52ff](https://github.com/rust-lang/rustlings/commit/ade52ffb739987287ddd5705944c8777705faed9))
@ -566,8 +813,6 @@
- Added traits exercises (#274 but specifically #216, which originally added
this :heart:) ([b559cdd](https://github.com/rust-lang/rustlings/commit/b559cdd73f32c0d0cfc1feda39f82b3e3583df17))
<a name="2.1.0"></a>
## 2.1.0 (2019-11-27)
#### Bug Fixes
@ -585,8 +830,6 @@
- **watch:** show hint while watching ([8143d57b](https://github.com/rust-lang/rustlings/commit/8143d57b4e88c51341dd4a18a14c536042cc009c))
<a name="2.0.0"></a>
## 2.0.0 (2019-11-12)
#### Bug Fixes
@ -607,8 +850,6 @@
- **cli:** check for rustc before doing anything ([36a033b8](https://github.com/rust-lang/rustlings/commit/36a033b87a6549c1e5639c908bf7381c84f4f425))
- **hint:** Add test for hint ([ce9fa6eb](https://github.com/rust-lang/rustlings/commit/ce9fa6ebbfdc3e7585d488d9409797285708316f))
<a name="1.5.1"></a>
### 1.5.1 (2019-11-11)
#### Bug Fixes
@ -620,8 +861,6 @@
- **threads:** Move Threads behind SLT ([fbe91a67](https://github.com/rust-lang/rustlings/commit/fbe91a67a482bfe64cbcdd58d06ba830a0f39da3), closes [#205](https://github.com/rust-lang/rustlings/issues/205))
- **watch:** clear screen before each `verify()` ([3aff590](https://github.com/rust-lang/rustlings/commit/3aff59085586c24196a547c2693adbdcf4432648))
<a name="1.5.0"></a>
## 1.5.0 (2019-11-09)
#### Bug Fixes
@ -646,8 +885,6 @@
- Added exercise for struct update syntax ([1c4c8764](https://github.com/rust-lang/rustlings/commit/1c4c8764ed118740cd4cee73272ddc6cceb9d959))
- **iterators2:** adds iterators2 exercise including config ([9288fccf](https://github.com/rust-lang/rustlings/commit/9288fccf07a2c5043b76d0fd6491e4cf72d76031))
<a name="1.4.1"></a>
### 1.4.1 (2019-08-13)
#### Bug Fixes
@ -656,8 +893,6 @@
- **option1:** Add test for prematurely passing exercise ([a750e4a1](https://github.com/rust-lang/rustlings/commit/a750e4a1a3006227292bb17d57d78ce84da6bfc6))
- **test1:** Swap assertion parameter order ([4086d463](https://github.com/rust-lang/rustlings/commit/4086d463a981e81d97781851d17db2ced290f446))
<a name="1.4.0"></a>
## 1.4.0 (2019-07-13)
#### Bug Fixes
@ -674,8 +909,6 @@
- **changelog:** Use clog for changelogs ([34e31232](https://github.com/rust-lang/rustlings/commit/34e31232dfddde284a341c9609b33cd27d9d5724))
- **iterators2:** adds iterators2 exercise including config ([9288fccf](https://github.com/rust-lang/rustlings/commit/9288fccf07a2c5043b76d0fd6491e4cf72d76031))
<a name="1.3.0"></a>
### 1.3.0 (2019-06-05)
#### Features
@ -691,16 +924,12 @@
- Fix broken link (#164, @HanKruiger)
- Remove highlighting and syntect (#167, @komaeda)
<a name="1.2.2"></a>
### 1.2.2 (2019-05-07)
#### Bug Fixes
- Reverted `--nocapture` flag since it was causing tests to pass unconditionally
<a name="1.2.1"></a>
### 1.2.1 (2019-04-22)
#### Bug Fixes
@ -708,8 +937,6 @@
- Fix the `--nocapture` feature (@komaeda)
- Provide a nicer error message for when you're in the wrong directory
<a name="1.2.0"></a>
### 1.2.0 (2019-04-22)
#### Features
@ -717,8 +944,6 @@
- Add errors to exercises that compile without user changes (@yvan-sraka)
- Use --nocapture when testing, enabling `println!` when running (@komaeda)
<a name="1.1.1"></a>
### 1.1.1 (2019-04-14)
#### Bug fixes
@ -731,8 +956,6 @@
- Fix links by deleting book version (@diodfr, #142)
- Canonicalize paths to fix path matching (@cjpearce, #143)
<a name="1.1.0"></a>
### 1.1.0 (2019-03-20)
- errors2.rs: update link to Rust book (#124)
@ -742,16 +965,12 @@
- Give a warning when Rustlings isn't run from the right directory (#123)
- Verify that rust version is recent enough to install Rustlings (#131)
<a name="1.0.1"></a>
### 1.0.1 (2019-03-06)
- Adds a way to install Rustlings in one command (`curl -L https://git.io/rustlings | bash`)
- Makes `rustlings watch` react to create file events (@shaunbennett, #117)
- Reworks the exercise management to use an external TOML file instead of just listing them in the code
<a name="1.0.0"></a>
### 1.0.0 (2019-03-06)
Initial release.

View File

@ -1,130 +1,61 @@
## Contributing to Rustlings
# Contributing to Rustlings
First off, thanks for taking the time to contribute!! ❤️
First off, thanks for taking the time to contribute! ❤️
### Quick Reference
## Quick Reference
I want to...
I want to
_add an exercise! ➡️ [read this](#addex) and then [open a Pull Request](#prs)_
- _report a bug!_ ➡️ [open an issue](#issues)
- _fix a bug!_ ➡️ [open a pull request](#pull-requests)
- _implement a new feature!_ ➡️ [open an issue to discuss it first, then a pull request](#issues)
- _add an exercise!_ ➡️ [read this](#adding-an-exercise)
- _update an outdated exercise!_ ➡️ [open a pull request](#pull-requests)
_update an outdated exercise! ➡️ [open a Pull Request](#prs)_
_report a bug! ➡️ [open an Issue](#issues)_
_fix a bug! ➡️ [open a Pull Request](#prs)_
_implement a new feature! ➡️ [open an Issue to discuss it first, then a Pull Request](#issues)_
<a name="#src"></a>
### Working on the source code
`rustlings` is basically a glorified `rustc` wrapper. Therefore the source code
isn't really that complicated since the bulk of the work is done by `rustc`.
`src/main.rs` contains a simple `argh` CLI that connects to most of the other source files.
<a name="addex"></a>
### Adding an exercise
The first step is to add the exercise! Name the file `exercises/yourTopic/yourTopicN.rs`, make sure to
put in some helpful links, and link to sections of the book in `exercises/yourTopic/README.md`.
Next make sure it runs with `rustlings`. The exercise metadata is stored in `info.toml`, under the `exercises` array. The order of the `exercises` array determines the order the exercises are run by `rustlings verify` and `rustlings watch`.
Add the metadata for your exercise in the correct order in the `exercises` array. If you are unsure of the correct ordering, add it at the bottom and ask in your pull request. The exercise metadata should contain the following:
```diff
...
+ [[exercises]]
+ name = "yourTopicN"
+ path = "exercises/yourTopic/yourTopicN.rs"
+ mode = "compile"
+ hint = """
+ Some kind of useful hint for your exercise."""
...
```
The `mode` attribute decides whether Rustlings will only compile your exercise, or compile and test it. If you have tests to verify in your exercise, choose `test`, otherwise `compile`. If you're working on a Clippy exercise, use `mode = "clippy"`.
That's all! Feel free to put up a pull request.
<a name="issues"></a>
### Issues
## Issues
You can open an issue [here](https://github.com/rust-lang/rustlings/issues/new).
If you're reporting a bug, please include the output of the following commands:
- `rustc --version`
- `cargo --version`
- `rustlings --version`
- `ls -la`
- Your OS name and version
<a name="prs"></a>
### Pull Requests
## Pull Requests
Opening a pull request is as easy as forking the repository and committing your
changes. There's a couple of things to watch out for:
You are welcome to open a pull request, but unless it is small and trivial, **please open an issue to discuss your idea first** 🙏🏼
#### Write correct commit messages
Opening a pull request is as easy as forking the repository and committing your changes.
If you need any help with it or face any Git related problems, don't hesitate to ask for help 🤗
We follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0-beta.4/)
specification.
This means that you have to format your commit messages in a specific way. Say
you're working on adding a new exercise called `foobar1.rs`. You could write
the following commit message:
It may take time to review your pull request.
Please be patient 😇
```
feat: add foobar1.rs exercise
When updating an exercise, check if its solution needs to be updated.
## Adding An Exercise
- Name the file `exercises/yourTopic/yourTopicN.rs`.
- Make sure to put in some helpful links, and link to sections of The Book in `exercises/yourTopic/README.md`.
- In the exercise, add a `// TODO: …` comment where user changes are required.
- Add a solution at `solutions/yourTopic/yourTopicN.rs` with comments explaining it.
- Add the [metadata for your exercise](#exercise-metadata) in the `rustlings-macros/info.toml` file.
- Make sure your exercise runs with `rustlings run yourTopicN`.
- [Open a pull request](#pull-requests).
### Exercise Metadata
The exercise metadata should contain the following:
```toml
[[exercises]]
name = "yourTopicN"
dir = "yourTopic"
hint = """
A useful (multi-line) hint for your exercise.
Include links to a section in The Book or a documentation page."""
```
If you're just fixing a bug, please use the `fix` type:
```
fix(verify): make sure verify doesn't self-destruct
```
The scope within the brackets is optional, but should be any of these:
- `installation` (for the installation script)
- `cli` (for general CLI changes)
- `verify` (for the verification source file)
- `watch` (for the watch functionality source)
- `run` (for the run functionality source)
- `EXERCISENAME` (if you're changing a specific exercise, or set of exercises,
substitute them here)
When the commit also happens to close an existing issue, link it in the message
body:
```
fix: update foobar
closes #101029908
```
If you're doing simple changes, like updating a book link, use `chore`:
```
chore: update exercise1.rs book link
```
If you're updating documentation, use `docs`:
```
docs: add more information to Readme
```
If, and only if, you're absolutely sure you want to make a breaking change
(please discuss this beforehand!), add an exclamation mark to the type and
explain the breaking change in the message body:
```
fix!: completely change verification
BREAKING CHANGE: This has to be done because lorem ipsum dolor
```
#### Pull Request Workflow
Once you open a Pull Request, it may be reviewed or labeled (or both) until
the maintainers accept your change. Please be patient, it may take some time
for this to happen!
If your exercise doesn't contain any test, add `test = false` to the exercise metadata.
But adding tests is recommended.

850
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,29 +1,88 @@
[workspace]
resolver = "2"
exclude = [
"tests/test_exercises",
"dev",
]
[workspace.package]
version = "6.4.0"
authors = [
"Mo Bitar <mo8it@proton.me>", # https://github.com/mo8it
"Liv <mokou@fastmail.com>", # https://github.com/shadows-withal
# Alumni
"Carol (Nichols || Goulding) <carol.nichols@gmail.com>", # https://github.com/carols10cents
]
repository = "https://github.com/rust-lang/rustlings"
license = "MIT"
edition = "2024" # On Update: Update the edition of `rustfmt` in `dev check` and `CARGO_TOML` in `dev new`.
rust-version = "1.87"
[workspace.dependencies]
serde = { version = "1.0", features = ["derive"] }
toml_edit = { version = "0.22", default-features = false, features = ["parse", "serde"] }
[package]
name = "rustlings"
version = "5.4.0"
authors = [
"Liv <mokou@fastmail.com>",
"Carol (Nichols || Goulding) <carol.nichols@gmail.com>",
description = "Small exercises to get you used to reading and writing Rust code!"
version.workspace = true
authors.workspace = true
repository.workspace = true
license.workspace = true
edition.workspace = true
rust-version.workspace = true
keywords = [
"exercise",
"learning",
]
include = [
"/src/",
"/exercises/",
"/solutions/",
# A symlink to be able to include `dev/Cargo.toml` although `dev` is excluded.
"/dev-Cargo.toml",
"/README.md",
"/LICENSE",
]
edition = "2021"
[dependencies]
argh = "0.1"
indicatif = "0.16"
console = "0.15"
notify = "4.0"
toml = "0.5"
regex = "1.5"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0.81"
home = "0.5.3"
glob = "0.3.0"
anyhow = "1.0"
clap = { version = "4.5", features = ["derive"] }
crossterm = { version = "0.29", default-features = false, features = ["windows", "events"] }
notify = "8.0"
rustlings-macros = { path = "rustlings-macros", version = "=6.4.0" }
serde_json = "1.0"
serde.workspace = true
toml_edit.workspace = true
[[bin]]
name = "rustlings"
path = "src/main.rs"
[target.'cfg(not(windows))'.dependencies]
rustix = { version = "1.0", default-features = false, features = ["std", "stdio", "termios"] }
[dev-dependencies]
assert_cmd = "0.11.0"
predicates = "1.0.1"
glob = "0.3.0"
tempfile = "3.19"
[profile.release]
panic = "abort"
[profile.dev]
panic = "abort"
[package.metadata.release]
pre-release-hook = ["./release-hook.sh"]
pre-release-commit-message = "Release 🎉"
[workspace.lints.rust]
unsafe_code = "forbid"
unstable_features = "forbid"
[workspace.lints.clippy]
empty_loop = "forbid"
disallowed-types = "deny"
disallowed-methods = "deny"
infinite_loop = "deny"
mem_forget = "deny"
dbg_macro = "warn"
todo = "warn"
[lints]
workspace = true

178
README.md
View File

@ -1,177 +1,7 @@
# rustlings 🦀❤️
# [Rustlings](https://rustlings.rust-lang.org) 🦀
Greetings and welcome to `rustlings`. This project contains small exercises to get you used to reading and writing Rust code. This includes reading and responding to compiler messages!
Small exercises to get you used to reading and writing [Rust](https://www.rust-lang.org) code - _Recommended in parallel to reading [the official Rust book](https://doc.rust-lang.org/book) 📚_
_...looking for the old, web-based version of Rustlings? Try [here](https://github.com/rust-lang/rustlings/tree/rustlings-1)_
Visit the **website** for a demo, info about setup and more:
Alternatively, for a first-time Rust learner, there are several other resources:
- [The Book](https://doc.rust-lang.org/book/index.html) - The most comprehensive resource for learning Rust, but a bit theoretical sometimes. You will be using this along with Rustlings!
- [Rust By Example](https://doc.rust-lang.org/rust-by-example/index.html) - Learn Rust by solving little exercises! It's almost like `rustlings`, but online
## Getting Started
_Note: If you're on MacOS, make sure you've installed Xcode and its developer tools by typing `xcode-select --install`._
_Note: If you're on Linux, make sure you've installed gcc. Deb: `sudo apt install gcc`. Yum: `sudo yum -y install gcc`._
You will need to have Rust installed. You can get it by visiting https://rustup.rs. This'll also install Cargo, Rust's package/project manager.
## MacOS/Linux
Just run:
```bash
curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh | bash
# Or if you want it to be installed to a different path:
curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh | bash -s mypath/
```
This will install Rustlings and give you access to the `rustlings` command. Run it to get started!
### Nix
Basically: Clone the repository at the latest tag, finally run `nix develop` or `nix-shell`.
```bash
# find out the latest version at https://github.com/rust-lang/rustlings/releases/latest (on edit 5.4.0)
git clone -b 5.4.0 --depth 1 https://github.com/rust-lang/rustlings
cd rustlings
# if nix version > 2.3
nix develop
# if nix version <= 2.3
nix-shell
```
## Windows
In PowerShell (Run as Administrator), set `ExecutionPolicy` to `RemoteSigned`:
```ps1
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```
Then, you can run:
```ps1
Start-BitsTransfer -Source https://raw.githubusercontent.com/rust-lang/rustlings/main/install.ps1 -Destination $env:TMP/install_rustlings.ps1; Unblock-File $env:TMP/install_rustlings.ps1; Invoke-Expression $env:TMP/install_rustlings.ps1
```
To install Rustlings. Same as on MacOS/Linux, you will have access to the `rustlings` command after it. Keep in mind that this works best in PowerShell, and any other terminals may give you errors.
If you get a permission denied message, you might have to exclude the directory where you cloned Rustlings in your antivirus.
## Browser
[Run on Repl.it](https://repl.it/github/rust-lang/rustlings)
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/rust-lang/rustlings)
## Manually
Basically: Clone the repository at the latest tag, run `cargo install --path .`.
```bash
# find out the latest version at https://github.com/rust-lang/rustlings/releases/latest (on edit 5.4.0)
git clone -b 5.4.0 --depth 1 https://github.com/rust-lang/rustlings
cd rustlings
cargo install --force --path .
```
If there are installation errors, ensure that your toolchain is up to date. For the latest, run:
```bash
rustup update
```
Then, same as above, run `rustlings` to get started.
## Doing exercises
The exercises are sorted by topic and can be found in the subdirectory `rustlings/exercises/<topic>`. For every topic there is an additional README file with some resources to get you started on the topic. We really recommend that you have a look at them before you start.
The task is simple. Most exercises contain an error that keeps them from compiling, and it's up to you to fix it! Some exercises are also run as tests, but rustlings handles them all the same. To run the exercises in the recommended order, execute:
```bash
rustlings watch
```
This will try to verify the completion of every exercise in a predetermined order (what we think is best for newcomers). It will also rerun automatically every time you change a file in the `exercises/` directory. If you want to only run it once, you can use:
```bash
rustlings verify
```
This will do the same as watch, but it'll quit after running.
In case you want to go by your own order, or want to only verify a single exercise, you can run:
```bash
rustlings run myExercise1
```
Or simply use the following command to run the next unsolved exercise in the course:
```bash
rustlings run next
```
In case you get stuck, you can run the following command to get a hint for your
exercise:
```bash
rustlings hint myExercise1
```
You can also get the hint for the next unsolved exercise with the following command:
```bash
rustlings hint next
```
To check your progress, you can run the following command:
```bash
rustlings list
```
## Testing yourself
After every couple of sections, there will be a quiz that'll test your knowledge on a bunch of sections at once. These quizzes are found in `exercises/quizN.rs`.
## Enabling `rust-analyzer`
Run the command `rustlings lsp` which will generate a `rust-project.json` at the root of the project, this allows [rust-analyzer](https://rust-analyzer.github.io/) to parse each exercise.
## Continuing On
Once you've completed Rustlings, put your new knowledge to good use! Continue practicing your Rust skills by building your own projects, contributing to Rustlings, or finding other open-source projects to contribute to.
## Uninstalling Rustlings
If you want to remove Rustlings from your system, there are two steps. First, you'll need to remove the exercises folder that the install script created
for you:
```bash
rm -rf rustlings # or your custom folder name, if you chose and or renamed it
```
Second, since Rustlings got installed via `cargo install`, it's only reasonable to assume that you can also remove it using Cargo, and
exactly that is the case. Run `cargo uninstall` to remove the `rustlings` binary:
```bash
cargo uninstall rustlings
```
Now you should be done!
## Contributing
See [CONTRIBUTING.md](./CONTRIBUTING.md).
Development-focused discussion about Rustlings happens in the [**rustlings** stream](https://rust-lang.zulipchat.com/#narrow/stream/334454-rustlings)
on the [Rust Project Zulip](https://rust-lang.zulipchat.com). Feel free to start a new thread there
if you have ideas or suggestions!
## Contributors ✨
Thanks goes to the wonderful people listed in [AUTHORS.md](./AUTHORS.md) 🎉
## ➡️ [rustlings.rust-lang.org](https://rustlings.rust-lang.org) ⬅️

5
build.rs Normal file
View File

@ -0,0 +1,5 @@
fn main() {
// Fix building from source on Windows because it can't handle file links.
#[cfg(windows)]
let _ = std::fs::copy("dev/Cargo.toml", "dev-Cargo.toml");
}

15
clippy.toml Normal file
View File

@ -0,0 +1,15 @@
disallowed-types = [
# Inefficient. Use `.queue(…)` instead.
"crossterm::style::Stylize",
"crossterm::style::styled_content::StyledContent",
]
disallowed-methods = [
# Inefficient. Use `.queue(…)` instead.
"crossterm::style::style",
# Use `thread::Builder::spawn` instead and handle the error.
"std::thread::spawn",
"std::thread::Scope::spawn",
# Return `ExitCode` instead.
"std::process::exit",
]

1
dev-Cargo.toml Symbolic link
View File

@ -0,0 +1 @@
dev/Cargo.toml

223
dev/Cargo.toml Normal file
View File

@ -0,0 +1,223 @@
# Don't edit the `bin` list manually! It is updated by `cargo dev update`. This comment line will be stripped in `rustlings init`.
bin = [
{ name = "intro1", path = "../exercises/00_intro/intro1.rs" },
{ name = "intro1_sol", path = "../solutions/00_intro/intro1.rs" },
{ name = "intro2", path = "../exercises/00_intro/intro2.rs" },
{ name = "intro2_sol", path = "../solutions/00_intro/intro2.rs" },
{ name = "variables1", path = "../exercises/01_variables/variables1.rs" },
{ name = "variables1_sol", path = "../solutions/01_variables/variables1.rs" },
{ name = "variables2", path = "../exercises/01_variables/variables2.rs" },
{ name = "variables2_sol", path = "../solutions/01_variables/variables2.rs" },
{ name = "variables3", path = "../exercises/01_variables/variables3.rs" },
{ name = "variables3_sol", path = "../solutions/01_variables/variables3.rs" },
{ name = "variables4", path = "../exercises/01_variables/variables4.rs" },
{ name = "variables4_sol", path = "../solutions/01_variables/variables4.rs" },
{ name = "variables5", path = "../exercises/01_variables/variables5.rs" },
{ name = "variables5_sol", path = "../solutions/01_variables/variables5.rs" },
{ name = "variables6", path = "../exercises/01_variables/variables6.rs" },
{ name = "variables6_sol", path = "../solutions/01_variables/variables6.rs" },
{ name = "functions1", path = "../exercises/02_functions/functions1.rs" },
{ name = "functions1_sol", path = "../solutions/02_functions/functions1.rs" },
{ name = "functions2", path = "../exercises/02_functions/functions2.rs" },
{ name = "functions2_sol", path = "../solutions/02_functions/functions2.rs" },
{ name = "functions3", path = "../exercises/02_functions/functions3.rs" },
{ name = "functions3_sol", path = "../solutions/02_functions/functions3.rs" },
{ name = "functions4", path = "../exercises/02_functions/functions4.rs" },
{ name = "functions4_sol", path = "../solutions/02_functions/functions4.rs" },
{ name = "functions5", path = "../exercises/02_functions/functions5.rs" },
{ name = "functions5_sol", path = "../solutions/02_functions/functions5.rs" },
{ name = "if1", path = "../exercises/03_if/if1.rs" },
{ name = "if1_sol", path = "../solutions/03_if/if1.rs" },
{ name = "if2", path = "../exercises/03_if/if2.rs" },
{ name = "if2_sol", path = "../solutions/03_if/if2.rs" },
{ name = "if3", path = "../exercises/03_if/if3.rs" },
{ name = "if3_sol", path = "../solutions/03_if/if3.rs" },
{ name = "quiz1", path = "../exercises/quizzes/quiz1.rs" },
{ name = "quiz1_sol", path = "../solutions/quizzes/quiz1.rs" },
{ name = "primitive_types1", path = "../exercises/04_primitive_types/primitive_types1.rs" },
{ name = "primitive_types1_sol", path = "../solutions/04_primitive_types/primitive_types1.rs" },
{ name = "primitive_types2", path = "../exercises/04_primitive_types/primitive_types2.rs" },
{ name = "primitive_types2_sol", path = "../solutions/04_primitive_types/primitive_types2.rs" },
{ name = "primitive_types3", path = "../exercises/04_primitive_types/primitive_types3.rs" },
{ name = "primitive_types3_sol", path = "../solutions/04_primitive_types/primitive_types3.rs" },
{ name = "primitive_types4", path = "../exercises/04_primitive_types/primitive_types4.rs" },
{ name = "primitive_types4_sol", path = "../solutions/04_primitive_types/primitive_types4.rs" },
{ name = "primitive_types5", path = "../exercises/04_primitive_types/primitive_types5.rs" },
{ name = "primitive_types5_sol", path = "../solutions/04_primitive_types/primitive_types5.rs" },
{ name = "primitive_types6", path = "../exercises/04_primitive_types/primitive_types6.rs" },
{ name = "primitive_types6_sol", path = "../solutions/04_primitive_types/primitive_types6.rs" },
{ name = "vecs1", path = "../exercises/05_vecs/vecs1.rs" },
{ name = "vecs1_sol", path = "../solutions/05_vecs/vecs1.rs" },
{ name = "vecs2", path = "../exercises/05_vecs/vecs2.rs" },
{ name = "vecs2_sol", path = "../solutions/05_vecs/vecs2.rs" },
{ name = "move_semantics1", path = "../exercises/06_move_semantics/move_semantics1.rs" },
{ name = "move_semantics1_sol", path = "../solutions/06_move_semantics/move_semantics1.rs" },
{ name = "move_semantics2", path = "../exercises/06_move_semantics/move_semantics2.rs" },
{ name = "move_semantics2_sol", path = "../solutions/06_move_semantics/move_semantics2.rs" },
{ name = "move_semantics3", path = "../exercises/06_move_semantics/move_semantics3.rs" },
{ name = "move_semantics3_sol", path = "../solutions/06_move_semantics/move_semantics3.rs" },
{ name = "move_semantics4", path = "../exercises/06_move_semantics/move_semantics4.rs" },
{ name = "move_semantics4_sol", path = "../solutions/06_move_semantics/move_semantics4.rs" },
{ name = "move_semantics5", path = "../exercises/06_move_semantics/move_semantics5.rs" },
{ name = "move_semantics5_sol", path = "../solutions/06_move_semantics/move_semantics5.rs" },
{ name = "structs1", path = "../exercises/07_structs/structs1.rs" },
{ name = "structs1_sol", path = "../solutions/07_structs/structs1.rs" },
{ name = "structs2", path = "../exercises/07_structs/structs2.rs" },
{ name = "structs2_sol", path = "../solutions/07_structs/structs2.rs" },
{ name = "structs3", path = "../exercises/07_structs/structs3.rs" },
{ name = "structs3_sol", path = "../solutions/07_structs/structs3.rs" },
{ name = "enums1", path = "../exercises/08_enums/enums1.rs" },
{ name = "enums1_sol", path = "../solutions/08_enums/enums1.rs" },
{ name = "enums2", path = "../exercises/08_enums/enums2.rs" },
{ name = "enums2_sol", path = "../solutions/08_enums/enums2.rs" },
{ name = "enums3", path = "../exercises/08_enums/enums3.rs" },
{ name = "enums3_sol", path = "../solutions/08_enums/enums3.rs" },
{ name = "strings1", path = "../exercises/09_strings/strings1.rs" },
{ name = "strings1_sol", path = "../solutions/09_strings/strings1.rs" },
{ name = "strings2", path = "../exercises/09_strings/strings2.rs" },
{ name = "strings2_sol", path = "../solutions/09_strings/strings2.rs" },
{ name = "strings3", path = "../exercises/09_strings/strings3.rs" },
{ name = "strings3_sol", path = "../solutions/09_strings/strings3.rs" },
{ name = "strings4", path = "../exercises/09_strings/strings4.rs" },
{ name = "strings4_sol", path = "../solutions/09_strings/strings4.rs" },
{ name = "modules1", path = "../exercises/10_modules/modules1.rs" },
{ name = "modules1_sol", path = "../solutions/10_modules/modules1.rs" },
{ name = "modules2", path = "../exercises/10_modules/modules2.rs" },
{ name = "modules2_sol", path = "../solutions/10_modules/modules2.rs" },
{ name = "modules3", path = "../exercises/10_modules/modules3.rs" },
{ name = "modules3_sol", path = "../solutions/10_modules/modules3.rs" },
{ name = "hashmaps1", path = "../exercises/11_hashmaps/hashmaps1.rs" },
{ name = "hashmaps1_sol", path = "../solutions/11_hashmaps/hashmaps1.rs" },
{ name = "hashmaps2", path = "../exercises/11_hashmaps/hashmaps2.rs" },
{ name = "hashmaps2_sol", path = "../solutions/11_hashmaps/hashmaps2.rs" },
{ name = "hashmaps3", path = "../exercises/11_hashmaps/hashmaps3.rs" },
{ name = "hashmaps3_sol", path = "../solutions/11_hashmaps/hashmaps3.rs" },
{ name = "quiz2", path = "../exercises/quizzes/quiz2.rs" },
{ name = "quiz2_sol", path = "../solutions/quizzes/quiz2.rs" },
{ name = "options1", path = "../exercises/12_options/options1.rs" },
{ name = "options1_sol", path = "../solutions/12_options/options1.rs" },
{ name = "options2", path = "../exercises/12_options/options2.rs" },
{ name = "options2_sol", path = "../solutions/12_options/options2.rs" },
{ name = "options3", path = "../exercises/12_options/options3.rs" },
{ name = "options3_sol", path = "../solutions/12_options/options3.rs" },
{ name = "errors1", path = "../exercises/13_error_handling/errors1.rs" },
{ name = "errors1_sol", path = "../solutions/13_error_handling/errors1.rs" },
{ name = "errors2", path = "../exercises/13_error_handling/errors2.rs" },
{ name = "errors2_sol", path = "../solutions/13_error_handling/errors2.rs" },
{ name = "errors3", path = "../exercises/13_error_handling/errors3.rs" },
{ name = "errors3_sol", path = "../solutions/13_error_handling/errors3.rs" },
{ name = "errors4", path = "../exercises/13_error_handling/errors4.rs" },
{ name = "errors4_sol", path = "../solutions/13_error_handling/errors4.rs" },
{ name = "errors5", path = "../exercises/13_error_handling/errors5.rs" },
{ name = "errors5_sol", path = "../solutions/13_error_handling/errors5.rs" },
{ name = "errors6", path = "../exercises/13_error_handling/errors6.rs" },
{ name = "errors6_sol", path = "../solutions/13_error_handling/errors6.rs" },
{ name = "generics1", path = "../exercises/14_generics/generics1.rs" },
{ name = "generics1_sol", path = "../solutions/14_generics/generics1.rs" },
{ name = "generics2", path = "../exercises/14_generics/generics2.rs" },
{ name = "generics2_sol", path = "../solutions/14_generics/generics2.rs" },
{ name = "traits1", path = "../exercises/15_traits/traits1.rs" },
{ name = "traits1_sol", path = "../solutions/15_traits/traits1.rs" },
{ name = "traits2", path = "../exercises/15_traits/traits2.rs" },
{ name = "traits2_sol", path = "../solutions/15_traits/traits2.rs" },
{ name = "traits3", path = "../exercises/15_traits/traits3.rs" },
{ name = "traits3_sol", path = "../solutions/15_traits/traits3.rs" },
{ name = "traits4", path = "../exercises/15_traits/traits4.rs" },
{ name = "traits4_sol", path = "../solutions/15_traits/traits4.rs" },
{ name = "traits5", path = "../exercises/15_traits/traits5.rs" },
{ name = "traits5_sol", path = "../solutions/15_traits/traits5.rs" },
{ name = "quiz3", path = "../exercises/quizzes/quiz3.rs" },
{ name = "quiz3_sol", path = "../solutions/quizzes/quiz3.rs" },
{ name = "lifetimes1", path = "../exercises/16_lifetimes/lifetimes1.rs" },
{ name = "lifetimes1_sol", path = "../solutions/16_lifetimes/lifetimes1.rs" },
{ name = "lifetimes2", path = "../exercises/16_lifetimes/lifetimes2.rs" },
{ name = "lifetimes2_sol", path = "../solutions/16_lifetimes/lifetimes2.rs" },
{ name = "lifetimes3", path = "../exercises/16_lifetimes/lifetimes3.rs" },
{ name = "lifetimes3_sol", path = "../solutions/16_lifetimes/lifetimes3.rs" },
{ name = "tests1", path = "../exercises/17_tests/tests1.rs" },
{ name = "tests1_sol", path = "../solutions/17_tests/tests1.rs" },
{ name = "tests2", path = "../exercises/17_tests/tests2.rs" },
{ name = "tests2_sol", path = "../solutions/17_tests/tests2.rs" },
{ name = "tests3", path = "../exercises/17_tests/tests3.rs" },
{ name = "tests3_sol", path = "../solutions/17_tests/tests3.rs" },
{ name = "iterators1", path = "../exercises/18_iterators/iterators1.rs" },
{ name = "iterators1_sol", path = "../solutions/18_iterators/iterators1.rs" },
{ name = "iterators2", path = "../exercises/18_iterators/iterators2.rs" },
{ name = "iterators2_sol", path = "../solutions/18_iterators/iterators2.rs" },
{ name = "iterators3", path = "../exercises/18_iterators/iterators3.rs" },
{ name = "iterators3_sol", path = "../solutions/18_iterators/iterators3.rs" },
{ name = "iterators4", path = "../exercises/18_iterators/iterators4.rs" },
{ name = "iterators4_sol", path = "../solutions/18_iterators/iterators4.rs" },
{ name = "iterators5", path = "../exercises/18_iterators/iterators5.rs" },
{ name = "iterators5_sol", path = "../solutions/18_iterators/iterators5.rs" },
{ name = "box1", path = "../exercises/19_smart_pointers/box1.rs" },
{ name = "box1_sol", path = "../solutions/19_smart_pointers/box1.rs" },
{ name = "rc1", path = "../exercises/19_smart_pointers/rc1.rs" },
{ name = "rc1_sol", path = "../solutions/19_smart_pointers/rc1.rs" },
{ name = "arc1", path = "../exercises/19_smart_pointers/arc1.rs" },
{ name = "arc1_sol", path = "../solutions/19_smart_pointers/arc1.rs" },
{ name = "cow1", path = "../exercises/19_smart_pointers/cow1.rs" },
{ name = "cow1_sol", path = "../solutions/19_smart_pointers/cow1.rs" },
{ name = "threads1", path = "../exercises/20_threads/threads1.rs" },
{ name = "threads1_sol", path = "../solutions/20_threads/threads1.rs" },
{ name = "threads2", path = "../exercises/20_threads/threads2.rs" },
{ name = "threads2_sol", path = "../solutions/20_threads/threads2.rs" },
{ name = "threads3", path = "../exercises/20_threads/threads3.rs" },
{ name = "threads3_sol", path = "../solutions/20_threads/threads3.rs" },
{ name = "macros1", path = "../exercises/21_macros/macros1.rs" },
{ name = "macros1_sol", path = "../solutions/21_macros/macros1.rs" },
{ name = "macros2", path = "../exercises/21_macros/macros2.rs" },
{ name = "macros2_sol", path = "../solutions/21_macros/macros2.rs" },
{ name = "macros3", path = "../exercises/21_macros/macros3.rs" },
{ name = "macros3_sol", path = "../solutions/21_macros/macros3.rs" },
{ name = "macros4", path = "../exercises/21_macros/macros4.rs" },
{ name = "macros4_sol", path = "../solutions/21_macros/macros4.rs" },
{ name = "clippy1", path = "../exercises/22_clippy/clippy1.rs" },
{ name = "clippy1_sol", path = "../solutions/22_clippy/clippy1.rs" },
{ name = "clippy2", path = "../exercises/22_clippy/clippy2.rs" },
{ name = "clippy2_sol", path = "../solutions/22_clippy/clippy2.rs" },
{ name = "clippy3", path = "../exercises/22_clippy/clippy3.rs" },
{ name = "clippy3_sol", path = "../solutions/22_clippy/clippy3.rs" },
{ name = "using_as", path = "../exercises/23_conversions/using_as.rs" },
{ name = "using_as_sol", path = "../solutions/23_conversions/using_as.rs" },
{ name = "from_into", path = "../exercises/23_conversions/from_into.rs" },
{ name = "from_into_sol", path = "../solutions/23_conversions/from_into.rs" },
{ name = "from_str", path = "../exercises/23_conversions/from_str.rs" },
{ name = "from_str_sol", path = "../solutions/23_conversions/from_str.rs" },
{ name = "try_from_into", path = "../exercises/23_conversions/try_from_into.rs" },
{ name = "try_from_into_sol", path = "../solutions/23_conversions/try_from_into.rs" },
{ name = "as_ref_mut", path = "../exercises/23_conversions/as_ref_mut.rs" },
{ name = "as_ref_mut_sol", path = "../solutions/23_conversions/as_ref_mut.rs" },
]
[package]
name = "exercises"
edition = "2024"
# Don't publish the exercises on crates.io!
publish = false
[profile.release]
panic = "abort"
[profile.dev]
panic = "abort"
[lints.rust]
# You shouldn't write unsafe code in Rustlings!
unsafe_code = "forbid"
# You don't need unstable features in Rustlings and shouldn't rely on them while learning Rust.
unstable_features = "forbid"
# Dead code warnings can't be avoided in some exercises and might distract while learning.
dead_code = "allow"
[lints.clippy]
# You forgot a `todo!()`!
todo = "forbid"
# This can only happen by mistake in Rustlings.
empty_loop = "forbid"
# No infinite loops are needed in Rustlings.
infinite_loop = "deny"
# You shouldn't leak memory while still learning Rust!
mem_forget = "deny"
# Currently, there are no disallowed methods. This line avoids problems when developing Rustlings.
disallowed_methods = "allow"

1
dev/rustlings-repo.txt Normal file
View File

@ -0,0 +1 @@
This file is used to check if the user tries to run Rustlings in the repository (the method before version 6)

View File

@ -0,0 +1,24 @@
// TODO: We sometimes encourage you to keep trying things on a given exercise
// even after you already figured it out. If you got everything working and feel
// ready for the next exercise, enter `n` in the terminal.
//
// The exercise file will be reloaded when you change one of the lines below!
// Try adding a new `println!` and check the updated output in the terminal.
fn main() {
println!(r#" Welcome to... "#);
println!(r#" _ _ _ "#);
println!(r#" _ __ _ _ ___| |_| (_)_ __ __ _ ___ "#);
println!(r#" | '__| | | / __| __| | | '_ \ / _` / __| "#);
println!(r#" | | | |_| \__ \ |_| | | | | | (_| \__ \ "#);
println!(r#" |_| \__,_|___/\__|_|_|_| |_|\__, |___/ "#);
println!(r#" |___/ "#);
println!();
println!("This exercise compiles successfully. The remaining exercises contain a compiler");
println!("or logic error. The central concept behind Rustlings is to fix these errors and");
println!("solve the exercises. Good luck!");
println!();
println!("The file of this exercise is `exercises/00_intro/intro1.rs`. Have a look!");
println!("The current exercise path will be always shown under the progress bar.");
println!("You can click on the path to open the exercise file in your editor.");
}

View File

@ -0,0 +1,4 @@
fn main() {
// TODO: Fix the code to print "Hello world!".
printline!("Hello world!");
}

View File

@ -1,8 +1,8 @@
# Variables
In Rust, variables are immutable by default.
When a variable is immutable, once a value is bound to a name, you cant change that value.
You can make them mutable by adding mut in front of the variable name.
When a variable is immutable, once a value is bound to a name, you can't change that value.
You can make them mutable by adding `mut` in front of the variable name.
## Further information

View File

@ -0,0 +1,6 @@
fn main() {
// TODO: Add the missing keyword.
x = 5;
println!("x has the value {x}");
}

View File

@ -1,10 +1,7 @@
// variables2.rs
// Execute `rustlings hint variables2` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
fn main() {
// TODO: Change the line below to fix the compiler error.
let x;
if x == 10 {
println!("x is ten!");
} else {

View File

@ -0,0 +1,6 @@
fn main() {
// TODO: Change the line below to fix the compiler error.
let x: i32;
println!("Number {x}");
}

View File

@ -0,0 +1,8 @@
// TODO: Fix the compiler error.
fn main() {
let x = 3;
println!("Number {x}");
x = 5; // Don't change this line
println!("Number {x}");
}

View File

@ -0,0 +1,8 @@
fn main() {
let number = "T-H-R-E-E"; // Don't change this line
println!("Spell a number: {number}");
// TODO: Fix the compiler error by changing the line below without renaming the variable.
number = 3;
println!("Number plus two is: {}", number + 2);
}

View File

@ -0,0 +1,6 @@
// TODO: Change the line below to fix the compiler error.
const NUMBER = 3;
fn main() {
println!("Number: {NUMBER}");
}

View File

@ -0,0 +1,5 @@
// TODO: Add some function with the name `call_me` without arguments or a return value.
fn main() {
call_me(); // Don't change this line
}

View File

@ -1,14 +1,10 @@
// functions2.rs
// Execute `rustlings hint functions2` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
fn main() {
call_me(3);
}
// TODO: Add the missing type of the argument `num` after the colon `:`.
fn call_me(num:) {
for i in 0..num {
println!("Ring! Call number {}", i + 1);
}
}
fn main() {
call_me(3);
}

View File

@ -0,0 +1,10 @@
fn call_me(num: u8) {
for i in 0..num {
println!("Ring! Call number {}", i + 1);
}
}
fn main() {
// TODO: Fix the function call.
call_me();
}

View File

@ -0,0 +1,22 @@
// This store is having a sale where if the price is an even number, you get 10
// Rustbucks off, but if it's an odd number, it's 3 Rustbucks off.
// Don't worry about the function bodies themselves, we are only interested in
// the signatures for now.
fn is_even(num: i64) -> bool {
num % 2 == 0
}
// TODO: Fix the function signature.
fn sale_price(price: i64) -> {
if is_even(price) {
price - 10
} else {
price - 3
}
}
fn main() {
let original_price = 51;
println!("Your sale price is {}", sale_price(original_price));
}

View File

@ -0,0 +1,9 @@
// TODO: Fix the function body without changing the signature.
fn square(num: i32) -> i32 {
num * num;
}
fn main() {
let answer = square(3);
println!("The square of 3 is {answer}");
}

View File

@ -1,15 +1,15 @@
// if1.rs
// Execute `rustlings hint if1` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
pub fn bigger(a: i32, b: i32) -> i32 {
// Complete this function to return the bigger number!
fn bigger(a: i32, b: i32) -> i32 {
// TODO: Complete this function to return the bigger number!
// If both numbers are equal, any of them can be returned.
// Do not use:
// - another function call
// - additional variables
}
fn main() {
// You can optionally experiment here.
}
// Don't mind this for now :)
#[cfg(test)]
mod tests {
@ -24,4 +24,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));
}
}

37
exercises/03_if/if2.rs Normal file
View File

@ -0,0 +1,37 @@
// TODO: Fix the compiler error on this function.
fn picky_eater(food: &str) -> &str {
if food == "strawberry" {
"Yummy!"
} else {
1
}
}
fn main() {
// You can optionally experiment here.
}
// TODO: Read the tests to understand the desired behavior.
// Make all tests pass without changing them.
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn yummy_food() {
// This means that calling `picky_eater` with the argument "strawberry" should return "Yummy!".
assert_eq!(picky_eater("strawberry"), "Yummy!");
}
#[test]
fn neutral_food() {
assert_eq!(picky_eater("potato"), "I guess I can eat that.");
}
#[test]
fn default_disliked_food() {
assert_eq!(picky_eater("broccoli"), "No thanks!");
assert_eq!(picky_eater("gummy bears"), "No thanks!");
assert_eq!(picky_eater("literally anything"), "No thanks!");
}
}

53
exercises/03_if/if3.rs Normal file
View File

@ -0,0 +1,53 @@
fn animal_habitat(animal: &str) -> &str {
// TODO: Fix the compiler error in the statement below.
let identifier = if animal == "crab" {
1
} else if animal == "gopher" {
2.0
} else if animal == "snake" {
3
} else {
"Unknown"
};
// Don't change the expression below!
if identifier == 1 {
"Beach"
} else if identifier == 2 {
"Burrow"
} else if identifier == 3 {
"Desert"
} else {
"Unknown"
}
}
fn main() {
// You can optionally experiment here.
}
// Don't change the tests!
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn gopher_lives_in_burrow() {
assert_eq!(animal_habitat("gopher"), "Burrow")
}
#[test]
fn snake_lives_in_desert() {
assert_eq!(animal_habitat("snake"), "Desert")
}
#[test]
fn crab_lives_on_beach() {
assert_eq!(animal_habitat("crab"), "Beach")
}
#[test]
fn unknown_animal() {
assert_eq!(animal_habitat("dinosaur"), "Unknown")
}
}

View File

@ -5,5 +5,5 @@ compiler. In this section, we'll go through the most important ones.
## Further information
- [Data Types](https://doc.rust-lang.org/stable/book/ch03-02-data-types.html)
- [The Slice Type](https://doc.rust-lang.org/stable/book/ch04-03-slices.html)
- [Data Types](https://doc.rust-lang.org/book/ch03-02-data-types.html)
- [The Slice Type](https://doc.rust-lang.org/book/ch04-03-slices.html)

View File

@ -0,0 +1,15 @@
// Booleans (`bool`)
fn main() {
let is_morning = true;
if is_morning {
println!("Good morning!");
}
// TODO: Define a boolean variable with the name `is_evening` before the `if` statement below.
// The value of the variable should be the negation (opposite) of `is_morning`.
// let …
if is_evening {
println!("Good evening!");
}
}

View File

@ -1,12 +1,6 @@
// primitive_types2.rs
// Fill in the rest of the line that has code missing!
// No hints, there's no tricks, just get used to typing these :)
// I AM NOT DONE
// Characters (`char`)
fn main() {
// Characters (`char`)
// Note the _single_ quotes, these are different from the double quotes
// you've been seeing around.
let my_first_initial = 'C';
@ -18,9 +12,12 @@ fn main() {
println!("Neither alphabetic nor numeric!");
}
let // Finish this line like the example! What's your favorite character?
// Try a letter, try a number, try a special character, try a character
// from a different language than your own, try an emoji!
// TODO: Analogous to the example before, declare a variable called `your_character`
// below with your favorite character.
// Try a letter, try a digit (in single quotes), try a special character, try a character
// from a different language than your own, try an emoji 😉
// let your_character = '';
if your_character.is_alphabetic() {
println!("Alphabetical!");
} else if your_character.is_numeric() {

View File

@ -0,0 +1,11 @@
fn main() {
// TODO: Create an array called `a` with at least 100 elements in it.
// let a = ???
if a.len() >= 100 {
println!("Wow, that's a big array!");
} else {
println!("Meh, I eat arrays like that for breakfast.");
panic!("Array not big enough, more elements needed");
}
}

View File

@ -0,0 +1,16 @@
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
#[test]
fn slice_out_of_array() {
let a = [1, 2, 3, 4, 5];
// TODO: Get a slice called `nice_slice` out of the array `a` so that the test passes.
// let nice_slice = ???
assert_eq!([2, 3, 4], nice_slice);
}
}

View File

@ -0,0 +1,8 @@
fn main() {
let cat = ("Furry McFurson", 3.5);
// TODO: Destructure the `cat` tuple in one statement so that the println works.
// let /* your pattern here */ = cat;
println!("{name} is {age} years old");
}

View File

@ -0,0 +1,17 @@
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
#[test]
fn indexing_tuple() {
let numbers = (1, 2, 3);
// TODO: Use a tuple index to access the second element of `numbers`
// and assign it to a variable called `second`.
// let second = ???;
assert_eq!(second, 2, "This is not the 2nd number in the tuple!");
}
}

View File

@ -12,4 +12,6 @@ the other useful data structure, hash maps, later.
## Further information
- [Storing Lists of Values with Vectors](https://doc.rust-lang.org/stable/book/ch08-01-vectors.html)
- [Storing Lists of Values with Vectors](https://doc.rust-lang.org/book/ch08-01-vectors.html)
- [`iter_mut`](https://doc.rust-lang.org/std/primitive.slice.html#method.iter_mut)
- [`map`](https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.map)

View File

@ -0,0 +1,24 @@
fn array_and_vec() -> ([i32; 4], Vec<i32>) {
let a = [10, 20, 30, 40]; // Array
// TODO: Create a vector called `v` which contains the exact same elements as in the array `a`.
// Use the vector macro.
// let v = ???;
(a, v)
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_array_and_vec_similarity() {
let (a, v) = array_and_vec();
assert_eq!(a, *v);
}
}

View File

@ -0,0 +1,60 @@
fn vec_loop(input: &[i32]) -> Vec<i32> {
let mut output = Vec::new();
for element in input {
// TODO: Multiply each element in the `input` slice by 2 and push it to
// the `output` vector.
}
output
}
fn vec_map_example(input: &[i32]) -> Vec<i32> {
// An example of collecting a vector after mapping.
// We map each element of the `input` slice to its value plus 1.
// If the input is `[1, 2, 3]`, the output is `[2, 3, 4]`.
input.iter().map(|element| element + 1).collect()
}
fn vec_map(input: &[i32]) -> Vec<i32> {
// TODO: Here, we also want to multiply each element in the `input` slice
// by 2, but with iterator mapping instead of manually pushing into an empty
// vector.
// See the example in the function `vec_map_example` above.
input
.iter()
.map(|element| {
// ???
})
.collect()
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_vec_loop() {
let input = [2, 4, 6, 8, 10];
let ans = vec_loop(&input);
assert_eq!(ans, [4, 8, 12, 16, 20]);
}
#[test]
fn test_vec_map_example() {
let input = [1, 2, 3];
let ans = vec_map_example(&input);
assert_eq!(ans, [2, 3, 4]);
}
#[test]
fn test_vec_map() {
let input = [2, 4, 6, 8, 10];
let ans = vec_map(&input);
assert_eq!(ans, [4, 8, 12, 16, 20]);
}
}

View File

@ -0,0 +1,24 @@
// TODO: Fix the compiler error in this function.
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
let vec = vec;
vec.push(88);
vec
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn move_semantics1() {
let vec0 = vec![22, 44, 66];
let vec1 = fill_vec(vec0);
assert_eq!(vec1, vec![22, 44, 66, 88]);
}
}

View File

@ -0,0 +1,28 @@
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
let mut vec = vec;
vec.push(88);
vec
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
// TODO: Make both vectors `vec0` and `vec1` accessible at the same time to
// fix the compiler error in the test.
#[test]
fn move_semantics2() {
let vec0 = vec![22, 44, 66];
let vec1 = fill_vec(vec0);
assert_eq!(vec0, [22, 44, 66]);
assert_eq!(vec1, [22, 44, 66, 88]);
}
}

View File

@ -0,0 +1,22 @@
// TODO: Fix the compiler error in the function without adding any new line.
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
vec.push(88);
vec
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn move_semantics3() {
let vec0 = vec![22, 44, 66];
let vec1 = fill_vec(vec0);
assert_eq!(vec1, [22, 44, 66, 88]);
}
}

View File

@ -0,0 +1,18 @@
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
// TODO: Fix the compiler errors only by reordering the lines in the test.
// Don't add, change or remove any line.
#[test]
fn move_semantics4() {
let mut x = Vec::new();
let y = &mut x;
let z = &mut x;
y.push(42);
z.push(13);
assert_eq!(x, [42, 13]);
}
}

View File

@ -0,0 +1,24 @@
#![allow(clippy::ptr_arg)]
// TODO: Fix the compiler errors without changing anything except adding or
// removing references (the character `&`).
// Shouldn't take ownership
fn get_char(data: String) -> char {
data.chars().last().unwrap()
}
// Should take ownership
fn string_uppercase(mut data: &String) {
data = data.to_uppercase();
println!("{data}");
}
fn main() {
let data = "Rust is great!".to_string();
get_char(data);
string_uppercase(&data);
}

View File

@ -0,0 +1,47 @@
struct ColorRegularStruct {
// TODO: Add the fields that the test `regular_structs` expects.
// What types should the fields have? What are the minimum and maximum values for RGB colors?
}
struct ColorTupleStruct(/* TODO: Add the fields that the test `tuple_structs` expects */);
#[derive(Debug)]
struct UnitStruct;
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn regular_structs() {
// TODO: Instantiate a regular struct.
// let green =
assert_eq!(green.red, 0);
assert_eq!(green.green, 255);
assert_eq!(green.blue, 0);
}
#[test]
fn tuple_structs() {
// TODO: Instantiate a tuple struct.
// let green =
assert_eq!(green.0, 0);
assert_eq!(green.1, 255);
assert_eq!(green.2, 0);
}
#[test]
fn unit_structs() {
// TODO: Instantiate a unit struct.
// let unit_struct =
let message = format!("{unit_struct:?}s are fun!");
assert_eq!(message, "UnitStructs are fun!");
}
}

View File

@ -1,9 +1,3 @@
// structs2.rs
// Address all the TODOs to make the tests pass!
// Execute `rustlings hint structs2` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
#[derive(Debug)]
struct Order {
name: String,
@ -27,6 +21,10 @@ fn create_order_template() -> Order {
}
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
@ -34,8 +32,10 @@ mod tests {
#[test]
fn your_order() {
let order_template = create_order_template();
// TODO: Create your own order using the update syntax and template above!
// let your_order =
assert_eq!(your_order.name, "Hacker in Rust");
assert_eq!(your_order.year, order_template.year);
assert_eq!(your_order.made_by_phone, order_template.made_by_phone);

View File

@ -0,0 +1,87 @@
// Structs contain data, but can also have logic. In this exercise, we have
// defined the `Package` struct, and we want to test some logic attached to it.
#[derive(Debug)]
struct Package {
sender_country: String,
recipient_country: String,
weight_in_grams: u32,
}
impl Package {
fn new(sender_country: String, recipient_country: String, weight_in_grams: u32) -> Self {
if weight_in_grams < 10 {
// This isn't how you should handle errors in Rust, but we will
// learn about error handling later.
panic!("Can't ship a package with weight below 10 grams");
}
Self {
sender_country,
recipient_country,
weight_in_grams,
}
}
// TODO: Add the correct return type to the function signature.
fn is_international(&self) {
// TODO: Read the tests that use this method to find out when a package
// is considered international.
}
// TODO: Add the correct return type to the function signature.
fn get_fees(&self, cents_per_gram: u32) {
// TODO: Calculate the package's fees.
}
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[should_panic]
fn fail_creating_weightless_package() {
let sender_country = String::from("Spain");
let recipient_country = String::from("Austria");
Package::new(sender_country, recipient_country, 5);
}
#[test]
fn create_international_package() {
let sender_country = String::from("Spain");
let recipient_country = String::from("Russia");
let package = Package::new(sender_country, recipient_country, 1200);
assert!(package.is_international());
}
#[test]
fn create_local_package() {
let sender_country = String::from("Canada");
let recipient_country = sender_country.clone();
let package = Package::new(sender_country, recipient_country, 1200);
assert!(!package.is_international());
}
#[test]
fn calculate_transport_fees() {
let sender_country = String::from("Spain");
let recipient_country = String::from("Spain");
let cents_per_gram = 3;
let package = Package::new(sender_country, recipient_country, 1500);
assert_eq!(package.get_fees(cents_per_gram), 4500);
assert_eq!(package.get_fees(cents_per_gram * 2), 9000);
}
}

View File

@ -1,10 +1,10 @@
# Enums
Rust allows you to define types called "enums" which enumerate possible values.
Enums are a feature in many languages, but their capabilities differ in each language. Rusts enums are most similar to algebraic data types in functional languages, such as F#, OCaml, and Haskell.
Enums are a feature in many languages, but their capabilities differ in each language. Rust's enums are most similar to algebraic data types in functional languages, such as F#, OCaml, and Haskell.
Useful in combination with enums is Rust's "pattern matching" facility, which makes it easy to run different code for different values of an enumeration.
## Further information
- [Enums](https://doc.rust-lang.org/book/ch06-00-enums.html)
- [Pattern syntax](https://doc.rust-lang.org/book/ch18-03-pattern-syntax.html)
- [Pattern syntax](https://doc.rust-lang.org/book/ch19-03-pattern-syntax.html)

View File

@ -1,16 +1,12 @@
// enums1.rs
// No hints this time! ;)
// I AM NOT DONE
#[derive(Debug)]
enum Message {
// TODO: define a few types of messages as used below
// TODO: Define a few types of messages as used below.
}
fn main() {
println!("{:?}", Message::Quit);
println!("{:?}", Message::Echo);
println!("{:?}", Message::Resize);
println!("{:?}", Message::Move);
println!("{:?}", Message::Echo);
println!("{:?}", Message::ChangeColor);
println!("{:?}", Message::Quit);
}

View File

@ -1,22 +1,27 @@
// enums2.rs
// Execute `rustlings hint enums2` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
#[derive(Debug)]
struct Point {
x: u64,
y: u64,
}
#[derive(Debug)]
enum Message {
// TODO: define the different variants used below
// TODO: Define the different variants used below.
}
impl Message {
fn call(&self) {
println!("{:?}", self);
println!("{self:?}");
}
}
fn main() {
let messages = [
Message::Move { x: 10, y: 30 },
Message::Resize {
width: 10,
height: 30,
},
Message::Move(Point { x: 10, y: 15 }),
Message::Echo(String::from("hello world")),
Message::ChangeColor(200, 255, 255),
Message::Quit,

View File

@ -0,0 +1,88 @@
struct Point {
x: u64,
y: u64,
}
enum Message {
Resize { width: u64, height: u64 },
Move(Point),
Echo(String),
ChangeColor(u8, u8, u8),
Quit,
}
struct State {
width: u64,
height: u64,
position: Point,
message: String,
// RGB color composed of red, green and blue.
color: (u8, u8, u8),
quit: bool,
}
impl State {
fn resize(&mut self, width: u64, height: u64) {
self.width = width;
self.height = height;
}
fn move_position(&mut self, point: Point) {
self.position = point;
}
fn echo(&mut self, s: String) {
self.message = s;
}
fn change_color(&mut self, red: u8, green: u8, blue: u8) {
self.color = (red, green, blue);
}
fn quit(&mut self) {
self.quit = true;
}
fn process(&mut self, message: Message) {
// TODO: Create a match expression to process the different message
// variants using the methods defined above.
}
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_match_message_call() {
let mut state = State {
width: 0,
height: 0,
position: Point { x: 0, y: 0 },
message: String::from("hello world"),
color: (0, 0, 0),
quit: false,
};
state.process(Message::Resize {
width: 10,
height: 30,
});
state.process(Message::Move(Point { x: 10, y: 15 }));
state.process(Message::Echo(String::from("Hello world!")));
state.process(Message::ChangeColor(255, 0, 255));
state.process(Message::Quit);
assert_eq!(state.width, 10);
assert_eq!(state.height, 30);
assert_eq!(state.position.x, 10);
assert_eq!(state.position.y, 15);
assert_eq!(state.message, "Hello world!");
assert_eq!(state.color, (255, 0, 255));
assert!(state.quit);
}
}

View File

@ -0,0 +1,9 @@
// TODO: Fix the compiler error without changing the function signature.
fn current_favorite_color() -> String {
"blue"
}
fn main() {
let answer = current_favorite_color();
println!("My current favorite color is {answer}");
}

View File

@ -1,18 +1,14 @@
// strings2.rs
// Make me compile without changing the function signature!
// Execute `rustlings hint strings2` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
// TODO: Fix the compiler error in the `main` function without changing this function.
fn is_a_color_word(attempt: &str) -> bool {
attempt == "green" || attempt == "blue" || attempt == "red"
}
fn main() {
let word = String::from("green"); // Try not changing this line :)
let word = String::from("green"); // Don't change this line.
if is_a_color_word(word) {
println!("That is a color word I know!");
} else {
println!("That is not a color word I know.");
}
}
fn is_a_color_word(attempt: &str) -> bool {
attempt == "green" || attempt == "blue" || attempt == "red"
}

View File

@ -0,0 +1,46 @@
fn trim_me(input: &str) -> &str {
// TODO: Remove whitespace from both ends of a string.
}
fn compose_me(input: &str) -> String {
// TODO: Add " world!" to the string! There are multiple ways to do this.
}
fn replace_me(input: &str) -> String {
// TODO: Replace "cars" in the string with "balloons".
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn trim_a_string() {
assert_eq!(trim_me("Hello! "), "Hello!");
assert_eq!(trim_me(" What's up!"), "What's up!");
assert_eq!(trim_me(" Hola! "), "Hola!");
assert_eq!(trim_me("Hi!"), "Hi!");
}
#[test]
fn compose_a_string() {
assert_eq!(compose_me("Hello"), "Hello world!");
assert_eq!(compose_me("Goodbye"), "Goodbye world!");
}
#[test]
fn replace_a_string() {
assert_eq!(
replace_me("I think cars are cool"),
"I think balloons are cool",
);
assert_eq!(
replace_me("I love to look at cars"),
"I love to look at balloons",
);
}
}

View File

@ -0,0 +1,37 @@
// Calls of this function should be replaced with calls of `string_slice` or `string`.
fn placeholder() {}
fn string_slice(arg: &str) {
println!("{arg}");
}
fn string(arg: String) {
println!("{arg}");
}
// TODO: Here are a bunch of values - some are `String`, some are `&str`.
// Your task is to replace `placeholder(…)` with either `string_slice(…)`
// or `string(…)` depending on what you think each value is.
fn main() {
placeholder("blue");
placeholder("red".to_string());
placeholder(String::from("hi"));
placeholder("rust is fun!".to_owned());
placeholder("nice weather".into());
placeholder(format!("Interpolation {}", "Station"));
// WARNING: This is byte indexing, not character indexing.
// Character indexing can be done using `s.chars().nth(INDEX)`.
placeholder(&String::from("abc")[0..1]);
placeholder(" hello there ".trim());
placeholder("Happy Monday!".replace("Mon", "Tues"));
placeholder("mY sHiFt KeY iS sTiCkY".to_lowercase());
}

View File

@ -1,8 +1,4 @@
// modules1.rs
// Execute `rustlings hint modules1` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
// TODO: Fix the compiler error about calling a private function.
mod sausage_factory {
// Don't let anybody outside of this module see this!
fn get_secret_recipe() -> String {

View File

@ -0,0 +1,26 @@
// You can bring module paths into scopes and provide new names for them with
// the `use` and `as` keywords.
mod delicious_snacks {
// TODO: Add the following two `use` statements after fixing them.
// use self::fruits::PEAR as ???;
// use self::veggies::CUCUMBER as ???;
mod fruits {
pub const PEAR: &str = "Pear";
pub const APPLE: &str = "Apple";
}
mod veggies {
pub const CUCUMBER: &str = "Cucumber";
pub const CARROT: &str = "Carrot";
}
}
fn main() {
println!(
"favorite snacks: {} and {}",
delicious_snacks::fruit,
delicious_snacks::veggie,
);
}

View File

@ -0,0 +1,13 @@
// You can use the `use` keyword to bring module paths from modules from
// anywhere and especially from the standard library into your scope.
// TODO: Bring `SystemTime` and `UNIX_EPOCH` from the `std::time` module into
// your scope. Bonus style points if you can do it with one line!
// use ???;
fn main() {
match SystemTime::now().duration_since(UNIX_EPOCH) {
Ok(n) => println!("1970-01-01 00:00:00 UTC was {} seconds ago!", n.as_secs()),
Err(_) => panic!("SystemTime before UNIX EPOCH!"),
}
}

View File

@ -1,6 +1,7 @@
# Hashmaps
A *hash map* allows you to associate a value with a particular key.
You may also know this by the names [*unordered map* in C++](https://en.cppreference.com/w/cpp/container/unordered_map),
You may also know this by the names [*unordered map* in C++](https://en.cppreference.com/w/cpp/container/unordered_map),
[*dictionary* in Python](https://docs.python.org/3/tutorial/datastructures.html#dictionaries) or an *associative array* in other languages.
This is the other data structure that we've been talking about before, when

View File

@ -1,30 +1,27 @@
// hashmaps1.rs
// A basket of fruits in the form of a hash map needs to be defined.
// The key represents the name of the fruit and the value represents
// how many of that particular fruit is in the basket. You have to put
// at least three different types of fruits (e.g apple, banana, mango)
// in the basket and the total count of all the fruits should be at
// least five.
//
// Make me compile and pass the tests!
//
// Execute `rustlings hint hashmaps1` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
// A basket of fruits in the form of a hash map needs to be defined. The key
// represents the name of the fruit and the value represents how many of that
// particular fruit is in the basket. You have to put at least 3 different
// types of fruits (e.g. apple, banana, mango) in the basket and the total count
// of all the fruits should be at least 5.
use std::collections::HashMap;
fn fruit_basket() -> HashMap<String, u32> {
let mut basket = // TODO: declare your hash map here.
// TODO: Declare the hash map.
// let mut basket =
// Two bananas are already given for you :)
basket.insert(String::from("banana"), 2);
// TODO: Put more fruits in your basket here.
// TODO: Put more fruits in your basket.
basket
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;

View File

@ -0,0 +1,97 @@
// We're collecting different fruits to bake a delicious fruit cake. For this,
// we have a basket, which we'll represent in the form of a hash map. The key
// represents the name of each fruit we collect and the value represents how
// many of that particular fruit we have collected. Three types of fruits -
// Apple (4), Mango (2) and Lychee (5) are already in the basket hash map. You
// must add fruit to the basket so that there is at least one of each kind and
// more than 11 in total - we have a lot of mouths to feed. You are not allowed
// to insert any more of the fruits that are already in the basket (Apple,
// Mango, and Lychee).
use std::collections::HashMap;
#[derive(Hash, PartialEq, Eq, Debug)]
enum Fruit {
Apple,
Banana,
Mango,
Lychee,
Pineapple,
}
fn fruit_basket(basket: &mut HashMap<Fruit, u32>) {
let fruit_kinds = [
Fruit::Apple,
Fruit::Banana,
Fruit::Mango,
Fruit::Lychee,
Fruit::Pineapple,
];
for fruit in fruit_kinds {
// TODO: Insert new fruits if they are not already present in the
// basket. Note that you are not allowed to put any type of fruit that's
// already present!
}
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
// Don't modify this function!
fn get_fruit_basket() -> HashMap<Fruit, u32> {
let content = [(Fruit::Apple, 4), (Fruit::Mango, 2), (Fruit::Lychee, 5)];
HashMap::from_iter(content)
}
#[test]
fn test_given_fruits_are_not_modified() {
let mut basket = get_fruit_basket();
fruit_basket(&mut basket);
assert_eq!(*basket.get(&Fruit::Apple).unwrap(), 4);
assert_eq!(*basket.get(&Fruit::Mango).unwrap(), 2);
assert_eq!(*basket.get(&Fruit::Lychee).unwrap(), 5);
}
#[test]
fn at_least_five_types_of_fruits() {
let mut basket = get_fruit_basket();
fruit_basket(&mut basket);
let count_fruit_kinds = basket.len();
assert!(count_fruit_kinds >= 5);
}
#[test]
fn greater_than_eleven_fruits() {
let mut basket = get_fruit_basket();
fruit_basket(&mut basket);
let count = basket.values().sum::<u32>();
assert!(count > 11);
}
#[test]
fn all_fruit_types_in_basket() {
let fruit_kinds = [
Fruit::Apple,
Fruit::Banana,
Fruit::Mango,
Fruit::Lychee,
Fruit::Pineapple,
];
let mut basket = get_fruit_basket();
fruit_basket(&mut basket);
for fruit_kind in fruit_kinds {
let Some(amount) = basket.get(&fruit_kind) else {
panic!("Fruit kind {fruit_kind:?} was not found in basket");
};
assert!(*amount > 0);
}
}
}

View File

@ -0,0 +1,77 @@
// A list of scores (one per line) of a soccer match is given. Each line is of
// the form "<team_1_name>,<team_2_name>,<team_1_goals>,<team_2_goals>"
// Example: "England,France,4,2" (England scored 4 goals, France 2).
//
// You have to build a scores table containing the name of the team, the total
// number of goals the team scored, and the total number of goals the team
// conceded.
use std::collections::HashMap;
// A structure to store the goal details of a team.
#[derive(Default)]
struct TeamScores {
goals_scored: u8,
goals_conceded: u8,
}
fn build_scores_table(results: &str) -> HashMap<&str, TeamScores> {
// The name of the team is the key and its associated struct is the value.
let mut scores = HashMap::<&str, TeamScores>::new();
for line in results.lines() {
let mut split_iterator = line.split(',');
// NOTE: We use `unwrap` because we didn't deal with error handling yet.
let team_1_name = split_iterator.next().unwrap();
let team_2_name = split_iterator.next().unwrap();
let team_1_score: u8 = split_iterator.next().unwrap().parse().unwrap();
let team_2_score: u8 = split_iterator.next().unwrap().parse().unwrap();
// TODO: Populate the scores table with the extracted details.
// Keep in mind that goals scored by team 1 will be the number of goals
// conceded by team 2. Similarly, goals scored by team 2 will be the
// number of goals conceded by team 1.
}
scores
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
const RESULTS: &str = "England,France,4,2
France,Italy,3,1
Poland,Spain,2,0
Germany,England,2,1
England,Spain,1,0";
#[test]
fn build_scores() {
let scores = build_scores_table(RESULTS);
assert!(["England", "France", "Germany", "Italy", "Poland", "Spain"]
.into_iter()
.all(|team_name| scores.contains_key(team_name)));
}
#[test]
fn validate_team_score_1() {
let scores = build_scores_table(RESULTS);
let team = scores.get("England").unwrap();
assert_eq!(team.goals_scored, 6);
assert_eq!(team.goals_conceded, 4);
}
#[test]
fn validate_team_score_2() {
let scores = build_scores_table(RESULTS);
let team = scores.get("Spain").unwrap();
assert_eq!(team.goals_scored, 0);
assert_eq!(team.goals_conceded, 3);
}
}

View File

@ -1,7 +1,8 @@
# Options
Type Option represents an optional value: every Option is either Some and contains a value, or None, and does not.
Type Option represents an optional value: every Option is either Some and contains a value, or None, and does not.
Option types are very common in Rust code, as they have a number of uses:
- Initial values
- Return values for functions that are not defined over their entire input range (partial functions)
- Return value for otherwise reporting simple errors, where None is returned on error
@ -13,7 +14,7 @@ Option types are very common in Rust code, as they have a number of uses:
## Further Information
- [Option Enum Format](https://doc.rust-lang.org/stable/book/ch10-01-syntax.html#in-enum-definitions)
- [Option Enum Format](https://doc.rust-lang.org/book/ch10-01-syntax.html#in-enum-definitions)
- [Option Module Documentation](https://doc.rust-lang.org/std/option/)
- [Option Enum Documentation](https://doc.rust-lang.org/std/option/enum.Option.html)
- [if let](https://doc.rust-lang.org/rust-by-example/flow_control/if_let.html)

View File

@ -0,0 +1,36 @@
// This function returns how much ice cream there is left in the fridge.
// If it's before 22:00 (24-hour system), then 5 scoops are left. At 22:00,
// someone eats it all, so no ice cream is left (value 0). Return `None` if
// `hour_of_day` is higher than 23.
fn maybe_ice_cream(hour_of_day: u16) -> Option<u16> {
// TODO: Complete the function body.
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn raw_value() {
// TODO: Fix this test. How do you get the value contained in the
// Option?
let ice_creams = maybe_ice_cream(12);
assert_eq!(ice_creams, 5); // Don't change this line.
}
#[test]
fn check_ice_cream() {
assert_eq!(maybe_ice_cream(0), Some(5));
assert_eq!(maybe_ice_cream(9), Some(5));
assert_eq!(maybe_ice_cream(18), Some(5));
assert_eq!(maybe_ice_cream(22), Some(0));
assert_eq!(maybe_ice_cream(23), Some(0));
assert_eq!(maybe_ice_cream(24), None);
assert_eq!(maybe_ice_cream(25), None);
}
}

View File

@ -0,0 +1,39 @@
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
#[test]
fn simple_option() {
let target = "rustlings";
let optional_target = Some(target);
// TODO: Make this an if-let statement whose value is `Some`.
word = optional_target {
assert_eq!(word, target);
}
}
#[test]
fn layered_option() {
let range = 10;
let mut optional_integers: Vec<Option<i8>> = vec![None];
for i in 1..=range {
optional_integers.push(Some(i));
}
let mut cursor = range;
// TODO: Make this a while-let statement. Remember that `Vec::pop()`
// adds another layer of `Option`. You can do nested pattern matching
// in if-let and while-let statements.
integer = optional_integers.pop() {
assert_eq!(integer, cursor);
cursor -= 1;
}
assert_eq!(cursor, 0);
}
}

View File

@ -0,0 +1,17 @@
#[derive(Debug)]
struct Point {
x: i32,
y: i32,
}
fn main() {
let optional_point = Some(Point { x: 100, y: 200 });
// TODO: Fix the compiler error by adding something to this match statement.
match optional_point {
Some(p) => println!("Coordinates are {},{}", p.x, p.y),
_ => panic!("No match!"),
}
println!("{optional_point:?}"); // Don't change this line.
}

View File

@ -1,7 +1,8 @@
# Error handling
Most errors arent serious enough to require the program to stop entirely.
Sometimes, when a function fails, its for a reason that you can easily interpret and respond to.
For example, if you try to open a file and that operation fails because the file doesnt exist, you might want to create the file instead of terminating the process.
Most errors aren't serious enough to require the program to stop entirely.
Sometimes, when a function fails, it's for a reason that you can easily interpret and respond to.
For example, if you try to open a file and that operation fails because the file doesn't exist, you might want to create the file instead of terminating the process.
## Further information

View File

@ -0,0 +1,41 @@
// TODO: 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 returning `None`. Thankfully, Rust has a similar
// construct to `Option` that can be used to express error conditions. Change
// the function signature and body to return `Result<String, String>` instead
// of `Option<String>`.
fn generate_nametag_text(name: String) -> Option<String> {
if name.is_empty() {
// Empty names aren't allowed
None
} else {
Some(format!("Hi! My name is {name}"))
}
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn generates_nametag_text_for_a_nonempty_name() {
assert_eq!(
generate_nametag_text("Beyoncé".to_string()).as_deref(),
Ok("Hi! My name is Beyoncé"),
);
}
#[test]
fn explains_why_generating_nametag_text_fails() {
assert_eq!(
generate_nametag_text(String::new())
.as_ref()
.map_err(|e| e.as_str()),
Err("Empty names aren't allowed"),
);
}
}

View File

@ -1,37 +1,39 @@
// errors2.rs
// Say we're writing a game where you can buy items with tokens. All items cost
// 5 tokens, and whenever you purchase items there is a processing fee of 1
// token. A player of the game will type in how many items they want to buy,
// and the `total_cost` function will calculate the total number of tokens.
// Since the player typed in the quantity, though, we get it as a string-- and
// they might have typed anything, not just numbers!
// 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.
// There are at least two ways to implement this that are both correct-- but
// one is a lot shorter!
// Execute `rustlings hint errors2` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
// token. A player of the game will type in how many items they want to buy, and
// the `total_cost` function will calculate the total cost of the items. Since
// the player typed in the quantity, we get it as a string. They might have
// typed anything, not just numbers!
//
// Right now, this function isn't handling the error case at all. What we want
// to do is: If we call the `total_cost` function on a string that is not a
// number, that function will return a `ParseIntError`. 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!
use std::num::ParseIntError;
pub fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
let processing_fee = 1;
let cost_per_item = 5;
// TODO: Handle the error case as described above.
let qty = item_quantity.parse::<i32>();
Ok(qty * cost_per_item + processing_fee)
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
use std::num::IntErrorKind;
#[test]
fn item_quantity_is_a_valid_number() {
@ -41,8 +43,8 @@ mod tests {
#[test]
fn item_quantity_is_an_invalid_number() {
assert_eq!(
total_cost("beep boop").unwrap_err().to_string(),
"invalid digit found in string"
total_cost("beep boop").unwrap_err().kind(),
&IntErrorKind::InvalidDigit,
);
}
}

View File

@ -1,31 +1,31 @@
// errors3.rs
// This is a program that is trying to use a completed version of the
// `total_cost` function from the previous exercise. It's not working though!
// Why not? What should we do to fix it?
// Execute `rustlings hint errors3` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
use std::num::ParseIntError;
fn main() {
let mut tokens = 100;
let pretend_user_input = "8";
let cost = total_cost(pretend_user_input)?;
if cost > tokens {
println!("You can't afford that many!");
} else {
tokens -= cost;
println!("You now have {} tokens.", tokens);
}
}
pub fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
// Don't change this function.
fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
let processing_fee = 1;
let cost_per_item = 5;
let qty = item_quantity.parse::<i32>()?;
Ok(qty * cost_per_item + processing_fee)
}
// TODO: Fix the compiler error by changing the signature and body of the
// `main` function.
fn main() {
let mut tokens = 100;
let pretend_user_input = "8";
// Don't change this line.
let cost = total_cost(pretend_user_input)?;
if cost > tokens {
println!("You can't afford that many!");
} else {
tokens -= cost;
println!("You now have {tokens} tokens.");
}
}

View File

@ -0,0 +1,37 @@
#[derive(PartialEq, Debug)]
enum CreationError {
Negative,
Zero,
}
#[derive(PartialEq, Debug)]
struct PositiveNonzeroInteger(u64);
impl PositiveNonzeroInteger {
fn new(value: i64) -> Result<Self, CreationError> {
// TODO: This function shouldn't always return an `Ok`.
Ok(Self(value as u64))
}
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_creation() {
assert_eq!(
PositiveNonzeroInteger::new(10),
Ok(PositiveNonzeroInteger(10)),
);
assert_eq!(
PositiveNonzeroInteger::new(-10),
Err(CreationError::Negative),
);
assert_eq!(PositiveNonzeroInteger::new(0), Err(CreationError::Zero));
}
}

View File

@ -0,0 +1,56 @@
// This exercise is an altered version of the `errors4` exercise. It uses some
// concepts that we won't get to until later in the course, like `Box` and the
// `From` trait. It's not important to understand them in detail right now, but
// you can read ahead if you like. For now, think of the `Box<dyn ???>` type as
// an "I want anything that does ???" type.
//
// In short, this particular use case for boxes is for when you want to own a
// value and you care only that it is a type which implements a particular
// trait. To do so, the `Box` is declared as of type `Box<dyn Trait>` where
// `Trait` is the trait the compiler looks for on any value used in that
// context. For this exercise, that context is the potential errors which
// can be returned in a `Result`.
use std::error::Error;
use std::fmt;
#[derive(PartialEq, Debug)]
enum CreationError {
Negative,
Zero,
}
// This is required so that `CreationError` can implement `Error`.
impl fmt::Display for CreationError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let description = match *self {
CreationError::Negative => "number is negative",
CreationError::Zero => "number is zero",
};
f.write_str(description)
}
}
impl Error for CreationError {}
#[derive(PartialEq, Debug)]
struct PositiveNonzeroInteger(u64);
impl PositiveNonzeroInteger {
fn new(value: i64) -> Result<PositiveNonzeroInteger, CreationError> {
match value {
x if x < 0 => Err(CreationError::Negative),
0 => Err(CreationError::Zero),
x => Ok(PositiveNonzeroInteger(x as u64)),
}
}
}
// TODO: Add the correct return type `Result<(), Box<dyn ???>>`. What can we
// use to describe both errors? Is there a trait which both errors implement?
fn main() {
let pretend_user_input = "42";
let x: i64 = pretend_user_input.parse()?;
println!("output={:?}", PositiveNonzeroInteger::new(x)?);
Ok(())
}

View File

@ -0,0 +1,89 @@
// Using catch-all error types like `Box<dyn Error>` isn't recommended for
// library code where callers might want to make decisions based on the error
// content instead of printing it out or propagating it further. Here, we define
// a custom error type to make it possible for callers to decide what to do next
// when our function returns an error.
use std::num::ParseIntError;
#[derive(PartialEq, Debug)]
enum CreationError {
Negative,
Zero,
}
// A custom error type that we will be using in `PositiveNonzeroInteger::parse`.
#[derive(PartialEq, Debug)]
enum ParsePosNonzeroError {
Creation(CreationError),
ParseInt(ParseIntError),
}
impl ParsePosNonzeroError {
fn from_creation(err: CreationError) -> Self {
Self::Creation(err)
}
// TODO: Add another error conversion function here.
// fn from_parse_int(???) -> Self { ??? }
}
#[derive(PartialEq, Debug)]
struct PositiveNonzeroInteger(u64);
impl PositiveNonzeroInteger {
fn new(value: i64) -> Result<Self, CreationError> {
match value {
x if x < 0 => Err(CreationError::Negative),
0 => Err(CreationError::Zero),
x => Ok(Self(x as u64)),
}
}
fn parse(s: &str) -> Result<Self, ParsePosNonzeroError> {
// TODO: change this to return an appropriate error instead of panicking
// when `parse()` returns an error.
let x: i64 = s.parse().unwrap();
Self::new(x).map_err(ParsePosNonzeroError::from_creation)
}
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_parse_error() {
assert!(matches!(
PositiveNonzeroInteger::parse("not a number"),
Err(ParsePosNonzeroError::ParseInt(_)),
));
}
#[test]
fn test_negative() {
assert_eq!(
PositiveNonzeroInteger::parse("-555"),
Err(ParsePosNonzeroError::Creation(CreationError::Negative)),
);
}
#[test]
fn test_zero() {
assert_eq!(
PositiveNonzeroInteger::parse("0"),
Err(ParsePosNonzeroError::Creation(CreationError::Zero)),
);
}
#[test]
fn test_positive() {
let x = PositiveNonzeroInteger::new(42).unwrap();
assert_eq!(x.0, 42);
assert_eq!(PositiveNonzeroInteger::parse("42"), Ok(x));
}
}

View File

@ -1,11 +1,11 @@
# Generics
Generics is the topic of generalizing types and functionalities to broader cases.
This is extremely useful for reducing code duplication in many ways, but can call for rather involving syntax.
This is extremely useful for reducing code duplication in many ways, but can call for some rather involved syntax.
Namely, being generic requires taking great care to specify over which types a generic type is actually considered valid.
The simplest and most common use of generics is for type parameters.
## Further information
- [Generic Data Types](https://doc.rust-lang.org/stable/book/ch10-01-syntax.html)
- [Generic Data Types](https://doc.rust-lang.org/book/ch10-01-syntax.html)
- [Bounds](https://doc.rust-lang.org/rust-by-example/generics/bounds.html)

View File

@ -0,0 +1,18 @@
// `Vec<T>` is generic over the type `T`. In most cases, the compiler is able to
// infer `T`, for example after pushing a value with a concrete type to the vector.
// But in this exercise, the compiler needs some help through a type annotation.
fn main() {
// TODO: Fix the compiler error by annotating the type of the vector
// `Vec<T>`. Choose `T` as some integer type that can be created from
// `u8` and `i8`.
let mut numbers = Vec::new();
// Don't change the lines below.
let n1: u8 = 42;
numbers.push(n1.into());
let n2: i8 = -1;
numbers.push(n2.into());
println!("{numbers:?}");
}

View File

@ -1,20 +1,20 @@
// This powerful wrapper provides the ability to store a positive integer value.
// Rewrite it using generics so that it supports wrapping ANY type.
// Execute `rustlings hint generics2` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
// TODO: Rewrite it using a generic so that it supports wrapping ANY type.
struct Wrapper {
value: u32,
}
// TODO: Adapt the struct's implementation to be generic over the wrapped value.
impl Wrapper {
pub fn new(value: u32) -> Self {
fn new(value: u32) -> Self {
Wrapper { value }
}
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;

View File

@ -7,13 +7,13 @@ Data types can implement traits. To do so, the methods making up the trait are d
In this way, traits are somewhat similar to Java interfaces and C++ abstract classes.
Some additional common Rust traits include:
- `Clone` (the `clone` method)
- `Display` (which allows formatted display via `{}`)
- `Debug` (which allows formatted display via `{:?}`)
Because traits indicate shared behavior between data types, they are useful when writing generics.
## Further information
- [Traits](https://doc.rust-lang.org/book/ch10-02-traits.html)

View File

@ -0,0 +1,30 @@
// The trait `AppendBar` has only one function which appends "Bar" to any object
// implementing this trait.
trait AppendBar {
fn append_bar(self) -> Self;
}
impl AppendBar for String {
// TODO: Implement `AppendBar` for the type `String`.
}
fn main() {
let s = String::from("Foo");
let s = s.append_bar();
println!("s: {s}");
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn is_foo_bar() {
assert_eq!(String::from("Foo").append_bar(), "FooBar");
}
#[test]
fn is_bar_bar() {
assert_eq!(String::from("").append_bar().append_bar(), "BarBar");
}
}

View File

@ -0,0 +1,22 @@
trait AppendBar {
fn append_bar(self) -> Self;
}
// TODO: Implement the trait `AppendBar` for a vector of strings.
// `append_bar` should push the string "Bar" into the vector.
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn is_vec_pop_eq_bar() {
let mut foo = vec![String::from("Foo")].append_bar();
assert_eq!(foo.pop().unwrap(), "Bar");
assert_eq!(foo.pop().unwrap(), "Foo");
}
}

View File

@ -1,15 +1,8 @@
// traits3.rs
//
// Your task is to implement the Licensed trait for
// both structures and have them return the same
// information without writing the same function twice.
//
// Consider what you can add to the Licensed trait.
// Execute `rustlings hint traits3` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
pub trait Licensed {
trait Licensed {
// TODO: Add a default implementation for `licensing_info` so that
// implementors like the two structs below can share that default behavior
// without repeating the function.
// The default license information should be the string "Default license".
fn licensing_info(&self) -> String;
}
@ -21,8 +14,12 @@ struct OtherSoftware {
version_number: String,
}
impl Licensed for SomeSoftware {} // Don't edit this line
impl Licensed for OtherSoftware {} // Don't edit this line
impl Licensed for SomeSoftware {} // Don't edit this line.
impl Licensed for OtherSoftware {} // Don't edit this line.
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
@ -30,7 +27,7 @@ mod tests {
#[test]
fn is_licensing_info_the_same() {
let licensing_info = String::from("Some information");
let licensing_info = "Default license";
let some_software = SomeSoftware { version_number: 1 };
let other_software = OtherSoftware {
version_number: "v2.0.0".to_string(),

View File

@ -0,0 +1,35 @@
trait Licensed {
fn licensing_info(&self) -> String {
"Default license".to_string()
}
}
struct SomeSoftware;
struct OtherSoftware;
impl Licensed for SomeSoftware {}
impl Licensed for OtherSoftware {}
// TODO: Fix the compiler error by only changing the signature of this function.
fn compare_license_types(software1: ???, software2: ???) -> bool {
software1.licensing_info() == software2.licensing_info()
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn compare_license_information() {
assert!(compare_license_types(SomeSoftware, OtherSoftware));
}
#[test]
fn compare_license_information_backwards() {
assert!(compare_license_types(OtherSoftware, SomeSoftware));
}
}

View File

@ -0,0 +1,39 @@
trait SomeTrait {
fn some_function(&self) -> bool {
true
}
}
trait OtherTrait {
fn other_function(&self) -> bool {
true
}
}
struct SomeStruct;
impl SomeTrait for SomeStruct {}
impl OtherTrait for SomeStruct {}
struct OtherStruct;
impl SomeTrait for OtherStruct {}
impl OtherTrait for OtherStruct {}
// TODO: Fix the compiler error by only changing the signature of this function.
fn some_func(item: ???) -> bool {
item.some_function() && item.other_function()
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_some_func() {
assert!(some_func(SomeStruct));
assert!(some_func(OtherStruct));
}
}

View File

@ -3,15 +3,20 @@
Lifetimes tell the compiler how to check whether references live long
enough to be valid in any given situation. For example lifetimes say
"make sure parameter 'a' lives as long as parameter 'b' so that the return
value is valid".
value is valid".
They are only necessary on borrows, i.e. references,
They are only necessary on borrows, i.e. references,
since copied parameters or moves are owned in their scope and cannot
be referenced outside. Lifetimes mean that calling code of e.g. functions
can be checked to make sure their arguments are valid. Lifetimes are
can be checked to make sure their arguments are valid. Lifetimes are
restrictive of their callers.
If you'd like to learn more about lifetime annotations, the
[lifetimekata](https://tfpk.github.io/lifetimekata/) project
has a similar style of exercises to Rustlings, but is all about
learning to write lifetime annotations.
## Further information
- [Validating References with Lifetimes](https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html)
- [Lifetimes (in Rust By Example)](https://doc.rust-lang.org/stable/rust-by-example/scope/lifetime.html)
- [Validating References with Lifetimes](https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html)

View File

@ -0,0 +1,28 @@
// The Rust compiler needs to know how to check whether supplied references are
// valid, so that it can let the programmer know if a reference is at risk of
// going out of scope before it is used. Remember, references are borrows and do
// not own their own data. What if their owner goes out of scope?
// TODO: Fix the compiler error by updating the function signature.
fn longest(x: &str, y: &str) -> &str {
if x.len() > y.len() {
x
} else {
y
}
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_longest() {
assert_eq!(longest("abcd", "123"), "abcd");
assert_eq!(longest("abc", "1234"), "1234");
}
}

Some files were not shown because too many files have changed in this diff Show More