Compare commits

...

1787 Commits
try ... main

Author SHA1 Message Date
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
liv fc9fb536ca release: 5.4.0 2023-02-12 18:01:48 +01:00
liv 4c7e561740
Merge pull request #1369 from rust-lang/all-contributors/add-grzegorz-zur
docs: add grzegorz-zur as a contributor for content
2023-02-12 16:55:30 +01:00
allcontributors[bot] bf0fa8ee64
docs: update .all-contributorsrc [skip ci] 2023-02-12 15:54:57 +00:00
allcontributors[bot] d3ed9ce2f6
docs: update AUTHORS.md [skip ci] 2023-02-12 15:54:56 +00:00
liv f123cb2777
Merge pull request #1228 from grzegorz-zur/patch-1
Removed unnecessary use statement
2023-02-12 16:54:43 +01:00
liv dc3bf2ea30
Merge pull request #1368 from rust-lang/all-contributors/add-platformer
docs: add platformer as a contributor for content
2023-02-12 16:50:26 +01:00
allcontributors[bot] f3773660b0
docs: update .all-contributorsrc [skip ci] 2023-02-12 15:50:18 +00:00
allcontributors[bot] 18843cf62e
docs: update AUTHORS.md [skip ci] 2023-02-12 15:50:17 +00:00
liv 7be4fd891d
Merge pull request #1305 from platformer/issue1298
fix(threads1): make program panic if threads are not joined
2023-02-12 16:50:03 +01:00
liv b66e2e9b95
Merge pull request #1367 from rust-lang/all-contributors/add-kawaiiPlat
docs: add kawaiiPlat as a contributor for content
2023-02-12 15:52:07 +01:00
allcontributors[bot] 2aad5360d4
docs: update .all-contributorsrc [skip ci] 2023-02-12 14:52:00 +00:00
allcontributors[bot] e8683274ff
docs: update AUTHORS.md [skip ci] 2023-02-12 14:51:59 +00:00
liv b3de1b77bf
Merge pull request #1318 from kawaiiPlat/q2-minor-grammar
minor grammar tweak for quiz 2
2023-02-12 15:51:42 +01:00
liv 957522a492 feat(intro1): add note on rust-analyzer usage 2023-02-12 15:47:58 +01:00
liv ac050fb7ce
Merge pull request #1366 from rust-lang/all-contributors/add-alexandergill
docs: add alexandergill as a contributor for code
2023-02-12 15:43:16 +01:00
allcontributors[bot] 88a92b311c
docs: update .all-contributorsrc [skip ci] 2023-02-12 14:43:08 +00:00
allcontributors[bot] acd2164c85
docs: update AUTHORS.md [skip ci] 2023-02-12 14:43:07 +00:00
liv 890d6549de
Merge pull request #1364 from alexandergill/fix-install-script
Fix `bash: line 105: v1[$i]: unbound variable` in install script
2023-02-12 15:42:49 +01:00
Alexander Gill 0b119339eb fix(installation): bump `MinRustVersion` to 1.58
this is the earliest minor version that compiled without errors
2023-02-11 23:30:35 +00:00
Alexander Gill 4bdd3c036b fix(installation): loop to `max_len-1`
avoid `i` going outside range of array indices
2023-02-11 23:18:34 +00:00
liv 0ea42f60bd
Merge pull request #1356 from rust-lang/all-contributors/add-wjwrh
docs: add wjwrh as a contributor for code
2023-02-05 11:51:57 +01:00
allcontributors[bot] 72fff8d51a
docs: update .all-contributorsrc [skip ci] 2023-02-05 10:51:50 +00:00
allcontributors[bot] ff44be9dcd
docs: update AUTHORS.md [skip ci] 2023-02-05 10:51:49 +00:00
liv 23c3620001
Merge pull request #1355 from wjwrh/main
Fix the problem of different edition between rustc and rust-analyzer
2023-02-05 11:51:35 +01:00
wjwrh 1721ddc231 Fix the problem of different edition between rustc and rust-analyzer 2023-02-05 14:10:23 +08:00
liv ce7ffcd8e9
Merge pull request #1349 from rust-lang/all-contributors/add-kevwan
docs: add kevwan as a contributor for content
2023-01-26 20:55:22 +01:00
allcontributors[bot] c952604308
docs: update .all-contributorsrc [skip ci] 2023-01-26 19:55:14 +00:00
allcontributors[bot] a1b2964869
docs: update AUTHORS.md [skip ci] 2023-01-26 19:55:13 +00:00
liv 5faa0badef
Merge pull request #1347 from kevwan/patch-1
chore: fix prompt error for exercise #80 (rc1.rs)
2023-01-26 20:54:54 +01:00
Kevin Wan 4771a7b9e7
chore: fix prompt error
Missed a blank line, which causes the prompt incorrect like below:

```rust
You can keep working on this exercise,
or jump into the next one by removing the `I AM NOT DONE` comment:

 6 |  // Make this code compile by using the proper Rc primitives to express that the sun has multiple owners.
 7 |  
 8 |  // I AM NOT DONE
 9 |  use std::rc::Rc;
```
2023-01-23 12:16:51 +08:00
liv 259b434f20
Merge pull request #1338 from rust-lang/all-contributors/add-cloppingemu
docs: add cloppingemu as a contributor for code
2023-01-11 12:25:45 +01:00
allcontributors[bot] d58c97bd21
docs: update .all-contributorsrc [skip ci] 2023-01-11 11:25:36 +00:00
allcontributors[bot] d05a817f3b
docs: update AUTHORS.md [skip ci] 2023-01-11 11:25:35 +00:00
liv 2b30cec974
Merge pull request #1319 from cloppingemu/main
fix(verify): progress bar percent now updates with the number of files verified
2023-01-11 12:25:09 +01:00
liv 6ef284bb1a
Merge pull request #1337 from rust-lang/all-contributors/add-h4x5p4c3
docs: add h4x5p4c3 as a contributor for content
2023-01-11 12:23:21 +01:00
allcontributors[bot] ac839c267b
docs: update .all-contributorsrc [skip ci] 2023-01-11 11:23:08 +00:00
allcontributors[bot] 3ed1e16c78
docs: update AUTHORS.md [skip ci] 2023-01-11 11:23:07 +00:00
liv c28c661deb
Merge pull request #1336 from h4x5p4c3/main
minor changes to hint
2023-01-11 12:22:52 +01:00
h4x5p4c3 6b04848d41 minor changes to hint 2023-01-11 00:23:21 +05:30
liv c5898ac6b7
Merge pull request #1326 from tklauser/clippy1-typo
Fix typo in clippy1 hint
2023-01-05 17:41:43 +01:00
Tobias Klauser 7c4a3a2af6
Fix typo in clippy1 hint 2023-01-05 17:14:49 +01:00
liv 0d30dce26d
Merge pull request #1325 from rust-lang/all-contributors/add-AxolotlTears
docs: add AxolotlTears as a contributor for code
2023-01-05 15:28:11 +01:00
allcontributors[bot] 6c170c2c21
docs: update .all-contributorsrc [skip ci] 2023-01-05 14:28:02 +00:00
allcontributors[bot] 4179317f37
docs: update AUTHORS.md [skip ci] 2023-01-05 14:28:01 +00:00
liv 5bcd2cee1d
Merge pull request #1320 from AxolotlTears/main
Decrease watch delay
2023-01-05 15:27:35 +01:00
liv 29ecee8cc6
Merge pull request #1324 from rust-lang/all-contributors/add-0xMySt1c
docs: add 0xMySt1c as a contributor for tool
2023-01-05 15:24:04 +01:00
allcontributors[bot] f67a2b2535
docs: update .all-contributorsrc [skip ci] 2023-01-05 14:21:45 +00:00
allcontributors[bot] 33e0c73df7
docs: update AUTHORS.md [skip ci] 2023-01-05 14:21:44 +00:00
liv c28c0eb818
Merge pull request #1322 from 0xMySt1c/update_extension
update rust language extension to rust-analyzer
2023-01-05 15:21:27 +01:00
0xMySt1c 8722172049 update rust language extension to rust-analyzer 2023-01-04 14:59:18 -05:00
TenzinRabgy 8e36256eac chore(watch): decrease watch delay
closes #1215
2023-01-04 04:49:51 -05:00
himanshu soni 951826e6b5 fix(verify): progress bar proportion now updates with the number of files verified 2023-01-03 23:54:01 +09:30
Jarrod Sanders 57834e9f8c
Minor Grammar 2023-01-03 09:22:52 -05:00
liv 915a59e514
Merge pull request #1317 from rust-lang/all-contributors/add-tklauser
docs: add tklauser as a contributor for code
2023-01-03 14:19:53 +01:00
allcontributors[bot] b985b1d6ea
docs: update .all-contributorsrc [skip ci] 2023-01-03 13:19:33 +00:00
allcontributors[bot] ceb03cfb2c
docs: update AUTHORS.md [skip ci] 2023-01-03 13:19:32 +00:00
liv b8d4bb1f13
Merge pull request #1316 from tklauser/fix-fn-typo
Fix typo in method name
2023-01-03 14:19:17 +01:00
Tobias Klauser 1b9d4bbf72
Fix typo in method name 2023-01-03 14:14:07 +01:00
liv c6842938c9
Merge pull request #1315 from rust-lang/all-contributors/add-dbarrosop
docs: add dbarrosop as a contributor for infra
2023-01-03 10:21:49 +01:00
allcontributors[bot] 2be582fb27
docs: update .all-contributorsrc [skip ci] 2023-01-03 09:21:41 +00:00
allcontributors[bot] 7ed0474364
docs: update AUTHORS.md [skip ci] 2023-01-03 09:21:40 +00:00
liv 142633533e
Merge pull request #1294 from dbarrosop/nix-darwin
fix nix environment
2023-01-03 10:20:47 +01:00
David Barroso e6bc13ff04 added common cargoBuildInputs to all flake outputs 2023-01-03 08:26:12 +01:00
liv 49bbeeefae
Merge pull request #1314 from rust-lang/all-contributors/add-seporterfield
docs: add seporterfield as a contributor for content
2023-01-02 10:52:23 +01:00
allcontributors[bot] cb5371f86f
docs: update .all-contributorsrc [skip ci] 2023-01-02 09:52:15 +00:00
allcontributors[bot] 3001f1ae02
docs: update AUTHORS.md [skip ci] 2023-01-02 09:52:14 +00:00
liv 7e98f67df8
Merge pull request #1313 from seporterfield/reorder-exercises
Reorder exercises
2023-01-02 10:51:50 +01:00
seporterfield a5429d59f9
updated file paths for iterators, smart_pointers 2023-01-01 02:46:40 +01:00
seporterfield 9860976af9
added existing chapter for clippy to mapping
It's real! https://doc.rust-lang.org/book/appendix-04-useful-development-tools.html
2023-01-01 02:34:58 +01:00
seporterfield b2b6e6900f
reformatted exercise->chapter mapping
Added and removed rows according to changes to exercise order and grouping.
2023-01-01 02:29:45 +01:00
seporterfield 66eaaf7b6e
fixed formatting 2023-01-01 02:17:53 +01:00
seporterfield 3fad2a9c83
gave smart_pointers its own README.md 2023-01-01 02:17:23 +01:00
seporterfield 8405a61b07
moved iterator exercises 2023-01-01 02:02:49 +01:00
seporterfield e3e298cfa2
moved iterator exercises 2023-01-01 02:02:15 +01:00
seporterfield 0f02a9b9af
moved iterator exercises 2023-01-01 02:00:36 +01:00
seporterfield 5b0d587c22
moved iterator exercises 2023-01-01 01:59:35 +01:00
seporterfield e9dc52c2d3
moved iterator exercises 2023-01-01 01:58:57 +01:00
seporterfield a0c5a892d3
refactoring standard_library_types as iterators 2023-01-01 01:58:04 +01:00
seporterfield a8fd315e09
moved rc to smart_pointers 2023-01-01 01:52:47 +01:00
seporterfield e8c4aab643
moved cow to smart_pointers 2023-01-01 01:52:05 +01:00
seporterfield c3bab88fda
moved box to smart_pointers 2023-01-01 01:51:27 +01:00
seporterfield cf1ae884a1
Merge pull request #1 from seporterfield/patch-1
move arc to smart_pointers
2023-01-01 01:50:14 +01:00
seporterfield 05592acf40
move arc to smart_pointers 2023-01-01 01:44:47 +01:00
seporterfield cb79be921d
reordered smart pointer exercises
Switched rc and arc so rc comes first, since arc is, like the name implies, atomic rc. This gives the exercises a more logical progression.
Moved all smart pointer exercises (box, rc, arc, cow) under threads into their own section. Threads are used in the smart pointer exercises, so they should be introduced first.
2023-01-01 01:32:38 +01:00
liv 6cee997266
Merge pull request #1311 from rust-lang/all-contributors/add-HerschelW
docs: add HerschelW as a contributor for content
2022-12-30 16:53:05 +01:00
allcontributors[bot] 6367697d92
docs: update .all-contributorsrc [skip ci] 2022-12-30 15:52:50 +00:00
allcontributors[bot] 25fc7814cc
docs: update AUTHORS.md [skip ci] 2022-12-30 15:52:49 +00:00
liv 69e8a35fd1
Merge pull request #1310 from HerschelW/enums3_chore
chore: update enums3.rs addressing extra parentheses usage with tuples
2022-12-30 16:52:29 +01:00
HerschelW 2f821aa30d chore: update enums3.rs addressing extra parentheses usage with tuples 2022-12-30 08:14:13 -06:00
liv f9f07bee09
Merge pull request #1304 from generalmimon/hints-rust-capitalize
chore: "rust" -> "Rust" in exercise hints
2022-12-28 10:59:02 +01:00
platformer 7e4ce38681 fix(threads1): make program panic if threads are not joined
closes #1298
2022-12-26 02:25:43 -06:00
Petr Pucil 4303717951 chore: "rust" -> "Rust" in exercise hints 2022-12-25 18:02:37 +01:00
liv 32b234c9f0 chore: update changelog 2022-12-23 17:09:04 +01:00
liv 9ad884aadb chore: bump version 2022-12-23 16:55:42 +01:00
liv 40b1b07915
fix(enums3): add extra tuple comment 2022-12-23 16:47:48 +01:00
liv 31469560ec
Merge pull request #1303 from rust-lang/all-contributors/add-tkburis
docs: add tkburis as a contributor for content
2022-12-23 16:44:22 +01:00
allcontributors[bot] 5e583770f7
docs: update .all-contributorsrc [skip ci] 2022-12-23 15:44:15 +00:00
allcontributors[bot] 130e57ec60
docs: update AUTHORS.md [skip ci] 2022-12-23 15:44:14 +00:00
liv 4ede64b729
Merge pull request #1279 from tkburis/main
Minor changes
2022-12-23 16:44:02 +01:00
liv 4521aed23b
Merge pull request #1293 from tysonliddell/fix_self_parameter
fix: Remove superfluous &self indirection
2022-12-23 16:22:51 +01:00
liv 4c3a00b5cd
Merge pull request #1301 from williamwebb/williamwebb-fix(hashmap3)-typo
fix(hashmaps3): fix typo in todo hint
2022-12-23 16:16:59 +01:00
liv e0eef0e190
docs: add note about powershell compat
Closes #1299.
2022-12-23 16:16:24 +01:00
William Webb e519b5079e
fix(hashmaps3): fix typo in todo hint 2022-12-20 21:17:32 -06:00
David Barroso b2df015fe6 when generating lsp config use RUST_SRC_PATH if set 2022-12-10 14:05:44 +01:00
David Barroso 1ce671528e add missing RUST_SRC_PATH 2022-12-10 13:57:26 +01:00
David Barroso 3d693634b5 fix nix build on Darwin 2022-12-10 13:23:15 +01:00
Tyson Liddell 71873e676f fix: Remove superfluous &self indirection 2022-12-09 20:49:10 +00: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
TK Buristrakul db53dbc126 chore: tidied up unmatched backticks 2022-11-24 19:41:25 +00:00
TK Buristrakul a315f2fefb chore: added more descriptive TODOs 2022-11-24 19:39:54 +00:00
TK Buristrakul be0b7e084e chore: minor change in comment 2022-11-24 19:20:59 +00:00
liv e3af483fa6
Merge pull request #1276 from rust-lang/all-contributors/add-craymel
docs: add craymel as a contributor for content
2022-11-19 00:35:59 +01:00
allcontributors[bot] a8033e0193
docs: update .all-contributorsrc [skip ci] 2022-11-18 23:35:52 +00:00
allcontributors[bot] e8ef4fe5d6
docs: update AUTHORS.md [skip ci] 2022-11-18 23:35:51 +00:00
liv cea60a2eb9
Merge pull request #1273 from craymel/fix-structs3-hint
fix: Update structs3 hint
2022-11-19 00:35:08 +01:00
craymel 2ceb59a11d fix: Update structs3 hint 2022-11-18 23:38:27 +11:00
liv 97e3c419aa
Merge pull request #1263 from rust-lang/all-contributors/add-MoritzBoehme
docs: add MoritzBoehme as a contributor for code
2022-11-12 16:45:24 +01:00
allcontributors[bot] 28d78e288b
docs: update .all-contributorsrc [skip ci] 2022-11-12 15:45:16 +00:00
allcontributors[bot] 43c049df75
docs: update AUTHORS.md [skip ci] 2022-11-12 15:45:16 +00:00
liv 0c05318237
Merge pull request #1262 from rust-lang/all-contributors/add-winterqt
docs: add winterqt as a contributor for code
2022-11-12 16:44:44 +01:00
allcontributors[bot] 78e2685d5f
docs: update .all-contributorsrc [skip ci] 2022-11-12 15:44:32 +00:00
allcontributors[bot] ef3ef82057
docs: update AUTHORS.md [skip ci] 2022-11-12 15:44:31 +00:00
liv d3f81b6e40
Merge pull request #922 from MoritzBoehme/feat/add-nix-flake
feat: Add flake.nix for nix users
2022-11-12 16:44:10 +01:00
mokou 2e1630c712 chore: style fixes 2022-11-11 16:12:09 +01:00
liv 4a60b7b2e3
Merge pull request #1260 from rust-lang/all-contributors/add-mfurak
docs: add mfurak as a contributor for content
2022-11-07 15:14:29 +01:00
allcontributors[bot] 70f9f08d2c
docs: update .all-contributorsrc [skip ci] 2022-11-07 14:14:21 +00:00
allcontributors[bot] 6413f5b5d4
docs: update AUTHORS.md [skip ci] 2022-11-07 14:14:20 +00:00
liv 82b79aac2f
Merge pull request #1259 from mfurak/format-errors5
style: format errors5 & errors6 with rustfmt
2022-11-07 15:14:06 +01:00
mfurak 152193b459 style: format errors6 with rustfmt 2022-11-06 20:42:17 +01:00
mfurak d01ce8304e style: format errors5 with rustfmt 2022-11-06 20:32:43 +01:00
liv 8b0507cac8
Merge pull request #1248 from rust-lang/all-contributors/add-tfpk
docs: add tfpk as a contributor for content
2022-10-26 10:50:07 +02:00
allcontributors[bot] a0b10af1a3
docs: update .all-contributorsrc [skip ci] 2022-10-26 08:49:53 +00:00
allcontributors[bot] a2134d70c6
docs: update AUTHORS.md [skip ci] 2022-10-26 08:49:52 +00:00
liv 7380e43f28
Merge pull request #1246 from tfpk/patch-1
feat(macros-readme): Add link to MacroKata
2022-10-26 10:49:39 +02:00
liv 24da5b358f
Merge pull request #1242 from aaarkid/patch-1
fix: Revert deref change
2022-10-26 10:44:40 +02:00
Moritz Böhme 8e0f5bf125
feat: Add flake.nix for nix users
Co-authored-by: Winter <winter@winter.cafe>
2022-10-25 19:37:48 +02:00
Tom Kunc da995b24eb
feat(macros-readme): Add link to MacroKata 2022-10-24 13:57:44 +11:00
Arkid 623161e50d
fix: Revert deref change
Revert the addition of a deref in PR #1192 by me, which should not be there.

Apologies for the inconvenience caused.
2022-10-21 02:45:31 +02:00
liv b17295b36f
Merge pull request #1239 from rust-lang/all-contributors/add-aaarkid
docs: add aaarkid as a contributor for content
2022-10-18 11:39:56 +02:00
allcontributors[bot] ee84131171
docs: update .all-contributorsrc [skip ci] 2022-10-18 09:39:50 +00:00
allcontributors[bot] a204524897
docs: update AUTHORS.md [skip ci] 2022-10-18 09:39:49 +00:00
liv 49a101b189
Merge pull request #1192 from aaarkid/patch-1
fix: Add a deref in the test code
2022-10-18 11:39:35 +02:00
liv 53b8715ae3
Merge pull request #1238 from rust-lang/all-contributors/add-mvanschellebeeck
docs: add mvanschellebeeck as a contributor for content
2022-10-18 11:38:10 +02:00
allcontributors[bot] 61c086b242
docs: update .all-contributorsrc [skip ci] 2022-10-18 09:38:02 +00:00
allcontributors[bot] 5e6207bb90
docs: update AUTHORS.md [skip ci] 2022-10-18 09:38:01 +00:00
liv 572dd2e9f3
Merge pull request #1236 from mvanschellebeeck/main
style: explicitly use Arc::clone
2022-10-18 11:37:44 +02:00
Matthew Van Schellebeeck ccd73c0a81 style: explicitly use Arc::clone 2022-10-17 22:25:28 -05:00
liv b3322e36ae
Merge pull request #1234 from rust-lang/all-contributors/add-azzamsa
docs: add azzamsa as a contributor for code
2022-10-14 10:30:55 +01:00
allcontributors[bot] 3cb9825033
docs: update .all-contributorsrc [skip ci] 2022-10-14 09:30:48 +00:00
allcontributors[bot] eea039b025
docs: update AUTHORS.md [skip ci] 2022-10-14 09:30:47 +00:00
liv 587e2d6dcd
Merge pull request #1220 from azzamsa/percentage
feat(verify): add progress percentage in watch mode
2022-10-14 10:30:32 +01:00
liv 94831a0d54
Merge pull request #1233 from rust-lang/all-contributors/add-nyurik
docs: add nyurik as a contributor for code
2022-10-14 10:26:58 +01:00
allcontributors[bot] 8b251a202f
docs: update .all-contributorsrc [skip ci] 2022-10-14 09:26:51 +00:00
allcontributors[bot] c96fbc7180
docs: update AUTHORS.md [skip ci] 2022-10-14 09:26:50 +00:00
liv 22467b483b
Merge pull request #1231 from nyurik/inline-format-args
Apply uninlined-format-args clippy lint
2022-10-14 10:26:34 +01:00
azzamsa 68388e5d4f feat(verify): add progress percentage in watch mode 2022-10-14 05:28:49 +07:00
Yuri Astrakhan 2940ad059d Apply uninlined-format-args clippy lint
This lint should also be applied to the excersies,
but I am not certain how to run it for all non-crate individual files.

To re-run:

```
rustup run nightly cargo clippy --fix -- -A clippy::all -W clippy::uninlined_format_args
```
2022-10-12 16:43:07 -04:00
liv 56a4f1680d
Merge pull request #1230 from rust-lang/all-contributors/add-bhbuehler
docs: add bhbuehler as a contributor for content
2022-10-12 15:51:33 +01:00
allcontributors[bot] a50dcc9728
docs: update .all-contributorsrc [skip ci] 2022-10-12 14:51:22 +00:00
allcontributors[bot] 08df6224af
docs: update AUTHORS.md [skip ci] 2022-10-12 14:51:21 +00:00
liv 6e42eede54
Merge pull request #1229 from bhbuehler/docs-options1-fix_and_clarify_24_hr_time_instruction
docs(options1): fix and clarify 24 hour time instruction
2022-10-12 15:51:06 +01:00
bhbuehler c157c53983 docs(options1): fix and clarify 24 hour time instruction 2022-10-11 12:05:37 -05:00
Grzegorz Żur da6178bdc6
Removed unnecessary use statement 2022-10-11 10:43:32 +02:00
liv 818eaa7307
Merge pull request #1227 from rust-lang/all-contributors/add-gfaugere
docs: add gfaugere as a contributor for tool
2022-10-10 11:40:08 +02:00
allcontributors[bot] d00f7783db
docs: update .all-contributorsrc [skip ci] 2022-10-10 09:40:00 +00:00
allcontributors[bot] bfdc1991a5
docs: update AUTHORS.md [skip ci] 2022-10-10 09:39:59 +00:00
liv 4600bc344c
Merge pull request #1216 from gfaugere/add-vscode-extensions-recommendations
feat: Add VSCode extension recommendation
2022-10-10 11:39:21 +02:00
liv dc14626ae1
Merge pull request #1226 from rust-lang/all-contributors/add-duchonic
docs: add duchonic as a contributor for content
2022-10-10 11:29:37 +02:00
allcontributors[bot] 88a767f39a
docs: update .all-contributorsrc [skip ci] 2022-10-10 09:29:28 +00:00
allcontributors[bot] 1e1b689775
docs: update AUTHORS.md [skip ci] 2022-10-10 09:29:27 +00:00
liv 896b9cea2a
Merge pull request #1222 from duchonic/patch-1
additional test for fees
2022-10-10 11:29:10 +02:00
Duchoud Nicolas 76392d81fa
Added spaces around * 2022-10-04 11:43:23 +02:00
Duchoud Nicolas 4749768734
additional test for fees 2022-10-04 11:36:18 +02:00
Gaëtan Faugère b4c7507b4d
feat: Add VSCode extension recommendation 2022-09-30 15:50:45 +02:00
liv cade600c91
Merge pull request #1203 from skaunov/patch-2
Correct a link in `threads1` `hint`
2022-09-29 10:47:56 +02:00
liv 069e55c5ee
Merge pull request #1213 from rust-lang/all-contributors/add-cj81499
docs: add cj81499 as a contributor for content
2022-09-29 10:45:27 +02:00
allcontributors[bot] a59e305665
docs: update .all-contributorsrc [skip ci] 2022-09-29 08:45:07 +00:00
allcontributors[bot] 58cba835f2
docs: update AUTHORS.md [skip ci] 2022-09-29 08:45:06 +00:00
liv 6174b5caf0
Merge pull request #1210 from cj81499/iterators1-hint
improve hint for iterators1
2022-09-29 10:44:57 +02:00
liv 2e33d422a5
Merge pull request #1212 from Tostapunk/fix/errors-patch1
fix: Fix typo in errors5 hint
2022-09-29 10:44:20 +02:00
Tostapunk 1660f1647e fix: Fix typo in errors5 hint
fixes #1205
2022-09-28 23:40:00 +02:00
Cal Jacobson efdebd48b6
improve hint for iterators1 2022-09-25 15:22:15 -05:00
skaunov c0b3194a55
Correct a link in `threads1` `hint`
It didn't work without last character
2022-09-17 00:26:05 +03:00
liv 2398f378b0
Merge pull request #1200 from rust-lang/all-contributors/add-skaunov
docs: add skaunov as a contributor
2022-09-15 12:00:02 +02:00
allcontributors[bot] 37a7344219
docs: update .all-contributorsrc [skip ci] 2022-09-15 09:29:15 +00:00
allcontributors[bot] 3375b67b2b
docs: update AUTHORS.md [skip ci] 2022-09-15 09:29:14 +00:00
liv 56b52115d9
Merge pull request #1199 from skaunov/patch-1
Add link to `std` in `strings3` hint
2022-09-15 11:28:58 +02:00
skaunov 3028d1395c
Add link to `std` in `strings3` hint
Seems like it's the first place, where `std` is introduced in Rustlings, and it's a good place to facilitate docs discovery for user. As _the book_ seems to have no Rustlings-sized solutions for this exercise.
2022-09-13 16:33:03 +03:00
liv b85b8de232
Merge pull request #1198 from rust-lang/all-contributors/add-gasparitiago
docs: add gasparitiago as a contributor
2022-09-13 10:11:22 +02:00
allcontributors[bot] 072847943a
docs: update .all-contributorsrc [skip ci] 2022-09-13 08:11:13 +00:00
allcontributors[bot] d3c0c18946
docs: update AUTHORS.md [skip ci] 2022-09-13 08:11:12 +00:00
liv 4190b73f70
Merge pull request #1196 from gasparitiago/patch-1
fix(quiz2): fix comment regarding hints
2022-09-13 10:10:55 +02:00
Tiago De Gaspari 68fe97bbc2
fix(quiz2): fix comment regarding hints
Change the comment on quiz2.rs, since there are no hints.
2022-09-12 10:53:59 -03:00
Arkid 34ed235885
fix: Add a deref in the test code
It's virtually impossible to write a the `num_sq` function to take the Box since it doesn't implement `MulAssign`.
2022-09-09 02:40:22 +02:00
mokou c923e7af73 chore: release 5.2.1 2022-09-06 12:22:17 +02:00
liv c838d446ad
Merge pull request #1191 from rust-lang/all-contributors/add-memark
docs: add memark as a contributor for content
2022-09-06 12:17:16 +02:00
allcontributors[bot] 50323a3977
docs: update .all-contributorsrc [skip ci] 2022-09-06 10:17:08 +00:00
allcontributors[bot] 7b5ef323c5
docs: update AUTHORS.md [skip ci] 2022-09-06 10:17:07 +00:00
liv 199150fda2
Merge pull request #1171 from memark/patch-1
Add quotes for readability of output
2022-09-06 12:16:54 +02:00
liv c1b5a0511f
Merge pull request #1190 from rust-lang/all-contributors/add-miguelraz
docs: add miguelraz as a contributor for content
2022-09-06 12:14:13 +02:00
allcontributors[bot] 742200d14b
docs: update .all-contributorsrc [skip ci] 2022-09-06 10:14:06 +00:00
allcontributors[bot] 900d58d054
docs: update AUTHORS.md [skip ci] 2022-09-06 10:14:05 +00:00
liv 6af86bbf22
Merge pull request #1186 from miguelraz/patch-1
typo fix
2022-09-06 12:13:51 +02:00
liv 4c1070faab
Merge pull request #1189 from rust-lang/all-contributors/add-rzrymiak
docs: add rzrymiak as a contributor for content
2022-09-06 12:13:34 +02:00
allcontributors[bot] f437f8e9ea
docs: update .all-contributorsrc [skip ci] 2022-09-06 10:13:27 +00:00
allcontributors[bot] c9c743967f
docs: update AUTHORS.md [skip ci] 2022-09-06 10:13:26 +00:00
liv 88c9a23884
Merge pull request #1085 from rzrymiak/main
Update README.md
2022-09-06 12:13:09 +02:00
liv 1d5700e58a
fix(quiz1): add fourth assert 2022-09-06 12:10:53 +02:00
liv 96552e07c2
fix(quiz1): correct explanation once again 2022-09-06 12:09:43 +02:00
Miguel Raz Guzmán Macedo c97e659d78
typox fix 2022-09-05 10:18:45 -05:00
Magnus Markling 291da61fda
Add quotes 2022-08-28 15:12:15 +02:00
Magnus Markling 94bdb708fe
Add quotes 2022-08-28 15:10:29 +02:00
mokou 3309a01b5e chore: release 5.2.0 2022-08-27 19:48:15 +01:00
liv 5a03e46d69
Merge pull request #1166 from rust-lang/all-contributors/add-Kodylow
docs: add Kodylow as a contributor for content
2022-08-25 12:12:23 +02:00
allcontributors[bot] bf95a34553
docs: update .all-contributorsrc [skip ci] 2022-08-25 10:12:15 +00:00
allcontributors[bot] 33e501981a
docs: update AUTHORS.md [skip ci] 2022-08-25 10:12:14 +00:00
liv 4ee9a0f6b9
Merge pull request #1164 from Kodylow/quiz1-typo-fix
Fix Quiz 1 >= Typo
2022-08-25 12:11:49 +02:00
Kody Low d6e26bb350 2nd assert is for greater than or equal to, not "more than" like it says in the instructions 2022-08-24 08:33:17 -07:00
liv f6a37e28ba
Merge pull request #1163 from rust-lang/all-contributors/add-GabrielBianconi
docs: add GabrielBianconi as a contributor for content
2022-08-24 11:16:05 +02:00
liv a2f66e6a67
Merge pull request #1161 from GabrielBianconi/patch-1
Fix typo in `threads3` hint
2022-08-24 11:15:52 +02:00
allcontributors[bot] b92e7b968f
docs: update .all-contributorsrc [skip ci] 2022-08-24 09:15:52 +00:00
allcontributors[bot] 6c2630afcf
docs: update AUTHORS.md [skip ci] 2022-08-24 09:15:51 +00:00
Gabriel Bianconi 86506fa5fd
Fix typo in `threads3` hint 2022-08-22 23:47:23 -04:00
liv 96098d228a
Merge pull request #1151 from magnusrodseth/1031-reset-exercise
Add reset command for a given filename
2022-08-18 14:07:15 +02:00
magnusrodseth d59dde320b chore: Add suggested changes 2022-08-18 12:47:26 +02:00
liv fb7d3bf35d
Merge pull request #1155 from rust-lang/all-contributors/add-rubiesonthesky
docs: add rubiesonthesky as a contributor for content
2022-08-18 11:54:39 +02:00
allcontributors[bot] 50272a58e2
docs: update .all-contributorsrc [skip ci] 2022-08-18 09:54:30 +00:00
allcontributors[bot] 93f60d3f8d
docs: update AUTHORS.md [skip ci] 2022-08-18 09:54:29 +00:00
liv 97bf2469b6
Merge pull request #1154 from rust-lang/all-contributors/add-magnusrodseth
docs: add magnusrodseth as a contributor for content
2022-08-18 11:54:06 +02:00
allcontributors[bot] 2088dfbaf6
docs: update .all-contributorsrc [skip ci] 2022-08-18 09:53:55 +00:00
allcontributors[bot] e889c5bb60
docs: update AUTHORS.md [skip ci] 2022-08-18 09:53:54 +00:00
liv 44d609816b
Merge pull request #1150 from magnusrodseth/1109-options2-test
`options2`: Convert the main function into tests
2022-08-18 11:53:16 +02:00
magnusrodseth 99ea2cbba7 chore: make options2 not compile deliberately 2022-08-17 16:53:41 +02:00
magnusrodseth 0aff5340b5 test: Add integration tests 2022-08-17 16:43:48 +02:00
magnusrodseth 6f44cb1dd2 feat: Add reset command, given a filename 2022-08-17 16:31:53 +02:00
magnusrodseth 52a29aa84b test: Convert main function to working tests 2022-08-17 12:50:34 +02:00
mokou d0c7b06eff chore: release 5.1.1 2022-08-17 10:43:50 +02:00
liv 5f9dd129ea
Merge pull request #1149 from rust-lang/all-contributors/add-vostok92
docs: add vostok92 as a contributor for content
2022-08-17 10:41:58 +02:00
allcontributors[bot] 34392662a6
docs: update .all-contributorsrc [skip ci] 2022-08-17 08:41:50 +00:00
allcontributors[bot] 3c1fe226f0
docs: update AUTHORS.md [skip ci] 2022-08-17 08:41:49 +00:00
liv 3ac002934d
Merge pull request #1148 from vostok92/main
fix(options1): wrong assertions
2022-08-17 10:41:34 +02:00
vostok92 4455c22b9a
Update options1.rs
Fix assertions
2022-08-17 13:51:17 +09:00
mokou 714a8075cc chore: bump version 2022-08-16 09:54:25 +02:00
mokou 0a9d34a25a doc: update changelog 2022-08-16 09:53:40 +02:00
mokou bb6b9e1704 doc: add zulip link 2022-08-16 09:41:41 +02:00
liv 8a4ed70762
Merge pull request #1069 from exdx/rc-exercise
feat: add rc1.rs exercise
2022-08-16 09:37:39 +02:00
liv 1c3b003c7c
Merge branch 'main' into rc-exercise 2022-08-16 09:37:34 +02:00
liv 25ab52b8e7
Merge pull request #1103 from exdx/feat/cow
feat: add cow1.rs exercise
2022-08-16 09:35:53 +02:00
liv cd0ee50dd7
Merge pull request #1146 from rust-lang/all-contributors/add-nico-vromans
docs: add nico-vromans as a contributor for content
2022-08-16 09:32:57 +02:00
allcontributors[bot] 2f2f141564
docs: update .all-contributorsrc [skip ci] 2022-08-16 07:32:32 +00:00
allcontributors[bot] 4400ce2892
docs: update AUTHORS.md [skip ci] 2022-08-16 07:32:31 +00:00
liv cc1b22d45f
Merge pull request #1144 from nico-vromans/patch-1
Update options1.rs
2022-08-16 09:32:18 +02:00
Nico Vromans e8122daa87
Update options1.rs
Added extra test for before 10PM and updated the test for at 10PM (when it's 10PM there should already not be any ice cream left, as per the description). Also fixed the `raw_value` test, as it is later than 10PM, so there should be no more ice cream left.
2022-08-15 10:05:50 +02:00
liv 8dfffe8aa2
Merge pull request #1141 from rust-lang/all-contributors/add-markusboehme
docs: add markusboehme as a contributor for code
2022-08-12 10:25:27 +02:00
allcontributors[bot] f107e2f31d
docs: update .all-contributorsrc [skip ci] 2022-08-12 08:25:13 +00:00
allcontributors[bot] cf813b707c
docs: update AUTHORS.md [skip ci] 2022-08-12 08:25:12 +00:00
liv 2b0c73c7e4
Merge pull request #1140 from markusboehme/fix/options1/remove-unused-code
fix(options1): remove unused code
2022-08-12 10:24:58 +02:00
Markus Boehme 3c84cc1702 fix(options1): remove unused code
Since rewriting the exercise in commit 06e4fd3765 the print_number
function goes unused. Remove it.
2022-08-11 22:54:08 +02:00
liv 57377e8bf7
Merge pull request #1139 from rust-lang/all-contributors/add-brianfakhoury
docs: add brianfakhoury as a contributor for content
2022-08-11 12:38:36 +02:00
allcontributors[bot] a16e7b918a
docs: update .all-contributorsrc [skip ci] 2022-08-11 10:38:01 +00:00
allcontributors[bot] 7e1a4c0363
docs: update AUTHORS.md [skip ci] 2022-08-11 10:38:00 +00:00
liv cfbce9d225
Merge pull request #1138 from rust-lang/all-contributors/add-johnmendel
docs: add johnmendel as a contributor for code
2022-08-11 12:31:22 +02:00
allcontributors[bot] c1c4f86317
docs: update .all-contributorsrc [skip ci] 2022-08-11 10:30:25 +00:00
allcontributors[bot] dcf4efe628
docs: update AUTHORS.md [skip ci] 2022-08-11 10:30:24 +00:00
liv 26b347a8bd
Merge pull request #1131 from johnmendel/main
fix(traits5): make exercise prefer trait-based solution
2022-08-11 12:30:12 +02:00
liv 3c85fc4d39
Merge pull request #1136 from rust-lang/all-contributors/add-Mouwrice
docs: add Mouwrice as a contributor for content
2022-08-11 12:29:35 +02:00
liv a7ca40d8a3
Merge pull request #1132 from brianfakhoury/patch-1
Fix minor spelling
2022-08-11 12:29:16 +02:00
allcontributors[bot] 8d9df94b6c
docs: update .all-contributorsrc [skip ci] 2022-08-11 10:27:28 +00:00
allcontributors[bot] bf84fe029f
docs: update AUTHORS.md [skip ci] 2022-08-11 10:27:27 +00:00
liv ca96e32ff7
Merge pull request #1133 from Mouwrice/fix/macro-readme-book-link
fix(macros-readme): update the book link to the more recent version of the book
2022-08-11 12:27:12 +02:00
Mouwrice ef70ad907f fix(macros-readme): update the book link to the more recent version of the book 2022-08-09 20:27:27 +02:00
Brian Fakhoury f25f77e915
Fix minor spelling 2022-08-08 15:39:35 -04:00
John Mendelewski III a0a06232ce fix(traits5): make exercise prefer trait-based solution
closes #1088
2022-08-07 14:51:16 -04:00
liv 300cdc27dd
Merge pull request #1123 from rust-lang/all-contributors/add-clairew
docs: add clairew as a contributor for content
2022-08-03 17:36:14 +02:00
allcontributors[bot] 7a7281764c
docs: update .all-contributorsrc [skip ci] 2022-08-03 15:36:08 +00:00
allcontributors[bot] d27c12e35d
docs: update AUTHORS.md [skip ci] 2022-08-03 15:36:07 +00:00
liv cbf9016187
Merge pull request #1110 from clairew/fix/info-toml-typo
fix: remove extra " typo in info.toml
2022-08-03 17:35:51 +02:00
liv 6ac42c5141
Merge pull request #1122 from rust-lang/all-contributors/add-tvkn
docs: add tvkn as a contributor for content
2022-08-03 17:35:08 +02:00
allcontributors[bot] 6289238d1d
docs: update .all-contributorsrc [skip ci] 2022-08-03 15:35:00 +00:00
allcontributors[bot] e3b65186fd
docs: update AUTHORS.md [skip ci] 2022-08-03 15:34:59 +00:00
liv affc815447
Merge pull request #1112 from tvkn/feat/options1/update-expected-result
feat(options1): update expected result
2022-08-03 17:34:43 +02:00
mokou af301a2efe feat(errors5): add simpler explanation for box dyn 2022-08-03 17:31:42 +02:00
liv 977a167335
Merge pull request #1121 from rust-lang/all-contributors/add-Lioness100
docs: add Lioness100 as a contributor for content
2022-08-03 17:13:28 +02:00
allcontributors[bot] 08f42761f9
docs: update .all-contributorsrc [skip ci] 2022-08-03 15:13:19 +00:00
allcontributors[bot] a04d62372f
docs: update AUTHORS.md [skip ci] 2022-08-03 15:13:18 +00:00
liv 5a8f2b62e3
Merge pull request #1117 from Lioness100/refactor/todo
refactor(box1): prefer todo! over unimplemented!
2022-08-03 17:12:58 +02:00
Lioness100 c5ecc37a9a
refactor(box1): prefer todo! over unimplemented! 2022-07-30 10:50:07 -04:00
Mikael Frosthage 5ff23a2861 Improve hint for as_ref_mut 2022-07-26 22:02:50 +02:00
Tristan Nicholls a56f648cce feat(options1): update expected result
Expected result is updated to better showcase the difference between
- a valid result with no ice-creams `Some(0)`, and
- an invalid result `None`.
2022-07-26 21:01:09 +02:00
Claire Wang a3a5fbeddf fix: remove extra " typo in info.toml 2022-07-25 19:00:35 -07:00
liv 3963559810
Merge pull request #1106 from rust-lang/all-contributors/add-thatlittleboy
docs: add thatlittleboy as a contributor for content
2022-07-24 23:26:20 +02:00
allcontributors[bot] 4bee3399f8
docs: update .all-contributorsrc [skip ci] 2022-07-24 21:26:13 +00:00
allcontributors[bot] 32687cc66e
docs: update AUTHORS.md [skip ci] 2022-07-24 21:26:12 +00:00
liv d21a8e63c1
Merge pull request #1102 from thatlittleboy/fix/hints-typos
Fix/hints typos
2022-07-24 23:25:58 +02:00
Denton24646 72e21a2a6c feat: add cow1.rs exercise 2022-07-23 17:59:53 -04:00
Jeremy Goh 301bc52857
fix: lineno typo 2022-07-24 00:37:40 +08:00
Jeremy Goh f88c7d1e8c
fix: reference to variables4 2022-07-24 00:36:27 +08:00
liv 3a327096c6
Merge pull request #1101 from rust-lang/all-contributors/add-saikatdas0790
docs: add saikatdas0790 as a contributor for content
2022-07-23 17:41:10 +02:00
allcontributors[bot] 7a6079b46a
docs: update .all-contributorsrc [skip ci] 2022-07-23 15:41:03 +00:00
allcontributors[bot] c1fc77e50f
docs: update AUTHORS.md [skip ci] 2022-07-23 15:41:02 +00:00
liv cbca27dffe
Merge pull request #1099 from saikatdas0790/patch-1
Fix manual installation with install to the current directory
2022-07-23 17:40:43 +02:00
liv 5cb40b2c95
Merge pull request #1094 from greg-el/main
fix(run): correct "PAS" in `integration_tests.rs`
2022-07-23 17:38:27 +02:00
liv e0fb7e72bb
Merge pull request #1100 from rust-lang/all-contributors/add-EdwinChang24
docs: add EdwinChang24 as a contributor for content
2022-07-23 17:37:13 +02:00
allcontributors[bot] e858fd94fb
docs: update .all-contributorsrc [skip ci] 2022-07-23 15:37:06 +00:00
allcontributors[bot] 56c05f6232
docs: update AUTHORS.md [skip ci] 2022-07-23 15:37:05 +00:00
liv 2663cc8e80
Merge pull request #1092 from EdwinChang24/fix-editorconfig
fix: Fix typo in .editorconfig
2022-07-23 17:36:42 +02:00
Saikat Das 2356b5c1b6
Fix manual installation with install to the current directory 2022-07-23 15:55:30 +05:30
Greg Leonard e9f5c9423c fix(run): correct "PAS" in `integration_tests.rs` 2022-07-21 23:13:22 +01:00
Edwin Chang f34d390bba
fix: Fix typo in .editorconfig 2022-07-20 18:23:31 -04:00
liv fb7dac75a7
Merge pull request #1089 from greg-el/main
fix(traits5): fix "paramter" spelling
2022-07-20 09:09:43 +02:00
Greg Leonard f9413b8ae1 fix(traits5): fix "paramter" spelling 2022-07-19 20:05:04 +01:00
liv fef10b8a0f
Merge pull request #1087 from rust-lang/all-contributors/add-PrettyWood
docs: add PrettyWood as a contributor for content
2022-07-19 14:40:31 +02:00
allcontributors[bot] 82c41a61b6
docs: update .all-contributorsrc [skip ci] 2022-07-19 12:40:23 +00:00
allcontributors[bot] 3b74f5dae8
docs: update AUTHORS.md [skip ci] 2022-07-19 12:40:22 +00:00
liv 316fc58b4c
Merge pull request #1086 from PrettyWood/patch-2
remove small typo in hint of threads3
2022-07-19 14:40:07 +02:00
Eric Jolibois 8a4dca5fa6
remove small typo in hint of threads3 2022-07-19 11:45:34 +02:00
rzrymiak 4910bae10f
Update README.md
Minor grammatical edit in README.md
2022-07-18 17:00:16 -07:00
liv 0e7de2e7a7
Merge pull request #1079 from Tostapunk/fix/lifetimes-patch1
fix: Improve hint of lifetimes2
2022-07-18 16:06:16 +02:00
Mattia Schiavon e1d6abb4c9
Apply suggestions from code review
Co-authored-by: liv <mokou@fastmail.com>
2022-07-18 14:44:16 +02:00
Tostapunk 02d78c3e84 fix: Improve hint of lifetimes2
fixes #1071
2022-07-18 14:11:51 +02:00
liv 727fc3037c
Merge pull request #1078 from rust-lang/all-contributors/add-Tostapunk
docs: add Tostapunk as a contributor for content
2022-07-18 10:48:20 +02:00
allcontributors[bot] 1aecf32748
docs: update .all-contributorsrc [skip ci] 2022-07-18 08:47:49 +00:00
allcontributors[bot] 2f113b9b06
docs: update AUTHORS.md [skip ci] 2022-07-18 08:47:49 +00:00
liv d46a97ef97
Merge pull request #1076 from Tostapunk/main
fix(traits5.rs): wrong line number
2022-07-18 10:47:35 +02:00
Tostapunk 7035d6787c fix(traits5.rs): wrong line number 2022-07-18 00:27:57 +02:00
Denton24646 ce86d252e5 feat: add rc1.rs exercise 2022-07-16 17:39:03 -04:00
liv 8a0c6cfcfa
Merge pull request #1068 from wojexe/patch-2
fix(traits4.rs): wrong line number
2022-07-16 20:48:09 +02:00
wojexe b0e070c743
fix(traits4.rs): wrong line number
fixes #1067
2022-07-16 19:51:50 +02:00
liv ab291a1fcd
Merge pull request #1065 from rust-lang/all-contributors/add-wojexe
docs: add wojexe as a contributor for content
2022-07-16 18:27:48 +02:00
allcontributors[bot] 3bb008ebbb
docs: update .all-contributorsrc [skip ci] 2022-07-16 16:27:41 +00:00
allcontributors[bot] e8cf9b2628
docs: update AUTHORS.md [skip ci] 2022-07-16 16:27:40 +00:00
liv 179202a34a
Merge pull request #1064 from wojexe/patch-1
fix: make strings3.rs comment wording more clear
2022-07-16 18:27:26 +02:00
wojexe 55900c65cb
fix: make strings3.rs comment wording more clear
fixes #1063
2022-07-16 17:28:13 +02:00
mokou 5435b80841 chore: bump version 2022-07-16 14:30:04 +02:00
mokou 5138f22e00 doc: update book links 2022-07-16 14:25:10 +02:00
mokou cc3e1a8511 doc: update changelog 2022-07-16 14:17:24 +02:00
mokou c791cf4232 Merge branch '5.0-dev' 2022-07-15 14:31:49 +02:00
liv f1c4caa37f
Merge pull request #1059 from rust-lang/all-contributors/add-neilpate
docs: add neilpate as a contributor for content
2022-07-15 14:19:35 +02:00
allcontributors[bot] e36c95bb3a
docs: update .all-contributorsrc [skip ci] 2022-07-15 12:19:27 +00:00
allcontributors[bot] bc25309763
docs: update AUTHORS.md [skip ci] 2022-07-15 12:19:26 +00:00
Neil Pate c265b681b1 fix(quiz1): change function name 2022-07-15 14:18:31 +02:00
liv 52b9f199a2
Merge pull request #1058 from rust-lang/all-contributors/add-swhiteCQC
docs: add swhiteCQC as a contributor for content
2022-07-15 14:16:04 +02:00
allcontributors[bot] 211528c31b
docs: update .all-contributorsrc [skip ci] 2022-07-15 12:15:57 +00:00
allcontributors[bot] 2b349e3b28
docs: update AUTHORS.md [skip ci] 2022-07-15 12:15:56 +00:00
mokou 1a7a3f5c8e fix(traits): update hint comments 2022-07-15 14:14:48 +02:00
Sam White 63b0c7e399 feat: add traits5.rs exercise 2022-07-15 14:14:15 +02:00
Sam White 599d634ee2 feat: Add traits4.rs exercise 2022-07-15 14:13:44 +02:00
Sam White f43c6d7877 feat: Add traits3.rs exercise 2022-07-15 14:13:15 +02:00
Rod Elias 9b66b2a0e9 fix(try_from_into): fix function name 2022-07-15 14:08:51 +02:00
liv 64757698f4
Merge pull request #1057 from rust-lang/all-contributors/add-jayber
docs: add jayber as a contributor for content
2022-07-15 14:05:50 +02:00
allcontributors[bot] 2427184017
docs: update .all-contributorsrc [skip ci] 2022-07-15 12:05:36 +00:00
allcontributors[bot] 75ba60bda6
docs: update AUTHORS.md [skip ci] 2022-07-15 12:05:35 +00:00
jayber 1ef8dacaf6 feat: add lifetimes exercises 2022-07-15 14:03:38 +02:00
liv 7cabbab580
Merge pull request #1056 from rust-lang/all-contributors/add-Jzow
docs: add Jzow as a contributor for content
2022-07-15 13:49:25 +02:00
allcontributors[bot] 9329c51df0
docs: update .all-contributorsrc [skip ci] 2022-07-15 11:49:09 +00:00
allcontributors[bot] bda4d548b4
docs: update AUTHORS.md [skip ci] 2022-07-15 11:49:08 +00:00
James Zow 1cc5df0e14 feat: add github actions config 2022-07-15 13:46:03 +02:00
liv a0b3156347
Merge pull request #1055 from rust-lang/all-contributors/add-exdx
docs: add exdx as a contributor for content
2022-07-15 13:29:53 +02:00
allcontributors[bot] c9332062ce
docs: update .all-contributorsrc [skip ci] 2022-07-15 11:29:45 +00:00
allcontributors[bot] b71429bef0
docs: update AUTHORS.md [skip ci] 2022-07-15 11:29:44 +00:00
exdx a3b5278b42 feat: add threads3.rs exercise 2022-07-15 13:28:49 +02:00
mokou a3c4c1ccb4 fix: re-add missing done comments 2022-07-15 13:24:11 +02:00
mokou a6e86fc995 doc: update readme 2022-07-15 13:22:29 +02:00
mokou 0784f54141 doc: update contributing 2022-07-15 12:57:54 +02:00
mokou b609f0431c feat: remove advanced_errs 2022-07-15 12:51:12 +02:00
mokou 4bebdb5f02 feat(as_ref_mut): add AsMut section 2022-07-15 12:50:01 +02:00
mokou 81d25aecff feat(try_from_into): add hint comments 2022-07-15 12:49:49 +02:00
mokou 74f44f55e3 feat(conversions): add hint comments 2022-07-15 12:34:10 +02:00
mokou 8cfedb1673 feat(clippy): add clippy3 2022-07-15 12:28:47 +02:00
mokou 7fc393bed4 chore: remove quiz4 2022-07-15 12:13:40 +02:00
mokou d3a335bc64 feat(macros): add hint comments 2022-07-15 12:05:26 +02:00
liv 636c8ac03d
Merge pull request #1054 from rust-lang/all-contributors/add-jaystile
docs: add jaystile as a contributor for content
2022-07-15 12:01:56 +02:00
allcontributors[bot] b1f82890c9
docs: update .all-contributorsrc [skip ci] 2022-07-15 10:01:49 +00:00
allcontributors[bot] 7b371afc06
docs: update AUTHORS.md [skip ci] 2022-07-15 10:01:48 +00:00
mokou f99eafc56f fix(threads): add hint comments 2022-07-15 11:59:53 +02:00
jaystile b4f52cb937 feat: Adding threads1.rs with a focus on JoinHandles and waiting for
spawned threads to finish. Moved the original threads1.rs to threads2.rs
with the focus on the Mutex and modifying shared data. #892
2022-07-15 11:58:26 +02:00
liv aa472f702e
Merge pull request #1053 from rust-lang/all-contributors/add-pgjbz
docs: add pgjbz as a contributor for content
2022-07-14 18:30:20 +02:00
allcontributors[bot] 09ccadeec6
docs: update .all-contributorsrc [skip ci] 2022-07-14 16:29:51 +00:00
allcontributors[bot] 3e7e65b9f0
docs: update AUTHORS.md [skip ci] 2022-07-14 16:29:50 +00:00
mokou 20024d40c5 feat(iterators): update hint comments 2022-07-14 18:29:09 +02:00
Paulo Gabriel Justino Bezerra 251d0dda34 feat(iterators4): add factorial of zero test 2022-07-14 18:27:34 +02:00
Ryosuke YASUOKA 3c63ef0668 fix(iterators3): insert todo!() into divide() to compile without error 2022-07-14 18:19:35 +02:00
mokou cf9629cb0e feat: move box/arc behind iterators 2022-07-14 18:17:23 +02:00
mokou 016d718a28 feat(tests): add hint comments 2022-07-14 18:15:47 +02:00
mokou 98b8d3f17d feat(traits): add hint comments 2022-07-14 18:14:41 +02:00
mokou 5979d408a9 feat: move generics3 to be quiz3 2022-07-14 18:11:18 +02:00
mokou d61f79595a feat(generics): add hint comments 2022-07-14 18:11:05 +02:00
liv 69b07b2571
Merge pull request #1052 from rust-lang/all-contributors/add-nacairns1
docs: add nacairns1 as a contributor for content
2022-07-14 18:04:05 +02:00
allcontributors[bot] 537abe273a
docs: update .all-contributorsrc [skip ci] 2022-07-14 16:03:58 +00:00
allcontributors[bot] b2c82d9018
docs: update AUTHORS.md [skip ci] 2022-07-14 16:03:57 +00:00
liv 9f44550cdc
Merge pull request #1051 from rust-lang/all-contributors/add-icecream17
docs: add icecream17 as a contributor for content
2022-07-14 18:03:24 +02:00
allcontributors[bot] 34c8833d06
docs: update .all-contributorsrc [skip ci] 2022-07-14 16:03:15 +00:00
allcontributors[bot] 5d02f6e516
docs: update AUTHORS.md [skip ci] 2022-07-14 16:03:14 +00:00
mokou c34e2adcbb feat(errors): Improve comments and hints 2022-07-14 18:02:33 +02:00
Noah Cairns 5e1ca4b995 fix(errors5): improve exercise instructions 2022-07-14 17:59:29 +02:00
Steven nguyen 582320aded chore(errors1): use `is_empty()` instead of `len() > 0`
more idiomatic according to clippy
2022-07-14 17:55:07 +02:00
mokou b71feed824 feat(options): add hint comments 2022-07-14 17:53:42 +02:00
mokou 06e4fd3765 feat(options1): rewrite to remove array stuff 2022-07-14 17:53:27 +02:00
mokou b644558c19 fix: rename option to options 2022-07-14 17:34:50 +02:00
mokou 472d7944f9 fix(quiz2): add hint comment 2022-07-14 17:30:43 +02:00
mokou c64b340622 feat: rework quiz2 2022-07-14 13:24:15 +02:00
mokou f443f4e7b3 feat: move quiz2 to be strings4 2022-07-14 13:01:40 +02:00
mokou ab8572e15b fix(hashmaps): adjust hint comments 2022-07-14 12:58:28 +02:00
Sateesh Basavaraju 1e54bc61e8 feat: Add hashmap3 exercise. 2022-07-14 12:57:47 +02:00
mokou fe54d0f85b fix(modules): adjust hint comments 2022-07-14 12:35:49 +02:00
mokou c1ed6b10fe feat(strings): add strings3 2022-07-14 12:31:28 +02:00
mokou f5e4c16eed feat(strings): move before modules 2022-07-14 12:18:21 +02:00
liv 2f69f21f39
Merge pull request #1050 from rust-lang/all-contributors/add-YsuOS
docs: add YsuOS as a contributor for content
2022-07-14 12:12:40 +02:00
allcontributors[bot] c92de1f8a6
docs: update .all-contributorsrc [skip ci] 2022-07-14 10:12:33 +00:00
allcontributors[bot] 0ddb997076
docs: update AUTHORS.md [skip ci] 2022-07-14 10:12:32 +00:00
mokou c6bc97adc1 feat(enums3): add hint comment, remove enums1 hint 2022-07-14 12:11:38 +02:00
Ryosuke YASUOKA d0e8efd19e feat(enums3): Add hint 2022-07-14 12:11:15 +02:00
liv ed6d541d66
Merge pull request #1049 from rust-lang/all-contributors/add-camperdue42
docs: add camperdue42 as a contributor for content
2022-07-14 12:06:13 +02:00
allcontributors[bot] 62578269eb
docs: update .all-contributorsrc [skip ci] 2022-07-14 10:06:04 +00:00
allcontributors[bot] 8fe02d33a9
docs: update AUTHORS.md [skip ci] 2022-07-14 10:06:03 +00:00
mokou 886d599c96 fix(structs): add hint comments 2022-07-14 12:04:54 +02:00
camperdue42 4531c21bf1 fix(structs3): Add panic! statement into structs3
closes #685
2022-07-14 12:04:30 +02:00
mokou 4dffa0d10d fix(structs1): rename to unit-like struct 2022-07-14 12:00:46 +02:00
mokou 19bec50399 feat(structs1): convert structs to use i32 types 2022-07-14 11:59:29 +02:00
mokou 2e62505143 feat(move_semantics): finish updating comments 2022-07-12 15:43:26 +02:00
exdx 16ff57bbff fix(move_semantics2): clarify referencing 2022-07-12 15:26:55 +02:00
mokou bb0cf92b8b feat(move_semantics): clarify some hints 2022-07-12 15:25:31 +02:00
mokou 7452d0d603 fix(primitive_types): clean up 2022-07-12 15:22:01 +02:00
mokou 3c4c9c54c9 feat: remove collections to hashmaps 2022-07-12 15:18:05 +02:00
mokou 2f7fd51304 feat: move vec exercises into their own folder 2022-07-12 15:16:25 +02:00
mokou 8e1f617d34 feat(vec): update vec exercises 2022-07-12 15:05:47 +02:00
mokou 7af12ba9aa feat(primitive_types): fixups 2022-07-12 14:54:12 +02:00
mokou 6020ec1fe2 feat: reorder vec and primtypes before moving 2022-07-12 14:53:56 +02:00
Adam Sherwood 5812f1f27b fix(if2): Rename if2 exercise function to foo_if_fizz.
The reasoning here is pretty straightforward: you don't say "Hungry, if
eat." That doesn't make sense. We want to get "foo" back if given
"fizz", so it seems this makes far more sense as "Eat, if hungry," or in
this case, return `foo_if_fizz` is given.
2022-07-12 11:13:04 +02:00
mokou 4868d18ea3 feat(if): replace hints 2022-07-12 11:10:08 +02:00
mokou 742fb08e01 feat(functions): more small fixes 2022-07-12 11:08:29 +02:00
mokou 093a525450 fix(functions): clarify README wording 2022-07-11 14:00:12 +02:00
Cooper Gillan b3ec8fe022 chore: Tweak punctuation in variables6.rs hint
While the meaning is still obvious as is, it makes a little more sense
to use a colon here =)
2022-07-11 13:53:31 +02:00
Cooper Gillan 9688609d08 chore: Update variables6.rs hint book link, wording
While the included link for variables6 does navigate to the correct
page, the header in the link itself does not actually exist so it
only loads the top of the page. There is, however, some text about
the difference between variables and constants in the "Constants"
section, so reword the hint some and update the link.
2022-07-11 13:53:09 +02:00
gavin 60410cfd2e fix(variables5): Add nudge for shadowing variable 2022-07-11 13:48:49 +02:00
mokou 81edc4234f fix(variables): reorder and redo hint texts 2022-07-11 13:43:41 +02:00
mokou c3c21ad91f fix(intro): clarify hint usage 2022-07-11 13:35:16 +02:00
mokou 9ed4b0683e fix(intro1): link to exercise file in hint 2022-07-11 13:20:18 +02:00
mokou 0ded8a90c0 feat(intro1): add more hints 2022-07-11 13:19:19 +02:00
mokou 0aee54a82b chore: unify hint language use 2022-07-11 13:12:47 +02:00
mokou ed0f278a8f chore: remove mod.rs files and exercises feature 2022-07-11 12:53:49 +02:00
liv bf69145bb9
Merge pull request #1048 from rust-lang/all-contributors/add-Drew-Morris
docs: add Drew-Morris as a contributor for code
2022-07-11 11:59:41 +02:00
allcontributors[bot] 1caa388e92
docs: update .all-contributorsrc [skip ci] 2022-07-11 09:59:33 +00:00
allcontributors[bot] 11618b65c0
docs: update AUTHORS.md [skip ci] 2022-07-11 09:59:32 +00:00
liv a475e09cfc
Merge pull request #1044 from Drew-Morris/main
chore: Update spacing in Cargo.toml
2022-07-11 11:59:13 +02:00
liv fba79ea793
Merge pull request #1047 from rust-lang/all-contributors/add-KatanaFluorescent
docs: add KatanaFluorescent as a contributor for code
2022-07-11 11:58:41 +02:00
allcontributors[bot] 440138af84
docs: update .all-contributorsrc [skip ci] 2022-07-11 09:58:19 +00:00
allcontributors[bot] 8835034bd2
docs: update AUTHORS.md [skip ci] 2022-07-11 09:58:18 +00:00
liv 5fbf28dfec
Merge pull request #1038 from KatanaFluorescent/main
change edition to 2021 in exercices.rs
2022-07-11 11:57:59 +02:00
liv 2a12df4591
Merge pull request #1046 from rust-lang/all-contributors/add-0pling
docs: add 0pling as a contributor for content
2022-07-11 11:54:56 +02:00
allcontributors[bot] 995ba213e2
docs: update .all-contributorsrc [skip ci] 2022-07-11 09:53:39 +00:00
allcontributors[bot] f73aec1a63
docs: update AUTHORS.md [skip ci] 2022-07-11 09:53:38 +00:00
liv 08e3cf494b
Merge pull request #1034 from 0pling/main
docs: Add missing exercise to book chapter mapping
2022-07-11 11:53:20 +02:00
liv 36c43cb839
Merge pull request #1045 from rust-lang/all-contributors/add-klkl0808
docs: add klkl0808 as a contributor for content
2022-07-11 11:52:12 +02:00
allcontributors[bot] c9e0d53ed2
docs: update .all-contributorsrc [skip ci] 2022-07-11 09:51:31 +00:00
allcontributors[bot] c38d75481e
docs: update AUTHORS.md [skip ci] 2022-07-11 09:51:30 +00:00
liv 612ae8b8f7
Merge pull request #1024 from klkl0808/patch-2
Update link to book in variables5
2022-07-11 11:51:13 +02:00
Drew Morris df68d1a86e chore: Update spacing in Cargo.toml 2022-07-09 16:50:57 -06:00
KatanaFluorescent a500ed2c3c
change edition to 2021 in exercices.rs
workaround for this issue https://github.com/rust-lang/rustlings/issues/1022
2022-07-01 16:49:36 +02:00
mokou 6588d9be22 chore: bump version 2022-07-01 16:48:34 +02:00
0pling be3944072c docs: Add missing exercise to book chapter mapping 2022-06-26 10:27:18 +08:00
liv d27f5a7d41
Merge pull request #1028 from rust-lang/all-contributors/add-jackos
docs: add jackos as a contributor for code
2022-06-17 13:01:17 +02:00
allcontributors[bot] e48f634f34
docs: update .all-contributorsrc [skip ci] 2022-06-17 11:01:04 +00:00
allcontributors[bot] 23403546d2
docs: update AUTHORS.md [skip ci] 2022-06-17 11:01:03 +00:00
liv 294ef8d92c
Merge pull request #1026 from jackos/rust-analyzer-fix
Add lsp command to fix rust-analyzer
2022-06-17 13:00:44 +02:00
Jack Clayton be87cc9fa6 Add lsp command to fix rust-analyzer 2022-06-17 11:36:06 +08:00
Konstantin baca5d62ae
fix: update link to book 2022-06-13 21:30:25 +02:00
diannasoreil b19f74e8cf
Merge pull request #1017 from rust-lang/dependabot/cargo/regex-1.5.5
chore(deps): bump regex from 1.5.4 to 1.5.5
2022-06-07 16:12:05 +02:00
dependabot[bot] 5130a57f8f
chore(deps): bump regex from 1.5.4 to 1.5.5
Bumps [regex](https://github.com/rust-lang/regex) from 1.5.4 to 1.5.5.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.5.4...1.5.5)

---
updated-dependencies:
- dependency-name: regex
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 21:06:16 +00:00
diannasoreil dc6376788b
Merge pull request #1007 from rust-lang/all-contributors/add-bufo24
docs: add bufo24 as a contributor for content
2022-05-23 15:57:21 +02:00
allcontributors[bot] ffb6ecaf7e
docs: update .all-contributorsrc [skip ci] 2022-05-23 13:57:00 +00:00
allcontributors[bot] 34a3c440d0
docs: update AUTHORS.md [skip ci] 2022-05-23 13:56:59 +00:00
diannasoreil 386257a06e
Merge pull request #1006 from bufo24/fix-typo-in-info.toml
typo fix in hint message if2
2022-05-23 15:56:42 +02:00
Jesse van Papenrecht 0bdb5207b5
typo fix in hint message if2 2022-05-22 18:56:26 +02:00
diannasoreil 5615dd9e7d
Merge pull request #1003 from rust-lang/all-contributors/add-lucasgrvarela
docs: add lucasgrvarela as a contributor for content
2022-05-21 16:30:22 +02:00
allcontributors[bot] 439a07445e
docs: update .all-contributorsrc [skip ci] 2022-05-21 14:30:14 +00:00
allcontributors[bot] fedabf5f7f
docs: update AUTHORS.md [skip ci] 2022-05-21 14:30:12 +00:00
diannasoreil fdc3eb3b4e
Merge pull request #1002 from lucasgrvarela/patch-1
Update info.toml - fix line number hint on exercise variables 1
2022-05-21 16:29:51 +02:00
Lucas Grigolon Varela b0e079e6bf
Update info.toml 2022-05-20 20:26:37 -03:00
diannasoreil 06cc363a46
Merge pull request #1001 from rust-lang/all-contributors/add-merelymyself
docs: add merelymyself as a contributor for code
2022-05-17 13:21:41 +02:00
allcontributors[bot] 47afcdcc6b
docs: update .all-contributorsrc [skip ci] 2022-05-17 11:21:34 +00:00
allcontributors[bot] c17177bdef
docs: update AUTHORS.md [skip ci] 2022-05-17 11:21:33 +00:00
diannasoreil 8972e8f598
Merge pull request #1000 from merelymyself/patch-1
Checks for rustup install in install.sh.
2022-05-17 13:21:18 +02:00
pwygab 5b94016585
check for rustup install 2022-05-17 17:24:39 +08:00
diannasoreil 75b09dd69a
Merge pull request #990 from rust-lang/all-contributors/add-nandajavarma
docs: add nandajavarma as a contributor for doc
2022-05-10 12:45:23 +02:00
allcontributors[bot] 89efbdf02d
docs: update .all-contributorsrc [skip ci] 2022-05-10 10:45:14 +00:00
allcontributors[bot] b8ff299399
docs: update AUTHORS.md [skip ci] 2022-05-10 10:45:13 +00:00
diannasoreil b4510fc03b
Merge pull request #989 from nandajavarma/main
remove deprecated user uploaded extension from .gitpod.yml
2022-05-10 12:44:51 +02:00
Nandaja Varma 769483640c remove deprecated user uploaded extension from .gitpod.yml 2022-05-09 19:40:30 +00:00
diannasoreil aaccd6f7f3
Merge pull request #987 from likzn/fix/install_arr
fix(install.sh):fix `rust version` check
2022-05-06 16:42:09 +02:00
likzn 7027320a8f fix(install.sh):fix arr out of bounds 2022-05-04 00:46:49 +08:00
diannasoreil b759ef6b58
Merge pull request #983 from rust-lang/all-contributors/add-liby
docs: add liby as a contributor for content
2022-04-27 12:22:28 +02:00
allcontributors[bot] a18f3b8158
docs: update .all-contributorsrc [skip ci] 2022-04-27 10:22:20 +00:00
allcontributors[bot] 144e1ef018
docs: update AUTHORS.md [skip ci] 2022-04-27 10:22:19 +00:00
mokou 659a99032e chore: change branch name to main for cloning 2022-04-27 12:21:54 +02:00
diannasoreil c5de2d686d
Merge pull request #981 from liby/feature/replace-git-io-short-link
docs: replace git.io link with the original URL
2022-04-27 12:21:12 +02:00
Bryan Lee 13832d7726 docs: replace git.io link with the original URL 2022-04-27 00:51:25 +08:00
diannasoreil b7cce5c050
Merge pull request #980 from rust-lang/all-contributors/add-luskwater
docs: add luskwater as a contributor for content
2022-04-25 11:38:27 +02:00
allcontributors[bot] 7a41bbca67
docs: update .all-contributorsrc [skip ci] 2022-04-25 09:38:19 +00:00
allcontributors[bot] 9e98b78260
docs: update AUTHORS.md [skip ci] 2022-04-25 09:38:18 +00:00
diannasoreil 604166f549
Merge pull request #975 from luskwater/scope-for-vogue
docs(move_semantics5): Replace "in vogue" with "in scope" in hint
2022-04-25 11:38:05 +02:00
diannasoreil 96b301c04e
Merge pull request #979 from rust-lang/all-contributors/add-cuishuang
docs: add cuishuang as a contributor for content
2022-04-25 11:36:49 +02:00
allcontributors[bot] 190bb27d78
docs: update .all-contributorsrc [skip ci] 2022-04-25 09:36:31 +00:00
allcontributors[bot] 7eb66550c9
docs: update AUTHORS.md [skip ci] 2022-04-25 09:36:30 +00:00
diannasoreil 8f99209ab2
Merge pull request #976 from cuishuang/main
fix typo
2022-04-25 11:36:13 +02:00
cuishuang 701dd9c700 fix typo
Signed-off-by: cuishuang <imcusg@gmail.com>
2022-04-23 21:01:40 +08:00
Ron Lusk b821ffdd33 docs(move_semantics5): Replace "in vogue" with "in scope" in hint
The hint for `move_semantics5` refers to "the range in which each
mutable reference is in vogue". Unless this is a deliberate
introduction of "vogue" (an admittedly-useful term because "scope"
isn't purely lexical, as in many other languages), it may be in error:
I have been unable to find the term used with reference to *Rust*
references.

Thus, I'm suggesting the replacement, in case it's been overlooked.
2022-04-22 09:04:36 -04:00
diannasoreil 102a4b92a0
Merge pull request #974 from rust-lang/all-contributors/add-rytheo
docs: add rytheo as a contributor for code
2022-04-21 11:37:00 +02:00
allcontributors[bot] 283a4691aa
docs: update .all-contributorsrc [skip ci] 2022-04-21 09:36:53 +00:00
allcontributors[bot] 8dc696883e
docs: update AUTHORS.md [skip ci] 2022-04-21 09:36:52 +00:00
diannasoreil a6f50fd6f3
Merge pull request #484 from rytheo/progress-indicator
feat!: Add progress indicator
2022-04-21 11:36:38 +02:00
Ryan Lowe 6fae5d6114
Merge branch 'main' into progress-indicator 2022-04-20 23:29:47 -04:00
mokou d2179d3e84 doc: update manual checkout version 2022-04-20 09:47:43 +02:00
mokou 9ec35d899c chore: bump version
Plus, remove the clog configuration file,
since that's not being used anymore.
2022-04-20 09:44:37 +02:00
mokou c811643d1e chore: bump library versions 2022-04-20 09:35:08 +02:00
mokou a259704570 Merge remote-tracking branch 'origin/main' 2022-04-20 09:21:01 +02:00
mokou 268822dbd8 chore: bump minimum required rust version in installs 2022-04-20 09:20:42 +02:00
diannasoreil 1237aa574c
Merge pull request #969 from Fointard/fointard_using_as
refactor(using_as): improve readability by using sum() instead of fold()
2022-04-20 09:15:22 +02:00
diannasoreil b3734ba310
Merge pull request #972 from rust-lang/all-contributors/add-Fointard
docs: add Fointard as a contributor for content
2022-04-20 09:14:35 +02:00
allcontributors[bot] c9b73e412e
docs: update .all-contributorsrc [skip ci] 2022-04-20 07:14:27 +00:00
allcontributors[bot] 107f1f97d9
docs: update AUTHORS.md [skip ci] 2022-04-20 07:14:26 +00:00
diannasoreil 420729da60
Merge pull request #968 from Fointard/fointard_arc1
refactor(arc1): improve readability by using functional style
2022-04-20 09:14:08 +02:00
fointard 452ab26aa7
refactor(using_as): improve readability by using sum() instead of fold() 2022-04-19 17:37:00 +02:00
fointard 92a5d0037f
refactor(arc1): improve readability by using functional style 2022-04-19 17:11:27 +02:00
mokou 0b7f3fe37a test: skip mod.rs files when checking for annotations 2022-04-14 11:19:54 +02:00
mokou cf9f382873 chore: bump version 2022-04-14 11:16:00 +02:00
mokou 8f33dba9ca docs: write documentation for enabling rust-analyzer 2022-04-14 11:15:04 +02:00
mokou 6c87dc8210 docs: update changelog for new release 2022-04-14 11:09:27 +02:00
diannasoreil 6c071d4701
Merge pull request #963 from rust-lang/all-contributors/add-J-S-Kim
docs: add J-S-Kim as a contributor for content
2022-04-14 10:46:23 +02:00
allcontributors[bot] 03ba8836f2
docs: update .all-contributorsrc [skip ci] 2022-04-14 08:44:39 +00:00
allcontributors[bot] 4bb94e050b
docs: update AUTHORS.md [skip ci] 2022-04-14 08:44:38 +00:00
diannasoreil 51817820f2
Merge pull request #961 from J-S-Kim/main
fix(errors6.rs): remove one answer code
2022-04-14 10:44:22 +02:00
mokou 76a36dd385 chore: update errors1 comments and hint 2022-04-14 10:32:43 +02:00
diannasoreil c39eb3fe55
Merge pull request #962 from rust-lang/all-contributors/add-stevenfukase
docs: add stevenfukase as a contributor for content
2022-04-14 10:26:16 +02:00
allcontributors[bot] 7dcc1fca29
docs: update .all-contributorsrc [skip ci] 2022-04-14 08:26:07 +00:00
allcontributors[bot] 887b6e183b
docs: update AUTHORS.md [skip ci] 2022-04-14 08:26:06 +00:00
stevenfukase 60bb7cc393
Fix test (#958)
fix(errors1): don't modify tests
2022-04-14 10:25:44 +02:00
J-S-Kim 43d0623086
fix(errors6.rs): remove one answer code
Although marked as 'TODO', three tests pass without any implementation because the correct answer code already exists.
2022-04-09 01:23:58 +09:00
diannasoreil e6c0d00637
Merge pull request #959 from rust-lang/all-contributors/add-ragreenburg
docs: add ragreenburg as a contributor for content
2022-04-06 09:29:59 +02:00
allcontributors[bot] b1cdce6289
docs: update .all-contributorsrc [skip ci] 2022-04-06 07:29:50 +00:00
allcontributors[bot] d3c5058d89
docs: update AUTHORS.md [skip ci] 2022-04-06 07:29:49 +00:00
ragreenburg 89650f808a
fix(move_semantics2): Add comment 2022-04-06 09:29:27 +02:00
diannasoreil 0a92262fa0
Merge pull request #953 from haveneer-training/fix-installation-path
fix(install): protect path with whitespaces using quotes
2022-04-04 17:22:22 +02:00
diannasoreil 4e2a354716
Merge pull request #954 from haveneer-training/fix-mod-content
fix(move_semantics) : add move_semantics6.rs to its mod
2022-04-04 17:10:23 +02:00
diannasoreil 74895df5a7
Merge pull request #738 from apogeeoak/text
fix(cli): Move long text strings into constants.
2022-04-04 17:09:49 +02:00
Pascal Havé d114847f25 fix(install): protect path with whitespaces using quotes and stop at the first error 2022-04-04 00:27:05 +02:00
Pascal Havé 4dfd85ff05 fix(move_semantics) : add move_semantics6.rs to its mod 2022-04-03 23:51:46 +02:00
Soroush Zare 0bd7a0631a
fix(iterators1): reorder TODO steps
Update the TODO steps in the iterators1 exercise.
2022-03-30 13:27:52 +02:00
mokou bdf6efeccd chore: clean up readme 2022-03-29 15:04:52 +02:00
diannasoreil 331cdef7e3
Merge pull request #950 from rust-lang/all-contributors/add-Kallu-A
docs: add Kallu-A as a contributor for content
2022-03-29 15:03:06 +02:00
allcontributors[bot] d4e3d98d0a
docs: update .all-contributorsrc [skip ci] 2022-03-29 13:02:52 +00:00
allcontributors[bot] 2ca5250f78
docs: update AUTHORS.md [skip ci] 2022-03-29 13:02:51 +00:00
Lucas Aries 3f0e1303e0
feat: Add move_semantics6.rs exercise (#908) 2022-03-29 15:02:35 +02:00
diannasoreil c80ad089fd
Merge pull request #949 from rust-lang/all-contributors/add-KisaragiEffective
docs: add KisaragiEffective as a contributor for doc
2022-03-29 15:01:09 +02:00
mokou 01023f5b4f chore: copy existing contributors table 2022-03-29 14:59:13 +02:00
allcontributors[bot] 70e29d9717
docs: update .all-contributorsrc [skip ci] 2022-03-29 12:54:22 +00:00
allcontributors[bot] c60bd97cb9
docs: update AUTHORS.md [skip ci] 2022-03-29 12:54:21 +00:00
diannasoreil d00f0d8c57
Merge pull request #947 from KisaragiEffective/patch-1
docs: fix some code-blocks were not highlighted
2022-03-29 14:53:55 +02:00
mokou bf93724511 chore: add empty authors file 2022-03-29 11:52:06 +02:00
mokou 057d912e78 chore: push contributors to AUTHORS.md
the readme file is getting a bit crowded at this point, it's better to have
a reference to AUTHORS.md, and then to let the bot add it in there
2022-03-29 11:49:36 +02:00
diannasoreil e306e23963
Merge pull request #948 from rust-lang/all-contributors/add-x-hgg-x
docs: add x-hgg-x as a contributor for code
2022-03-29 11:48:05 +02:00
allcontributors[bot] 0232f6058f
docs: update .all-contributorsrc [skip ci] 2022-03-29 09:47:51 +00:00
allcontributors[bot] 4378d1db46
docs: update README.md [skip ci] 2022-03-29 09:47:50 +00:00
x-hgg-x 179a75a68d
fix: Include exercises folder in the project structure behind a feature (#917)
closes #859
closes #913
closes #942
2022-03-29 11:44:06 +02:00
Kisaragi 17f9d7429c
docs: fix some code-blocks were not highlighted 2022-03-28 10:10:25 +09:00
Ryan Lowe 9be012dda0 feat!: Add progress indicator
closes #360

BREAKING CHANGE: verify() has a new function signature so it can
know the current completion progress
2022-02-05 16:54:11 -05:00
apogeeoak c1f35e46df Merge branch 'main' into text 2022-02-04 19:27:42 -05:00
diannasoreil cd2b5e8e3b
Merge pull request #926 from rust-lang/all-contributors/add-highb
docs: add highb as a contributor for doc
2022-02-04 15:39:55 +01:00
allcontributors[bot] dc36ca6d84
docs: update .all-contributorsrc [skip ci] 2022-02-04 14:39:43 +00:00
allcontributors[bot] e96112ab99
docs: update README.md [skip ci] 2022-02-04 14:39:42 +00:00
Brandon High bc56861744
doc: Add hints on how to get gcc installed (#741) 2022-02-04 15:38:55 +01:00
diannasoreil 4cde788d33
Merge pull request #733 from apogeeoak/intro
feat(intro): Proposal to add successfully compiling exercise as the first exercise.
2022-02-04 15:26:15 +01:00
diannasoreil 9838892cf3
Merge pull request #728 from Zerotask/improve-option-further-information
docs(option): improve further information if let and while let
2022-02-04 15:22:23 +01:00
diannasoreil 9c5d8ad44c
Merge pull request #925 from rust-lang/all-contributors/add-sundevilyang
docs: add sundevilyang as a contributor for content
2022-02-04 15:13:43 +01:00
allcontributors[bot] a2e74a2a4b
docs: update .all-contributorsrc [skip ci] 2022-02-04 14:13:32 +00:00
allcontributors[bot] 52c7f8a859
docs: update README.md [skip ci] 2022-02-04 14:13:31 +00:00
Yang Wen 4f7ff5d9c7
fix(structs3): Add a hint for panic (#608)
as a totally newbie to Rust, I don't know panic statement from https://doc.rust-lang.org/book/ and rustlings in the beginning. After a hard searching of [should_panic], then I figure out panic statement. 

So it's helpful to tell the learner that write a panic statement here.
2022-02-04 15:12:02 +01:00
zydxhs cbcde34540
fix(errors1): Add a comment to make the purpose more clear (#486)
Signed-off-by: zydxhs <johnsmithcry@163.com>
2022-02-04 15:00:24 +01:00
radicale 71a06044e6
fix(clippy1): Set clippy::float_cmp lint to deny (#907) 2022-02-04 14:39:09 +01:00
diannasoreil 5002c54ffb
Merge pull request #901 from rust-lang/all-contributors/add-tan-zx
docs: add tan-zx as a contributor for content
2021-12-30 12:59:14 +01:00
allcontributors[bot] 17e3e75331
docs: update .all-contributorsrc [skip ci] 2021-12-30 11:59:06 +00:00
allcontributors[bot] af84359bdb
docs: update README.md [skip ci] 2021-12-30 11:59:05 +00:00
diannasoreil 74739261d6
Merge pull request #899 from tan-zx/quiz1/comments
fix(quiz1): update to say quiz covers "If"
2021-12-30 12:58:50 +01:00
ZX 1622e8c198
fix(quiz1): update to say quiz covers "If" 2021-12-29 14:55:37 +08:00
diannasoreil e06ba1df58
Merge pull request #896 from rust-lang/all-contributors/add-nekonako
docs: add nekonako as a contributor for code
2021-12-24 13:28:16 +01:00
allcontributors[bot] 7dce8c8b61
docs: update .all-contributorsrc [skip ci] 2021-12-24 12:28:08 +00:00
allcontributors[bot] f61f9f3796
docs: update README.md [skip ci] 2021-12-24 12:28:07 +00:00
diannasoreil 6516a89485
Merge pull request #894 from nekonako/main
chore : replace filter_map() with find_map()
2021-12-24 13:27:52 +01:00
Galih wisnuaji 9b27e8d993 chore : replace filter_map() with find_map() 2021-12-24 13:48:43 +07:00
diannasoreil f7719a4a9c
Merge pull request #891 from rust-lang/all-contributors/add-frvannes16
docs: add frvannes16 as a contributor for code
2021-12-16 14:11:39 +01:00
allcontributors[bot] 81fb396780
docs: update .all-contributorsrc [skip ci] 2021-12-16 13:11:15 +00:00
allcontributors[bot] 8d675198d8
docs: update README.md [skip ci] 2021-12-16 13:11:14 +00:00
diannasoreil 969384c258
Merge pull request #890 from frvannes16/fix/888-std-floats
fix(clippy1): Trigger approx_constant lint rule instead of downgraded float_cmp.
2021-12-16 14:10:58 +01:00
Franklin van Nes f2650de369 fix(clippy1): Updated code to test correctness clippy lint with approx_constant lint rule
closes #888
2021-12-15 11:46:27 -05:00
diannasoreil acaee79994
Merge pull request #889 from rust-lang/all-contributors/add-alirezaghey
docs: add alirezaghey as a contributor for content
2021-12-15 10:44:48 +01:00
allcontributors[bot] 527a5b1182
docs: update .all-contributorsrc [skip ci] 2021-12-15 09:44:39 +00:00
allcontributors[bot] 72b2c9f54f
docs: update README.md [skip ci] 2021-12-15 09:44:38 +00:00
alirezaghey 8ef4869b26
fix(functions5): Remove wrong new line and small English improvements (#885) 2021-12-15 10:44:21 +01:00
diannasoreil dba759e1c6
Merge pull request #872 from rust-lang/all-contributors/add-MpdWalsh
docs: add MpdWalsh as a contributor for code
2021-10-31 17:25:43 +01:00
allcontributors[bot] cb661896a2
docs: update .all-contributorsrc [skip ci] 2021-10-31 16:25:36 +00:00
allcontributors[bot] e08b6cf3ef
docs: update README.md [skip ci] 2021-10-31 16:25:35 +00:00
diannasoreil e2fa512e86
Merge pull request #871 from MpdWalsh/main
fix(structs3.rs): assigned value to cents_per_gram in test
2021-10-31 17:25:18 +01:00
Michael Walsh d1ee2daf14 fix(structs3.rs): assigned value to cents_per_gram in test
Intended to simplify the lesson by removing the need to figure out what the value is meant to be based on the tests.

Previous commits (9ca08b8f2b and 114b54cbdb (diff-ce1c232ff0ddaff909351bb84cb5bff423b5b9e04f21fd4db7ffe443e598e174)) removed the mathematical complexity, and I feel this addition is a needed change to further streamline the exercise.
2021-10-30 16:55:58 -06:00
ana 359f81dd0b chore: upgrade edition to 2021 2021-10-29 14:27:48 +02:00
diannasoriel 5e5271247a
Merge pull request #866 from rust-lang/all-contributors/add-xuesongbj
docs: add xuesongbj as a contributor for content
2021-10-18 13:57:42 +02:00
allcontributors[bot] 71da9068e7
docs: update .all-contributorsrc [skip ci] 2021-10-18 11:57:34 +00:00
allcontributors[bot] b24b295d88
docs: update README.md [skip ci] 2021-10-18 11:57:33 +00:00
xuesong 1663a16ead
fix(traits1): rename test functions to snake case (#854)
Co-authored-by: zhangshaozhi <zhangshaozhi@ZhangshaozhideMacBook-Pro.local>
2021-10-18 13:57:12 +02:00
diannasoriel af91eb508a
Merge pull request #860 from rlch/spelling-mistakes
fix: few spelling mistakes
2021-10-02 23:09:52 +02:00
rlch 1c0fe3cbcc fix: few spelling mistakes 2021-10-02 23:59:23 +10:00
diannasoriel ed7fe883b9
Merge pull request #858 from rust-lang/all-contributors/add-fredr
docs: add fredr as a contributor for content
2021-09-30 10:19:33 +02:00
allcontributors[bot] ae54c17b6a
docs: update .all-contributorsrc [skip ci] 2021-09-30 08:18:53 +00:00
allcontributors[bot] 574bbffe0b
docs: update README.md [skip ci] 2021-09-30 08:18:52 +00:00
Fredrik Enestad 46c28d5cef
fix(move_semantics5): correct typo (#857) 2021-09-30 10:18:36 +02:00
diannasoriel ad338ee789
Merge pull request #853 from rust-lang/all-contributors/add-EmisonLu
docs: add EmisonLu as a contributor for content
2021-09-27 10:03:57 +02:00
allcontributors[bot] e3cfaa246d
docs: update .all-contributorsrc [skip ci] 2021-09-27 08:03:47 +00:00
allcontributors[bot] fed4fe78bb
docs: update README.md [skip ci] 2021-09-27 08:03:46 +00:00
Zhenghao Lu bf33829da2
fix(structs3): remove redundant 'return' (#852) 2021-09-27 10:03:28 +02:00
ana d57c183028 release: 4.6.0 2021-09-25 11:23:05 +02:00
diannasoriel c2ed98deb3
Merge pull request #781 from tlyu/advanced-errs
feature: advanced errors
2021-09-25 11:18:55 +02:00
Taylor Yu abd6b70c72 feat: add advanced_errs2
New exercise to demonstrate traits that make it easier for other code
to consume our custom error types.
2021-09-25 11:18:23 +02:00
Taylor Yu 882d535ba8 feat: add advanced_errs1
New section and exercise to demonstrate the `From` trait for errors
and its usefulness with the `?` operator.
2021-09-25 11:18:21 +02:00
diannasoriel 0de45ccdb7
Merge pull request #851 from rust-lang/all-contributors/add-frogtd
docs: add frogtd as a contributor for content
2021-09-25 10:53:13 +02:00
allcontributors[bot] ab5ecbee7a
docs: update .all-contributorsrc [skip ci] 2021-09-25 08:53:05 +00:00
allcontributors[bot] e106d7a4f4
docs: update README.md [skip ci] 2021-09-25 08:53:04 +00:00
frogtd d75759e829
fix(move_semantics5): change &mut *y to &mut x (#814)
Instead of having to explain why 
```rs
let mut x = 100; 
let y = &mut x;
let mut z_owned = *y;
let z = &mut z_owned;
*y += 100;
*z += 1000;
```
and 
```rs
let mut x = 100; 
let y = &mut x;
let z = &mut *y;
*y += 100;
*z += 1000;
```
are different, you still get the point across about having only one mutable reference.
As it stands, this exercise does too much (dereferencing and having only one mutable reference), and by doing so confuses people.

Example of someone being confused by this:
<https://discord.com/channels/273534239310479360/273541522815713281/872689531428692040>
2021-09-25 10:52:18 +02:00
diannasoriel db9d7a907d
Merge pull request #850 from rust-lang/all-contributors/add-abusch
docs: add abusch as a contributor for code
2021-09-25 10:48:04 +02:00
allcontributors[bot] a1b9c50f36
docs: update .all-contributorsrc [skip ci] 2021-09-25 08:47:56 +00:00
allcontributors[bot] c4b59aa593
docs: update README.md [skip ci] 2021-09-25 08:47:55 +00:00
diannasoriel 4a18bdeefe
Merge pull request #843 from abusch/quit_command
feat: Add "quit" command to `rustlings watch`
2021-09-25 10:47:36 +02:00
Antoine Busch 1caef0b434 feat: Add "quit" command to `rustlings watch`
closes: #842
2021-09-24 23:55:55 +10:00
diannasoriel ae56cba9c8
Merge pull request #846 from rust-lang/feat/add-more-watch-commands
feat: add more watch commands
2021-09-24 13:05:04 +02:00
ana 3352b5a4d3 chore: improve println! usage 2021-09-24 13:04:30 +02:00
diannasoriel 24762434ff
Merge pull request #849 from rust-lang/all-contributors/add-Millione
docs: add Millione as a contributor for content
2021-09-21 11:50:41 +02:00
allcontributors[bot] e9c0ca6be2
docs: update .all-contributorsrc [skip ci] 2021-09-21 09:50:32 +00:00
allcontributors[bot] 9ef63c0b9b
docs: update README.md [skip ci] 2021-09-21 09:50:31 +00:00
LIU JIE 06d5c0973a
fix(cli): typo in exercise.rs (#848) 2021-09-21 11:50:15 +02:00
diannasoriel 8d82856233
Merge pull request #847 from rust-lang/all-contributors/add-Weilet
docs: add Weilet as a contributor for content
2021-09-21 10:44:15 +02:00
allcontributors[bot] 9ddd4ca33a
docs: update .all-contributorsrc [skip ci] 2021-09-21 08:44:04 +00:00
allcontributors[bot] fe726f5bca
docs: update README.md [skip ci] 2021-09-21 08:44:03 +00:00
Weilet 0a11bad714
feat(quiz1): add default function name in comment (#838) 2021-09-21 10:43:44 +02:00
ana a7dc080b95 feat: add more watch commands
Includes:
- quit, to quit the shell instead of having to press Cmd/Ctrl-C or Cmd/Ctrl-D
- help, to display an overview of all the commands available in watch mode.

Closes #842.
2021-09-21 10:36:11 +02:00
diannasoriel 74af578beb
Merge pull request #840 from MikAoJk/main
Added in ignore for .iml files
2021-09-09 15:54:57 +02:00
joakim.kartveit 6efa7d5d15 Added ignore for .iml files 2021-09-09 15:53:05 +02:00
diannasoriel a6774100d4
Merge pull request #836 from rust-lang/all-contributors/add-granddaifuku
docs: add granddaifuku as a contributor for content
2021-09-06 16:33:15 +02:00
allcontributors[bot] de22b13273
docs: update .all-contributorsrc [skip ci] 2021-09-06 14:33:05 +00:00
allcontributors[bot] 6c41adef63
docs: update README.md [skip ci] 2021-09-06 14:33:03 +00:00
granddaifuku 1c3beb0a59
fix(modules2): fix typo (#835) 2021-09-06 16:32:39 +02:00
diannasoriel e4e9e4c963
Merge pull request #834 from rust-lang/all-contributors/add-anuk909
docs: add anuk909 as a contributor for content, code
2021-09-03 10:41:51 +02:00
allcontributors[bot] 44d8047249
docs: update .all-contributorsrc [skip ci] 2021-09-03 08:41:43 +00:00
allcontributors[bot] 5423f1be29
docs: update README.md [skip ci] 2021-09-03 08:41:42 +00:00
anuk909 dfd2fab4f3
feat(modules): update exercises, add modules3 (#822)
Co-authored-by: diannasoriel <mokou@fastmail.com>
2021-09-03 10:41:12 +02:00
diannasoriel 96fc301764
chore(quiz1): revert wording 2021-08-26 10:30:18 +02:00
diannasoriel 5bdb5de855
Merge pull request #830 from rust-lang/all-contributors/add-benarmstead
docs: add benarmstead as a contributor for code
2021-08-24 14:06:55 +02:00
allcontributors[bot] a64dbdcc04
docs: update .all-contributorsrc [skip ci] 2021-08-24 12:06:45 +00:00
allcontributors[bot] 2f0ff258b1
docs: update README.md [skip ci] 2021-08-24 12:06:44 +00:00
Ben Armstead 1cd9328a58
fix(cli): remove unnecessary borrows (#829)
* Update dependencies

* Format better and remove unnecessary borrows
2021-08-24 14:06:30 +02:00
diannasoriel ec527824b4
Merge pull request #828 from rust-lang/all-contributors/add-dbednar230
docs: add dbednar230 as a contributor for content
2021-08-24 10:49:50 +02:00
allcontributors[bot] 380587f120
docs: update .all-contributorsrc [skip ci] 2021-08-24 08:49:24 +00:00
allcontributors[bot] ba8f97f418
docs: update README.md [skip ci] 2021-08-24 08:49:23 +00:00
Damian 03131a3d35
fix(quiz1): Fix inconsistent wording (#826)
The second test expects the function to return 80 when there is an order of 40 apples, but the current wording implies returning 40 will pass as well
2021-08-24 10:48:51 +02:00
ana df25684cb7 fix(move_semantics5): Clarify instructions 2021-07-29 12:37:15 +02:00
fmoko 8e313cffaa
Merge pull request #732 from apogeeoak/iterators5
chore(iterators5): Minor formatting improvements.
2021-07-09 12:24:42 +02:00
fmoko 6948905716
Merge pull request #737 from ghost/correct-small-typo
Correct small typo in exercises/conversions/from_str.rs
2021-07-08 11:07:21 +02:00
ana ba087ce64a release: 4.5.0
Signed-off-by: ana <ana@ana.st>
2021-07-07 22:23:52 +02:00
fmoko 3b03865a62
Merge pull request #801 from rust-lang/all-contributors/add-sinharaksh1t
docs: add sinharaksh1t as a contributor for content
2021-07-07 22:20:02 +02:00
allcontributors[bot] 33fa274bbf
docs: update .all-contributorsrc [skip ci] 2021-07-07 20:19:48 +00:00
allcontributors[bot] 23f700dc23
docs: update README.md [skip ci] 2021-07-07 20:19:47 +00:00
Rakshit Sinha d876649616
fix(quiz1): Updated question description (#794)
Co-authored-by: Rakshit Sinha <rakshit.sinha@oracle.com>
2021-07-07 22:18:33 +02:00
fmoko e4c14ac76e
Merge pull request #800 from rust-lang/all-contributors/add-lauralindzey
docs: add lauralindzey as a contributor for doc
2021-07-07 22:17:12 +02:00
allcontributors[bot] b438049c39
docs: update .all-contributorsrc [skip ci] 2021-07-07 20:17:04 +00:00
allcontributors[bot] b017579577
docs: update README.md [skip ci] 2021-07-07 20:17:03 +00:00
fmoko c8e4b357a3
Merge pull request #795 from lauralindzey/docs/section-mapping
docs: Update exercise to chapter mapping for HashMap
2021-07-07 22:16:45 +02:00
lauralindzey 8774e47dc3
docs: Update collections README with HashMap link 2021-07-06 01:31:27 -07:00
Laura Lindzey e422ab1507 docs: Update exercise to chapter mapping for HashMap 2021-07-05 23:07:34 -07:00
marisa cdd8e19716
Merge pull request #792 from rust-lang/all-contributors/add-cseltol
docs: add cseltol as a contributor for doc
2021-07-05 18:57:05 +02:00
allcontributors[bot] 91d86a1de9
docs: update .all-contributorsrc [skip ci] 2021-07-05 16:56:57 +00:00
allcontributors[bot] 6a10f900b4
docs: update README.md [skip ci] 2021-07-05 16:56:56 +00:00
marisa 9b9a89c79a
Merge pull request #668 from cseltol/main
fix(installation): first PowerShell command
2021-07-05 18:56:34 +02:00
marisa 123e6426d1
Merge pull request #789 from kolbma/exercise-clippy1-hint-390
chore: clippy1 hint enhancement
2021-06-30 12:10:02 +02:00
marisa 427ec6b2e4
Merge pull request #790 from rust-lang/all-contributors/add-jazzplato
docs: add jazzplato as a contributor for code
2021-06-30 12:06:16 +02:00
allcontributors[bot] 03dcb582e6
docs: update .all-contributorsrc [skip ci] 2021-06-30 10:06:07 +00:00
allcontributors[bot] 1043a06124
docs: update README.md [skip ci] 2021-06-30 10:06:06 +00:00
Richthofen d20e413a68
feat(cli): Add "next" to run the next unsolved exercise. (#785)
* Add "run next" to run the next unsolved exercise.

* Fix a grammar error in the message.

* Update README.md with the suggested change

Co-authored-by: marisa <mokou@fastmail.com>

* Update the README.md for "rustlings hint next".

Co-authored-by: marisa <mokou@fastmail.com>
2021-06-30 12:05:49 +02:00
arlecchino 9bf4c5e8df
chore: clippy1 hint enhancement
Added some explanation and links about floating point representation and to use the clippy suggestion. (fixes #390)
2021-06-29 20:47:32 +02:00
marisa 633303d4b8
Merge pull request #787 from kolbma/exercise-iterator3-hint
chore: Update hint of iterators3
2021-06-29 13:49:17 +02:00
arlecchino a4a1098766
Update info.toml
Co-authored-by: marisa <mokou@fastmail.com>
2021-06-29 13:41:16 +02:00
marisa 0bd459dcac
Merge pull request #788 from rust-lang/all-contributors/add-kolbma
docs: add kolbma as a contributor for doc
2021-06-29 12:46:49 +02:00
allcontributors[bot] 3b4514b686
docs: update .all-contributorsrc [skip ci] 2021-06-29 10:46:41 +00:00
allcontributors[bot] 2e05606edc
docs: update README.md [skip ci] 2021-06-29 10:46:40 +00:00
marisa c8c1b87a01
Merge pull request #786 from kolbma/git-clone-release-tag
docs: Faster git clone command
2021-06-29 12:46:28 +02:00
arlecchino 34ea029df8
chore: Update hint of iterators3
`collect()` needs some hint for standard_library_types/iterators3 exercise with doc link for understanding different return types via `FromIterator`.
2021-06-29 12:03:18 +02:00
arlecchino 3a4433d5a2
docs: Faster git clone command
Clone only release tag without history
2021-06-28 17:08:53 +02:00
Taylor Yu 2dc93cadda fix(from_str, try_from_into): custom error types
Remove the use of trait objects as errors from `from_str` and
`try_from_into`; they seem to have caused a lot of confusion in
practice. (Also, it's considered best practice to use custom error
types instead of boxed errors in library code.) Instead, use custom
error enums, and update hints accordingly. Hints also provide
some guidance about converting errors, which could be covered
more completely in a future advanced errors section.

Also move from_str to directly after the similar exercise `from_into`,
for the sake of familiarity when solving.
2021-06-24 21:33:41 -05:00
marisa de6c45ad24
Merge pull request #779 from rust-lang/all-contributors/add-hyperparabolic
docs: add hyperparabolic as a contributor for code
2021-06-24 14:18:02 +02:00
allcontributors[bot] fadade8592
docs: update .all-contributorsrc [skip ci] 2021-06-24 12:17:32 +00:00
allcontributors[bot] d91044f3a2
docs: update README.md [skip ci] 2021-06-24 12:17:31 +00:00
marisa a3ea37b76e
Merge pull request #771 from tlyu/iterators5-trait-tweak
fix(iterators5): derive Clone, Copy
2021-06-24 14:17:05 +02:00
marisa ec63cadadb
Merge pull request #772 from tlyu/errors-rework
feature: improve error_handling exercises
2021-06-24 14:12:34 +02:00
marisa 84d8305730
Merge pull request #778 from rust-lang/all-contributors/add-kayuapi
docs: add kayuapi as a contributor for content
2021-06-24 14:10:33 +02:00
allcontributors[bot] 73777980f1
docs: update .all-contributorsrc [skip ci] 2021-06-24 12:10:24 +00:00
allcontributors[bot] 75788b1148
docs: update README.md [skip ci] 2021-06-24 12:10:23 +00:00
marisa dd9b2ddc89
Merge pull request #773 from kayuapi/patch-1
fix(variables5): confine the answer further
2021-06-24 14:10:02 +02:00
Taylor Yu b7ddd09fab address review feedback
Adjust error text and naming to conform with best practices.
Use `map_err()` instead of `or()`. Wrap lower-level errors instead of
ignoring their details.

Also, don't "cheat" by bypassing the `new()` function in tests.

Fix a dangling reference in the try_from_into hints.
2021-06-09 23:27:53 -05:00
ZC 48ffcbd2c4
fix(variables5): confine the answer further
let mut number = 3; can lead to a correct answer, so the comment helps to direct the users to the intended answer.
2021-06-07 18:22:55 +08:00
Taylor Yu 68d3ac567c feature: improve error_handling exercises
Add new exercises errors5 and errors6, to introduce boxed errors and
custom error enums more gently. Delete errorsn, because it tried to do
too much too soon.
2021-06-06 23:08:57 -05:00
Taylor Yu 50ab289da6 fix: rename result1 to errors4
Also put it in the ERROR HANDLING section where it probably belongs.
2021-06-06 23:08:54 -05:00
Taylor Yu 4e079fdd08 chore(iterators5): conciseness hint 2021-06-06 17:45:35 -05:00
Taylor Yu 91fc9e3118 fix(iterators5): derive Clone, Copy
To allow more flexibility in solutions, derive `Clone` and `Copy`
for `Progress`.
2021-06-06 17:38:02 -05:00
marisa a2f0401c4c
Merge pull request #762 from tlyu/move-semantics5-fixes
fix: move_semantics5 hints
2021-05-23 15:41:56 +02:00
Taylor Yu 1b85828548 fix: move_semantics5 hints
Improve the hints for move_semantics5, as well as the explanatory
comments in the code.

Previously, it was not clear what possible changes were allowed.
It seems that reordering the statements might be the intended solution.
The previous comment about not "adding newlines" doesn't make sense,
so treating it as "adding new lines" makes it more clear.
2021-05-22 22:09:58 -05:00
Taylor Yu 4c46e5e1a3 chore: minor typos in move_semantics5 hints 2021-05-22 21:56:14 -05:00
marisa 4da9e7ee29
Merge pull request #758 from rust-lang/all-contributors/add-sateeshkumarb
docs: add sateeshkumarb as a contributor
2021-05-17 14:11:15 +02:00
allcontributors[bot] 72e615aa7a
docs: update .all-contributorsrc [skip ci] 2021-05-17 12:11:05 +00:00
allcontributors[bot] cd02abc481
docs: update README.md [skip ci] 2021-05-17 12:11:04 +00:00
Sateesh 399ab328d8
feat: Add move_semantics5 exercise. (#746)
* feat: Add move_semantics5 exercise.

* feat: Add option3 exercise

* Address review comments. Fix typos, sentence formatting.

* Remove unwanted newline.

* Address review comments: make comment inline, fix format in print.
2021-05-17 14:10:40 +02:00
marisa 809ec2ce01
Merge pull request #755 from tlyu/dyn-error-hints
fix(try_from_into, from_str): hints for dyn Error
2021-05-17 14:09:44 +02:00
Taylor Yu 11d2cf0d60 fix(try_from_into, from_str): hints for dyn Error
Add hints about how to return the correct type for functions that
return `Result<_, Box<dyn Error>`. Some feedback from Discord suggests
that people run into trouble with that.
2021-05-15 14:01:17 -05:00
marisa dbb2624403
Merge pull request #751 from juanprq/main
fix: remove trailing whitespace
2021-05-13 17:20:47 +02:00
Juan Pablo Ramirez 4d4fa77459 fix: remove trailing whitespaces from iterators1 2021-05-12 10:20:07 -05:00
Juan Pablo Ramirez 3145794084 fix: add hints to generics1 and generics2 exercises 2021-05-11 14:50:05 -05:00
Juan Pablo Ramirez d9b69bd1a0 fix: remove trailing whitespace 2021-05-09 17:58:54 -05:00
marisa 7cd635fa84
Merge pull request #740 from rust-lang/all-contributors/add-PiDelport
docs: add PiDelport as a contributor
2021-05-01 12:12:51 +02:00
allcontributors[bot] ce40e201f0
docs: update .all-contributorsrc [skip ci] 2021-05-01 10:12:43 +00:00
allcontributors[bot] 404f3ef465
docs: update README.md [skip ci] 2021-05-01 10:12:42 +00:00
marisa e1be594fdd
Merge pull request #739 from PiDelport/patch-1
style(standard_library_types): stray line break
2021-05-01 12:12:29 +02:00
Pi Delport 9569c9a9e7
style(standard_library_types): stray line break 2021-04-29 23:31:26 +02:00
apogeeoak f78c480208 fix(cli): Move long text strings into constants. 2021-04-27 17:14:54 -04:00
Martin HART 8794b40bc6 Merge branch 'correct-small-typo' of github.com:martinhartxyz/rustlings into correct-small-typo 2021-04-27 21:12:44 +02:00
Martin HART 86cc85295a fix: Correct small typo in exercises/conversions/from_str.rs 2021-04-27 21:11:40 +02:00
Martin HART 166a53946c Correct small typo in exercises/conversions/from_str.rs 2021-04-27 20:22:13 +02:00
marisa 91530f5716
Merge pull request #736 from maartentibau/quiz1_add_explicit_test_40
chore: Update quiz1.rs add explicit test for 40
2021-04-27 10:20:50 +02:00
apogeeoak 9b8de65525
fix(intro1): Add compiler error explanation. 2021-04-26 20:28:17 -04:00
Maarten Tibau 650b1dee54
chore: Update quiz1.rs add explicit test for 40 2021-04-25 19:02:50 +02:00
apogeeoak 21c9f44168 feat(intro): Add intro section. 2021-04-24 13:15:34 -04:00
apogeeoak 7f0d2c2bf0 chore(iterators5): Minor formatting improvements. 2021-04-24 12:42:06 -04:00
marisa 6b6dc9dd48
Merge pull request #731 from rust-lang/all-contributors/add-stoiandan
docs: add stoiandan as a contributor
2021-04-24 17:36:48 +02:00
allcontributors[bot] 3a9ec4192d
docs: update .all-contributorsrc [skip ci] 2021-04-24 15:36:39 +00:00
allcontributors[bot] 4f7dbbd2c3
docs: update README.md [skip ci] 2021-04-24 15:36:38 +00:00
marisa 8c37db1a23
Merge pull request #730 from stoiandan/main
updated README.md; specify need for admin rights
2021-04-24 17:36:19 +02:00
Dan Stoian c6b7ad8878 updated README.md; specify need for admin rights 2021-04-24 18:32:13 +03:00
Zerotask 4a384cae4a
docs(option): improve further information 2021-04-24 12:12:49 +02:00
mokou 84461c20cb release: 4.4.0 2021-04-24 11:57:00 +02:00
marisa 3cddda56fc
Merge pull request #725 from Zerotask/add-hint-corresponding-readme
chore(watch): add hint for the exercises README.md
2021-04-24 11:46:25 +02:00
marisa 37f3069a67
Merge pull request #724 from Zerotask/update-dependencies
chore(deps): update cargo dependencies
2021-04-24 11:45:56 +02:00
marisa 2b2fbe918e
Merge pull request #723 from Zerotask/update-exercises-readme
docs(exercises): consistent excersises README.md files
2021-04-24 11:45:37 +02:00
Zerotask cf42ddc449
chore(watch): add hint for the exercises README.md
rustlings watch will now show an additional hint for the corresponding README.me
2021-04-23 20:28:55 +02:00
Zerotask eefa656232
chore(deps): update cargo dependencies 2021-04-23 20:07:32 +02:00
Zerotask 249ad44cc0
docs(exercises): updated all exercises readme files
all exercises readme files now have a unified structure and a description
2021-04-23 19:54:31 +02:00
marisa 54804e344d
Merge pull request #721 from Zerotask/add-further-help-for-generics3
docs(generics): add bounds help
2021-04-23 15:05:00 +02:00
marisa 1c334de6fd
Merge pull request #718 from Zerotask/add-further-help-to-error-excersis
docs(errors): add additional help for Result/Boxing
2021-04-23 15:04:47 +02:00
Zerotask f253103a31
docs(generics): add bounds help
add help for bounds provided by the rust by example book
2021-04-22 22:11:04 +02:00
Zerotask 1120db57a6
docs(errors): add additional help for Result/Boxing
add additional help information provided by the rust by example book
2021-04-22 21:32:29 +02:00
marisa afa661cff4
Merge pull request #715 from rust-lang/feat/declap
feat: Replace clap with argh
2021-04-21 16:33:07 +02:00
mokou 347f30bd86 fix(main): Let find_exercise work with borrows 2021-04-21 16:21:56 +02:00
marisa 127773f3f5
Merge pull request #717 from rust-lang/all-contributors/add-bmacer
docs: add bmacer as a contributor
2021-04-21 14:50:37 +02:00
allcontributors[bot] 8d0490bd70
docs: update .all-contributorsrc [skip ci] 2021-04-21 12:50:27 +00:00
allcontributors[bot] 293dfb35d5
docs: update README.md [skip ci] 2021-04-21 12:50:26 +00:00
Brandon Macer 81be404487
feat(arc1): Add more details to description and hint (#710)
Co-authored-by: bmacer <bmacer@cisco.com>
Co-authored-by: marisa <mokou@fastmail.com>
Co-authored-by: Roberto Vidal <vidal.roberto.j@gmail.com>
2021-04-21 14:50:03 +02:00
mokou 6177b6e126 chore: Fix integration tests 2021-04-21 14:47:53 +02:00
marisa 79cc657917
Merge pull request #646 from apogeeoak/iterator
Added iterators5.rs exercise.
2021-04-21 10:10:50 +02:00
mokou 7928122fce feat: Replace clap with argh
I’ve been wanting to do this for a while, but always procrastinated on it. We’ve been using Clap since the 2.0 rewrite, but Clap is known to be a fairly heavy library. Since Rustlings is usually peoples’ first contact with a Rust compilation, I think it’s in our best interests that this complation is as fast as possible. In effect, replacing Clap with the smaller, structopt-style `argh` reduces the amount of crates needing to be compiled from 82 to 60.

I also think this makes the code way easier to read, we don’t need to use Clap’s methods anymore, but can switch over to using pure Rust methods, e.g., switches are booleans, options are Option<String>s or the like, and subcommands are just structs.
2021-04-21 10:08:26 +02:00
apogeeoak 9c88ea9126 Improved iterators5.rs explanation. 2021-04-20 18:55:04 -04:00
marisa 2b766ef9f9
Merge pull request #648 from apogeeoak/iterator2
Moved iterators2.rs errors out of tests.
2021-04-20 11:24:10 +02:00
marisa bd3d9ac9d5
Merge pull request #649 from apogeeoak/iterator3
Enabled iterators3.rs to run without commented out tests.
2021-04-20 11:22:39 +02:00
marisa aa0db8379c
Merge pull request #714 from rust-lang/all-contributors/add-hongshaoyang
docs: add hongshaoyang as a contributor
2021-04-20 11:19:49 +02:00
allcontributors[bot] eadd41a9ec
docs: update .all-contributorsrc [skip ci] 2021-04-20 09:19:39 +00:00
allcontributors[bot] fab2eb9833
docs: update README.md [skip ci] 2021-04-20 09:19:38 +00:00
Shao Yang Hong 6bd791f2f4
fix(structs): Add 5.3 to structs/README (#652)
Co-authored-by: Shao Yang Hong <shaoyang.hong@ninjavan.co>
2021-04-20 11:19:24 +02:00
marisa ec5f80dce1
Merge pull request #713 from rust-lang/all-contributors/add-k12ish
docs: add k12ish as a contributor
2021-04-20 11:18:32 +02:00
allcontributors[bot] 65cdc856ae
docs: update .all-contributorsrc [skip ci] 2021-04-20 09:18:23 +00:00
allcontributors[bot] 472f61485e
docs: update README.md [skip ci] 2021-04-20 09:18:22 +00:00
k12ish b4de659438
fix(option2): Rename uninformative variables (#675)
Renaming uninformative names like `optional_value`, `value`, `optional_values_vec` and `value` helps users distinguish between the two parts of the task.
2021-04-20 11:18:05 +02:00
marisa a37a8818c8
Merge pull request #712 from rust-lang/all-contributors/add-arthas168
docs: add arthas168 as a contributor
2021-04-20 11:16:25 +02:00
allcontributors[bot] bdf01aa174
docs: update .all-contributorsrc [skip ci] 2021-04-20 09:16:16 +00:00
allcontributors[bot] a941c69f09
docs: update README.md [skip ci] 2021-04-20 09:16:15 +00:00
Pete Pavlovski 72aaa15e6a
fix(hashmap2): Update incorrect assertion (#660)
The test description says "at least five types of fruit", but the test itself is checking for exactly five types of fruit, which was a bit misleading for newcomers like me :) 

A simple change from "==" to ">=" should do the trick and successfully check for the "at least" condition.
2021-04-20 11:15:49 +02:00
marisa 3a06de71a8
Merge pull request #708 from Zerotask/list-command-added-to-readme
docs: added hint for rustlings list command
2021-04-20 11:10:38 +02:00
marisa 5e2b39a5c1
Merge pull request #711 from rust-lang/all-contributors/add-Zerotask
docs: add Zerotask as a contributor
2021-04-20 11:09:41 +02:00
allcontributors[bot] 63c942233e
docs: update .all-contributorsrc [skip ci] 2021-04-20 09:09:31 +00:00
allcontributors[bot] 2612edc133
docs: update README.md [skip ci] 2021-04-20 09:09:30 +00:00
marisa e2ce9f42b5
Merge pull request #707 from Zerotask/list-command-progress-info
feat(list): added progress info
2021-04-20 11:09:14 +02:00
Patrick Hintermayer 1c6f7e4b7b
feat(list): updated progress percentage 2021-04-19 09:39:05 +02:00
Zerotask e2c41903ad
docs: added hint for rustlings list command
Added hint for `rustlings list` to the "Doing exercises" section.
2021-04-18 16:07:30 +02:00
Zerotask bd48544e25
style: formatted files with rustfmt 2021-04-18 15:40:47 +02:00
Zerotask c0e3daacaf
feat(list): added progress info
Added a progress info at the bottom of the list for command: rustlings list

closes #705
2021-04-18 15:37:41 +02:00
Abdou Seck f2ad3a6a0b
Merge pull request #697 from WowSuchRicky/main
Rename 'Lichi' to 'Lychee' in the fruit example
2021-04-13 10:40:07 -04:00
Abdou Seck caf921a01f
Merge pull request #674 from Morsicus/fix/collections-exercises-naming
Update collections exercises naming
2021-04-13 10:39:18 -04:00
WowSuchRicky b790bafc02 Rename lichi to lychee in the fruit example 2021-04-09 14:08:02 -07:00
Abdou Seck ad3cd54cce
Merge pull request #694 from rust-lang/all-contributors/add-tlyu
docs: add tlyu as a contributor
2021-04-05 07:27:42 -04:00
allcontributors[bot] 1a6a725f88
docs: update .all-contributorsrc [skip ci] 2021-04-05 11:27:17 +00:00
allcontributors[bot] 1ad20d94ff
docs: update README.md [skip ci] 2021-04-05 11:27:16 +00:00
Abdou Seck 995c6f0fb1
Merge pull request #693 from tlyu/trait-obj-tryfrom
fix: use trait objects for try_from_into and from_str
2021-04-05 07:26:19 -04:00
Taylor Yu c3e7b83178 fix: use trait objects for from_str
Use `Box<dyn error::Error>` to allow solutions to use `?` to propagate 
errors.
2021-04-04 18:56:10 -05:00
Taylor Yu 2e93a588e0 fix: use trait objects for try_from_into
Use `Box<dyn error::Error>` to allow solutions to use `?` to propagate
errors.  In the tests, explicitly check `is_ok()` instead of trying to
force the error type to `String` (or other `PartialEq` type) using
`assert_eq!()`.
2021-04-04 12:41:32 -05:00
marisa 9aeca3f97e
Merge pull request #692 from rust-lang/all-contributors/add-flakolefluk
docs: add flakolefluk as a contributor
2021-04-04 09:44:02 +02:00
allcontributors[bot] 2193fff4bb
docs: update .all-contributorsrc [skip ci] 2021-04-04 07:43:51 +00:00
allcontributors[bot] aec2c65c63
docs: update README.md [skip ci] 2021-04-04 07:43:50 +00:00
Ignacio Le Fluk a6509cc4d5
fix(functions3): improve function argument type (#687) 2021-04-04 09:43:25 +02:00
marisa a02b279750
chore: Provide a working Windows installation link 2021-03-23 09:10:40 +01:00
marisa ece841f5ce
Merge pull request #680 from rust-lang/all-contributors/add-blerchy
docs: add blerchy as a contributor
2021-03-22 13:37:10 +01:00
allcontributors[bot] 2a6e4dc8a6
docs: update .all-contributorsrc [skip ci] 2021-03-22 12:37:02 +00:00
allcontributors[bot] c163011cc0
docs: update README.md [skip ci] 2021-03-22 12:37:01 +00:00
marisa b350945a16
Merge pull request #676 from blerchy/feat/no-emoji
Replace emojis when NO_EMOJI env variable present
2021-03-22 13:36:26 +01:00
marisa 1ef368a69d
Merge pull request #679 from rust-lang/new-install-urls
chore: Update install URLs
2021-03-21 16:35:44 +01:00
marisa 8dc587b01a
chore: Update install URLs 2021-03-21 16:34:21 +01:00
allcontributors[bot] 550c4293ed
docs: add chapeupreto as a contributor (#678)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2021-03-20 21:13:35 +01:00
Rod Elias 3df094713f
chore: capitalize `c` letter
By capitalizing the `c` letter it makes clear that we're talking about the C programming language.
2021-03-20 21:12:49 +01:00
Matt Lebl 01e7f27aa6 refactor: change from match to if for NO_EMOJI 2021-03-20 11:53:40 -07:00
Matt Lebl 8d62a99637 feat: Replace emojis when NO_EMOJI env variable present 2021-03-19 02:16:07 -07:00
Mickael Fortunato ab9995e76e doc: Update collections exercises instruction to match the standard naming 2021-03-18 19:11:15 +01:00
Mickael Fortunato bef39b1259 fix(collections): Naming exercises for vectors and hashmap 2021-03-18 19:11:04 +01:00
Pascal H 0d894e6ff7
fix(quiz3): Force an answer to Q2 (#672)
Add also an example of unimplemented!() macro.
2021-03-16 10:14:25 +01:00
allcontributors[bot] be9510539e
docs: add hpwxf as a contributor (#671)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2021-03-15 09:14:41 +01:00
Pascal H 3bce2ef8d6
chore: clarify collections documentation
C++ `map` is more like BTreeMap.

`unordered_map` in C++(11) is the equivalent of `HashMap` in Rust.
(+ additional like for references).
2021-03-15 09:14:12 +01:00
Ivan Nerazumov aa9a943ddf
fix(installation): first PowerShell command
ExecutionPolicy to RemoteSigned command was fixed because the old command was getting denied access to change the Execution Policy property
2021-03-13 18:45:52 +07:00
Darius Wiles ebdb66c7bf
fix(structs2): correct grammar in hint (#663) 2021-03-13 12:14:44 +01:00
Darius Wiles 9f3e8c2dde
fix(structs3): reword heading comment (#664) 2021-03-13 12:14:02 +01:00
apogeeoak 96c56ab08a
chore: changed errors3 mode from test to compile 2021-03-12 20:04:29 +01:00
allcontributors[bot] 04dbf03ace
docs: add cadolphs as a contributor (#667)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2021-03-12 18:37:58 +01:00
cadolphs 05a753fe63
fix: add check to prevent naive implementation of is_international
* fix(structs3): Add check to prevent naive implementation

* chore(structs3): Add a missed newline after the test I added
2021-03-12 18:36:35 +01:00
allcontributors[bot] 815edb7003
docs: add cjwyett as a contributor (#666)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2021-03-12 15:39:40 +01:00
Cyrus Wyett 5157f56875
chore: fix typo
is however some --> are however some
2021-03-12 15:38:28 +01:00
allcontributors[bot] 3f5abca215
docs: add circumspect as a contributor
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2021-03-12 15:28:03 +01:00
circumspect 833df0b8b3
chore: fix typo
Co-authored-by: Chenkail <40770208+Chenkail@users.noreply.github.com>
2021-03-12 15:26:57 +01:00
marisa 6742860ea5
Merge pull request #658 from rust-lang/all-contributors/add-Crell
docs: add Crell as a contributor
2021-02-25 11:21:11 +01:00
allcontributors[bot] 797e6d45c0
docs: update .all-contributorsrc [skip ci] 2021-02-25 10:20:54 +00:00
allcontributors[bot] 320de0d921
docs: update README.md [skip ci] 2021-02-25 10:20:53 +00:00
marisa 5eed505d74
Merge pull request #656 from Crell/spelling-fix
fix: Spelling error
2021-02-25 11:20:39 +01:00
Larry Garfield 91ee27f22b
fix: Spelling error 2021-02-24 15:03:26 -06:00
Jirka Kremser 5f7c89f85d
fix(from_str): Correct typos
typos in the comments
2021-02-21 21:50:17 +01:00
apogeeoak c6712dfccd fix(iterators3): Enabled iterators3.rs to run without commented out tests. 2021-02-12 15:36:53 -05:00
apogeeoak baf4ba175b fix(iterators2): Moved errors out of tests.
Closes #359
2021-02-11 21:24:32 -05:00
apogeeoak b29ea17ea9 feat: Added iterators5.rs exercise. 2021-02-10 18:03:29 -05:00
marisa ab57c26cf9
Merge pull request #644 from apogeeoak/clippy
Updated source to follow clippy suggestions.
2021-02-10 10:37:13 +01:00
marisa 98e5e8835e
Merge pull request #645 from rust-lang/all-contributors/add-apogeeoak
docs: add apogeeoak as a contributor
2021-02-10 10:36:57 +01:00
allcontributors[bot] f5158ece1a
docs: update .all-contributorsrc [skip ci] 2021-02-10 09:36:48 +00:00
allcontributors[bot] d65b4a9a93
docs: update README.md [skip ci] 2021-02-10 09:36:47 +00:00
marisa 8404947bc0
Merge pull request #642 from apogeeoak/contributing
Fixed grammar in contributing.md.
2021-02-10 10:36:04 +01:00
apogeeoak 2e84f34cf3 chore: Updated source to follow clippy suggestions. 2021-02-09 18:21:18 -05:00
apogeeoak 726805f064 docs: Fixed grammar in contributing.md. 2021-02-09 17:43:53 -05:00
marisa b4a4138559
Merge pull request #641 from rust-lang/all-contributors/add-tal-zvon
docs: add tal-zvon as a contributor
2021-02-07 12:22:49 +01:00
allcontributors[bot] f1d2b3a39a
docs: update .all-contributorsrc [skip ci] 2021-02-07 11:22:33 +00:00
allcontributors[bot] 1f9d006858
docs: update README.md [skip ci] 2021-02-07 11:22:32 +00:00
Tal cc266d7d80
fix(move_semantics4): Remove redundant "instead" (#640) 2021-02-07 12:22:13 +01:00
marisa fff72afe2e
Merge pull request #636 from rust-lang/all-contributors/add-jbaber
docs: add jbaber as a contributor
2021-01-30 17:12:39 +01:00
allcontributors[bot] c1abd13b5c
docs: update .all-contributorsrc [skip ci] 2021-01-30 16:12:28 +00:00
allcontributors[bot] 75802c14b2
docs: update README.md [skip ci] 2021-01-30 16:12:27 +00:00
John Baber-Lucero cddc1e86e7
fix(info): Fix typo (#635)
Co-authored-by: John Baber-Lucero <git@frundle.com>
2021-01-30 17:12:06 +01:00
fmoko 24ea42ce61
Merge pull request #627 from rust-lang/all-contributors/add-jfchevrette
docs: add jfchevrette as a contributor
2021-01-22 13:11:43 +01:00
allcontributors[bot] 6102e612fa
docs: update .all-contributorsrc [skip ci] 2021-01-22 12:11:34 +00:00
allcontributors[bot] 52bde71166
docs: update README.md [skip ci] 2021-01-22 12:11:33 +00:00
Abdou Seck 15a79cfe9c
Merge pull request #626 from jfchevrette/patch-1
Fix instructions(steps) for conversions/from_str exercice
2021-01-21 08:10:25 -05:00
Jean-Francois Chevrette 15e71535f3 fix(from_str): test for error instead of unwrap/should_panic 2021-01-21 07:55:22 -05:00
mokou 9f988bfe29 docs: Remove duplicate uninstallation section 2021-01-17 13:00:50 +01:00
fmoko e8d1baa4b5
Merge pull request #599 from AbdouSeck/improve-list-command
feat(cli): Improve the list command with options, and then some
2021-01-17 12:37:58 +01:00
Abdou Seck 8bbe4ff138 feat(cli): Improve the list command with options, and then some
1.
`rustlings list` should now display more than just the exercise names.
Information such as file paths and exercises statuses should be displayed.
The `--paths` option limits the displayed fields to only the path names; while the `--names`
option limits the displayed fields to only exercise names.
You can also control which exercises are displayed, by using the `--filter` option, or
the `--solved` or `--unsolved` flags.

Some use cases:
- Fetching pending exercise files with the keyword "conversion" to pass to my editor:
```sh
vim $(rustlings list --filter "conversion" --paths --unsolved)
```

- Fetching exercise names with keyword "conversion" to pass to `rustlings run`:
```sh
for exercise in $(rustlings list --filter "conversion" --names)
do
    rustlings run ${exercise}
done
```

2.
This should also fix #465, and will likely fix #585, as well.
That bug mentioned in those issues has to do with the way the `watch` command handler fetches the pending exercises.
Going forward, the least recently updated exercises along with all the other exercises in a pending state are fetched.
2021-01-08 13:21:00 -05:00
Abdou Seck 0b9220c1fc Add looks_done method to Exercise to expose a resolution state 2021-01-08 13:21:00 -05:00
Abdou Seck 0d65753fdb
Merge pull request #622 from lntuition/conversions_more_utc
feat(conversions): Add more unit tests to `from_str` and `from_into` exercises.
2021-01-08 13:18:24 -05:00
Sang-Heon Jeon 4f1374a6e7 feat(from_into) : add test for checking unnecessary trailing value 2021-01-09 00:08:38 +09:00
Sang-Heon Jeon 5a0521e92c feat(from_str) : add test for checking unnecessary trailing value 2021-01-09 00:07:13 +09:00
fmoko fea86c29d6
chore: Remove Readme GIF 2021-01-08 14:01:04 +01:00
fmoko 9c4614f7e6
Merge pull request #619 from rust-lang/all-contributors/add-chrizel
docs: add chrizel as a contributor
2021-01-06 16:54:47 +01:00
allcontributors[bot] c24a78ae94
docs: update .all-contributorsrc [skip ci] 2021-01-06 15:54:34 +00:00
allcontributors[bot] 621816fb56
docs: update README.md [skip ci] 2021-01-06 15:54:33 +00:00
fmoko cfae54d361
Merge pull request #618 from chrizel/patch-1
fix(threads1): line number correction
2021-01-06 16:54:16 +01:00
Christian Zeller 7857b0a689
fix(threads1): line number correction 2021-01-06 13:47:20 +01:00
Marius Ungureanu 10965920fb
fix(move_semantics4): Small readbility improvement (#617)
* Small readbility improvement move_semantics4 doc

* Remove `an` as it refers to the argument
2021-01-06 10:12:33 +01:00
fmoko d2e7ecabd8
Merge pull request #616 from rust-lang/all-contributors/add-wsh
docs: add wsh as a contributor
2021-01-04 14:12:24 +01:00
fmoko 5772589dc3
Merge pull request #615 from wsh/docfixes
docs: mention flatten in the options2 hint
2021-01-04 14:12:11 +01:00
allcontributors[bot] 6df08b411b
docs: update .all-contributorsrc [skip ci] 2021-01-04 13:12:11 +00:00
allcontributors[bot] c355ac6593
docs: update README.md [skip ci] 2021-01-04 13:12:10 +00:00
Will Hayworth e9b42bbc2a docs: mention flatten in the options2 hint 2021-01-03 03:42:39 -08:00
Abdou Seck 1283aa3bd8 Merge pull request #606 from RoelofWobben/ghost-RoelofWobben-patch-1
fix: Update README.md for Windows users to exclude the rustlings directory
from the list of directories scanned by Anti-Virus programs.
2020-12-31 11:13:03 -05:00
RoelofWobben ff6cba7205 Update README.md 2020-12-31 10:57:37 -05:00
fmoko d0107f7921
Merge pull request #609 from xehpuk/patch-1
fix: typo in default out text
2020-12-31 16:12:13 +01:00
xehpuk 644c49f1e0
fix: typo in default out text 2020-12-30 22:56:04 +01:00
mokou a303d508cf release: 4.3.0 2020-12-29 11:39:26 +01:00
mokou 44d39112ff feat: Rewrite default out text
This has been in place for a long time now, before we had an install
script, so it ended up repeating a bunch of the same things that the
install script does automatically. I rewrote it so that it gives more
helpful information about how you're supposed to do Rustlings.
Hopefully this will reduce the number of "I started Rustlings and it
gave me an error" issues (no offense to anyone who opened one of those,
it was pretty unclear that it _wasn't_ an error).
2020-12-29 11:34:52 +01:00
mokou 28020d0c54 docs: Add note on uninstalling to README 2020-12-29 11:23:08 +01:00
Axel Viala 0ef95947cc
fix(functions2): Change signature to trigger precise error message: (#605)
Now trigger this error:
```
error: expected type, found `)`
  --> exercises/functions/functions2.rs:10:16
   |
10 | fn call_me(num:) {
   |                ^ expected type

```
2020-12-27 12:36:38 +01:00
allcontributors[bot] 4ac70a99ae
docs: add seancad as a contributor
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-12-15 08:33:47 +01:00
seancad bcf14cf677
fix: update structs README 2020-12-15 08:32:46 +01:00
fmoko 1dae782cd4
Merge pull request #598 from JuliaCao/update_exec_order
fix: added missing exercises to info.toml
2020-12-13 02:30:57 +01:00
JuliaCao 90cfb6ff28 fix: added missing exercises to info.toml 2020-12-12 10:34:59 -08:00
allcontributors[bot] 26110da7ca
docs: add pcn as a contributor
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-12-08 10:12:57 +01:00
Peter N 30644c9a06
fix: gives a bit more context to magic number 2020-12-08 10:08:25 +01:00
JuliaCao 033bf1198f
feat: match exercise order to book chapters (#541)
Added exercise to book chapter mapping table to exercise README
2020-12-07 15:37:19 +01:00
fmoko cdc7d92e57
Merge pull request #592 from tinkhauser/vec1_bugfix
fix(vec1): Have test compare every element in a and v
2020-12-06 15:09:45 +01:00
fmoko af0e3b8f17
Merge pull request #594 from xakon/fix/try_from_into
feat(try_from_into): remove duplicate annotation
2020-12-03 18:23:48 +01:00
Christos Kontas 04f1d079aa feat(try_from_into): remove duplicate annotation 2020-12-03 17:51:30 +01:00
Jacob Tinkhauser 9b6c629397
fix(vec1): Have test compare every element in a and v
The previous test would stop comparing elements in array a and vec v upon reaching the last element of either. This resulted in the test passing even if v did not contain all the elements in a. This change to the test fixes that bug and should only pass if all the elements in a and v are present and equal.
2020-11-29 01:35:14 +00:00
fmoko 5aa467bef2
Merge pull request #587 from wh5a/bugfix
fix(try_from_into): type error
2020-11-12 16:36:50 +01:00
fmoko af7ad27f89
chore: Remove buildkite build file 2020-11-12 09:50:55 +01:00
fmoko d6d57bfbb8
docs: Remove buildkite badge from README 2020-11-12 09:50:39 +01:00
Wei Hu 4f4cfcf3c3 fix(try_from_into): type error 2020-11-11 21:02:00 -08:00
Brock fa9f522b7f
feat: Crab? (#586)
Crab?
2020-11-11 23:06:14 +01:00
Caleb Webber 838f9f3008
feat: add "rustlings list" command 2020-11-10 18:36:19 +01:00
JP 96347df9df
fix(try_from_into): Update description (#584)
Description update
2020-11-08 19:30:40 +01:00
Brock 9334783da3
fix(structs1): Adjust wording (#573)
Co-authored-by: fmoko <mokou@posteo.de>
2020-11-08 10:31:45 +01:00
mokou 964b2a331d release: 4.2.0 2020-11-07 14:21:10 +01:00
fiplox 95ccd92616
feat(try_from_into): Add tests (#571)
Co-authored-by: Volodymyr Patuta <6977238-fiplox@users.noreply.gitlab.com>
2020-11-07 14:01:39 +01:00
JP 197d3a3d89
fix(iterators2): Update description (#578)
grammar fix in the description
2020-11-07 13:54:14 +01:00
fmoko a7ddd747ca
Merge pull request #582 from seeplusplus/inotify-watch-error
fix: log error output when inotify limit is exceeded
2020-11-07 13:53:35 +01:00
Caleb Webber d61b4e5a13
fix: log error output when inotify limit is exceeded
closes #472
2020-11-05 19:30:50 -05:00
allcontributors[bot] 68e646f8aa
docs: add seeplusplus as a contributor 2020-11-05 10:03:43 +01:00
Caleb Webber 21bfb2d477
fix(installation): Update the MinRustVersion
closes #577df

Co-authored-by: Caleb Webber <seeplusplus@users.noreply.github.com>
2020-11-05 09:59:25 +01:00
fmoko a9dae71188
Merge pull request #574 from jrvidal/temp_file
fix: more unique temp_file
2020-10-31 12:57:33 +01:00
fmoko dd84cc5fd4
Merge pull request #575 from rust-lang/all-contributors/add-sazid 2020-10-30 20:29:47 +01:00
allcontributors[bot] 51631f4c2e
docs: update .all-contributorsrc [skip ci] 2020-10-30 19:29:37 +00:00
allcontributors[bot] 535a8c8243
docs: update README.md [skip ci] 2020-10-30 19:29:36 +00:00
fmoko 7abfbd23d0
Merge pull request #572 from sazid/main 2020-10-30 20:28:46 +01:00
sazid 633c00cf80 feat: Add HashMap exercises 2020-10-31 01:11:04 +06:00
sazid 0c12fa31c5 feat: Add Vec exercises 2020-10-31 01:10:49 +06:00
Roberto Vidal 5643ef05bc fix: more unique temp_file 2020-10-30 14:39:28 +01:00
fmoko f38f42f17d
Merge pull request #561 from notmatt/mbs-fixups 2020-10-14 17:22:49 +02:00
Matthew Smillie 472d8592d6 fix(primitive_types6): remove 'unused doc comment' warning 2020-10-13 23:20:17 -07:00
Matthew Smillie 4fb230daf1 fix(primitive_types6): missing comma in test 2020-10-13 23:18:41 -07:00
Rastamo e6bde22f9c
chore: primitive_types6 mode changed to test (#559)
primitive_types6 exercise was changed to test yesterday, but info.toml file wasn't updated.
I think this change should fix it.
2020-10-11 14:00:03 +02:00
allcontributors[bot] cc5b9b772a
docs: add AnnikaCodes as a contributor (#557)
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
Co-authored-by: fmoko <mokou@posteo.de>
2020-10-10 17:08:22 +02:00
allcontributors[bot] ded1474bbb
docs: add darnuria as a contributor (#554)
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-10-10 16:07:15 +02:00
Axel Viala 2b1fb2b739
feat(primitive_types6): Add a test (#548)
Co-authored-by: Annika <56906084+AnnikaCodes@users.noreply.github.com>
Co-authored-by: fmoko <mokou@posteo.de>
2020-10-10 16:04:19 +02:00
Ryan McQuen 18e0bfef1d
fix(quiz3): Second test is for odd numbers, not even. (#553) 2020-10-10 13:11:57 +02:00
fmoko 3be760dc38
Merge pull request #552 from rust-lang/all-contributors/add-ryanpcmcquen 2020-10-09 02:16:07 +02:00
allcontributors[bot] 29dd0b1e41
docs: update .all-contributorsrc [skip ci] 2020-10-09 00:15:54 +00:00
allcontributors[bot] e1fdfbb062
docs: update README.md [skip ci] 2020-10-09 00:15:53 +00:00
mokou 89c07b5e43 release: 4.1.0 2020-10-05 18:42:26 +02:00
fmoko 9b5350eab1
Merge pull request #546 from jienius/doc-improve-readme
docs: Fix grammatical errors in Readme
2020-10-02 12:52:34 +02:00
jieniu$ 5382cd696a docs: Fix grammatical errors in Readme 2020-10-01 20:15:36 -06:00
fmoko 69fc9ce10e
Merge pull request #545 from YJDoc2/main 2020-10-01 12:17:05 +02:00
Yashodhan Joshi 13ac6f38dc Merge branch 'master' of https://github.com/YJDoc2/rustlings 2020-10-01 08:34:01 +05:30
Yashodhan Joshi 2ec0bdfd99 fix(variables5) : make shadowing more prominent
closes #375
2020-10-01 08:31:42 +05:30
Alexx Roche c03e1e6c6c
chore: fixed test name 2020-09-27 21:57:51 +02:00
fmoko 2a682abeef
Merge pull request #522 from calvinbrown085/adding-test-for-false-case 2020-09-27 17:05:42 +02:00
allcontributors[bot] 9f38b54a2d
docs: add greg-el as a contributor
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-09-25 13:43:01 +02:00
Greg Leonard 2933f51949
chore: Change point to comma in from_into.rs
A typo in the fn test_bad_age() hint message had a point rather than comma

Prev:
// Test that "Mark.twenty"

Current:
// Test that "Mark,twenty"
2020-09-25 13:39:52 +02:00
fmoko a75300b8c7
Merge pull request #536 from rust-lang/all-contributors/add-dev-cyprium 2020-09-22 11:31:53 +02:00
allcontributors[bot] 01f4bb86c3
docs: update .all-contributorsrc [skip ci] 2020-09-22 09:31:42 +00:00
allcontributors[bot] 79c3ada49b
docs: update README.md [skip ci] 2020-09-22 09:31:41 +00:00
fmoko ac276d06fa
Merge pull request #535 from rust-lang/all-contributors/add-GaurangTandon 2020-09-22 11:04:45 +02:00
allcontributors[bot] c7eabe61bb
docs: update .all-contributorsrc [skip ci] 2020-09-22 09:04:33 +00:00
allcontributors[bot] 8f28bcf704
docs: update README.md [skip ci] 2020-09-22 09:04:32 +00:00
fmoko be3b289a10
Merge pull request #534 from rust-lang/all-contributors/add-jmahmood 2020-09-22 10:57:44 +02:00
allcontributors[bot] 19a0c1f3cb
docs: update .all-contributorsrc [skip ci] 2020-09-22 08:57:33 +00:00
allcontributors[bot] dc94fcc6e8
docs: update README.md [skip ci] 2020-09-22 08:57:32 +00:00
fmoko 183237c858
Merge pull request #533 from rust-lang/all-contributors/add-EvanCarroll 2020-09-22 10:56:28 +02:00
allcontributors[bot] 599a44f90f
docs: update .all-contributorsrc [skip ci] 2020-09-22 08:56:18 +00:00
allcontributors[bot] 08e9c7aa2f
docs: update README.md [skip ci] 2020-09-22 08:56:17 +00:00
fmoko a893d04e81
Merge pull request #532 from rust-lang/all-contributors/add-siobhanjacobson 2020-09-22 10:55:09 +02:00
allcontributors[bot] 5996bd57ea
docs: update .all-contributorsrc [skip ci] 2020-09-22 08:54:54 +00:00
allcontributors[bot] 909b297ae3
docs: update README.md [skip ci] 2020-09-22 08:54:53 +00:00
fmoko abdc3b2211
Merge pull request #531 from rust-lang/all-contributors/add-wrobstory 2020-09-22 10:52:39 +02:00
allcontributors[bot] e66d2085b7
docs: update .all-contributorsrc [skip ci] 2020-09-22 08:52:29 +00:00
allcontributors[bot] 4a5e48e88f
docs: update README.md [skip ci] 2020-09-22 08:52:28 +00:00
fmoko 3a586a0c19
Merge pull request #530 from rust-lang/all-contributors/add-DiD92 2020-09-22 10:51:01 +02:00
allcontributors[bot] 144dec3fd3
docs: update .all-contributorsrc [skip ci] 2020-09-22 08:50:51 +00:00
allcontributors[bot] 448d116a89
docs: update README.md [skip ci] 2020-09-22 08:50:50 +00:00
fmoko 8493e5d09f
Merge pull request #529 from rust-lang/all-contributors/add-apatniv 2020-09-22 10:50:07 +02:00
allcontributors[bot] 83e7365fd8
docs: update .all-contributorsrc [skip ci] 2020-09-22 08:49:57 +00:00
allcontributors[bot] b6040e6061
docs: update README.md [skip ci] 2020-09-22 08:49:56 +00:00
fmoko 858b9a5119
Merge pull request #528 from rust-lang/all-contributors/add-bertonha 2020-09-22 10:48:48 +02:00
allcontributors[bot] 00fbcd14f7
docs: update .all-contributorsrc [skip ci] 2020-09-22 08:48:39 +00:00
allcontributors[bot] 062f18d353
docs: update README.md [skip ci] 2020-09-22 08:48:38 +00:00
fmoko 58760bce54
Merge pull request #527 from rust-lang/all-contributors/add-jihchi 2020-09-22 10:45:07 +02:00
allcontributors[bot] ca4f026074
docs: update .all-contributorsrc [skip ci] 2020-09-22 08:44:57 +00:00
allcontributors[bot] f285ac2281
docs: update README.md [skip ci] 2020-09-22 08:44:56 +00:00
fmoko 0f3db4dbb9
Merge pull request #526 from rust-lang/all-contributors/add-Darrenmeehan 2020-09-22 10:43:33 +02:00
allcontributors[bot] 18b2d451cd
docs: update .all-contributorsrc [skip ci] 2020-09-22 08:43:24 +00:00
allcontributors[bot] b6dd1af7d2
docs: update README.md [skip ci] 2020-09-22 08:43:23 +00:00
fmoko 303c8ee7cd
Merge pull request #525 from rust-lang/all-contributors/add-avrong 2020-09-22 10:40:56 +02:00
allcontributors[bot] 98d6b15fc0
docs: update .all-contributorsrc [skip ci] 2020-09-22 08:40:46 +00:00
allcontributors[bot] 77f407dd5f
docs: update README.md [skip ci] 2020-09-22 08:40:45 +00:00
fmoko a12a3ef08b
Merge pull request #524 from rust-lang/all-contributors/add-lebedevsergey 2020-09-22 10:39:10 +02:00
allcontributors[bot] 6480fcaf7c
docs: update .all-contributorsrc [skip ci] 2020-09-22 08:39:00 +00:00
allcontributors[bot] f5cb439fe6
docs: update README.md [skip ci] 2020-09-22 08:38:59 +00:00
fmoko 15c9e85690
Merge pull request #523 from rust-lang/all-contributors/add-uce 2020-09-22 10:37:34 +02:00
allcontributors[bot] 8f8a85303b
docs: update .all-contributorsrc [skip ci] 2020-09-22 08:36:53 +00:00
allcontributors[bot] 114cc2db21
docs: update README.md [skip ci] 2020-09-22 08:36:52 +00:00
Calvin Brown bec97b6c76
Fixing test3 to have enough tests to make sure we test all cases 2020-09-21 15:23:19 -05:00
Jannek Squar 114b54cbdb
fix(structs3): Small adjustment of variable name
Co-authored-by: Jannek <squar@informatik.uni-hamburg.de>
2020-09-19 21:22:56 +02:00
fmoko 0f16463794
Merge pull request #489 from mukundbhudia/iterators1 2020-09-18 15:23:28 +02:00
Mukund Bhudia 8ff5fde88e
Update info.toml for typo fix
Co-authored-by: Andrew Marquez <andy2mgcc@gmail.com>
2020-09-18 10:40:11 +01:00
Ryan McQuen 3286c5ec19
fix(using_as): Add test so that proper type is returned. (#512) 2020-09-07 19:09:27 +02:00
Koalab99 ee7cdc66b3
chore: Removed extra whitespaces
Co-authored-by: Corentin ARNOULD <corentin.arn@gmail.com>
2020-08-27 19:51:19 +02:00
fmoko 9699da4968
Merge pull request #506 from bhgsbatista/patch-1
Make macros4 not compile by default
2020-08-27 11:21:09 +02:00
Samuel Batista 6bb0b48b10
Make macros4 not compile by default
Did you mean this? I'm new to rust and this test passed right away, so unsure what the intention was.
2020-08-26 22:17:03 -04:00
fmoko 70da09eae2
Merge pull request #504 from Ant0wan/quiz2_markers
fix(exercises): adding question mark to quiz2
2020-08-25 21:05:16 +02:00
Antoine Barthelemy 101072ab9f fix(exercises): adding question mark to quiz2
Question marks added for consistency.

closes #496
2020-08-25 16:38:41 +02:00
fmoko 47f7672c03
fix(generics3): clarify grade change 2020-08-25 10:45:12 +02:00
John Heath dd54ccf677
Make comments on example clearer
I actually struggled because I overlooked the fact that I needed to change the 2.1 to "A+". 

So I wanted to make things clearer for future rustlings.
2020-08-24 22:37:31 +01:00
fmoko 66ec916b3d
Merge pull request #498 from seeplusplus/main
fix(arc1): index mod should equal thread count
2020-08-17 12:48:41 +02:00
seeplusplus b4062ef699 fix(arc1): index mod should equal thread count 2020-08-16 20:55:50 -04:00
fmoko 2d3816341e
Merge pull request #492 from etiennebarrie/rustfmt-on-exercises
chore: Run rustfmt on exercises
2020-08-10 17:33:55 +02:00
fmoko d1054cd596
Merge pull request #493 from etiennebarrie/cargo-fmt
chore: Run cargo fmt
2020-08-10 17:33:22 +02:00
Étienne Barrié 81f8c2f83c chore: Run cargo fmt 2020-08-10 10:42:54 -04:00
Étienne Barrié 3144d3ae63 chore: Run rustfmt on exercises 2020-08-10 10:24:21 -04:00
Mukund Bhudia 9642f5a3f6 feat: Added iterators1.rs exercise 2020-08-04 12:57:01 +01:00
fmoko c4853ee6bb
Merge pull request #487 from dmarcoux/update-rustlings-in-cargo-lock 2020-08-04 01:57:04 +02:00
Dany Marcoux 1cc40bc9ce
fix: Update rustlings version in Cargo.lock 2020-08-03 22:17:32 +02:00
Robby 38a615f407
chore: add .vscode to gitignore 2020-07-24 13:23:01 +02:00
Adi Vaknin 4f2468e14f
feat(cli): Added 'cls' command to 'watch' mode (#474) 2020-07-23 20:23:27 +02:00
Ryan McQuen 8f7b5bd00e
feat: Add ability to run rustlings on repl.it (#471)
Co-authored-by: fmoko <mokou@posteo.de>
2020-07-23 19:21:15 +02:00
Ryan McQuen 4821a8be94
feat: Add gitpod support (#473) 2020-07-23 19:20:21 +02:00
Chad Dougherty 523d18b873
feat(try_from_into): Add insufficient length test (#469) 2020-07-13 11:39:05 +02:00
Eli Blaney c52be7dfcb
docs: Add uninstall info to README.md
* docs: Add uninstall info to README.md
* docs: Format commands as bash block
2020-07-12 08:44:11 +01:00
fmoko c2bfcf1c54
Merge pull request #468 from benjaminfjones/fix/exercise_whitespace
chore: change exercise whitespace for consistency
2020-07-11 23:12:58 +02:00
Benjamin Jones bb5f404e35 chore: Alter whitespace for consistency
* Add newline after "I AM DONE" in exercises for consistency
* Remove trailing whitespace from exercises
2020-07-11 11:50:54 -07:00
Philip Pokarowski 106dbbc341
Update README.md (#464) 2020-07-09 09:25:50 +02:00
DEWA Kazuyuki/出羽和之 4b6540c71a
fix(enums3): Update Message::ChangeColor to take a tuple. (#457) 2020-07-08 11:56:43 +02:00
Alexx Roche 816b1f5e85 feat: Remind the user of the hint option (#425)
Suggestion from AbdouSeck https://github.com/rust-lang/rustlings/issues/424#issuecomment-639870331
for when the student's code has errors.
2020-07-08 11:52:23 +02:00
Alexx Roche 9f61db5dbe
feat: Remind the user of the hint option (#425)
Suggestion from AbdouSeck https://github.com/rust-lang/rustlings/issues/424#issuecomment-639870331
for when the student's code has errors.
2020-07-08 11:51:12 +02:00
mokou e823bef970 docs: Add missing closing brackets to changelog 2020-07-08 11:43:08 +02:00
mokou f9ccc6a289 release: 4.0.0 2020-07-08 11:35:27 +02:00
fmoko b32a666541
Merge pull request #458 from Sowed/main 2020-07-01 10:19:45 +02:00
iamcastelli b636825de3
Merge pull request #1 from Sowed/then-to-than-docs-patch
fix: Change then to than
2020-06-27 16:49:39 +04:00
iamcastelli ddd98ad75d
fix: Change then to than
`than` makes more grammatical sense than `then` in this context.
2020-06-27 15:58:53 +04:00
mokou d355927024 Merge remote-tracking branch 'origin/master' into main 2020-06-22 04:47:27 +02:00
fmoko 75c0053bb1
Merge pull request #433 from SebastienCaunes/fix#432
fix : Use of integer for prices, therefore also for weight
2020-06-22 00:09:09 +02:00
mokou 55a9284665 chore: Move from master branch to main branch 2020-06-14 14:48:51 +02:00
Alexx Roche 113cdae2d4
fix(arc1): Passively introduce attributes (#429)
Ensure that std::sync::Arc is actually used, as this exercise can be compiled using things already learnt in previous exercises.
2020-06-14 12:15:35 +02:00
fmoko c6295ade33
Merge pull request #428 from millefalcon/master
Added example with `String` to show the AsRef working
2020-06-13 22:15:57 +02:00
fmoko e1e453075f
Merge pull request #422 from AbdouSeck/show-tests-prints 2020-06-12 23:04:51 +02:00
Sebastien Caunes 9ca08b8f2b fix : Use of integer for prices, therefore also for weight
rename confusing "from" and "to" to sender_country and recipient_country as suggested
2020-06-11 11:44:47 -05:00
tim bangma f47d3f422d
docs: Update `Invoke-WebRequest` to `Start-BitsTransfer` (#373) 2020-06-10 10:51:03 +02:00
Alexx Roche e6bd8021d9
fix(generics2): Guide students to the answer (#430) 2020-06-09 13:54:18 +02:00
millefalcon 307252e9ae Added example to show the AsRef working 2020-06-08 07:51:34 -04:00
Alexx Roche bb2ca25110
fix(box1): fix comment typo (#426)
Doesn't effect the code.
2020-06-06 12:07:39 +02:00
Abdou Seck 9e4fb1009f fix(installation): Provide a backup git reference when tag can't be curl
closes #423

If the parsed JSON data curled during a bash installation is not valid, use the repository's tag files
as a backup. If those files don't exist somehow, then checkout the master branch and install it.
2020-06-05 16:33:14 -04:00
Abdou Seck 8ad5f9bf53 feat: Add a --nocapture option to display test harnesses' outputs
This new feature can be accessed by invoking rustlings with --nocapture.

Both unit and integration tests added.

closes #262

BREAKING CHANGES:
The following function take a new boolean argument:
	* `run`
	* `verify`
	* `test`
	* `compile_and_test`
2020-06-04 11:18:26 -04:00
Abdou Seck 02a2fe4871 Collapse nested if statements 2020-06-04 11:18:09 -04:00
Abdou Seck 40741c5b0b Use .to_string rather than format macro 2020-06-03 17:18:48 -04:00
Alexx Roche 0dd1c6ca6b
fix: rename quiz1 to tests1 in info (#420)
`rustlings run tests1` wasn't working because of this typo.
2020-06-03 20:07:06 +02:00
Alexx Roche 5563adbb89
fix: fix quiz naming inconsistency (#421)
Inconsistent naming when compared with the other quiz files.
2020-06-03 20:06:35 +02:00
Alexx Roche 524e17df10
fix(variables6): minor typo (#419)
Looks like this was cloned from variables5.rs
2020-06-03 13:34:43 +02:00
fmoko 73e848e96f
Merge pull request #416 from danwilhelm/traits-readme
feat: Add traits README
2020-05-30 17:58:31 +02:00
fmoko 5f0806967c
Merge pull request #409 from AlexandruGG/feature/box-exercise 2020-05-30 17:58:16 +02:00
Dan Wilhelm 173bb14140 feat: Add traits README 2020-05-28 20:21:33 -07:00
fmoko 918f310674
Merge pull request #410 from tsauvajon/fix-option1
fix(option1): Don't add only zeros to the numbers array
2020-05-29 00:33:00 +02:00
fmoko a75fdbd8ad
Merge pull request #415 from danwilhelm/powershell-correction
chore: Fix PowerShell capitalization
2020-05-29 00:32:45 +02:00
Dan Wilhelm 9d3f189b0e chore: Fix PowerShell capitalization 2020-05-28 14:51:20 -07:00
AlexandruGG 7e79c51222 Add .idea to gitignore 2020-05-28 18:01:32 +01:00
fmoko a180d831a1
Merge pull request #413 from danwilhelm/generics3-90chars 2020-05-28 10:15:55 +02:00
Dan Wilhelm e81adc2752
chore: Add Powershell reminder 2020-05-28 09:35:29 +02:00
Allan Soares Duarte 500422d594
chore: Update variables6.rs book link 2020-05-28 09:33:15 +02:00
Dan Wilhelm 0311c03735 chore: Limit generics3 lines to 90 chars 2020-05-27 23:39:11 -07:00
AlexandruGG df81141d6f Address PR feedback: add tests 2020-05-27 10:03:59 +01:00
Thomas Sauvajon cce6a44277
fix(option1): Don't add only zeros to the numbers array 2020-05-27 18:55:12 +10:00
AlexandruGG 7479a4737b feat: Add box1.rs exercise 2020-05-26 21:46:24 +01:00
Evan Carroll 06ef4cc654
fix: confine the user further in variable exercises
We want to teach a specific lesson. To ensure that we do, let's try to
provide more clarity on what the user should not do.
2020-05-25 10:09:11 +02:00
Jade McGough c7c3130507
chore: remove struct2 hint comment 2020-05-20 08:31:28 +02:00
Sanjay K 010a045692
feat: renames test to quiz, fixes #244
BREAKING CHANGE

* changed test to quiz: fixes issues in #244
* fixed info.toml: #244
* fixed naming related issues
2020-05-19 18:47:44 +02:00
fmoko 51666609f1
Merge pull request #365 from sjmann/generics-2-fix 2020-05-19 17:49:55 +02:00
Stefan Kupresak 10967bce57
fix(option2): Add TODO to comments (#400) 2020-05-16 22:48:18 +02:00
IkaR49 763aa6e378
feat: Rewrite try_from_into (#393) 2020-05-15 23:02:57 +02:00
Gaurang Tandon d6c0a688e6
fix(test2): name of type String and &str (#394) 2020-05-13 12:38:14 +02:00
Jawaad Mahmood 9f75554f2a
fix(options1): Add hint about Array Initialization (#389) 2020-05-10 13:21:29 +02:00
Evan Carroll 2b20c8a0f5
fix(errorsn): Try harder to confine the user. (#388) 2020-05-06 21:12:15 +02:00
fmoko 1b4590b42b
Merge pull request #385 from siobhanjacobson/fix-enums3-test 2020-05-05 19:50:28 +02:00
Siobhan Jacobson 09e89bbcd3 Update Message::Move in the enums3 test to take a Point. 2020-05-04 18:59:23 -04:00
fmoko 7c4b1f910c
Merge pull request #372 from DiD92/exercise_structs3 2020-05-03 19:44:26 +02:00
fmoko 3ceabe91f8
Merge pull request #383 from wrobstory/wrobstory-exercises 2020-05-03 19:44:08 +02:00
fmoko a39ffb2fb8
Merge pull request #368 from apatniv/update_test_case 2020-05-03 13:31:46 +02:00
apatniv 41f989135d Review Comments: Add other test cases 2020-05-02 20:41:11 -04:00
Rob Story f6cffc7e48 fix(option1): Add cast to usize, as it is confusing in the context of an exercise about Option 2020-05-02 16:39:37 -07:00
Rob Story 1da84b5f7c feat: Add if2 exercise 2020-05-02 13:02:16 -07:00
fmoko ebfe76cdb6
Merge pull request #382 from bertonha/deprecated-description 2020-05-02 18:38:32 +02:00
Christofer Bertonha c301814d68 chore: Remove deprecated description from error_handling/errorsn.rs 2020-05-02 18:30:11 +02:00
fmoko 09478571df
Merge pull request #378 from Darrenmeehan/patch-2 2020-04-30 18:33:46 +02:00
Jihchi Lee a901499ede
fix(from_into.rs): typo 2020-04-30 15:53:50 +02:00
fmoko de65026db0
Merge pull request #377 from danwilhelm/dw-typos 2020-04-30 09:21:42 +02:00
fmoko 071b51d588
Check if python is available while checking for git, rustc and cargo (#376) 2020-04-30 09:21:17 +02:00
Darren Meehan 80390d8a03
docs: Remove outdated MacOS instructions
The quoted file no longer exists
2020-04-30 08:13:41 +01:00
Dan Wilhelm 9590082848 fix: update iterator and macro text for typos and clarity
- /macros/README.md: Typo "modules" => "macros"
- iterators2.py: Reduce line length to <90-char width.
- iterators4.py: Update 'fun' => 'challenge' as per PR#177
- rustlings hint iterators4: improve clarity
2020-04-29 19:11:54 -07:00
Abdou Seck 9cfb617d5b fix(installation): Check if python is available while checking for git,rustc and cargo
closes #374
2020-04-29 15:11:05 -04:00
Dídac Sementé Fernández b66e2e0962 feat: Added exercise structs3.rs 2020-04-27 20:26:34 +02:00
Aleksei Trifonov 32721bbc83
chore: fix missing space in the hint for errorsn.rs 2020-04-25 10:25:41 +02:00
apatniv 19fb1c240c test: Add missing test case for from_str exercise 2020-04-21 22:51:56 -04:00
Steven Mann 630ff0e00b
chore: add explanatory comment to clippy1 2020-04-21 18:50:00 +02:00
sjmann 964c974a02 fix: update generics2 closes #362 2020-04-21 13:34:25 +01:00
lebedevsergey c9e4f2cfb4
fix: confusing comment in conversions/try_from_into.rs
Co-authored-by: Lebedev <sergey.lebedev@corp.mail.ru>
2020-04-17 15:43:01 +02:00
Said Aspen a3a554aeed
Hints for structs1 and structs2 (#355) 2020-04-16 16:21:36 +02:00
Ufuk Celebi 6c3cc2caf5
chore: delete orphaned `error_handling/option1.rs`
`error_handling/option1.rs` has been replaced by `option/option1.rs` and
is not referenced in `info.toml` any more.
2020-04-15 23:52:31 +02:00
Said Aspen 5999acd24a
feat: Add exercise variables6 covering const (#352) 2020-04-14 10:13:20 +02:00
allcontributors[bot] 59f56b24d9
docs: add saidaspen as a contributor (#353)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-14 10:12:51 +02:00
Saurav abd0ec379c
chore: update variables5.rs book link (#351)
chore: update variables5.rs book link

chore: update variables5.rs book link
2020-04-12 19:35:20 +02:00
fmoko cfb98a5617
docs: remove now obsolete credits section 2020-04-12 01:03:28 +02:00
allcontributors[bot] fafcffed25
docs: add crodjer as a contributor (#350)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 01:00:22 +02:00
allcontributors[bot] 3f1209ce19
docs: add sanjaykdragon as a contributor (#349)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:59:07 +02:00
allcontributors[bot] b217961254
docs: add sl4m as a contributor (#348)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:57:55 +02:00
allcontributors[bot] cd06b39a42
docs: add Tarnadas as a contributor (#347)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:57:18 +02:00
allcontributors[bot] 84e1f85be2
docs: add sjmann as a contributor (#346)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:56:40 +02:00
allcontributors[bot] f060f099d4
docs: add pbx as a contributor (#345)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:55:30 +02:00
allcontributors[bot] e093af4c05
docs: add TorbenJ as a contributor (#344)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:54:59 +02:00
allcontributors[bot] eface5ef45
docs: add harrisonmetz as a contributor (#343)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:54:28 +02:00
allcontributors[bot] 5b72f478a7
docs: add gnodarse as a contributor (#342)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:53:46 +02:00
allcontributors[bot] 5f5a0465cb
docs: add codehearts as a contributor (#341)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
Co-authored-by: fmoko <mokou@posteo.de>
2020-04-12 00:52:51 +02:00
allcontributors[bot] f509e479a1
docs: add Socratides as a contributor (#339)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:51:02 +02:00
allcontributors[bot] ad00c2cf51
docs: add AbdouSeck as a contributor (#338)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:49:57 +02:00
allcontributors[bot] a20f80623e
docs: add rahatarmanahmed as a contributor (#337)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:49:05 +02:00
allcontributors[bot] f26dca6d8e
docs: add jensim as a contributor (#336)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:48:12 +02:00
fmoko 9ea089a5d9
docs: bump contributors per line down to 8 2020-04-12 00:47:24 +02:00
allcontributors[bot] f07d1c9488
docs: add jrvidal as a contributor (#335)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:46:29 +02:00
allcontributors[bot] 0d0c79a5cb
docs: add WofWca as a contributor (#334)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:45:01 +02:00
allcontributors[bot] 9bb5aa583f
docs: add workingjubilee as a contributor (#333)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:44:27 +02:00
allcontributors[bot] f26ed591f3
docs: add nyxtom as a contributor (#332)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:43:54 +02:00
allcontributors[bot] 0b4576a028
docs: add gdoenlen as a contributor (#331)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:43:08 +02:00
allcontributors[bot] d7bb220ba3
docs: add vyaslav as a contributor (#330)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:42:30 +02:00
allcontributors[bot] f907c710b2
docs: add Dylnuge as a contributor (#329)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:41:21 +02:00
allcontributors[bot] c6bcb319f8
docs: add ajaxm as a contributor (#328)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:40:26 +02:00
allcontributors[bot] 443600194c
docs: add nkanderson as a contributor (#327)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:39:56 +02:00
allcontributors[bot] 7b6f14c25a
docs: add petemcfarlane as a contributor (#326)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:39:14 +02:00
allcontributors[bot] 887d919323
docs: add MrFroop as a contributor (#325)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:38:25 +02:00
allcontributors[bot] 74d32f0cca
docs: add Jesse-Cameron as a contributor (#324)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:37:45 +02:00
allcontributors[bot] 3f479be7e7
docs: add danwilhelm as a contributor (#323)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:36:55 +02:00
allcontributors[bot] 95d02a23d0
docs: add miller-time as a contributor (#322)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:35:42 +02:00
allcontributors[bot] 8b59b9852f
docs: add briankung as a contributor (#321)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:34:41 +02:00
allcontributors[bot] 53bda94f77
docs: add eddyp as a contributor (#320)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:34:06 +02:00
allcontributors[bot] 52580cfd0d
docs: add dendi239 as a contributor (#319)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:32:56 +02:00
allcontributors[bot] cf3d5b44e6
docs: add yvan-sraka as a contributor (#318)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:32:07 +02:00
allcontributors[bot] 491dc2e5ca
docs: add cjpearce as a contributor (#317)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:31:21 +02:00
allcontributors[bot] b89cdef120
docs: add mgeier as a contributor (#316)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:30:31 +02:00
allcontributors[bot] 348fe339b9
docs: add zacanger as a contributor (#315)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:28:52 +02:00
fmoko e79d7ea981
docs: increase contributors per line 2020-04-12 00:28:06 +02:00
allcontributors[bot] e7841ba2ed
docs: add ColinPitrat as a contributor (#314)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:27:26 +02:00
allcontributors[bot] 37687e9323
docs: add kisom as a contributor (#313)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:24:27 +02:00
allcontributors[bot] b749314944
docs: add abagshaw as a contributor (#312)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:23:18 +02:00
allcontributors[bot] 3eb0fb5aa6
docs: add shaunbennett as a contributor (#311)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:22:30 +02:00
allcontributors[bot] 44a4cf3b27
docs: add Delet0r as a contributor (#310)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:21:37 +02:00
allcontributors[bot] 9a8762ba6e
docs: add evestera as a contributor (#309)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:21:03 +02:00
allcontributors[bot] 2e1bd5ef4e
docs: add lukabavdaz as a contributor (#308)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:20:06 +02:00
allcontributors[bot] a9dc101701
docs: add spacekookie as a contributor (#307)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:18:53 +02:00
allcontributors[bot] e2835de137
docs: add hynek as a contributor (#306)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:17:40 +02:00
allcontributors[bot] 535e7a6a28
docs: add robertlugg as a contributor (#305)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:16:50 +02:00
allcontributors[bot] fe96de2e2d
docs: add QuietMisdreavus as a contributor (#304)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:14:45 +02:00
allcontributors[bot] 9fd881443f
docs: add carols10cents as a contributor (#303)
* docs: update README.md [skip ci]

* docs: create .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-12 00:09:23 +02:00
mokou 2ff3f7ae13 3.0.0 2020-04-12 00:01:08 +02:00
fmoko 2b80f6ed41
chore: Remove duplicate `option1` exercise 2020-04-11 17:27:10 +02:00
Rohan Jain 3ab084a421 fix(run): compile clippy exercise files
Additionally to running clippy, also compile the exercise file so that
`rustling run clippy1` works after a successful completion of the
exercise.

closes #291

Signed-off-by: Rohan Jain <crodjer@gmail.com>
2020-04-11 08:58:23 +02:00
mokou 495174ff7c chore: remove travis ci
And add a buildkite build status badge
2020-04-08 12:27:28 +02:00
mokou b049fa2c84 feat(ci): add buildkite config 2020-04-08 12:08:37 +02:00
fmoko 052f0aa7d4
Merge pull request #292 from Tuxified/patch-1
Remove duplicate not done comment
2020-04-08 11:23:49 +02:00
Tonći Galić 60393999b8
remove bottom comment instead of top 2020-04-08 11:00:11 +02:00
Roberto Vidal b3a3351e8e
fix: revert primitive_types4 (#296) 2020-04-08 10:42:35 +02:00
Sanjay K 86b5c08b9b
feat: Add Option2 exercise (#290)
* added option2

* changed up the exercise, modified the help section

* Update exercises/option/option2.rs

Co-Authored-By: fmoko <mokou@posteo.net>

* Update exercises/option/option2.rs

Co-Authored-By: fmoko <mokou@posteo.net>

* Update exercises/option/option2.rs

Co-Authored-By: fmoko <mokou@posteo.net>

Co-authored-by: fmoko <mokou@posteo.net>
2020-04-07 20:16:10 +02:00
Tonći Galić dab90f7b91
Remove duplicate not done comment
As indicated in #259 , I found it confusing to have 2 comments as the code wouldn't compile unless I solved both issues (I used the script from #281 to remove a comment and use `:wn` to go to next exercise, hence this tripped me).
2020-04-07 17:00:45 +02:00
fmoko 71d31256a6
Merge pull request #278 from jrvidal/output-mode
feature: adds "output" mode, resolves #270
2020-04-07 11:26:48 +02:00
Roberto Vidal 3b6d5c3aaa feature: makes "compile" exercise print output, resolves #270
When running "compile"-mode exercises in interactive `verify` mode,
we print their output when we prompt the learner if they want to
continue. This improves the "experimentation" experience, since
trying different things does produce a visible change.
2020-04-06 16:17:14 +02:00
fmoko 7ce42941ea
Merge pull request #282 from sanjaykdragon/master
feat: added option exercise
2020-04-05 15:58:09 +02:00
Sanjay K 3f8171475c updated info.toml 2020-04-05 09:45:07 -04:00
fmoko b135b589e0
Merge pull request #280 from sjmann/generics-exercises
feat: added generics exercises
2020-04-05 14:40:34 +02:00
Sanjay K 05ca3d77f7 Merge branch 'master' of https://github.com/sanjaykdragon/rustlings 2020-04-02 08:41:14 -04:00
Sanjay K 6deee7e3e9 fixed spacing 2020-04-02 08:40:59 -04:00
fmoko 9dc404077a
Merge pull request #288 from vjousse/fix-traits-doc
chore(TRAITS1): don't hardcode documentation version
2020-03-26 21:16:52 +01:00
Vincent Jousse 30e6af6069 Don't hardcode documentation version for traits 2020-03-26 15:22:22 +01:00
Sanjay K 9788496a85
Update option1.rs 2020-03-11 13:44:41 -04:00
Sanjay K 6d3a412d47
Update option1.rs 2020-03-11 13:44:10 -04:00
bors 700b236f4d Auto merge of #284 - sl4m:update-from-into-ex, r=fmoko
Adds additional test to meet exercise rules

This PR adds an additional test to meet this exercise [rule](https://github.com/rust-lang/rustlings/blob/master/exercises/conversions/from_into.rs#L33).
2020-03-11 15:06:23 +00:00
skim bc22ec382f
adds additional test to meet exercise rules 2020-03-11 07:58:04 -07:00
Sanjay K 135e5d47a7 feat: added excercise for option 2020-03-05 15:52:54 -05:00
sjmann 0f8001ea44 add I AM NOT DONE comments 2020-02-28 00:31:55 +00:00
sjmann 5b6e23c323 removed artifact from manual testing 2020-02-28 00:29:30 +00:00
sjmann 29b30ec946 Merge branch 'master' of https://github.com/sjmann/rustlings into generics-exercises 2020-02-28 00:19:45 +00:00
sjmann 76be5e4e99 feat: added new exercises for generics 2020-02-28 00:09:08 +00:00
mokou 8b9479071c 2.2.1 2020-02-27 19:22:55 +01:00
mokou 3d9b03c52b fix: Re-add cloning the repo to install scripts 2020-02-27 19:19:31 +01:00
bors a03d9655a8 Auto merge of #269 - Tarnadas:master, r=fmoko
feat: Add clippy lints

This is a feature PR which adds the possiblity to create clippy exercises.

Clippy has many awesome linting rules, which can give a deeper understanding about the Rust programming language, therefor I made this PR.
2020-02-26 14:22:51 +00:00
Mario Reder 1e2fd9c92f feat: Add clippy lints
- adds a new 'clippy' category for exercises
- clippy exercises should throw no warnings
- install script now also installs clippy

is related to https://github.com/rust-lang/rust-clippy/issues/2604
2020-02-26 14:07:07 +01:00
bors 7e8530b21f Auto merge of #271 - jrvidal:refactor, r=fmoko
refactor: exercise evaluation

After working a bit on #270, I realized that it'd be useful to first perform a minor refactor of exercise evaluation.

* Now we have standard methods to compile + execute that return `Result`s.
* Success/failure messages are standardized.
2020-02-26 11:48:01 +00:00
bors 98358597a9 Auto merge of #277 - sjmann:update-ignore, r=fmoko
chore: update gitignore to ignore pdb files

Pr for issue #275
2020-02-26 10:46:53 +00:00
sjmann 8064facbb8 chore: update gitignore to ignore pdb files 2020-02-26 10:43:13 +00:00
sjmann f981dcfde4 Merge branch 'master' of https://github.com/sjmann/rustlings 2020-02-26 10:38:50 +00:00
mokou 6eb62fa2ce 2.2.0 2020-02-25 23:00:19 +01:00
bors 78295ce92f Auto merge of #274 - sjmann:master, r=fmoko
chore: fixed merge conflicts from traits exercises added by s-marios

I hope this doesn't step on any toes but I wanted to try the traits exercises from #216 so I updated them to match the new structure with hints included in info.toml
2020-02-25 21:27:39 +00:00
fmoko 358fb473cd
Merge pull request #276 from stigjb-forks/testing-test4
Enable test for exercise test4
2020-02-25 14:25:22 +01:00
Stig Johan Berggren a45486f2d0
Add a second test case 2020-02-25 14:25:03 +01:00
Stig Johan Berggren 8b971ffab6
Enable test for exercise test4 2020-02-25 14:13:10 +01:00
Steven Mann dc84aacc65
remove confusing comment wording 2020-02-25 11:00:09 +00:00
sjmann bbf8922ef7 Merge remote-tracking branch 'upstream/master' 2020-02-25 10:00:38 +00:00
sjmann b559cdd73f added traits exercises 2020-02-25 09:48:50 +00:00
fmoko ec51cdb229
Merge pull request #273 from sjmann/master
docs(iterators): Updated iterators readme to account for iterators4 exercise
2020-02-22 15:34:51 +01:00
sjmann a3f70124dc fixed typo 2020-02-22 14:28:07 +00:00
sjmann bec8e3a644 reworded missing exercise explanation 2020-02-22 13:04:37 +00:00
bors c228a06e49 Auto merge of #272 - QuintenJohnson:fix/installation-warning-messages, r=fmoko
fix(installation): make fatal errors more obvious

I initially ran the installation script without rust installed. The fact that the error message was labeled with WARNING made me unsure whether installation was successful or I needed to re-run after installing rust. There's an error code returned on fatal errors, but this change will make things clearer.
2020-02-21 20:56:11 +00:00
Quinten Johnson 17d0951e66 fix(installation): make fatal errors more obvious 2020-02-21 11:52:47 -06:00
Roberto Vidal 43dc31193a refactor: exercise evaluation
Exercise evaluation (compilation + execution) now uses Results
Success/failure messages are standardized
2020-02-20 20:27:05 +01:00
fmoko 83bbd9e82e
chore: Correct test command in tests1.rs comment (#267)
chore: Correct test command in tests1.rs comment
2020-01-29 15:39:10 +01:00
Jason Tsai 39fa7ae8b7 chore: Correct test command in tests1.rs comment 2020-01-29 13:48:43 +08:00
fmoko 3161a8fd9d
Fixed mangled sentence from book; edited for clarity (#266)
Fixed mangled sentence from book; edited for clarity
2020-01-25 13:27:53 +01:00
Paul Bissex ade52ffb73
Fixed mangled sentence from book; edited for clarity 2020-01-25 03:24:14 -05:00
fmoko 89c73647f1
Add variables5 to introduce shadowing (#264)
Add variables5 to introduce shadowing
2020-01-14 23:32:45 +01:00
Torben Jonas 0c73609e6f feat: Add variables5.rs exercise
closes #260
2020-01-14 21:10:07 +01:00
fmoko 19a93428b3
fix: Update deps to version compatable with aarch64-pc-windows (#263)
fix: Update deps to version compatable with aarch64-pc-windows
2020-01-11 12:23:23 +01:00
Harrison Metzger 32a9cf7b8d fix: Update deps to version compatable with aarch64-pc-windows 2020-01-11 02:45:38 -06:00
fmoko c86b217e1d
Created consistent money unit (#258)
Created consistent money unit
2019-12-30 16:48:04 +01:00
gnodarse fd57f8f2c1 Created consistent money unit 2019-12-29 19:15:32 -05:00
bors 0d1f1a19b7 Auto merge of #253 - codehearts:watch-completion-message, r=fmoko
feat: Show a completion message when watching

The completion message is shown only once all exercises succeed and are
not annotated with "I AM NOT DONE." The watch command will also exit

closes #251

Let me know if there are any tests I could add or if the completion message should be tweaked!
2019-12-28 20:01:28 +00:00
Kate Hart d25ee55a32
feat: Show a completion message when watching
The completion message is shown only once all exercises succeed and are
not annotated with "I AM NOT DONE." The watch command will also exit

closes #251
2019-12-26 20:27:49 -08:00
fmoko 3afa96bed4
Enable a test and improve per clippy's suggestion. (#256)
Enable a test and improve per clippy's suggestion.
2019-12-25 00:59:35 +01:00
dmitri-mamrukov dfdf8093eb
Enable a test and improve per clippy's suggestion. 2019-12-23 21:37:09 -05:00
fmoko 3906efcd52
fix(docs): Added a necessary step to Windows installation process 2019-12-22 13:21:24 +01:00
Socrates 2021a1ac7d
Update README.md
Added an essential step to Windows installation process (Setting ExecutionPolicy to RemoteSigned because it wouldn't install otherwise).
2019-12-22 14:16:04 +02:00
bors 426a7bb87f Auto merge of #249 - AbdouSeck:conversions, r=fmoko
feat: Add type conversion and parsing exercises

This pull request adds exercises for converting values into specific types. The exercises uses string to struct type conversions, but most of the traits in the exercises can handle more than just string parsing and conversions.

The following traits are covered:
1. `From` and `Into`
2. `TryFrom` and `TryInto`
3. `AsRef`
4. `FromStr`

The `as` operator is also covered.
2019-12-16 16:41:03 +00:00
Abdou Seck fc26b5e151 I AM NOT DONE comment in conversions exercise files 2019-12-16 11:33:00 -05:00
Abdou Seck 0c85dc1193 feat: Add type conversion and parsing exercises 2019-12-16 09:12:13 -05:00
marisa fe10e06c37
fix(tests1): Change test command
Closes #243.
2019-12-16 13:05:25 +01:00
marisa 419f7797f2
fix(iterators2): Remove reference to missing iterators2.rs (#245)
fix(iterators2): Remove reference to missing iterators2.rs
2019-12-16 12:51:03 +01:00
Rahat Ahmed 54571a5fca
fix(iterators2): Remove reference to missing iterators2.rs 2019-12-07 23:25:13 -08:00
marisa 4b79691d5e 2.1.0 2019-11-27 10:46:09 +01:00
marisa 615ce32798
fix(enums): Add link to chapter on pattern syntax (#242)
Add link to chapter on pattern syntax
2019-11-25 12:16:51 +00:00
Jens 31c25ebb50
Add link to chapter on pattern syntax
After being stuck on exercise enums3.rs for about an hour or two, having read the entire chapter on enums 2-3 times, and still being unable to complete the exercise, i started broadening my reading. I finally found the answer in the rust docs via google.
2019-11-24 09:28:33 +01:00
bors f4acb888a6 Auto merge of #241 - vyaslav:master, r=fmoko
feat(watch): show hint while watching

`rustlings hint ...` command is not convenient when doing exercises with `rustlings watch`.
This PR makes it possible for user to type `hint` while running `watch`  and get hint text for exercise which is currently failing.
e.g.
```rust
...
  --> exercises/variables/variables1.rs:13:36
   |
13 |     println!("x has the value {}", x);
   |                                    ^ not found in this scope

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0425`.

type 'hint' to get help:
hint
Hint: The declaration on line 12 is missing a keyword that is needed in Rust
to create a new variable binding.
```
2019-11-18 22:23:14 +00:00
vyaslav 8143d57b4e feat(watch): show hint while watching 2019-11-18 20:52:57 +01:00
bors a40ad092e9 Auto merge of #239 - jrvidal:master, r=fmoko
fix: line numbers in several exercises and hints

The introduction of `I AM NOT DONE` shifted the lines of all exercises, which now need adjustment.
2019-11-14 08:23:50 +00:00
Roberto Vidal b565c4d3e7 fix: line numbers in several exercises and hints
The introduction of `I AM NOT DONE` shifted the lines of all
exercises, which now need adjustment.
2019-11-14 08:21:56 +01:00
bors e9a835c1c0 Auto merge of #237 - ckeschnat:master, r=fmoko
fix(variables1): Correct wrong word in comment
2019-11-13 23:45:56 +00:00
bors cf38f03459 Auto merge of #238 - ageorgou:functions4-update, r=fmoko
Update line numbers in hints and outdated comment

In functions4, the missing code is in line 14 in the latest version:
```rust
error: expected type, found `{`
  --> exercises/functions/functions4.rs:14:30
   |
14 | fn sale_price(price: i32) -> {
   |                              ^ expected type

error: aborting due to previous error
```
but the hint points to line 12. This is due to a recent change in 2cdd61294f.

Also includes similar updates for strings2 and primitive_types4.
2019-11-13 23:41:00 +00:00
Anastasis Georgoulas 4c5189df2b fix(primitive_types4): update outdated hint
Exercise was changed to test (and the order was switched) in #209.
2019-11-13 23:23:34 +00:00
Anastasis Georgoulas a09f684f05 fix(strings2): update line number in hint 2019-11-13 23:23:34 +00:00
ageorgou 8cc5af121c
Fix(functions4): Update line number in hint 2019-11-12 23:49:19 +00:00
Chris Keschnat c42c3b2101
fix(arc1): Fix some words in the comment 2019-11-12 18:37:23 +01:00
Chris Keschnat fda5a47069 fix(variables1): Correct wrong word in comment 2019-11-12 17:33:25 +01:00
marisa 57a837bde6
Merge pull request #236 from jrvidal/master
fix(primitive_types4): update outdated comment
2019-11-12 13:00:28 +01:00
Roberto Vidal ded2c034ba fix(primitive_types4): update outdated comment 2019-11-12 12:52:28 +01:00
marisa eac07df96c 2.0.0 2019-11-12 12:24:30 +01:00
bors 8c1376df07 Auto merge of #235 - rust-lang:fmoko-patch-1, r=fmoko
fix(default): Clarify the installation procedure
2019-11-12 11:13:06 +00:00
bors 45d68d9b39 Auto merge of #232 - rust-lang:update-docs, r=fmoko
chore: Update docs for 2.0

Only merge this once we're ready to release 2.0.
2019-11-12 11:07:56 +00:00
marisa c371b853af
fix(default): Clarify the installation procedure 2019-11-12 11:53:58 +01:00
bors bc32a63c69 Auto merge of #234 - jrvidal:no-prompt-on-run, r=fmoko
fix(run): makes `run` never prompt

`watch` and `verify` do prompt the user to actively move to the
next exercise. This change fixes `run` to never prompt. Previously
it was inconsistent between "test" and "compile" exercises.

BREAKING CHANGE: we again change the behavior of the `run` command
2019-11-12 10:50:19 +00:00
Roberto Vidal 4b26546589 fix(run): makes `run` never prompt
`watch` and `verify` do prompt the user to actively move to the
next exercise. This change fixes `run` to never prompt. Previously
it was inconsistent between "test" and "compile" exercises.

BREAKING CHANGE: we again change the behavior of the `run` command
2019-11-12 11:35:40 +01:00
bors bc56788fe6 Auto merge of #233 - jrvidal:rustc-check, r=fmoko
feat(cli): check for rustc before doing anything

Addresses #190. From the backtraces shown there, it seems like we're not able to launch `rustc` (which is odd, given that they probably compiled and installed `rustlings` 🤷‍♀️)
2019-11-11 18:19:07 +00:00
marisa b4d41c1b7a chore: Update docs for 2.0 2019-11-11 18:02:56 +01:00
Roberto Vidal 36a033b87a feat(cli): check for rustc before doing anything
Addresses #190.
2019-11-11 18:00:54 +01:00
bors 9544ba1029 Auto merge of #231 - rust-lang:refactor-hints, r=jrvidal
Refactor hints

Breaking change. This removes hints from the end of files, and puts them into `info.toml`. You can now access hints using:

```
rustlings hint <exerciseName>
```

ALSO this changes the exercise system to index by name for `run` and `hint`, so:

```
rustlings run exercises/if/if1.rs
```

becomes

```
rustlings run if1
```
2019-11-11 16:51:12 +00:00
marisa 1a7bb5a400 Address feedback 2019-11-11 17:47:45 +01:00
marisa 48c35bcfbc fix tests 2019-11-11 17:28:19 +01:00
marisa ec2d4bd3ee
Merge branch 'master' into refactor-hints 2019-11-11 17:21:06 +01:00
marisa ce9fa6ebbf feat(hint): Add test for hint 2019-11-11 17:19:50 +01:00
marisa 9a9007abae chore: Add .editorconfig file 2019-11-11 17:12:11 +01:00
bors 88ec6f6b16 Auto merge of #230 - jrvidal:master, r=fmoko
Changes the execution mode for `watch`, asking for user input

We've [observed](https://hackmd.io/-cK6aPhnTwiCiI7u6k0xug?both) that learners can get confused when they do get everything right, but they _still_ get errors... which come from the next exercise, no the one they just edited.

This PR changes it so they have to confirm they want to move forward by removing the `I AM NOT DONE` comment.

![Screenshot at 2019-11-11 15:13:39](https://user-images.githubusercontent.com/1636604/68593566-0abd3900-0496-11ea-9e9d-6c43b91bf21d.png)

* [ ] The particular string is of course subject to bikeshed.

### Alternatives/doubts
* The coolest solution I could imagine would involve a proc-macro attribute `#![ready(false)]` that they could edit once they're done, but it's a bit complicated to set up.
* For now I've put `I AM NOT DONE` everywhere, I think it's what make more sense.
2019-11-11 15:59:35 +00:00
marisa 795b6e3480 fix(info): Fix trailing newlines for hints 2019-11-11 16:56:39 +01:00
marisa 9bdb0a12e4 feat: Refactor hint system
Hints are now accessible using the CLI subcommand `rustlings hint
<exercise name`.

BREAKING CHANGE: This fundamentally changes the way people interact with exercises.
2019-11-11 16:51:38 +01:00
Roberto Vidal 2cdd61294f feat: improve `watch` execution mode
The `watch` command now requires user action to move to the next
exercise.

BREAKING CHANGE: this changes the behavior of `watch`.
2019-11-11 16:23:35 +01:00
marisa 627cdc07d0 feat: Index exercises by name
BREAKING CHANGE: This changes the way you use `rustlings run` by now
requiring an abridged form of the previous filename, e.g:

`rustlings run exercises/if/if1.rs` becomes
`rustlings run if1`
2019-11-11 15:46:32 +01:00
marisa a47a62172a 1.5.1 2019-11-11 14:02:27 +01:00
marisa f72e5a8f05 fix(structs1): Remove misleading comment 2019-11-11 13:57:59 +01:00
marisa fbe91a67a4 fix(threads): Move Threads behind SLT
Closes #205.
2019-11-11 13:48:09 +01:00
marisa 6dcecb38a4 fix(strings): Move Strings before Structs
Closes #204.
2019-11-11 13:46:42 +01:00
marisa dcfb427b09 fix(errors3): Update hint
Closes #185.
2019-11-11 13:37:43 +01:00
marisa ad03d180c9 fix(if1): Remove `return` reference
This closes #153.
2019-11-11 13:34:21 +01:00
bors 3232a4d60d Auto merge of #228 - WofWca:clear-screen, r=fmoko
improvement(watch): clear screen before each `verify()`

Closes #146
It seems to me that #227 wasn't really fixing the issue.
2019-11-09 15:23:53 +00:00
WofWca 3aff590855 improvement(watch): clear screen before each `verify()`
Closes #146
2019-11-09 22:24:24 +08:00
marisa c8babbad27 1.5.0 2019-11-09 10:52:20 +01:00
bors c6dad28ddc Auto merge of #224 - nyxtom:feat-enums, r=fmoko
feat: Add enums exercises

Creates an exhaustive list of enum exercises. This goes through the basics of different ways to derive enums with mixed data type variants, as well as the use of the all important `match` operator.
2019-11-09 09:41:36 +00:00
bors fea81419cd Auto merge of #227 - workingjubilee:watch-clears-terminal, r=fmoko
watch: clears terminal before entering loop

Fixes #146

If someone is sliding in and out of "watch" mode, it can make it hard
to tell which error messages are still relevant. This patch resolves
that by clearing the terminal entirely before entering watch's loop.

Note that the escape character is chosen for compatibility reasons, because different shells/terminals can change which commands they accept or have installed, betting on what other commands are in use to collect data seems risky, and just expecting them to implement ANSI escape code sequences is more reliable. This seems especially true since Windows is seeking more UNIX compatibility in its terminals going forward, even though it doesn't implement the POSIX standard per se.
2019-11-09 09:31:50 +00:00
Jubilee Young 83be517e77 watch: clears terminal before entering loop
If someone is sliding in and out of "watch" mode, it can make it hard
to tell which error messages are still relevant. This patch resolves
that by clearing the terminal entirely before entering watch's loop.
2019-11-09 00:57:36 -08:00
marisa 79a569422c
fix: Rewrite test1 logic 2019-10-29 20:53:41 +01:00
bors 1e0b12e37e Auto merge of #225 - ssweeny:fix/test1-wording, r=fmoko
chore: Clarify comment in exercises/test1.rs

closes #194

The author of issue #194 suggests that the wording of the comment is at
least ambiguous about the desired results. I believe this change more
clearly describes the expectation of the exercise.
2019-10-29 13:37:30 +00:00
Thomas Holloway dc15032112 feat: Add enums exercises 2019-10-28 22:49:49 -05:00
Scott Sweeny 2821227acf chore: Clarify comment in exercises/test1.rs
closes #194

The author of issue #194 suggests that the wording of the comment is at
least ambiguous about the desired results. I believe this change more
clearly describes the expectation of the exercise.
2019-10-28 23:08:46 -04:00
bors 2191ef7eee Auto merge of #219 - vyaslav:master, r=fmoko
Added exercise for struct update syntax

Added one exercise for struct update syntax `struct2.rs`
2019-10-28 22:56:54 +00:00
marisa 4c2cf6da75
fix(option1): Fix arguments passed to assert! macro (#222)
fix(option1): Fix arguments passed to assert! macro
2019-10-26 00:27:40 +02:00
marisa 0f3d6d871e
chore: Bump version in Cargo.lock (#223)
chore: Bump version in Cargo.lock
2019-10-26 00:27:17 +02:00
Niklas Anderson bd007d4617 chore: Bump version in Cargo.lock 2019-10-25 14:57:30 -07:00
Niklas Anderson ead4f7af9e fix(option1): Fix arguments passed to assert! macro 2019-10-25 14:27:24 -07:00
marisa 4808b5b3ba
Update README to show latest version, for those who copy/paste (#221)
Update README to show latest version, for those who copy/paste
2019-10-25 01:54:10 +02:00
Mark Provan f3da6796b9
Update README to show latest version, for those who copy/paste 2019-10-24 13:56:14 +01:00
marisa cece12e87e docs: Add automatic Windows support to Readme 2019-10-23 13:01:07 +02:00
marisa 68d1727cac chore(ci): Remove GitHub actions for now 2019-10-23 12:56:07 +02:00
bors 8a2e13b20a Auto merge of #220 - gdoenlen:master, r=fmoko
Add windows install script

Adds a powershell install script for windows users that are at least
running powershell 5. It is almost a direct port of install.sh.
This would be used to automatically download the script much like
curl | bash, but with:

`Invoke-WebRequest https://urltoscript.com | Select-Object
-ExpandProperty Content | Out-File $env:TMP/install_rustlings.ps1;
Unblock-File $env:TMP/install_rustlings.ps1; Invoke-Expression
$env:TMP/install_rustlings.ps1`
2019-10-23 10:49:36 +00:00
George Doenlen ee311b8e5c remove execution policy check 2019-10-22 22:26:33 -04:00
George Doenlen f0de6c4e92 Add basic windows install script.
Adds a powershell install script for windows users that are at least
running powershell 5. It is almost a direct port of install.sh.
This would be used to automatically download the script much like
curl | bash, but with:

`Invoke-WebRequest https://urltoscript.com | Select-Object
-ExpandProperty Content | Out-File $env:TMP/install_rustlings.ps1;
Unblock-File $env:TMP/install_rustlings.ps1; Invoke-Expression
$env:TMP/install_rustlings.ps1`
2019-10-22 21:56:50 -04:00
Viacheslav Avramenko 1c4c8764ed feat: Added exercise for struct update syntax 2019-10-21 14:50:59 +02:00
bors e6161a6f58 Auto merge of #217 - timthelion:timthelion-readme-run, r=fmoko
Tense in README

Don't see why run should be past tense.  At least in my native General American dialect it shouldn't be.
2019-09-25 14:09:52 +00:00
Timothy Hobbs 8c0fe59c90
Tense in README
Don't see why run should be past tense.  At least in my native General American dialect it shouldn't be.
2019-09-07 16:17:45 +00:00
komaeda 17690b3add
chore(ci): Add GitHub Actions CI file 2019-08-21 13:23:38 +02:00
bors f9987c8bed Auto merge of #212 - sosnowski:fix/add-dyn-trait, r=komaeda
fix(errorsn.rs) Update the deprecated syntax by adding dyn to trait o…

fix(errorsn.rs) Update the deprecated syntax by adding dyn to trait objects.

closes #211

Related issue: https://github.com/rust-lang/rustlings/issues/211
2019-08-21 11:01:11 +00:00
Damian S 8109cbad97 fix(errorsn.rs) Update the deprecated syntax by adding dyn to trait objectscloses #211 2019-08-21 11:44:42 +01:00
bors c5bb32253b Auto merge of #209 - Dylnuge:slice-assert, r=komaeda
fix(primitive_types4): Fail on a slice covering the wrong area

I noticed this issue and it seems like a similar one was raised/fixed in #160 this way. This is my first contribution to this repo (or any Rust project) so let me know if I messed up or need to fix anything!

---
This commit converts primitive_types4 to a test and asserts that the
slice given is equal to the expected slice.

The intent of the primitive_types4 exercise appears to be to ensure the
user understands inclusive and exclusive bounds as well as slice syntax.
`rustlings` commands using `compile` do not verify that a specific
println is reached and, in the case of `watch` and `verify` (but not
`run`), they do not output the `println`s at all.

This fix is semantically similar to #198. It does not take a stance on
the correct way to handle this for all exercises; see #127. There are
likely other exercises whose intent are masked by this issue.
2019-08-18 08:24:44 +00:00
Dylan Nugent 5b1e673cec fix(primitive_types4): Fail on a slice covering the wrong area
This commit converts primitive_types4 to a test and asserts that the
slice given is equal to the expected slice.

The intent of the primitive_types4 exercise appears to be to ensure the
user understands inclusive and exclusive bounds as well as slice syntax.
`rustlings` commands using `compile` do not verify that a specific
println is reached and, in the case of `watch` and `verify` (but not
`run`), they do not output the `println`s at all.

This fix is semantically similar to #198. It does not take a stance on
the correct way to handle this for all exercises; see #127. There are
likely other exercises whose intent are masked by this issue.
2019-08-17 17:16:19 -07:00
bors 2cd06826c0 Auto merge of #206 - ajaxm:ajaxm/rustup-update, r=komaeda
Suggest rustup update in readme

I'm pretty new to Rust. I tried installing rustlings for the first time and got this error:
```
$> cargo install --force --path .
error: `/Users/ajax/projects/rust/rustlings` is not a crate root; specify a crate to install from crates.io, or use --path or --git to specify an alternate source

Caused by:
  failed to parse manifest at `/Users/ajax/projects/rust/rustlings/Cargo.toml`

Caused by:
  editions are unstable

Caused by:
  feature `edition` is required

this Cargo does not support nightly features, but if you
switch to nightly channel you can add
`cargo-features = ["edition"]` to enable this feature
```

I'm not sure if the answer was to run `rustup update` but I noticed that I was running Rust 1.29.0, so updated to 1.36.0 and got it working. If there's a way to specify a minimum required version, pls let me know.

Lastly, the whitespace changes were automatic from my editor. What's the convention here for making such updates? Thanks!
2019-08-13 10:04:36 +00:00
marisa 4f0c5a8d49
1.4.1 2019-08-13 11:59:17 +02:00
bors 3011251da7 Auto merge of #208 - EnricoMiccoli:patch-1, r=komaeda
chore: Correct typo in hint text
2019-08-12 15:24:17 +00:00
Enrico Miccoli 76b4cb5c00
chore: Correct typo 2019-08-12 11:45:40 +02:00
bors f83af3c25d Auto merge of #207 - nkanderson:fix_iterators2, r=komaeda
Fix iterators2

A couple of small changes to the `iterators2` exercise. @Jesse-Cameron, it looks like you contributed this exercise, so I wanted to check and see if these changes are in line with your intentions. Happy to adjust if they're not :)
2019-08-11 15:44:40 +00:00
Niklas Anderson e3931718fb chore(iterators2): Add exercise instructions 2019-08-09 07:38:21 -07:00
Niklas Anderson 4cde86643e fix(iterators2): Remove syntax resulting in misleading error message
closes #199
2019-08-09 07:37:27 -07:00
Ajax Manohar 9ee3207280 docs: Suggest rustup update in readme 2019-08-03 10:49:37 -07:00
bors e696a07190 Auto merge of #201 - zdzc:patch-1, r=komaeda
docs: Fix wrong title

fix #200
2019-07-27 19:07:22 +00:00
Andre Pratama e0db987441
docs: Fix wrong title
fix #200
2019-07-27 22:14:48 +07:00
bors 1890b0019d Auto merge of #198 - nkanderson:160_options1-add-test, r=komaeda
fix(option1): Add test for prematurely passing exercise

Fixes the bug referenced in #160, but does not address the larger feature work referenced by the issue.
2019-07-27 10:32:47 +00:00
Niklas Anderson a750e4a1a3 fix(option1): Add test for prematurely passing exercise
Fixes the bug referenced in #160, but does not address the larger feature work referenced by the issue.
2019-07-26 16:58:12 -07:00
bors 1c789dda08 Auto merge of #192 - petemcfarlane:patch-2, r=komaeda
fix(test1): Swap assertion parameter order

`Expected` should come before `actual`, other wise it leads to confusing compiler messages, e.g.
```
note: expected type `()`
         found type `{integer}`
```
There may be other tests that need updating, but this is as far as I am through the Rustlings course right now :)
2019-07-13 16:27:14 +00:00
Pete McFarlane 4086d463a9
fix(test1): Swap assertion parameter order
`Expected` should come before `actual`, other wise it leads to confusing compiler messages, e.g.
```
note: expected type `()`
         found type `{integer}`
```
2019-07-13 13:31:57 +01:00
marisa b8368de6d5
1.4.0 2019-07-13 12:50:22 +02:00
bors 7dc90094d2 Auto merge of #191 - MrFroop:master, r=komaeda
Fix(watch): Check if changed exercise file exists before calling verify.

Prevent a panic if the file triggering the watch event is gone.
2019-07-12 08:16:35 +00:00
Fredrik Jambrén ba85ca32c4 Check if changed exercise file exists before calling verify. 2019-07-11 23:54:18 +02:00
etisdew 70946b85e5 fix(readme): http to https
changing readme image (line 1) to https fixes markdown preview and improves fidelity
2019-07-08 16:58:14 +02:00
bors 1570c328c6 Auto merge of #186 - Jesse-Cameron:iterator-exercise2, r=komaeda
feat(iterators2): adds iterators2 exercise including config

Hi there!

I really enjoyed doing the rustlings exercises so I thought that I would try to add an exercise!

This one just covers a couple of basic iterator operations. Getting people used to the `map` and `collect` functions.

However, it does feel kinda similar to the next exercise. So I may also revisit some of the tests in iterators3 if we think that is necessary.
2019-07-04 11:35:40 +00:00
Jesse 9288fccf07 feat(iterators2): adds iterators2 exercise including config 2019-07-03 21:06:24 +10:00
bors 5e1d7c3076 Auto merge of #184 - Jesse-Cameron:master, r=komaeda
fix(test1): renamed function name to snake case

addressing a minor function naming convention, see: [RFC #430](https://doc.rust-lang.org/1.0.0/style/style/naming/README.html)

closes #180
2019-06-28 15:27:40 +00:00
Jesse 89d5186c0d fix(test1): renamed function name to snake case
closes #180
2019-06-29 01:00:10 +10:00
bors aaad60d07e Auto merge of #172 - miller-time:fix-book-links, r=komaeda
chore: Fix a couple broken book links

While I was fixing these, I figured maybe it's good to just use a consistent URL for book links: https://doc.rust-lang.org/book/

Is there a plan for what to do with this old 1.4.0 example that doesn't exist in the current version of the book? Perhaps at least include a disclaimer when recommending that folks check it out?

34e31232df/exercises/threads/README.md (L1)
2019-06-23 10:31:50 +00:00
bors 5f16469807 Auto merge of #171 - miller-time:rustfmt-exercises, r=komaeda
chore: Clean up some formatting in exercises

I noticed some formatting that isn't consistent with the `rustfmt` style and tried my best to run it on the files in the exercises directory (which does fail for files that can't compile!), which just caught some minor whitespace things here and there.

Note: also can't just apply `rustfmt` blindly because of the blank lines that lead to the hint comments
2019-06-23 10:25:48 +00:00
bors 752bc27e2b Auto merge of #179 - briankung:fix_irrefutable_let_pattern_structs1, r=komaeda
Fixes the irrefutable let pattern warning in `structs1.rs`

PR https://github.com/rust-lang/rustlings/pull/163 accidentally introduced an error using some versions of the Rust compiler where the compiler would (rightly!) complain about an irrefutable let pattern. I have no idea why this did not occur in all versions of the compiler, but here is a way around it.
2019-06-20 15:02:20 +00:00
Brian Kung cc6a14104d Fixes the irrefutable let pattern warning 2019-06-20 09:46:49 -05:00
Russell Cousineau eb13c2b6af chore: Clean up some formatting in exercises 2019-06-11 07:14:43 -07:00
Russell Cousineau 63c133e4a3 chore: Fix a couple broken book links 2019-06-11 07:13:05 -07:00
bors b8d59d699b Auto merge of #169 - miller-time:fix-install-script, r=komaeda
fix(installation): Fix rustlings installation check

fixes #147

I did some quick testing with the `-x` check:

```sh
if [ -x "$(notrustlings)" ]
then
    echo "notrustlings does not exist"
else
    echo "notrustlings appears to exist!"
    notrustlings
fi
```

which produced:

```
./test.sh: line 12: notrustlings: command not found
notrustlings appears to exist!
./test.sh: line 17: notrustlings: command not found
```

(consistent with comments in issue)

Using `if ! [ -x "$(command -v <command>)" ]` appears to be the standard way to perform this type of check.
2019-06-11 13:53:07 +00:00
bors 5586613eec Auto merge of #170 - miller-time:rename-iterator-exercise, r=komaeda
fix(iterators): Rename iterator3.rs

fixes #155
2019-06-11 12:53:58 +00:00
bors ad8e6dc63b Auto merge of #176 - danwilhelm:dan-minor-text, r=komaeda
chore: Minor text updates

- Make the default rustlings executable text consistent with the README and install script by adding `--force`.

- Remove a missed highlighting character from Issue #133.
2019-06-11 09:38:18 +00:00
Dan Wilhelm f72e0ca979 chore: Remove missed highlighting char from Issue #133 2019-06-10 20:24:18 -07:00
Dan Wilhelm 03cfe67500 chore: Make install instructions consistent 2019-06-10 20:20:22 -07:00
Russell Cousineau 7a252c4755 fix(installation): Fix rustlings installation check 2019-06-09 07:40:54 -07:00
liv 2089901739 docs: Move content from Readme to Contributing 2019-06-09 14:46:38 +02:00
liv 635e506c16 docs: Recommend `rustlings watch` as default 2019-06-09 14:44:16 +02:00
liv 75d8c7e3cc docs: Add CONTRIBUTING.md 2019-06-09 14:39:00 +02:00
Rohan Prinja 080d6cdd11 chore: Fix link to Arc<T> in the book 2019-06-09 13:45:53 +02:00
Russell Cousineau 433d2115bc fix(iterators): Rename iterator3.rs 2019-06-07 14:42:44 -07:00
liv 34e31232df feat(changelog): Use clog for changelogs 2019-06-05 13:14:51 +02:00
liv 7fca1d28af 1.3.0 2019-06-05 12:37:02 +02:00
bors 9c3d765403 Auto merge of #167 - rust-lang:fix/remove-highlighting, r=komaeda
Remove highlighting and syntect

Closes #166 and #122
2019-06-05 10:23:37 +00:00
liv bb652ceb91 Commit Cargo.lock file 2019-06-05 12:22:41 +02:00
liv 62696f5819 Remove highlighting and syntect 2019-06-05 12:18:50 +02:00
bors 41170ce341 Auto merge of #164 - HanKruiger:master, r=komaeda
Fix broken link
2019-05-26 14:07:16 +00:00
bors e2092a4ddd Auto merge of #165 - gushroom:fix-outdated-links, r=komaeda
fixed outdated links

The links had the 2018 book in them and they were outdated.
2019-05-26 13:58:24 +00:00
gushroom fd1441d122 fixed outdated links 2019-05-26 14:57:56 +02:00
HanKruiger e1422c6443 Fix broken link 2019-05-26 14:45:04 +02:00
bors 1f07fd4150 Auto merge of #163 - briankung:add_structs, r=komaeda
Adds a simple exercise for structures

Thanks for rustlings! Here's a small contribution in return.
2019-05-25 13:40:15 +00:00
Brian Kung 9b92aa08ae Adds a simple exercise for structures 2019-05-25 06:39:58 -05:00
bors 8bf8cbbd61 Auto merge of #162 - c-rustacean:rustfmt-and-ws-fixes, r=komaeda
errorsn.rs: Separate also the hints from each other to avoid accidental viewing
2019-05-23 11:01:15 +00:00
Eddy Petrisor f507844102 errorsn.rs: Separate also the hints from each other to avoid accidental viewing
Signed-off-by: Eddy Petrisor <eddy.petrisor@gmail.com>
2019-05-23 12:21:42 +03:00
bors fffbb60ed9 Auto merge of #161 - c-rustacean:rustfmt-and-ws-fixes, r=komaeda
Rustfmt and ws fixes
2019-05-22 12:29:20 +00:00
Eddy Petrisor 9aec4abc4d rustfmt the exercises
Signed-off-by: Eddy Petrisor <eddy.petrisor@gmail.com>
2019-05-22 14:50:40 +03:00
Eddy Petrisor a53b3f199f iterator3.rs: whitespace fixes
Signed-off-by: Eddy Petrisor <eddy.petrisor@gmail.com>
2019-05-22 14:50:40 +03:00
Eddy Petrisor d6d696b66a errorsn.rs: Separate hints from code, so hints are not accidentally seen
Signed-off-by: Eddy Petrisor <eddy.petrisor@gmail.com>
2019-05-22 14:50:39 +03:00
Eddy Petrisor ca6bf966dd Cargo fmt the rustlings application code
Signed-off-by: Eddy Petrisor <eddy.petrisor@gmail.com>
2019-05-22 14:50:23 +03:00
liv 5a9f8860ca
Add not passing integration test (#154)
Add not passing integration test
2019-05-22 10:53:46 +02:00
liv 5423bc66a9
Update errors1.rs - Add Result type signature as it is difficult for new comers to understand Generics and Error all at once. (#157)
Update errors1.rs - Add Result type signature as it is difficult for new comers to understand Generics and Error all at once.
2019-05-22 10:53:18 +02:00
Julien Bisconti 187d2ad226
Update errors1.rs
Add Result type signature as it is difficult for new comers to understand Generics and Error all at once
2019-05-12 14:54:37 +02:00
Denys Smirnov 7cf0d5d15e Add not passing integration test 2019-05-09 20:17:38 +03:00
liv 1f2ee8cb62 1.2.2 2019-05-07 12:32:50 +02:00
liv 35c3d0b3fc Revert --nocapture flag
This closes #149 and #152
2019-05-07 12:31:02 +02:00
liv 0279294972 1.2.1 2019-04-22 19:12:30 +08:00
liv 7eddee6f7a add a slightly more helpful error message 2019-04-22 18:43:39 +08:00
liv f2c48cfac5 fix the --nocapture functionality 2019-04-22 18:42:32 +08:00
liv 6ae0a00211 1.2.0 2019-04-22 13:09:28 +08:00
liv bfcf38c8bc
damn it 2019-04-22 07:05:46 +02:00
liv 9e328da641
use -- --nocapture when testing 2019-04-22 05:49:23 +02:00
bors e336d04c79 Auto merge of #144 - yvan-sraka:patch-0, r=komaeda
Add errors to exercises that compile without user changes

Hi !

I played a bit with rustlings, and I felt that some exercises were incorrect because they passed the tests without me needing to edit the files!

This gave me the feeling that the exercise was skiped! Especially when I use `rustlings watch`, it is easy to miss an exercise because the compilation error that is displayed is the one of the next exercise ...

It is easy to identify "broken" exercises with:

```bash
% find exercises -name "*.rs" | xargs -n 1 rustlings run
...
 Successfully ran exercises/move_semantics/move_semantics4.rs
 Successfully tested exercises/test2.rs
```

My suggestion is to make sure that these files trigger a compilation error by adding a simple syntax error (e.g. with `???` in the code that must change) so that our Rustacean can then play with it!
2019-04-22 01:50:48 +00:00
Yvan Sraka a71bc62c29
Add errors to exercises that compile without user changes 2019-04-22 00:09:30 +02:00
liv 4b0b7093e5 1.1.1 2019-04-14 18:29:32 +02:00
bors 8387de64d3 Auto merge of #143 - cjpearce:fix-exercise-path-matching, r=komaeda
Canonicalize paths to fix path matching

This PR should fix #126. The main solution to the issue was using `canonicalize()` on the paths we create for the exercises from `info.toml` and any user-specified paths, so that path `ends_with` matching will work correctly.

As adding calls to the canonicalize function everywhere requires unwrapping, I also decided to extract a struct representing an exercise and use serde to deserialize the paths from the `info.toml` file up front. I also tried to move the path handling out into the `exercise.rs` file and down into `main.rs` so that it doesn't create as much clutter. There was already a lot of unwrapping and path handling in the other files and I felt like it was getting a bit too repetitive.

If the approach is going too far (too many changes etc.) I'm happy to try to produce a smaller PR that fixes the bug without any refactoring.
2019-04-13 16:32:02 +00:00
Chris Pearce 77de6e5d6a Clean up test includes for File and Path 2019-04-12 23:14:15 +01:00
Chris Pearce 8c867a001a Remove unwrap on canonicalize result 2019-04-12 22:24:13 +01:00
Chris Pearce d01a71f7de Extract exercise struct to encapsulate path logic 2019-04-12 08:58:25 +01:00
bors 04d1d4c00e Auto merge of #142 - diodfr:patch-1, r=komaeda
Fix links by deleting book version
2019-04-08 20:05:34 +00:00
Diod FR d7e58ee1af
Fix links by deleting book version 2019-04-08 22:02:04 +02:00
bors ffb165ce26 Auto merge of #140 - cjpearce:fix/test-race-condition, r=komaeda
Fix intermittent test failure caused by race condition

First public pull request 😬

There's an intermittent integration test failure when you use multiple test threads (at least for me on a mac). I narrowed it down to two tests each spawning a process using `Command` which then try to compile the same file at the same time. If the timing doesn't work out, they both try to compile, and then one process runs `clean` before the other can run the executable - causing a panic.

![Screenshot 2019-04-07 at 19 54 55](https://user-images.githubusercontent.com/3453268/55688324-20520980-596f-11e9-8474-5215d61a4387.png)

You can prevent it from happening by running with a single thread (`cargo test -- --test-threads=1`), because the `Command` blocks. That's not a particularly good solution though because it's not something you can configure in `Cargo.toml`.

I considered making the affected tests just run serially, but it occurred to me that this could also happen if someone accidentally runs rustlings in watch mode in two terminals without realising it. I wound't consider this that unlikely given it's a tool for learning.

I fixed it by ensuring that the executables made from separate processes don't conflict by appending a process id to the output executable name. I also extracted the commands into a single file next to `clean` so that we don't have to repeat the generated file name everywhere and risk missing something.
2019-04-07 22:37:34 +00:00
Chris Pearce 65cb09eb2e Update ci test command to allow multithreaded tests 2019-04-07 21:23:02 +01:00
bors 78552ebd7a Auto merge of #141 - cjpearce:fix/run-panics-on-compile-fail, r=komaeda
Stop run from panicking when compile fails

Currently if you use the `rustlings run` command and your program fails to compile, rustlings will panic while trying to exit.

First I've added a couple of integration tests to cover this case, which also meant moving a few tests so that the new fixtures didn't cause `verify_all_success` to fail.

Then I noticed that the existing integration tests that test for failure pass even when rustlings panics, preventing the new tests from failing. I've updated the integration tests to distinguish between when rustlings has failed in the way that we want (exit code 1) rather than a panic (exit code 101).

Finally I fixed the actual panic, which was just caused by unwrapping when rustlings should probably be exiting cleanly.
2019-04-07 20:11:22 +00:00
Chris Pearce 0c7bd12372 Fix test failing due to panic 2019-04-07 20:13:04 +01:00
Chris Pearce 3d11d7685b Modify integration tests to fail on panic 2019-04-07 20:13:04 +01:00
Chris Pearce 592ae6b4d2 Add process id to temp file name 2019-04-07 17:28:51 +01:00
Chris Pearce 4fa79ee02f Extract command builders into util 2019-04-07 17:26:01 +01:00
bors fbd0ccbd5b Auto merge of #134 - rust-lang:fix/windows-paths, r=komaeda
fix watch command path execution

@hades32 @guttume could you test whether this works on windows by checking out the branch locally and running `cargo run watch`?
2019-04-03 09:37:37 +00:00
liv 022921168d fix watch command path execution 2019-03-27 10:58:56 +01:00
177 changed files with 11728 additions and 2363 deletions

2446
.all-contributorsrc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,17 @@
{
"image": "mcr.microsoft.com/devcontainers/universal:2-linux",
"waitFor": "onCreateCommand",
"onCreateCommand": ".devcontainer/setup.sh",
"updateContentCommand": "cargo build",
"postCreateCommand": "",
"postAttachCommand": {
"server": "rustlings watch"
},
"customizations": {
"vscode": {
"extensions": [
"rust-lang.rust-analyzer"
]
}
}
}

7
.devcontainer/setup.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
curl https://sh.rustup.rs -sSf | sh -s -- -y
# Update current shell environment variables after install to find rustup
. "$HOME/.cargo/env"
rustup install stable
bash install.sh

7
.editorconfig Normal file
View File

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

4
.envrc Normal file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Automatically Load nix devShell w/dotenv
use flake

37
.github/workflows/rust.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: Rustlings Tests
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
CARGO_TERM_COLOR: always
jobs:
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- uses: DavidAnson/markdownlint-cli2-action@v9
with:
globs: "exercises/**/*.md"
- name: Run cargo fmt
run: |
cargo fmt --all -- --check
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@stable
- uses: swatinem/rust-cache@v2
- name: Run cargo test
run: |
cargo test

88
.github/workflows/web.yml vendored Normal file
View File

@ -0,0 +1,88 @@
# Workflow to build your docs with oranda (and mdbook)
# and deploy them to Github Pages
name: Web
# We're going to push to the gh-pages branch, so we need that permission
permissions:
contents: write
# What situations do we want to build docs in?
# All of these work independently and can be removed / commented out
# if you don't want oranda/mdbook running in that situation
on:
# Check that a PR didn't break docs!
#
# Note that the "Deploy to Github Pages" step won't run in this mode,
# so this won't have any side-effects. But it will tell you if a PR
# completely broke oranda/mdbook. Sadly we don't provide previews (yet)!
pull_request:
# Whenever something gets pushed to main, update the docs!
# This is great for getting docs changes live without cutting a full release.
#
# Note that if you're using cargo-dist, this will "race" the Release workflow
# that actually builds the Github Release that oranda tries to read (and
# this will almost certainly complete first). As a result you will publish
# docs for the latest commit but the oranda landing page won't know about
# the latest release. The workflow_run trigger below will properly wait for
# cargo-dist, and so this half-published state will only last for ~10 minutes.
#
# If you only want docs to update with releases, disable this, or change it to
# a "release" branch. You can, of course, also manually trigger a workflow run
# when you want the docs to update.
push:
branches:
- main
# Whenever a workflow called "Release" completes, update the docs!
#
# If you're using cargo-dist, this is recommended, as it will ensure that
# oranda always sees the latest release right when it's available. Note
# however that Github's UI is wonky when you use workflow_run, and won't
# show this workflow as part of any commit. You have to go to the "actions"
# tab for your repo to see this one running (the gh-pages deploy will also
# only show up there).
workflow_run:
workflows: [ "Release" ]
types:
- completed
# Alright, let's do it!
jobs:
web:
name: Build and deploy site and docs
runs-on: ubuntu-latest
steps:
# Setup
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: dtolnay/rust-toolchain@stable
- uses: swatinem/rust-cache@v2
# If you use any mdbook plugins, here's the place to install them!
# Install and run oranda (and mdbook)
# This will write all output to ./public/ (including copying mdbook's output to there)
- name: Install and run oranda
run: |
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/oranda/releases/download/v0.3.1/oranda-installer.sh | sh
oranda build
# Deploy to our gh-pages branch (creating it if it doesn't exist)
# the "public" dir that oranda made above will become the root dir
# of this branch.
#
# Note that once the gh-pages branch exists, you must
# go into repo's settings > pages and set "deploy from branch: gh-pages"
# the other defaults work fine.
- name: Deploy to Github Pages
uses: JamesIves/github-pages-deploy-action@v4.4.1
# ONLY if we're on main (so no PRs or feature branches allowed!)
if: ${{ github.ref == 'refs/heads/main' }}
with:
branch: gh-pages
# Gotta tell the action where to find oranda's output
folder: public
token: ${{ secrets.GITHUB_TOKEN }}
single-commit: true

15
.gitignore vendored
View File

@ -1,5 +1,18 @@
*.swp
target/
**/*.rs.bk
Cargo.lock
.DS_Store
*.pdb
exercises/clippy/Cargo.toml
exercises/clippy/Cargo.lock
rust-project.json
.idea
.vscode/*
!.vscode/extensions.json
*.iml
*.o
public/
.direnv/
# Local Netlify folder
.netlify

7
.gitpod.yml Normal file
View File

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

2
.markdownlint.yml Normal file
View File

@ -0,0 +1,2 @@
# MD013/line-length Line length, Expected: 80
MD013: false

View File

@ -1,11 +0,0 @@
language: rust
rust:
- stable
- beta
- nightly
script: cargo test --verbose -- --test-threads=1
matrix:
allow_failures:
- rust: nightly
fast_finish: true
cache: cargo

5
.vscode/extensions.json vendored Normal file
View File

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

356
AUTHORS.md Normal file
View File

@ -0,0 +1,356 @@
## 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>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/black-puppydog"><img src="https://avatars.githubusercontent.com/u/189241?v=4?s=100" width="100px;" alt="Daan Wynen"/><br /><sub><b>Daan Wynen</b></sub></a><br /><a href="#content-black-puppydog" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Anush008"><img src="https://avatars.githubusercontent.com/u/46051506?v=4?s=100" width="100px;" alt="Anush"/><br /><sub><b>Anush</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=Anush008" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/shgew"><img src="https://avatars.githubusercontent.com/u/5584672?v=4?s=100" width="100px;" alt="Gleb Shevchenko"/><br /><sub><b>Gleb Shevchenko</b></sub></a><br /><a href="#content-shgew" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/mdmundo"><img src="https://avatars.githubusercontent.com/u/60408300?v=4?s=100" width="100px;" alt="Edmundo Paulino"/><br /><sub><b>Edmundo Paulino</b></sub></a><br /><a href="#infra-mdmundo" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/eroullit"><img src="https://avatars.githubusercontent.com/u/301795?v=4?s=100" width="100px;" alt="Emmanuel Roullit"/><br /><sub><b>Emmanuel Roullit</b></sub></a><br /><a href="#infra-eroullit" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://nidhalmessaoudi.herokuapp.com"><img src="https://avatars.githubusercontent.com/u/63377412?v=4?s=100" width="100px;" alt="Nidhal Messaoudi"/><br /><sub><b>Nidhal Messaoudi</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=nidhalmessaoudi" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/MahdiBM"><img src="https://avatars.githubusercontent.com/u/54685446?v=4?s=100" width="100px;" alt="Mahdi Bahrami"/><br /><sub><b>Mahdi Bahrami</b></sub></a><br /><a href="#tool-MahdiBM" title="Tools">🔧</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Nagidal"><img src="https://avatars.githubusercontent.com/u/7075397?v=4?s=100" width="100px;" alt="Nagidal"/><br /><sub><b>Nagidal</b></sub></a><br /><a href="#content-Nagidal" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://adabrew.com"><img src="https://avatars.githubusercontent.com/u/25161597?v=4?s=100" width="100px;" alt="Adam Brewer"/><br /><sub><b>Adam Brewer</b></sub></a><br /><a href="#content-adamhb123" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/eugkhp"><img src="https://avatars.githubusercontent.com/u/25910599?v=4?s=100" width="100px;" alt="Eugene"/><br /><sub><b>Eugene</b></sub></a><br /><a href="#tool-eugkhp" title="Tools">🔧</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://social.linux.pizza/@navicore"><img src="https://avatars.githubusercontent.com/u/110999?v=4?s=100" width="100px;" alt="Ed Sweeney"/><br /><sub><b>Ed Sweeney</b></sub></a><br /><a href="#content-navicore" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/javihernant"><img src="https://avatars.githubusercontent.com/u/73640929?v=4?s=100" width="100px;" alt="javihernant"/><br /><sub><b>javihernant</b></sub></a><br /><a href="#content-javihernant" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/VegardMatthey"><img src="https://avatars.githubusercontent.com/u/59250656?v=4?s=100" width="100px;" alt="Vegard"/><br /><sub><b>Vegard</b></sub></a><br /><a href="#content-VegardMatthey" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/ryanwhitehouse"><img src="https://avatars.githubusercontent.com/u/13400784?v=4?s=100" width="100px;" alt="Ryan Whitehouse"/><br /><sub><b>Ryan Whitehouse</b></sub></a><br /><a href="#content-ryanwhitehouse" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/guoard"><img src="https://avatars.githubusercontent.com/u/65511355?v=4?s=100" width="100px;" alt="Ali Afsharzadeh"/><br /><sub><b>Ali Afsharzadeh</b></sub></a><br /><a href="#content-guoard" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="http://keogami.ml"><img src="https://avatars.githubusercontent.com/u/41939011?v=4?s=100" width="100px;" alt="Keogami"/><br /><sub><b>Keogami</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=keogami" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/ahresse"><img src="https://avatars.githubusercontent.com/u/28402488?v=4?s=100" width="100px;" alt="Alexandre Esse"/><br /><sub><b>Alexandre Esse</b></sub></a><br /><a href="#content-ahresse" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://resilient.tech"><img src="https://avatars.githubusercontent.com/u/16315650?v=4?s=100" width="100px;" alt="Sagar Vora"/><br /><sub><b>Sagar Vora</b></sub></a><br /><a href="#content-sagarvora" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/poneciak57"><img src="https://avatars.githubusercontent.com/u/94321164?v=4?s=100" width="100px;" alt="Kacper Poneta"/><br /><sub><b>Kacper Poneta</b></sub></a><br /><a href="#content-poneciak57" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://ktheory.com/"><img src="https://avatars.githubusercontent.com/u/975?v=4?s=100" width="100px;" alt="Aaron Suggs"/><br /><sub><b>Aaron Suggs</b></sub></a><br /><a href="#content-ktheory" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/alexwh"><img src="https://avatars.githubusercontent.com/u/1723612?v=4?s=100" width="100px;" alt="Alex"/><br /><sub><b>Alex</b></sub></a><br /><a href="#content-alexwh" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/stornquist"><img src="https://avatars.githubusercontent.com/u/42915664?v=4?s=100" width="100px;" alt="Sebastian Törnquist"/><br /><sub><b>Sebastian Törnquist</b></sub></a><br /><a href="#content-stornquist" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://smlavine.com"><img src="https://avatars.githubusercontent.com/u/33563640?v=4?s=100" width="100px;" alt="Sebastian LaVine"/><br /><sub><b>Sebastian LaVine</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=smlavine" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="http://www.alangerber.us"><img src="https://avatars.githubusercontent.com/u/201313?v=4?s=100" width="100px;" alt="Alan Gerber"/><br /><sub><b>Alan Gerber</b></sub></a><br /><a href="#content-akgerber" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://esotuvaka.github.io"><img src="https://avatars.githubusercontent.com/u/104941850?v=4?s=100" width="100px;" alt="Eric"/><br /><sub><b>Eric</b></sub></a><br /><a href="#content-esotuvaka" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/az0977776"><img src="https://avatars.githubusercontent.com/u/9172038?v=4?s=100" width="100px;" alt="Aaron Wang"/><br /><sub><b>Aaron Wang</b></sub></a><br /><a href="#content-az0977776" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/nmay231"><img src="https://avatars.githubusercontent.com/u/35386821?v=4?s=100" width="100px;" alt="Noah"/><br /><sub><b>Noah</b></sub></a><br /><a href="#content-nmay231" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/rb5014"><img src="https://avatars.githubusercontent.com/u/105397317?v=4?s=100" width="100px;" alt="rb5014"/><br /><sub><b>rb5014</b></sub></a><br /><a href="#content-rb5014" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/deedy5"><img src="https://avatars.githubusercontent.com/u/65482418?v=4?s=100" width="100px;" alt="deedy5"/><br /><sub><b>deedy5</b></sub></a><br /><a href="#content-deedy5" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/lionel-rowe"><img src="https://avatars.githubusercontent.com/u/26078826?v=4?s=100" width="100px;" alt="lionel-rowe"/><br /><sub><b>lionel-rowe</b></sub></a><br /><a href="#content-lionel-rowe" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Ben2917"><img src="https://avatars.githubusercontent.com/u/10279994?v=4?s=100" width="100px;" alt="Ben"/><br /><sub><b>Ben</b></sub></a><br /><a href="#content-Ben2917" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/b1ue64"><img src="https://avatars.githubusercontent.com/u/77976308?v=4?s=100" width="100px;" alt="b1ue64"/><br /><sub><b>b1ue64</b></sub></a><br /><a href="#content-b1ue64" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/lazywalker"><img src="https://avatars.githubusercontent.com/u/53956?v=4?s=100" width="100px;" alt="lazywalker"/><br /><sub><b>lazywalker</b></sub></a><br /><a href="#content-lazywalker" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/proofconstruction"><img src="https://avatars.githubusercontent.com/u/74747193?v=4?s=100" width="100px;" alt="proofconstruction"/><br /><sub><b>proofconstruction</b></sub></a><br /><a href="#infra-proofconstruction" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://www.youtube.com/channel/UCQCjA6qUutAtWqkCA4Z36CQ"><img src="https://avatars.githubusercontent.com/u/16007179?v=4?s=100" width="100px;" alt="IVIURRAY"/><br /><sub><b>IVIURRAY</b></sub></a><br /><a href="#content-IVIURRAY" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/b-apperlo"><img src="https://avatars.githubusercontent.com/u/91734527?v=4?s=100" width="100px;" alt="Bert Apperlo"/><br /><sub><b>Bert Apperlo</b></sub></a><br /><a href="#content-b-apperlo" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://fwdekker.com/"><img src="https://avatars.githubusercontent.com/u/13442533?v=4?s=100" width="100px;" alt="Florine W. Dekker"/><br /><sub><b>Florine W. Dekker</b></sub></a><br /><a href="#content-FWDekker" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/luhem7"><img src="https://avatars.githubusercontent.com/u/4008215?v=4?s=100" width="100px;" alt="Mehul Gangavelli"/><br /><sub><b>Mehul Gangavelli</b></sub></a><br /><a href="#content-luhem7" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Frosthage"><img src="https://avatars.githubusercontent.com/u/14823314?v=4?s=100" width="100px;" alt="Mikael Frosthage"/><br /><sub><b>Mikael Frosthage</b></sub></a><br /><a href="#content-Frosthage" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://robertfry.xyz"><img src="https://avatars.githubusercontent.com/u/43712054?v=4?s=100" width="100px;" alt="Robert Fry"/><br /><sub><b>Robert Fry</b></sub></a><br /><a href="#content-robertefry" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tajo48"><img src="https://avatars.githubusercontent.com/u/55502906?v=4?s=100" width="100px;" alt="tajo48"/><br /><sub><b>tajo48</b></sub></a><br /><a href="#content-tajo48" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://anishchhetri.com.np"><img src="https://avatars.githubusercontent.com/u/98446102?v=4?s=100" width="100px;" alt="Anish"/><br /><sub><b>Anish</b></sub></a><br /><a href="#content-novanish" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/vnprc"><img src="https://avatars.githubusercontent.com/u/9425366?v=4?s=100" width="100px;" alt="vnprc"/><br /><sub><b>vnprc</b></sub></a><br /><a href="#content-vnprc" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://androecia.net"><img src="https://avatars.githubusercontent.com/u/61999256?v=4?s=100" width="100px;" alt="Joshua Carlson"/><br /><sub><b>Joshua Carlson</b></sub></a><br /><a href="#content-jrcarl624" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://johndesilencio.me"><img src="https://avatars.githubusercontent.com/u/20136554?v=4?s=100" width="100px;" alt="Nicholas R. Smith"/><br /><sub><b>Nicholas R. Smith</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=johnDeSilencio" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://alexfertel.me"><img src="https://avatars.githubusercontent.com/u/22298999?v=4?s=100" width="100px;" alt="Alexander González"/><br /><sub><b>Alexander González</b></sub></a><br /><a href="#content-alexfertel" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/softarn"><img src="https://avatars.githubusercontent.com/u/517619?v=4?s=100" width="100px;" alt="Marcus Höjvall"/><br /><sub><b>Marcus Höjvall</b></sub></a><br /><a href="#content-softarn" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/barlevalon"><img src="https://avatars.githubusercontent.com/u/3397911?v=4?s=100" width="100px;" alt="Alon Hearter"/><br /><sub><b>Alon Hearter</b></sub></a><br /><a href="#content-barlevalon" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/shirts"><img src="https://avatars.githubusercontent.com/u/4952151?v=4?s=100" width="100px;" alt="shirts"/><br /><sub><b>shirts</b></sub></a><br /><a href="#content-shirts" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/eLVas"><img src="https://avatars.githubusercontent.com/u/6797156?v=4?s=100" width="100px;" alt="Ivan Vasiunyk"/><br /><sub><b>Ivan Vasiunyk</b></sub></a><br /><a href="#content-eLVas" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://mo8it.com"><img src="https://avatars.githubusercontent.com/u/76752051?v=4?s=100" width="100px;" alt="Mo"/><br /><sub><b>Mo</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=mo8it" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/x10an14"><img src="https://avatars.githubusercontent.com/u/710608?v=4?s=100" width="100px;" alt="x10an14"/><br /><sub><b>x10an14</b></sub></a><br /><a href="#infra-x10an14" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/gabay"><img src="https://avatars.githubusercontent.com/u/5773610?v=4?s=100" width="100px;" alt="Roi Gabay"/><br /><sub><b>Roi Gabay</b></sub></a><br /><a href="#content-gabay" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/mkovaxx"><img src="https://avatars.githubusercontent.com/u/481354?v=4?s=100" width="100px;" alt="Máté Kovács"/><br /><sub><b>Máté Kovács</b></sub></a><br /><a href="#content-mkovaxx" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://szabgab.com/"><img src="https://avatars.githubusercontent.com/u/48833?v=4?s=100" width="100px;" alt="Gábor Szabó"/><br /><sub><b>Gábor Szabó</b></sub></a><br /><a href="#content-szabgab" title="Content">🖋</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://moduslaborandi.net"><img src="https://avatars.githubusercontent.com/u/3340793?v=4?s=100" width="100px;" alt="Yamila Moreno"/><br /><sub><b>Yamila Moreno</b></sub></a><br /><a href="#content-yamila-moreno" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/willhack"><img src="https://avatars.githubusercontent.com/u/18036720?v=4?s=100" width="100px;" alt="Will Hack"/><br /><sub><b>Will Hack</b></sub></a><br /><a href="#content-willhack" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://cancompute.tech"><img src="https://avatars.githubusercontent.com/u/2052646?v=4?s=100" width="100px;" alt="Michael"/><br /><sub><b>Michael</b></sub></a><br /><a href="#content-bean5" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://www.sadiqpk.org"><img src="https://avatars.githubusercontent.com/u/1289514?v=4?s=100" width="100px;" alt="Mohammed Sadiq"/><br /><sub><b>Mohammed Sadiq</b></sub></a><br /><a href="#content-pksadiq" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Jak-Ch-ll"><img src="https://avatars.githubusercontent.com/u/56225668?v=4?s=100" width="100px;" alt="Jakob"/><br /><sub><b>Jakob</b></sub></a><br /><a href="#content-Jak-Ch-ll" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="http://oscarbonilla.com"><img src="https://avatars.githubusercontent.com/u/4950?v=4?s=100" width="100px;" alt="Oscar Bonilla"/><br /><sub><b>Oscar Bonilla</b></sub></a><br /><a href="#content-ob" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/husjon"><img src="https://avatars.githubusercontent.com/u/554229?v=4?s=100" width="100px;" alt="Jon Erling Hustadnes"/><br /><sub><b>Jon Erling Hustadnes</b></sub></a><br /><a href="#content-husjon" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/CobaltCause"><img src="https://avatars.githubusercontent.com/u/7003738?v=4?s=100" width="100px;" alt="Charles Hall"/><br /><sub><b>Charles Hall</b></sub></a><br /><a href="#infra-CobaltCause" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
</tr>
<tr>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/krmpotic"><img src="https://avatars.githubusercontent.com/u/10350645?v=4?s=100" width="100px;" alt="Luka Krmpotić"/><br /><sub><b>Luka Krmpotić</b></sub></a><br /><a href="#content-krmpotic" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/jurglic"><img src="https://avatars.githubusercontent.com/u/112600?v=4?s=100" width="100px;" alt="Jurglic"/><br /><sub><b>Jurglic</b></sub></a><br /><a href="#content-jurglic" title="Content">🖋</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/OfirLauber"><img src="https://avatars.githubusercontent.com/u/5631030?v=4?s=100" width="100px;" alt="Ofir Lauber"/><br /><sub><b>Ofir Lauber</b></sub></a><br /><a href="#content-OfirLauber" 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!

871
CHANGELOG.md Normal file
View File

@ -0,0 +1,871 @@
<a name="5.6.1"></a>
## 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`.
<a name="5.6.0"></a>
## 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.
<a name="5.5.1"></a>
## 5.5.1 (2023-05-17)
#### Fixed
- Reverted `rust-project.json` path generation due to an upstream `rust-analyzer` fix.
<a name="5.5.0"></a>
## 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
<a name="5.4.1"></a>
## 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
<a name="5.4.0"></a>
## 5.4.0 (2023-02-12)
#### Changed
- Reordered exercises
- Unwrapped `standard_library_types` into `iterators` and `smart_pointers`
- Moved smart pointer exercises behind threads
- Ordered `rc1` before `arc1`
- **intro1**: Added a note on `rustlings lsp`
- **threads1**: Panic if threads are not joined
- **cli**:
- Made progress bar update proportional to amount of files verified
- Decreased `watch` delay from 2 to 1 second
#### Fixed
- Capitalized "Rust" in exercise hints
- **enums3**: Removed superfluous tuple brackets
- **quiz2, clippy1, iterators1**: Fixed a typo
- **rc1**: Fixed a prompt error
- **cli**:
- Fixed a typo in a method name
- Specified the edition in `rustc` commands
#### Housekeeping
- Bumped min Rust version to 1.58 in installation script
<a name="5.3.0"></a>
## 5.3.0 (2022-12-23)
#### Added
- **cli**: Added a percentage display in watch mode
- Added a `flake.nix` for Nix users
#### Changed
- **structs3**: Added an additional test
- **macros**: Added a link to MacroKata in the README
#### Fixed
- **strings3**: Added a link to `std` in the hint
- **threads1**: Corrected a hint link
- **iterators1**: Clarified hint steps
- **errors5**: Fix a typo in the hint
- **options1**: Clarified on the usage of the 24-hour system
- **threads2, threads3**: Explicitly use `Arc::clone`
- **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
- **enums3**: Added an extra tuple comment
#### Housekeeping
- Added a VSCode extension recommendation
- 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
- **quiz1**: Reworded the comment to actually reflect what's going on in the tests.
Also added another assert just to make sure.
- **rc1**: Fixed a typo in the hint.
- **lifetimes**: Add quotes to the `println!` output, for readability.
#### Housekeeping
- Fixed a typo in README.md
<a name="5.2.0"></a>
## 5.2.0 (2022-08-27)
#### Added
- Added a `reset` command
#### Changed
- **options2**: Convert the exercise to use tests
#### Fixed
- **threads3**: Fixed a typo
- **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
- Added a new `rc1` exercise.
- Added a new `cow1` exercise.
#### Bug Fixes
- **variables5**: Corrected reference to previous exercise
- **functions4**: Fixed line number reference
- **strings3**: Clarified comment wording
- **traits4, traits5**: Fixed line number reference
- **traits5**:
- Fixed typo in "parameter"
- Made exercise prefer a traits-based solution
- **lifetimes2**: Improved hint
- **threads3**: Fixed typo in hint
- **box1**: Replaced `unimplemented!` with `todo!`
- **errors5**: Provided an explanation for usage of `Box<dyn Error>`
- **quiz2**: Fixed a typo
- **macros**: Updated the macros book link
- **options1**:
- Removed unused code
- Added more granular tests
- Fixed some comment syntax shenanigans in info.toml
#### Housekeeping
- Fixed a typo in .editorconfig
- Fixed a typo in integration_tests.rs
- 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
- Hint comments in exercises now also include a reference to the
`hint` watch mode subcommand.
- **intro1**: Added more hints to point the user to the source file.
- **variables**: Switched variables3 and variables4.
- Moved `vec` and `primitive_types` exercises before `move_semantics`.
- Renamed `vec` to `vecs` to be more in line with the naming in general.
- Split up the `collections` exercises in their own folders.
- **vec2**: Added a second part of the function that provides an alternative,
immutable way of modifying vec values.
- **enums3**: Added a hint.
- Moved `strings` before `modules`.
- Added a `strings3` exercise to teach modifying strings.
- Added a `hashmaps3` exercise for some advanced usage of hashmaps.
- Moved the original `quiz2` to be `strings4`, since it only tested strings
anyways.
- Reworked `quiz2` into a new exercise that tests more chapters.
- Renamed `option` to `options`.
- **options1**: Rewrote parts of the exercise to remove the weird array
iteration stuff.
- Moved `generics3` to be `quiz3`.
- Moved box/arc exercises behind `iterators`.
- **iterators4**: Added a test for factorials of zero.
- Split `threads1` between two exercises, the first one focusing more on
`JoinHandle`s.
- Added a `threads3` exercises that uses `std::sync::mpsc`.
- Added a `clippy3` exercises with some more interesting checks.
- **as_ref_mut**: Added a section that actually tests `AsMut`.
- Added 3 new lifetimes exercises.
- Added 3 new traits exercises.
#### Bug Fixes
- **variables2**: Made output messages more verbose.
- **variables5**: Added a nudging hint about shadowing.
- **variables6**: Fixed link to book.
- **functions**: Clarified the README wording. Generally cleaned up
some hints and added some extra comments.
- **if2**: Renamed function name to `foo_if_fizz`.
- **move_semantics**: Clarified some hints.
- **quiz1**: Renamed the function name to be more verbose.
- **structs1**: Use an integer type instead of strings. Renamed "unit structs"
to "unit-like structs", as is used in the book.
- **structs3**: Added the `panic!` statement in from the beginning.
- **errors1**: Use `is_empty()` instead of `len() > 0`
- **errors3**: Improved the hint.
- **errors5**: Improved exercise instructions and the hint.
- **errors6**: Provided the skeleton of one of the functions that's supposed
to be implemented.
- **iterators3**: Inserted `todo!` into `divide()` to keep a compiler error
from happening.
- **from_str**: Added a hint comment about string error message conversion with
`Box<dyn Error>`.
- **try_from_into**: Fixed the function name in comment.
#### Removed
- Removed the legacy LSP feature that was using `mod.rs` files.
- Removed `quiz4`.
- Removed `advanced_errs`. These were the last exercises in the recommended
order, and I've always felt like they didn't quite fit in with the mostly
simple, book-following style we've had in Rustlings.
#### Housekeeping
- Added missing exercises to the book index.
- 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
- Added a progress indicator for `rustlings watch`.
- The installation script now checks for Rustup being installed.
- Added a `rustlings lsp` command to enable `rust-analyzer`.
#### Bug Fixes
- **move_semantics5**: Replaced "in vogue" with "in scope" in hint.
- **if2**: Fixed a typo in the hint.
- **variables1**: Fixed an incorrect line reference in the hint.
- Fixed an out of bounds check in the installation Bash script.
#### Housekeeping
- 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
- The amount of dependency crates that need to be compiled went down from ~65 to
~45 by bumping dependency versions.
- The minimum Rust version in the install scripts has been bumped to 1.56.0 (this isn't in
the release itself, since install scripts don't really get versioned)
#### Bug Fixes
- **arc1**: A small part has been rewritten using a more functional code style (#968).
- **using_as**: A small part has been refactored to use `sum` instead of `fold`, resulting
in better readability.
#### Housekeeping
- 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
- Add move_semantics6.rs exercise (#908) ([3f0e1303](https://github.com/rust-lang/rustlings/commit/3f0e1303e0b3bf3fecc0baced3c8b8a37f83c184))
- **intro:** Add intro section. ([21c9f441](https://github.com/rust-lang/rustlings/commit/21c9f44168394e08338fd470b5f49b1fd235986f))
- Include exercises folder in the project structure behind a feature, enabling rust-analyzer to work (#917) ([179a75a6](https://github.com/rust-lang/rustlings/commit/179a75a68d03ac9518dec2297fb17f91a4fc506b))
#### Bug Fixes
- Fix a few spelling mistakes ([1c0fe3cb](https://github.com/rust-lang/rustlings/commit/1c0fe3cbcca85f90b3985985b8e265ee872a2ab2))
- **cli:**
- Move long text strings into constants. ([f78c4802](https://github.com/rust-lang/rustlings/commit/f78c48020830d7900dd8d81f355606581670446d))
- Replace `filter_map()` with `find_map()` ([9b27e8d](https://github.com/rust-lang/rustlings/commit/9b27e8d993ca20232fe38a412750c3f845a83b65))
- **clippy1:**
- Set clippy::float_cmp lint to deny (#907) ([71a06044](https://github.com/rust-lang/rustlings/commit/71a06044e6a96ff756dc31d7b0ed665ae4badb57))
- Updated code to test correctness clippy lint with approx_constant lint rule ([f2650de3](https://github.com/rust-lang/rustlings/commit/f2650de369810867d2763e935ac0963c32ec420e))
- **errors1:**
- Add a comment to make the purpose more clear (#486) ([cbcde345](https://github.com/rust-lang/rustlings/commit/cbcde345409c3e550112e449242848eaa3391bb6))
- Don't modify tests (#958) ([60bb7cc](https://github.com/rust-lang/rustlings/commit/60bb7cc3931d21d3986ad52b2b302e632a93831c))
- **errors6:** Remove existing answer code ([43d0623](https://github.com/rust-lang/rustlings/commit/43d0623086edbc46fe896ba59c7afa22c3da9f7a))
- **functions5:** Remove wrong new line and small English improvements (#885) ([8ef4869b](https://github.com/rust-lang/rustlings/commit/8ef4869b264094e5a9b50452b4534823a9df19c3))
- **install:** protect path with whitespaces using quotes and stop at the first error ([d114847f](https://github.com/rust-lang/rustlings/commit/d114847f256c5f571c0b4c87e04b04bce3435509))
- **intro1:** Add compiler error explanation. ([9b8de655](https://github.com/rust-lang/rustlings/commit/9b8de65525a5576b78cf0c8e4098cdd34296338f))
- **iterators1:** reorder TODO steps ([0bd7a063](https://github.com/rust-lang/rustlings/commit/0bd7a0631a17a9d69af5746795a30efc9cf64e6e))
- **move_semantics2:** Add comment ([89650f80](https://github.com/rust-lang/rustlings/commit/89650f808af23a32c9a2c6d46592b77547a6a464))
- **move_semantics5:** correct typo (#857) ([46c28d5c](https://github.com/rust-lang/rustlings/commit/46c28d5cef3d8446b5a356b19d8dbc725f91a3a0))
- **quiz1:** update to say quiz covers "If" ([1622e8c1](https://github.com/rust-lang/rustlings/commit/1622e8c198d89739765c915203efff0091bdeb78))
- **structs3:**
- Add a hint for panic (#608) ([4f7ff5d9](https://github.com/rust-lang/rustlings/commit/4f7ff5d9c7b2d8b045194c1a9469d37e30257c4a))
- remove redundant 'return' (#852) ([bf33829d](https://github.com/rust-lang/rustlings/commit/bf33829da240375d086f96267fc2e02fa6b07001))
- Assigned value to `cents_per_gram` in test ([d1ee2da](https://github.com/rust-lang/rustlings/commit/d1ee2daf14f19105e6db3f9c610f44293d688532))
- **structs3.rs:** assigned value to cents_per_gram in test ([d1ee2daf](https://github.com/rust-lang/rustlings/commit/d1ee2daf14f19105e6db3f9c610f44293d688532))
- **traits1:** rename test functions to snake case (#854) ([1663a16e](https://github.com/rust-lang/rustlings/commit/1663a16eade6ca646b6ed061735f7982434d530d))
#### Documentation improvements
- 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
- add advanced_errs2 ([abd6b70c](https://github.com/rust-lang/rustlings/commit/abd6b70c72dc6426752ff41f09160b839e5c449e))
- add advanced_errs1 ([882d535b](https://github.com/rust-lang/rustlings/commit/882d535ba8628d5e0b37e8664b3e2f26260b2671))
- Add a farewell message when quitting `watch` ([1caef0b4](https://github.com/rust-lang/rustlings/commit/1caef0b43494c8b8cdd6c9260147e70d510f1aca))
- add more watch commands ([a7dc080b](https://github.com/rust-lang/rustlings/commit/a7dc080b95e49146fbaafe6922a6de2f8cb1582a), closes [#842](https://github.com/rust-lang/rustlings/issues/842))
- **modules:** update exercises, add modules3 (#822) ([dfd2fab4](https://github.com/rust-lang/rustlings/commit/dfd2fab4f33d1bf59e2e5ee03123c0c9a67a9481))
- **quiz1:** add default function name in comment (#838) ([0a11bad7](https://github.com/rust-lang/rustlings/commit/0a11bad71402b5403143d642f439f57931278c07))
#### Bug Fixes
- Correct small typo in exercises/conversions/from_str.rs ([86cc8529](https://github.com/rust-lang/rustlings/commit/86cc85295ae36948963ae52882e285d7e3e29323))
- **cli:** typo in exercise.rs (#848) ([06d5c097](https://github.com/rust-lang/rustlings/commit/06d5c0973a3dffa3c6c6f70acb775d4c6630323c))
- **from_str, try_from_into:** custom error types ([2dc93cad](https://github.com/rust-lang/rustlings/commit/2dc93caddad43821743e4903d89b355df58d7a49))
- **modules2:** fix typo (#835) ([1c3beb0a](https://github.com/rust-lang/rustlings/commit/1c3beb0a59178c950dc05fe8ee2346b017429ae0))
- **move_semantics5:**
- change &mut \*y to &mut x (#814) ([d75759e8](https://github.com/rust-lang/rustlings/commit/d75759e829fdcd64ef071cf4b6eae2a011a7718b))
- 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
- Add move_semantics5 exercise. (#746) ([399ab328](https://github.com/rust-lang/rustlings/commit/399ab328d8d407265c09563aa4ef4534b2503ff2))
- **cli:** Add "next" to run the next unsolved exercise. (#785) ([d20e413a](https://github.com/rust-lang/rustlings/commit/d20e413a68772cd493561f2651cf244e822b7ca5))
#### Bug Fixes
- rename result1 to errors4 ([50ab289d](https://github.com/rust-lang/rustlings/commit/50ab289da6b9eb19a7486c341b00048c516b88c0))
- move_semantics5 hints ([1b858285](https://github.com/rust-lang/rustlings/commit/1b85828548f46f58b622b5e0c00f8c989f928807))
- remove trailing whitespaces from iterators1 ([4d4fa774](https://github.com/rust-lang/rustlings/commit/4d4fa77459392acd3581c6068aa8be9a02de12fc))
- add hints to generics1 and generics2 exercises ([31457940](https://github.com/rust-lang/rustlings/commit/31457940846b3844d78d4a4d2b074bc8d6aaf1eb))
- remove trailing whitespace ([d9b69bd1](https://github.com/rust-lang/rustlings/commit/d9b69bd1a0a7a99f2c0d80933ad2eea44c8c71b2))
- **installation:** first PowerShell command ([aa9a943d](https://github.com/rust-lang/rustlings/commit/aa9a943ddf3ae260782e73c26bcc9db60e5894b6))
- **iterators5:** derive Clone, Copy ([91fc9e31](https://github.com/rust-lang/rustlings/commit/91fc9e3118f4af603c9911698cc2a234725cb032))
- **quiz1:** Updated question description (#794) ([d8766496](https://github.com/rust-lang/rustlings/commit/d876649616cc8a8dd5f539f8bc1a5434b960b1e9))
- **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
- Fix spelling error in main.rs ([91ee27f2](https://github.com/rust-lang/rustlings/commit/91ee27f22bd3797a9db57e5fd430801c170c5db8))
- typo in default out text ([644c49f1](https://github.com/rust-lang/rustlings/commit/644c49f1e04cbb24e95872b3a52b07d692ae3bc8))
- **collections:** Naming exercises for vectors and hashmap ([bef39b12](https://github.com/rust-lang/rustlings/commit/bef39b125961310b34b34871e480a82e82af4678))
- **from_str:**
- Correct typos ([5f7c89f8](https://github.com/rust-lang/rustlings/commit/5f7c89f85db1f33da01911eaa479c3a2d4721678))
- test for error instead of unwrap/should_panic ([15e71535](https://github.com/rust-lang/rustlings/commit/15e71535f37cfaed36e22eb778728d186e2104ab))
- use trait objects for from_str ([c3e7b831](https://github.com/rust-lang/rustlings/commit/c3e7b831786c9172ed8bd5d150f3c432f242fba9))
- **functions3:** improve function argument type (#687) ([a6509cc4](https://github.com/rust-lang/rustlings/commit/a6509cc4d545d8825f01ddf7ee37823b372154dd))
- **hashmap2:** Update incorrect assertion (#660) ([72aaa15e](https://github.com/rust-lang/rustlings/commit/72aaa15e6ab4b72b3422f1c6356396e20a2a2bb8))
- **info:** Fix typo (#635) ([cddc1e86](https://github.com/rust-lang/rustlings/commit/cddc1e86e7ec744ee644cc774a4887b1a0ded3e8))
- **iterators2:** Moved errors out of tests. ([baf4ba17](https://github.com/rust-lang/rustlings/commit/baf4ba175ba6eb92989e3dd54ecbec4bedc9a863), closes [#359](https://github.com/rust-lang/rustlings/issues/359))
- **iterators3:** Enabled iterators3.rs to run without commented out tests. ([c6712dfc](https://github.com/rust-lang/rustlings/commit/c6712dfccd1a093e590ad22bbc4f49edc417dac0))
- **main:** Let find_exercise work with borrows ([347f30bd](https://github.com/rust-lang/rustlings/commit/347f30bd867343c5ace1097e085a1f7e356553f7))
- **move_semantics4:**
- Remove redundant "instead" (#640) ([cc266d7d](https://github.com/rust-lang/rustlings/commit/cc266d7d80b91e79df3f61984f231b7f1587218e))
- Small readbility improvement (#617) ([10965920](https://github.com/rust-lang/rustlings/commit/10965920fbdf8a1efc85bed869e55a1787006404))
- **option2:** Rename uninformative variables (#675) ([b4de6594](https://github.com/rust-lang/rustlings/commit/b4de6594380636817d13c2677ec6f472a964cf43))
- **quiz3:** Force an answer to Q2 (#672) ([0d894e6f](https://github.com/rust-lang/rustlings/commit/0d894e6ff739943901e1ae8c904582e5c2f843bd))
- **structs:** Add 5.3 to structs/README (#652) ([6bd791f2](https://github.com/rust-lang/rustlings/commit/6bd791f2f44aa7f0ad926df767f6b1fa8f12a9a9))
- **structs2:** correct grammar in hint (#663) ([ebdb66c7](https://github.com/rust-lang/rustlings/commit/ebdb66c7bfb6d687a14cc511a559a222e6fc5de4))
- **structs3:**
- reword heading comment (#664) ([9f3e8c2d](https://github.com/rust-lang/rustlings/commit/9f3e8c2dde645e5264c2d2200e68842b5f47bfa3))
- add check to prevent naive implementation of is_international ([05a753fe](https://github.com/rust-lang/rustlings/commit/05a753fe6333d36dbee5f68c21dec04eacdc75df))
- **threads1:** line number correction ([7857b0a6](https://github.com/rust-lang/rustlings/commit/7857b0a689b0847f48d8c14cbd1865e3b812d5ca))
- **try_from_into:** use trait objects ([2e93a588](https://github.com/rust-lang/rustlings/commit/2e93a588e0abe8badb7eafafb9e7d073c2be5df8))
#### Features
- Replace clap with argh ([7928122f](https://github.com/rust-lang/rustlings/commit/7928122fcef9ca7834d988b1ec8ca0687478beeb))
- Replace emojis when NO_EMOJI env variable present ([8d62a996](https://github.com/rust-lang/rustlings/commit/8d62a9963708dbecd9312e8bcc4b47049c72d155))
- Added iterators5.rs exercise. ([b29ea17e](https://github.com/rust-lang/rustlings/commit/b29ea17ea94d1862114af2cf5ced0e09c197dc35))
- **arc1:** Add more details to description and hint (#710) ([81be4044](https://github.com/rust-lang/rustlings/commit/81be40448777fa338ebced3b0bfc1b32d6370313))
- **cli:** Improve the list command with options, and then some ([8bbe4ff1](https://github.com/rust-lang/rustlings/commit/8bbe4ff1385c5c169c90cd3ff9253f9a91daaf8e))
- **list:**
- 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
- Rewrite default out text ([44d39112](https://github.com/rust-lang/rustlings/commit/44d39112ff122b29c9793fe52e605df1612c6490))
- match exercise order to book chapters (#541) ([033bf119](https://github.com/rust-lang/rustlings/commit/033bf1198fc8bfce1b570e49da7cde010aa552e3))
- Crab? (#586) ([fa9f522b](https://github.com/rust-lang/rustlings/commit/fa9f522b7f043d7ef73a39f003a9272dfe72c4f4))
- add "rustlings list" command ([838f9f30](https://github.com/rust-lang/rustlings/commit/838f9f30083d0b23fd67503dcf0fbeca498e6647))
- **try_from_into:** remove duplicate annotation ([04f1d079](https://github.com/rust-lang/rustlings/commit/04f1d079aa42a2f49af694bc92c67d731d31a53f))
#### Bug Fixes
- update structs README ([bcf14cf6](https://github.com/rust-lang/rustlings/commit/bcf14cf677adb3a38a3ac3ca53f3c69f61153025))
- added missing exercises to info.toml ([90cfb6ff](https://github.com/rust-lang/rustlings/commit/90cfb6ff28377531bfc34acb70547bdb13374f6b))
- gives a bit more context to magic number ([30644c9a](https://github.com/rust-lang/rustlings/commit/30644c9a062b825c0ea89435dc59f0cad86b110e))
- **functions2:** Change signature to trigger precise error message: (#605) ([0ef95947](https://github.com/rust-lang/rustlings/commit/0ef95947cc30482e63a7045be6cc2fb6f6dcb4cc))
- **structs1:** Adjust wording (#573) ([9334783d](https://github.com/rust-lang/rustlings/commit/9334783da31d821cc59174fbe8320df95828926c))
- **try_from_into:**
- type error ([4f4cfcf3](https://github.com/rust-lang/rustlings/commit/4f4cfcf3c36c8718c7c170c9c3a6935e6ef0618c))
- 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
- Add HashMap exercises ([633c00cf](https://github.com/rust-lang/rustlings/commit/633c00cf8071e1e82959a3010452a32f34f29fc9))
- Add Vec exercises ([0c12fa31](https://github.com/rust-lang/rustlings/commit/0c12fa31c57c03c6287458a0a8aca7afd057baf6))
- **primitive_types6:** Add a test (#548) ([2b1fb2b7](https://github.com/rust-lang/rustlings/commit/2b1fb2b739bf9ad8d6b7b12af25fee173011bfc4))
- **try_from_into:** Add tests (#571) ([95ccd926](https://github.com/rust-lang/rustlings/commit/95ccd92616ae79ba287cce221101e0bbe4f68cdc))
#### Bug Fixes
- log error output when inotify limit is exceeded ([d61b4e5a](https://github.com/rust-lang/rustlings/commit/d61b4e5a13b44d72d004082f523fa1b6b24c1aca))
- more unique temp_file ([5643ef05](https://github.com/rust-lang/rustlings/commit/5643ef05bc81e4a840e9456f4406a769abbe1392))
- **installation:** Update the MinRustVersion ([21bfb2d4](https://github.com/rust-lang/rustlings/commit/21bfb2d4777429c87d8d3b5fbf0ce66006dcd034))
- **iterators2:** Update description (#578) ([197d3a3d](https://github.com/rust-lang/rustlings/commit/197d3a3d8961b2465579218a6749b2b2cefa8ddd))
- **primitive_types6:**
- remove 'unused doc comment' warning ([472d8592](https://github.com/rust-lang/rustlings/commit/472d8592d65c8275332a20dfc269e7ac0d41bc88))
- 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
- Update rustlings version in Cargo.lock ([1cc40bc9](https://github.com/rust-lang/rustlings/commit/1cc40bc9ce95c23d56f6d91fa1c4deb646231fef))
- **arc1:** index mod should equal thread count ([b4062ef6](https://github.com/rust-lang/rustlings/commit/b4062ef6993e80dac107c4093ea85166ad3ee0fa))
- **enums3:** Update Message::ChangeColor to take a tuple. (#457) ([4b6540c7](https://github.com/rust-lang/rustlings/commit/4b6540c71adabad647de8a09e57295e7c7c7d794))
- **exercises:** adding question mark to quiz2 ([101072ab](https://github.com/rust-lang/rustlings/commit/101072ab9f8c80b40b8b88cb06cbe38aca2481c5))
- **generics3:** clarify grade change ([47f7672c](https://github.com/rust-lang/rustlings/commit/47f7672c0307732056e7426e81d351f0dd7e22e5))
- **structs3:** Small adjustment of variable name ([114b54cb](https://github.com/rust-lang/rustlings/commit/114b54cbdb977234b39e5f180d937c14c78bb8b2))
- **using_as:** Add test so that proper type is returned. (#512) ([3286c5ec](https://github.com/rust-lang/rustlings/commit/3286c5ec19ea5fb7ded81d047da5f8594108a490))
#### Features
- Added iterators1.rs exercise ([9642f5a3](https://github.com/rust-lang/rustlings/commit/9642f5a3f686270a4f8f6ba969919ddbbc4f7fdd))
- Add ability to run rustlings on repl.it (#471) ([8f7b5bd0](https://github.com/rust-lang/rustlings/commit/8f7b5bd00eb83542b959830ef55192d2d76db90a))
- Add gitpod support (#473) ([4821a8be](https://github.com/rust-lang/rustlings/commit/4821a8be94af4f669042a06ab917934cfacd032f))
- Remind the user of the hint option (#425) ([816b1f5e](https://github.com/rust-lang/rustlings/commit/816b1f5e85d6cc6e72673813a85d0ada2a8f84af))
- Remind the user of the hint option (#425) ([9f61db5d](https://github.com/rust-lang/rustlings/commit/9f61db5dbe38538cf06571fcdd5f806e7901e83a))
- **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
- Add a --nocapture option to display test harnesses' outputs ([8ad5f9bf](https://github.com/rust-lang/rustlings/commit/8ad5f9bf531a4848b1104b7b389a20171624c82f))
- Rename test to quiz, fixes #244 ([010a0456](https://github.com/rust-lang/rustlings/commit/010a04569282149cea7f7a76fc4d7f4c9f0f08dd))
#### Features
- Add traits README ([173bb141](https://github.com/rust-lang/rustlings/commit/173bb14140c5530cbdb59e53ace3991a99d804af))
- Add box1.rs exercise ([7479a473](https://github.com/rust-lang/rustlings/commit/7479a4737bdcac347322ad0883ca528c8675e720))
- Rewrite try_from_into (#393) ([763aa6e3](https://github.com/rust-lang/rustlings/commit/763aa6e378a586caae2d8d63755a85eeba227933))
- Add if2 exercise ([1da84b5f](https://github.com/rust-lang/rustlings/commit/1da84b5f7c489f65bd683c244f13c7d1ee812df0))
- Added exercise structs3.rs ([b66e2e09](https://github.com/rust-lang/rustlings/commit/b66e2e09622243e086a0f1258dd27e1a2d61c891))
- Add exercise variables6 covering const (#352) ([5999acd2](https://github.com/rust-lang/rustlings/commit/5999acd24a4f203292be36e0fd18d385887ec481))
#### Bug Fixes
- Change then to than ([ddd98ad7](https://github.com/rust-lang/rustlings/commit/ddd98ad75d3668fbb10eff74374148aa5ed2344d))
- rename quiz1 to tests1 in info (#420) ([0dd1c6ca](https://github.com/rust-lang/rustlings/commit/0dd1c6ca6b389789e0972aa955fe17aa15c95f29))
- fix quiz naming inconsistency (#421) ([5563adbb](https://github.com/rust-lang/rustlings/commit/5563adbb890587fc48fbbc9c4028642687f1e85b))
- confine the user further in variable exercises ([06ef4cc6](https://github.com/rust-lang/rustlings/commit/06ef4cc654e75d22a526812919ee49b8956280bf))
- update iterator and macro text for typos and clarity ([95900828](https://github.com/rust-lang/rustlings/commit/959008284834bece0196a01e17ac69a7e3590116))
- update generics2 closes #362 ([964c974a](https://github.com/rust-lang/rustlings/commit/964c974a0274199d755073b917c2bc5da0c9b4f1))
- confusing comment in conversions/try_from_into.rs ([c9e4f2cf](https://github.com/rust-lang/rustlings/commit/c9e4f2cfb4c48d0b7451263cfb43b9426438122d))
- **arc1:** Passively introduce attributes (#429) ([113cdae2](https://github.com/rust-lang/rustlings/commit/113cdae2d4e4c55905e8056ad326ede7fd7de356))
- **box1:** fix comment typo (#426) ([bb2ca251](https://github.com/rust-lang/rustlings/commit/bb2ca251106b27a7272d9a30872904dd1376654c))
- **errorsn:** Try harder to confine the user. (#388) ([2b20c8a0](https://github.com/rust-lang/rustlings/commit/2b20c8a0f5774d07c58d110d75879f33fc6273b5))
- **from_into.rs:** typo ([a901499e](https://github.com/rust-lang/rustlings/commit/a901499ededd3ce1995164700514fe4e9a0373ea))
- **generics2:** Guide students to the answer (#430) ([e6bd8021](https://github.com/rust-lang/rustlings/commit/e6bd8021d9a7dd06feebc30c9d5f953901d7b419))
- **installation:**
- Provide a backup git reference when tag can't be curl ([9e4fb100](https://github.com/rust-lang/rustlings/commit/9e4fb1009f1c9e3433915c03e22c2af422e5c5fe))
- Check if python is available while checking for git,rustc and cargo ([9cfb617d](https://github.com/rust-lang/rustlings/commit/9cfb617d5b0451b4b51644a1298965390cda9884))
- **option1:**
- Don't add only zeros to the numbers array ([cce6a442](https://github.com/rust-lang/rustlings/commit/cce6a4427718724a9096800754cd3abeca6a1580))
- Add cast to usize, as it is confusing in the context of an exercise about Option ([f6cffc7e](https://github.com/rust-lang/rustlings/commit/f6cffc7e487b42f15a6f958e49704c93a8d4465b))
- **option2:** Add TODO to comments (#400) ([10967bce](https://github.com/rust-lang/rustlings/commit/10967bce57682812dc0891a9f9757da1a9d87404))
- **options1:** Add hint about Array Initialization (#389) ([9f75554f](https://github.com/rust-lang/rustlings/commit/9f75554f2a30295996f03f0160b98c0458305502))
- **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
- make "compile" exercises print output (#278) ([3b6d5c](https://github.com/fmoko/rustlings/commit/3b6d5c3aaa27a242a832799eb66e96897d26fde3))
#### Bug Fixes
- **primitive_types:** revert primitive_types4 (#296) ([b3a3351e](https://github.com/rust-lang/rustlings/commit/b3a3351e8e6a0bdee07077d7b0382953821649ae))
- **run:** compile clippy exercise files (#295) ([3ab084a4](https://github.com/rust-lang/rustlings/commit/3ab084a421c0f140ae83bf1fc3f47b39342e7373))
- **conversions:**
- add additional test to meet exercise rules (#284) ([bc22ec3](https://github.com/fmoko/rustlings/commit/bc22ec382f843347333ef1301fc1bad773657f38))
- remove duplicate not done comment (#292) ([dab90f](https://github.com/fmoko/rustlings/commit/dab90f7b91a6000fe874e3d664f244048e5fa342))
- don't hardcode documentation version for traits (#288) ([30e6af](https://github.com/fmoko/rustlings/commit/30e6af60690c326fb5d3a9b7335f35c69c09137d))
#### Features
- add Option2 exercise (#290) ([86b5c08b](https://github.com/rust-lang/rustlings/commit/86b5c08b9bea1576127a7c5f599f5752072c087d))
- add exercise for option (#282) ([135e5d47](https://github.com/rust-lang/rustlings/commit/135e5d47a7c395aece6f6022117fb20c82f2d3d4))
- 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
- Re-add cloning the repo to install scripts ([3d9b03c5](https://github.com/rust-lang/rustlings/commit/3d9b03c52b8dc51b140757f6fd25ad87b5782ef5))
#### Features
- 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))
- **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))
- Updated iterators readme to account for iterators4 exercise (#273) ([bec8e3a](https://github.com/rust-lang/rustlings/commit/bec8e3a644cbd88db1c73ea5f1d8a364f4a34016))
- **installation:** make fatal errors more obvious (#272) ([17d0951e](https://github.com/rust-lang/rustlings/commit/17d0951e66fda8e11b204d5c4c41a0d5e22e78f7))
- **iterators2:**
- Remove reference to missing iterators2.rs (#245) ([419f7797](https://github.com/rust-lang/rustlings/commit/419f7797f294e4ce6a2b883199731b5bde77d262))
- **as_ref_mut:** Enable a test and improve per clippy's suggestion (#256) ([dfdf809](https://github.com/rust-lang/rustlings/commit/dfdf8093ebbd4145864995627b812780de52f902))
- **tests1:**
- Change test command ([fe10e06c](https://github.com/rust-lang/rustlings/commit/fe10e06c3733ddb4a21e90d09bf79bfe618e97ce)
- Correct test command in tests1.rs comment (#263) ([39fa7ae](https://github.com/rust-lang/rustlings/commit/39fa7ae8b70ad468da49b06f11b2383135a63bcf))
#### Features
- Add variables5.rs exercise (#264) ([0c73609e](https://github.com/rust-lang/rustlings/commit/0c73609e6f2311295e95d6f96f8c747cfc4cba03))
- Show a completion message when watching (#253) ([d25ee55a](https://github.com/rust-lang/rustlings/commit/d25ee55a3205882d35782e370af855051b39c58c))
- Add type conversion and parsing exercises (#249) ([0c85dc11](https://github.com/rust-lang/rustlings/commit/0c85dc1193978b5165491b99cc4922caf8d14a65))
- Created consistent money unit (#258) ([fd57f8f](https://github.com/rust-lang/rustlings/commit/fd57f8f2c1da2af8ddbebbccec214e6f40f4dbab))
- Enable test for exercise test4 (#276) ([8b971ff](https://github.com/rust-lang/rustlings/commit/8b971ffab6079a706ac925f5917f987932b55c07))
- 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
- add line numbers in several exercises and hints ([b565c4d3](https://github.com/rust-lang/rustlings/commit/b565c4d3e74e8e110bef201a082fa1302722a7c3))
- **arc1:** Fix some words in the comment ([c42c3b21](https://github.com/rust-lang/rustlings/commit/c42c3b2101df9164c8cd7bb344def921e5ba3e61))
- **enums:** Add link to chapter on pattern syntax (#242) ([615ce327](https://github.com/rust-lang/rustlings/commit/615ce3279800c56d89f19d218ccb7ef576624feb))
- **primitive_types4:**
- update outdated hint ([4c5189df](https://github.com/rust-lang/rustlings/commit/4c5189df2bdd9a231f6b2611919ba5aa14da0d3f))
- update outdated comment ([ded2c034](https://github.com/rust-lang/rustlings/commit/ded2c034ba93fa1e3c2c2ea16b83abc1a57265e8))
- **strings2:** update line number in hint ([a09f684f](https://github.com/rust-lang/rustlings/commit/a09f684f05c58d239a6fc59ec5f81c2533e8b820))
- **variables1:** Correct wrong word in comment ([fda5a470](https://github.com/rust-lang/rustlings/commit/fda5a47069e0954f16a04e8e50945e03becb71a5))
#### Features
- **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
- **default:** Clarify the installation procedure ([c371b853](https://github.com/rust-lang/rustlings/commit/c371b853afa08947ddeebec0edd074b171eeaae0))
- **info:** Fix trailing newlines for hints ([795b6e34](https://github.com/rust-lang/rustlings/commit/795b6e348094a898e9227a14f6232f7bb94c8d31))
- **run:** make `run` never prompt ([4b265465](https://github.com/rust-lang/rustlings/commit/4b26546589f7d2b50455429482cf1f386ceae8b3))
#### Breaking Changes
- Refactor hint system ([9bdb0a12](https://github.com/rust-lang/rustlings/commit/9bdb0a12e45a8e9f9f6a4bd4a9c172c5376c7f60))
- improve `watch` execution mode ([2cdd6129](https://github.com/rust-lang/rustlings/commit/2cdd61294f0d9a53775ee24ad76435bec8a21e60))
- Index exercises by name ([627cdc07](https://github.com/rust-lang/rustlings/commit/627cdc07d07dfe6a740e885e0ddf6900e7ec336b))
- **run:** makes `run` never prompt ([4b265465](https://github.com/rust-lang/rustlings/commit/4b26546589f7d2b50455429482cf1f386ceae8b3))
#### Features
- **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
- **errors3:** Update hint ([dcfb427b](https://github.com/rust-lang/rustlings/commit/dcfb427b09585f0193f0a294443fdf99f11c64cb), closes [#185](https://github.com/rust-lang/rustlings/issues/185))
- **if1:** Remove `return` reference ([ad03d180](https://github.com/rust-lang/rustlings/commit/ad03d180c9311c0093e56a3531eec1a9a70cdb45))
- **strings:** Move Strings before Structs ([6dcecb38](https://github.com/rust-lang/rustlings/commit/6dcecb38a4435593beb87c8e12d6314143631482), closes [#204](https://github.com/rust-lang/rustlings/issues/204))
- **structs1:** Remove misleading comment ([f72e5a8f](https://github.com/rust-lang/rustlings/commit/f72e5a8f05568dde04eaeac10b9a69872f21cb37))
- **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
- **test1:** Rewrite logic ([79a56942](https://github.com/rust-lang/rustlings/commit/79a569422c8309cfc9e4aed25bf4ab3b3859996b))
- **installation:** Fix rustlings installation check ([7a252c47](https://github.com/rust-lang/rustlings/commit/7a252c475551486efb52f949b8af55803b700bc6))
- **iterators:** Rename iterator3.rs ([433d2115](https://github.com/rust-lang/rustlings/commit/433d2115bc1c04b6d34a335a18c9a8f3e2672bc6))
- **iterators2:** Remove syntax resulting in misleading error message ([4cde8664](https://github.com/rust-lang/rustlings/commit/4cde86643e12db162a66e62f23b78962986046ac))
- **option1:**
- Fix arguments passed to assert! macro (#222) ([4c2cf6da](https://github.com/rust-lang/rustlings/commit/4c2cf6da755efe02725e05ecc3a303304c10a6da))
- Fix arguments passed to assert! macro ([ead4f7af](https://github.com/rust-lang/rustlings/commit/ead4f7af9e10e53418efdde5c359159347282afd))
- Add test for prematurely passing exercise ([a750e4a1](https://github.com/rust-lang/rustlings/commit/a750e4a1a3006227292bb17d57d78ce84da6bfc6))
- **primitive_types4:** Fail on a slice covering the wrong area ([5b1e673c](https://github.com/rust-lang/rustlings/commit/5b1e673cec1658afc4ebbbc800213847804facf5))
- **readme:** http to https ([70946b85](https://github.com/rust-lang/rustlings/commit/70946b85e536e80e70ed9505cb650ca0a3a1fbb5))
- **test1:**
- Swap assertion parameter order ([4086d463](https://github.com/rust-lang/rustlings/commit/4086d463a981e81d97781851d17db2ced290f446))
- renamed function name to snake case closes #180 ([89d5186c](https://github.com/rust-lang/rustlings/commit/89d5186c0dae8135ecabf90ee8bb35949bc2d29b))
#### Features
- Add enums exercises ([dc150321](https://github.com/rust-lang/rustlings/commit/dc15032112fc485226a573a18139e5ce928b1755))
- 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
- **iterators2:** Remove syntax resulting in misleading error message ([4cde8664](https://github.com/rust-lang/rustlings/commit/4cde86643e12db162a66e62f23b78962986046ac))
- **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
- **installation:** Fix rustlings installation check ([7a252c47](https://github.com/rust-lang/rustlings/commit/7a252c475551486efb52f949b8af55803b700bc6))
- **iterators:** Rename iterator3.rs ([433d2115](https://github.com/rust-lang/rustlings/commit/433d2115bc1c04b6d34a335a18c9a8f3e2672bc6))
- **readme:** http to https ([70946b85](https://github.com/rust-lang/rustlings/commit/70946b85e536e80e70ed9505cb650ca0a3a1fbb5))
- **test1:** renamed function name to snake case ([89d5186c](https://github.com/rust-lang/rustlings/commit/89d5186c0dae8135ecabf90ee8bb35949bc2d29b))
- **cli:** Check if changed exercise file exists before calling verify ([ba85ca3](https://github.com/rust-lang/rustlings/commit/ba85ca32c4cfc61de46851ab89f9c58a28f33c88))
- **structs1:** Fix the irrefutable let pattern warning ([cc6a141](https://github.com/rust-lang/rustlings/commit/cc6a14104d7c034eadc98297eaaa972d09c50b1f))
#### Features
- **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
- Adds a simple exercise for structures (#163, @briankung)
#### Bug Fixes
- Add Result type signature as it is difficult for new comers to understand Generics and Error all at once. (#157, @veggiemonk)
- Rustfmt and whitespace fixes (#161, @eddyp)
- errorsn.rs: Separate also the hints from each other to avoid accidental viewing (#162, @eddyp)
- fixed outdated links (#165, @gushroom)
- 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
- 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
- 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
- Fix permissions on exercise files (@zacanger, #133)
- Make installation checks more thorough (@komaeda, 1b3469f236bc6979c27f6e1a04e4138a88e55de3)
- Fix order of true/false in tests for executables (@mgeier, #137)
- Stop run from panicking when compile fails (@cjpearce, #141)
- Fix intermittent test failure caused by race condition (@cjpearce, #140)
- 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)
- Start verification at most recently modified file (#120)
- Watch for file creation events in watch mode (#117)
- Add standard library types to exercises suite (#119)
- 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.

130
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,130 @@
## Contributing to Rustlings
First off, thanks for taking the time to contribute!! ❤️
### Quick Reference
I want to...
_add an exercise! ➡️ [read this](#addex) and then [open a Pull Request](#prs)_
_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
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`
- `rustlings --version`
- `ls -la`
- Your OS name and version
<a name="prs"></a>
### 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:
#### Write correct commit messages
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:
```
feat: add foobar1.rs exercise
```
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!

966
Cargo.lock generated Normal file
View File

@ -0,0 +1,966 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "aho-corasick"
version = "0.7.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
dependencies = [
"memchr",
]
[[package]]
name = "anstream"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
"utf8parse",
]
[[package]]
name = "anstyle"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b84bf0a05bbb2a83e5eb6fa36bb6e87baa08193c35ff52bbf6b38d8af2890e46"
[[package]]
name = "anstyle-parse"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "anstyle-wincon"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd"
dependencies = [
"anstyle",
"windows-sys 0.48.0",
]
[[package]]
name = "assert_cmd"
version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6"
dependencies = [
"anstyle",
"bstr",
"doc-comment",
"predicates",
"predicates-core",
"predicates-tree",
"wait-timeout",
]
[[package]]
name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bstr"
version = "1.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a"
dependencies = [
"memchr",
"regex-automata",
"serde",
]
[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "clap"
version = "4.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84ed82781cea27b43c9b106a979fe450a13a31aab0500595fb3fc06616de08e6"
dependencies = [
"clap_builder",
"clap_derive",
]
[[package]]
name = "clap_builder"
version = "4.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08"
dependencies = [
"anstream",
"anstyle",
"clap_lex",
"strsim",
]
[[package]]
name = "clap_derive"
version = "4.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "clap_lex"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
[[package]]
name = "colorchoice"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]]
name = "console"
version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60"
dependencies = [
"encode_unicode",
"lazy_static",
"libc",
"unicode-width",
"windows-sys 0.42.0",
]
[[package]]
name = "difflib"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
[[package]]
name = "doc-comment"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
[[package]]
name = "either"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]]
name = "encode_unicode"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
[[package]]
name = "equivalent"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "filetime"
version = "0.2.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412"
dependencies = [
"cfg-if 1.0.0",
"libc",
"redox_syscall",
"windows-sys 0.45.0",
]
[[package]]
name = "float-cmp"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
dependencies = [
"num-traits",
]
[[package]]
name = "fsevent"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6"
dependencies = [
"bitflags",
"fsevent-sys",
]
[[package]]
name = "fsevent-sys"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0"
dependencies = [
"libc",
]
[[package]]
name = "fuchsia-zircon"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
dependencies = [
"bitflags",
"fuchsia-zircon-sys",
]
[[package]]
name = "fuchsia-zircon-sys"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
[[package]]
name = "glob"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
name = "hashbrown"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
[[package]]
name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "home"
version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "747309b4b440c06d57b0b25f2aee03ee9b5e5397d288c60e21fc709bb98a7408"
dependencies = [
"winapi 0.3.9",
]
[[package]]
name = "indexmap"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
dependencies = [
"equivalent",
"hashbrown",
]
[[package]]
name = "indicatif"
version = "0.17.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b297dc40733f23a0e52728a58fa9489a5b7638a324932de16b41adc3ef80730"
dependencies = [
"console",
"instant",
"number_prefix",
"portable-atomic",
"unicode-width",
]
[[package]]
name = "inotify"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4816c66d2c8ae673df83366c18341538f234a26d65a9ecea5c348b453ac1d02f"
dependencies = [
"bitflags",
"inotify-sys",
"libc",
]
[[package]]
name = "inotify-sys"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
dependencies = [
"libc",
]
[[package]]
name = "instant"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
dependencies = [
"cfg-if 1.0.0",
]
[[package]]
name = "iovec"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
dependencies = [
"libc",
]
[[package]]
name = "itertools"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
dependencies = [
"either",
]
[[package]]
name = "itoa"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
[[package]]
name = "kernel32-sys"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
dependencies = [
"winapi 0.2.8",
"winapi-build",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "lazycell"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "libc"
version = "0.2.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
[[package]]
name = "log"
version = "0.4.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
dependencies = [
"cfg-if 1.0.0",
]
[[package]]
name = "memchr"
version = "2.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
[[package]]
name = "mio"
version = "0.6.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
dependencies = [
"cfg-if 0.1.10",
"fuchsia-zircon",
"fuchsia-zircon-sys",
"iovec",
"kernel32-sys",
"libc",
"log",
"miow",
"net2",
"slab",
"winapi 0.2.8",
]
[[package]]
name = "mio-extras"
version = "2.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19"
dependencies = [
"lazycell",
"log",
"mio",
"slab",
]
[[package]]
name = "miow"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
dependencies = [
"kernel32-sys",
"net2",
"winapi 0.2.8",
"ws2_32-sys",
]
[[package]]
name = "net2"
version = "0.2.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
dependencies = [
"cfg-if 0.1.10",
"libc",
"winapi 0.3.9",
]
[[package]]
name = "normalize-line-endings"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
[[package]]
name = "notify"
version = "4.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae03c8c853dba7bfd23e571ff0cff7bc9dceb40a4cd684cd1681824183f45257"
dependencies = [
"bitflags",
"filetime",
"fsevent",
"fsevent-sys",
"inotify",
"libc",
"mio",
"mio-extras",
"walkdir",
"winapi 0.3.9",
]
[[package]]
name = "num-traits"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
dependencies = [
"autocfg",
]
[[package]]
name = "number_prefix"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
[[package]]
name = "portable-atomic"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b"
[[package]]
name = "predicates"
version = "3.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9"
dependencies = [
"anstyle",
"difflib",
"float-cmp",
"itertools",
"normalize-line-endings",
"predicates-core",
"regex",
]
[[package]]
name = "predicates-core"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
[[package]]
name = "predicates-tree"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
dependencies = [
"predicates-core",
"termtree",
]
[[package]]
name = "proc-macro2"
version = "1.0.53"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
dependencies = [
"proc-macro2",
]
[[package]]
name = "redox_syscall"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
dependencies = [
"bitflags",
]
[[package]]
name = "regex"
version = "1.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cce168fea28d3e05f158bda4576cf0c844d5045bc2cc3620fa0292ed5bb5814c"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-automata"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
[[package]]
name = "regex-syntax"
version = "0.6.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "rustlings"
version = "5.6.1"
dependencies = [
"assert_cmd",
"clap",
"console",
"glob",
"home",
"indicatif",
"notify",
"predicates",
"regex",
"serde",
"serde_json",
"toml",
]
[[package]]
name = "ryu"
version = "1.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
[[package]]
name = "same-file"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
dependencies = [
"winapi-util",
]
[[package]]
name = "serde"
version = "1.0.158"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.158"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
dependencies = [
"itoa",
"ryu",
"serde",
]
[[package]]
name = "serde_spanned"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
dependencies = [
"serde",
]
[[package]]
name = "slab"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
dependencies = [
"autocfg",
]
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "syn"
version = "2.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "termtree"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
[[package]]
name = "toml"
version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit",
]
[[package]]
name = "toml_datetime"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
version = "0.19.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [
"indexmap",
"serde",
"serde_spanned",
"toml_datetime",
"winnow",
]
[[package]]
name = "unicode-ident"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
[[package]]
name = "unicode-width"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
[[package]]
name = "utf8parse"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
[[package]]
name = "wait-timeout"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
dependencies = [
"libc",
]
[[package]]
name = "walkdir"
version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
dependencies = [
"same-file",
"winapi-util",
]
[[package]]
name = "winapi"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-build"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
dependencies = [
"winapi 0.3.9",
]
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-sys"
version = "0.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
dependencies = [
"windows_aarch64_gnullvm 0.42.2",
"windows_aarch64_msvc 0.42.2",
"windows_i686_gnu 0.42.2",
"windows_i686_msvc 0.42.2",
"windows_x86_64_gnu 0.42.2",
"windows_x86_64_gnullvm 0.42.2",
"windows_x86_64_msvc 0.42.2",
]
[[package]]
name = "windows-sys"
version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
dependencies = [
"windows-targets 0.42.2",
]
[[package]]
name = "windows-sys"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
"windows-targets 0.48.5",
]
[[package]]
name = "windows-targets"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
dependencies = [
"windows_aarch64_gnullvm 0.42.2",
"windows_aarch64_msvc 0.42.2",
"windows_i686_gnu 0.42.2",
"windows_i686_msvc 0.42.2",
"windows_x86_64_gnu 0.42.2",
"windows_x86_64_gnullvm 0.42.2",
"windows_x86_64_msvc 0.42.2",
]
[[package]]
name = "windows-targets"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
"windows_aarch64_gnullvm 0.48.5",
"windows_aarch64_msvc 0.48.5",
"windows_i686_gnu 0.48.5",
"windows_i686_msvc 0.48.5",
"windows_x86_64_gnu 0.48.5",
"windows_x86_64_gnullvm 0.48.5",
"windows_x86_64_msvc 0.48.5",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_aarch64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_i686_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]]
name = "windows_x86_64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "winnow"
version = "0.5.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc"
dependencies = [
"memchr",
]
[[package]]
name = "ws2_32-sys"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
dependencies = [
"winapi 0.2.8",
"winapi-build",
]

View File

@ -1,20 +1,30 @@
[package]
name = "rustlings"
version = "1.1.0"
authors = ["Olivia <819880950@qq.com>", "Carol (Nichols || Goulding) <carol.nichols@gmail.com"]
edition = "2018"
description = "Small exercises to get you used to reading and writing Rust code!"
version = "5.6.1"
authors = [
"Liv <mokou@fastmail.com>",
"Carol (Nichols || Goulding) <carol.nichols@gmail.com>",
]
edition = "2021"
[dependencies]
clap = "2.32.0"
indicatif = "0.9.0"
console = "0.6.2"
syntect = "3.0.2"
notify = "4.0.0"
toml = "0.4.10"
indicatif = "0.17.6"
console = "0.15"
notify = "4.0"
toml = "0.7.6"
regex = "1.5"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0.81"
home = "0.5.3"
glob = "0.3.0"
clap = { version = "4.4.0", features = ["derive"] }
[[bin]]
name = "rustlings"
path = "src/main.rs"
[dev-dependencies]
assert_cmd = "0.11.0"
assert_cmd = "2.0.12"
predicates = "3.0.3"
glob = "0.3.0"

184
README.md
View File

@ -1,12 +1,14 @@
![crab pet](http://i.imgur.com/LbZJgmm.gif)
<div class="oranda-hide">
# rustlings 🦀❤️
</div>
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!
_...looking for the old, web-based version of Rustlings? Try [here](https://github.com/rust-lang/rustlings/tree/rustlings-1)_
Alternatively, for a first-time Rust learner, there's several other resources:
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
@ -14,113 +16,165 @@ Alternatively, for a first-time Rust learner, there's several other resources:
## 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`._
_Note: If you have Xcode 10+ installed, you also need to install the package file found at `/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg`._
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.
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://git.io/rustlings | bash
# Or if you want it to be installed to a different path:
curl -L https://git.io/rustlings | bash -s mypath/
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:
```bash
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!
## Windows/Manually
### Nix
Basically: Clone the repository, checkout to the latest tag, run `cargo install`.
Basically: Clone the repository at the latest tag, finally run `nix develop` or `nix-shell`.
```bash
git clone https://github.com/rust-lang/rustlings
# find out the latest version at https://github.com/rust-lang/rustlings/releases/latest (on edit 5.6.1)
git clone -b 5.6.1 --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
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/rust-lang/rustlings)
[![Open Rustlings On Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/?repo=rust-lang%2Frustlings&ref=main)
## 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.6.1)
git clone -b 5.6.1 --depth 1 https://github.com/rust-lang/rustlings
cd rustlings
git checkout tags/1.0.0 # or whatever the latest version is (find out at https://github.com/rust-lang/rustlings/releases/latest)
cargo install --force --path .
```
Same as above, run `rustlings` to get started.
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 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 keep it from compiling, and it's up to you to fix it! Some exercises are also ran as tests, but rustlings handles them all the same. To run the exercises in the recommended order, execute:
```bash
rustlings verify
```
This will try to verify the completion of every exercise in a predetermined order (what we think is best for newcomers). If you don't want to rerun `verify` every time you change a file, you can run:
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 do the same as verify, but won't quit after running and instead automatically rerun as soon as you change a file in the `exercises/` directory.
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 exercises/path/to/exercise.rs
rustlings run myExercise1
```
In case you get stuck, there is usually a hint at the bottom of each exercise.
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 test that'll test your knowledge on a bunch of sections at once. These tests are found in `exercises/testN.rs`.
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`.
## Completion
## Enabling `rust-analyzer`
Rustlings isn't done; there are a couple of sections that are very experimental and don't have proper documentation. These include:
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.
- Errors (`exercises/errors/`)
- Option (`exercises/option/`)
- Result (`exercises/result/`)
- Move Semantics (could still be improved, `exercises/move_semantics/`)
## Continuing On
Additionally, we could use exercises on a couple of topics:
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.
- Structs
- Better ownership stuff
- `impl`
- ??? probably more
## Uninstalling Rustlings
If you are interested in improving or adding new ones, please feel free to contribute! Read on for more information :)
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, run `cargo uninstall` to remove the `rustlings` binary:
```bash
cargo uninstall rustlings
```
Now you should be done!
## Contributing
### Adding an exercise
See [CONTRIBUTING.md](https://github.com/rust-lang/rustlings/blob/main/CONTRIBUTING.md).
First step is to add the exercise! Call it `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 you want to make sure it runs when using `rustlings`. All exercises are stored in `info.toml`, under the `exercises` array. They're ordered by the order they're ran when using `rustlings verify`.
You want to make sure where in the file you add your exercise. If you're not sure, add it at the bottom and ask in your pull request. To add an exercise, edit the file like this:
```diff
...
+ [[exercises]]
+ path = "exercises/yourTopic/yourTopicN.rs"
+ mode = "compile"
...
```
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`.
That's all! Feel free to put up a pull request.
### 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 `clap` CLI that loads from `src/verify.rs` and `src/run.rs`.
## Credits
`rustlings` was originally written by [Carol](https://github.com/carols10cents)!
## Contributors ✨
Thanks goes to the wonderful people listed in [AUTHORS.md](https://github.com/rust-lang/rustlings/blob/main/AUTHORS.md) 🎉

View File

@ -1,20 +0,0 @@
Thanks for installing `rustlings`!
## Is this your first time?
Let's make sure you're up to speed:
- You have Rust installed, preferably via `rustup`
- You have `~/.cargo/bin` added to your PATH variable
- You have cloned this repository (https://github.com/rust-lang/rustlings)
- You have installed Rust language support for your editor
- You have locally installed the `rustlings` command by running:
```sh
cargo install --path .
```
If you've done all of this (or even most of it), congrats! You're ready
to start working with Rust.
To get started, run `rustlings verify` in order to get the first exercise.
Make sure to have your editor open!

27
exercises/README.md Normal file
View File

@ -0,0 +1,27 @@
# Exercise to Book Chapter mapping
| Exercise | Book Chapter |
| ---------------------- | ------------------- |
| variables | §3.1 |
| functions | §3.3 |
| if | §3.5 |
| primitive_types | §3.2, §4.3 |
| vecs | §8.1 |
| move_semantics | §4.1-2 |
| structs | §5.1, §5.3 |
| enums | §6, §18.3 |
| strings | §8.2 |
| modules | §7 |
| hashmaps | §8.3 |
| options | §10.1 |
| error_handling | §9 |
| generics | §10 |
| traits | §10.2 |
| tests | §11.1 |
| lifetimes | §10.3 |
| iterators | §13.2-4 |
| threads | §16.1-3 |
| smart_pointers | §15, §16.3 |
| macros | §19.6 |
| clippy | §21.4 |
| conversions | n/a |

View File

@ -0,0 +1,10 @@
# Clippy
The Clippy tool is a collection of lints to analyze your code so you can catch common mistakes and improve your Rust code.
If you used the installation script for Rustlings, Clippy should be already installed.
If not you can install it manually via `rustup component add clippy`.
## Further information
- [GitHub Repository](https://github.com/rust-lang/rust-clippy).

View File

@ -0,0 +1,26 @@
// clippy1.rs
//
// The Clippy tool is a collection of lints to analyze your code so you can
// catch common mistakes and improve your Rust code.
//
// For these exercises the code will fail to compile when there are clippy
// warnings check clippy's suggestions from the output to solve the exercise.
//
// Execute `rustlings hint clippy1` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
use std::f32;
fn main() {
let pi = 3.14f32;
let radius = 5.00f32;
let area = pi * f32::powi(radius, 2);
println!(
"The area of a circle with radius {:.2} is {:.5}!",
radius, area
)
}

View File

@ -0,0 +1,15 @@
// clippy2.rs
//
// Execute `rustlings hint clippy2` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
fn main() {
let mut res = 42;
let option = Some(12);
for x in option {
res += x;
}
println!("{}", res);
}

View File

@ -0,0 +1,30 @@
// clippy3.rs
//
// Here's a couple more easy Clippy fixes, so you can see its utility.
// No hints.
// I AM NOT DONE
#[allow(unused_variables, unused_assignments)]
fn main() {
let my_option: Option<()> = None;
if my_option.is_none() {
my_option.unwrap();
}
let my_arr = &[
-1, -2, -3
-4, -5, -6
];
println!("My array! Here it is: {:?}", my_arr);
let my_empty_vec = vec![1, 2, 3, 4, 5].resize(0, 5);
println!("This Vec is empty, see? {:?}", my_empty_vec);
let mut value_a = 45;
let mut value_b = 66;
// Let's swap these two!
value_a = value_b;
value_b = value_a;
println!("value a: {}; value b: {}", value_a, value_b);
}

View File

@ -0,0 +1,23 @@
# Type conversions
Rust offers a multitude of ways to convert a value of a given type into another type.
The simplest form of type conversion is a type cast expression. It is denoted with the binary operator `as`. For instance, `println!("{}", 1 + 1.0);` would not compile, since `1` is an integer while `1.0` is a float. However, `println!("{}", 1 as f32 + 1.0)` should compile. The exercise [`using_as`](using_as.rs) tries to cover this.
Rust also offers traits that facilitate type conversions upon implementation. These traits can be found under the [`convert`](https://doc.rust-lang.org/std/convert/index.html) module.
The traits are the following:
- `From` and `Into` covered in [`from_into`](from_into.rs)
- `TryFrom` and `TryInto` covered in [`try_from_into`](try_from_into.rs)
- `AsRef` and `AsMut` covered in [`as_ref_mut`](as_ref_mut.rs)
Furthermore, the `std::str` module offers a trait called [`FromStr`](https://doc.rust-lang.org/std/str/trait.FromStr.html) which helps with converting strings into target types via the `parse` method on strings. If properly implemented for a given type `Person`, then `let p: Person = "Mark,20".parse().unwrap()` should both compile and run without panicking.
These should be the main ways ***within the standard library*** to convert data into your desired types.
## Further information
These are not directly covered in the book, but the standard library has a great documentation for it.
- [conversions](https://doc.rust-lang.org/std/convert/index.html)
- [`FromStr` trait](https://doc.rust-lang.org/std/str/trait.FromStr.html)

View File

@ -0,0 +1,65 @@
// as_ref_mut.rs
//
// AsRef and AsMut allow for cheap reference-to-reference conversions. Read more
// about them at https://doc.rust-lang.org/std/convert/trait.AsRef.html and
// https://doc.rust-lang.org/std/convert/trait.AsMut.html, respectively.
//
// Execute `rustlings hint as_ref_mut` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
// Obtain the number of bytes (not characters) in the given argument.
// TODO: Add the AsRef trait appropriately as a trait bound.
fn byte_counter<T>(arg: T) -> usize {
arg.as_ref().as_bytes().len()
}
// Obtain the number of characters (not bytes) in the given argument.
// TODO: Add the AsRef trait appropriately as a trait bound.
fn char_counter<T>(arg: T) -> usize {
arg.as_ref().chars().count()
}
// Squares a number using as_mut().
// TODO: Add the appropriate trait bound.
fn num_sq<T>(arg: &mut T) {
// TODO: Implement the function body.
???
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn different_counts() {
let s = "Café au lait";
assert_ne!(char_counter(s), byte_counter(s));
}
#[test]
fn same_counts() {
let s = "Cafe au lait";
assert_eq!(char_counter(s), byte_counter(s));
}
#[test]
fn different_counts_using_string() {
let s = String::from("Café au lait");
assert_ne!(char_counter(s.clone()), byte_counter(s));
}
#[test]
fn same_counts_using_string() {
let s = String::from("Cafe au lait");
assert_eq!(char_counter(s.clone()), byte_counter(s));
}
#[test]
fn mut_box() {
let mut num: Box<u32> = Box::new(3);
num_sq(&mut num);
assert_eq!(*num, 9);
}
}

View File

@ -0,0 +1,140 @@
// from_into.rs
//
// The From trait is used for value-to-value conversions. If From is implemented
// correctly for a type, the Into trait should work conversely. You can read
// more about it at https://doc.rust-lang.org/std/convert/trait.From.html
//
// Execute `rustlings hint from_into` or use the `hint` watch subcommand for a
// hint.
#[derive(Debug)]
struct Person {
name: String,
age: usize,
}
// We implement the Default trait to use it as a fallback
// when the provided string is not convertible into a Person object
impl Default for Person {
fn default() -> Person {
Person {
name: String::from("John"),
age: 30,
}
}
}
// Your task is to complete this implementation in order for the line `let p =
// Person::from("Mark,20")` to compile Please note that you'll need to parse the
// age component into a `usize` with something like `"4".parse::<usize>()`. The
// outcome of this needs to be handled appropriately.
//
// Steps:
// 1. If the length of the provided string is 0, then return the default of
// Person.
// 2. Split the given string on the commas present in it.
// 3. Extract the first element from the split operation and use it as the name.
// 4. If the name is empty, then return the default of Person.
// 5. Extract the other element from the split operation and parse it into a
// `usize` as the age.
// If while parsing the age, something goes wrong, then return the default of
// Person Otherwise, then return an instantiated Person object with the results
// I AM NOT DONE
impl From<&str> for Person {
fn from(s: &str) -> Person {
}
}
fn main() {
// Use the `from` function
let p1 = Person::from("Mark,20");
// Since From is implemented for Person, we should be able to use Into
let p2: Person = "Gerald,70".into();
println!("{:?}", p1);
println!("{:?}", p2);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default() {
// Test that the default person is 30 year old John
let dp = Person::default();
assert_eq!(dp.name, "John");
assert_eq!(dp.age, 30);
}
#[test]
fn test_bad_convert() {
// Test that John is returned when bad string is provided
let p = Person::from("");
assert_eq!(p.name, "John");
assert_eq!(p.age, 30);
}
#[test]
fn test_good_convert() {
// Test that "Mark,20" works
let p = Person::from("Mark,20");
assert_eq!(p.name, "Mark");
assert_eq!(p.age, 20);
}
#[test]
fn test_bad_age() {
// Test that "Mark,twenty" will return the default person due to an
// error in parsing age
let p = Person::from("Mark,twenty");
assert_eq!(p.name, "John");
assert_eq!(p.age, 30);
}
#[test]
fn test_missing_comma_and_age() {
let p: Person = Person::from("Mark");
assert_eq!(p.name, "John");
assert_eq!(p.age, 30);
}
#[test]
fn test_missing_age() {
let p: Person = Person::from("Mark,");
assert_eq!(p.name, "John");
assert_eq!(p.age, 30);
}
#[test]
fn test_missing_name() {
let p: Person = Person::from(",1");
assert_eq!(p.name, "John");
assert_eq!(p.age, 30);
}
#[test]
fn test_missing_name_and_age() {
let p: Person = Person::from(",");
assert_eq!(p.name, "John");
assert_eq!(p.age, 30);
}
#[test]
fn test_missing_name_and_invalid_age() {
let p: Person = Person::from(",one");
assert_eq!(p.name, "John");
assert_eq!(p.age, 30);
}
#[test]
fn test_trailing_comma() {
let p: Person = Person::from("Mike,32,");
assert_eq!(p.name, "Mike");
assert_eq!(p.age, 32);
}
#[test]
fn test_trailing_comma_and_some_string() {
let p: Person = Person::from("Mike,32,man");
assert_eq!(p.name, "Mike");
assert_eq!(p.age, 32);
}
}

View File

@ -0,0 +1,133 @@
// from_str.rs
//
// This is similar to from_into.rs, but this time we'll implement `FromStr` and
// return errors instead of falling back to a default value. Additionally, upon
// implementing FromStr, you can use the `parse` method on strings to generate
// an object of the implementor type. You can read more about it at
// https://doc.rust-lang.org/std/str/trait.FromStr.html
//
// Execute `rustlings hint from_str` or use the `hint` watch subcommand for a
// hint.
use std::num::ParseIntError;
use std::str::FromStr;
#[derive(Debug, PartialEq)]
struct Person {
name: String,
age: usize,
}
// We will use this error type for the `FromStr` implementation.
#[derive(Debug, PartialEq)]
enum ParsePersonError {
// Empty input string
Empty,
// Incorrect number of fields
BadLen,
// Empty name field
NoName,
// Wrapped error from parse::<usize>()
ParseInt(ParseIntError),
}
// I AM NOT DONE
// Steps:
// 1. If the length of the provided string is 0, an error should be returned
// 2. Split the given string on the commas present in it
// 3. Only 2 elements should be returned from the split, otherwise return an
// error
// 4. Extract the first element from the split operation and use it as the name
// 5. Extract the other element from the split operation and parse it into a
// `usize` as the age with something like `"4".parse::<usize>()`
// 6. If while extracting the name and the age something goes wrong, an error
// should be returned
// If everything goes well, then return a Result of a Person object
//
// As an aside: `Box<dyn Error>` implements `From<&'_ str>`. This means that if
// you want to return a string error message, you can do so via just using
// return `Err("my error message".into())`.
impl FromStr for Person {
type Err = ParsePersonError;
fn from_str(s: &str) -> Result<Person, Self::Err> {
}
}
fn main() {
let p = "Mark,20".parse::<Person>().unwrap();
println!("{:?}", p);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn empty_input() {
assert_eq!("".parse::<Person>(), Err(ParsePersonError::Empty));
}
#[test]
fn good_input() {
let p = "John,32".parse::<Person>();
assert!(p.is_ok());
let p = p.unwrap();
assert_eq!(p.name, "John");
assert_eq!(p.age, 32);
}
#[test]
fn missing_age() {
assert!(matches!(
"John,".parse::<Person>(),
Err(ParsePersonError::ParseInt(_))
));
}
#[test]
fn invalid_age() {
assert!(matches!(
"John,twenty".parse::<Person>(),
Err(ParsePersonError::ParseInt(_))
));
}
#[test]
fn missing_comma_and_age() {
assert_eq!("John".parse::<Person>(), Err(ParsePersonError::BadLen));
}
#[test]
fn missing_name() {
assert_eq!(",1".parse::<Person>(), Err(ParsePersonError::NoName));
}
#[test]
fn missing_name_and_age() {
assert!(matches!(
",".parse::<Person>(),
Err(ParsePersonError::NoName | ParsePersonError::ParseInt(_))
));
}
#[test]
fn missing_name_and_invalid_age() {
assert!(matches!(
",one".parse::<Person>(),
Err(ParsePersonError::NoName | ParsePersonError::ParseInt(_))
));
}
#[test]
fn trailing_comma() {
assert_eq!("John,32,".parse::<Person>(), Err(ParsePersonError::BadLen));
}
#[test]
fn trailing_comma_and_some_string() {
assert_eq!(
"John,32,man".parse::<Person>(),
Err(ParsePersonError::BadLen)
);
}
}

View File

@ -0,0 +1,193 @@
// try_from_into.rs
//
// TryFrom is a simple and safe type conversion that may fail in a controlled
// way under some circumstances. Basically, this is the same as From. The main
// difference is that this should return a Result type instead of the target
// type itself. You can read more about it at
// https://doc.rust-lang.org/std/convert/trait.TryFrom.html
//
// Execute `rustlings hint try_from_into` or use the `hint` watch subcommand for
// a hint.
use std::convert::{TryFrom, TryInto};
#[derive(Debug, PartialEq)]
struct Color {
red: u8,
green: u8,
blue: u8,
}
// We will use this error type for these `TryFrom` conversions.
#[derive(Debug, PartialEq)]
enum IntoColorError {
// Incorrect length of slice
BadLen,
// Integer conversion error
IntConversion,
}
// I AM NOT DONE
// Your task is to complete this implementation and return an Ok result of inner
// type Color. You need to create an implementation for a tuple of three
// integers, an array of three integers, and a slice of integers.
//
// Note that the implementation for tuple and array will be checked at compile
// time, but the slice implementation needs to check the slice length! Also note
// that correct RGB color values must be integers in the 0..=255 range.
// Tuple implementation
impl TryFrom<(i16, i16, i16)> for Color {
type Error = IntoColorError;
fn try_from(tuple: (i16, i16, i16)) -> Result<Self, Self::Error> {
}
}
// Array implementation
impl TryFrom<[i16; 3]> for Color {
type Error = IntoColorError;
fn try_from(arr: [i16; 3]) -> Result<Self, Self::Error> {
}
}
// Slice implementation
impl TryFrom<&[i16]> for Color {
type Error = IntoColorError;
fn try_from(slice: &[i16]) -> Result<Self, Self::Error> {
}
}
fn main() {
// Use the `try_from` function
let c1 = Color::try_from((183, 65, 14));
println!("{:?}", c1);
// Since TryFrom is implemented for Color, we should be able to use TryInto
let c2: Result<Color, _> = [183, 65, 14].try_into();
println!("{:?}", c2);
let v = vec![183, 65, 14];
// With slice we should use `try_from` function
let c3 = Color::try_from(&v[..]);
println!("{:?}", c3);
// or take slice within round brackets and use TryInto
let c4: Result<Color, _> = (&v[..]).try_into();
println!("{:?}", c4);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_tuple_out_of_range_positive() {
assert_eq!(
Color::try_from((256, 1000, 10000)),
Err(IntoColorError::IntConversion)
);
}
#[test]
fn test_tuple_out_of_range_negative() {
assert_eq!(
Color::try_from((-1, -10, -256)),
Err(IntoColorError::IntConversion)
);
}
#[test]
fn test_tuple_sum() {
assert_eq!(
Color::try_from((-1, 255, 255)),
Err(IntoColorError::IntConversion)
);
}
#[test]
fn test_tuple_correct() {
let c: Result<Color, _> = (183, 65, 14).try_into();
assert!(c.is_ok());
assert_eq!(
c.unwrap(),
Color {
red: 183,
green: 65,
blue: 14
}
);
}
#[test]
fn test_array_out_of_range_positive() {
let c: Result<Color, _> = [1000, 10000, 256].try_into();
assert_eq!(c, Err(IntoColorError::IntConversion));
}
#[test]
fn test_array_out_of_range_negative() {
let c: Result<Color, _> = [-10, -256, -1].try_into();
assert_eq!(c, Err(IntoColorError::IntConversion));
}
#[test]
fn test_array_sum() {
let c: Result<Color, _> = [-1, 255, 255].try_into();
assert_eq!(c, Err(IntoColorError::IntConversion));
}
#[test]
fn test_array_correct() {
let c: Result<Color, _> = [183, 65, 14].try_into();
assert!(c.is_ok());
assert_eq!(
c.unwrap(),
Color {
red: 183,
green: 65,
blue: 14
}
);
}
#[test]
fn test_slice_out_of_range_positive() {
let arr = [10000, 256, 1000];
assert_eq!(
Color::try_from(&arr[..]),
Err(IntoColorError::IntConversion)
);
}
#[test]
fn test_slice_out_of_range_negative() {
let arr = [-256, -1, -10];
assert_eq!(
Color::try_from(&arr[..]),
Err(IntoColorError::IntConversion)
);
}
#[test]
fn test_slice_sum() {
let arr = [-1, 255, 255];
assert_eq!(
Color::try_from(&arr[..]),
Err(IntoColorError::IntConversion)
);
}
#[test]
fn test_slice_correct() {
let v = vec![183, 65, 14];
let c: Result<Color, _> = Color::try_from(&v[..]);
assert!(c.is_ok());
assert_eq!(
c.unwrap(),
Color {
red: 183,
green: 65,
blue: 14
}
);
}
#[test]
fn test_slice_excess_length() {
let v = vec![0, 0, 0, 0];
assert_eq!(Color::try_from(&v[..]), Err(IntoColorError::BadLen));
}
#[test]
fn test_slice_insufficient_length() {
let v = vec![0, 0];
assert_eq!(Color::try_from(&v[..]), Err(IntoColorError::BadLen));
}
}

View File

@ -0,0 +1,33 @@
// using_as.rs
//
// Type casting in Rust is done via the usage of the `as` operator. Please note
// that the `as` operator is not only used when type casting. It also helps with
// renaming imports.
//
// The goal is to make sure that the division does not fail to compile and
// returns the proper type.
//
// Execute `rustlings hint using_as` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
fn average(values: &[f64]) -> f64 {
let total = values.iter().sum::<f64>();
total / values.len()
}
fn main() {
let values = [3.5, 0.3, 13.0, 11.7];
println!("{}", average(&values));
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn returns_proper_type_and_value() {
assert_eq!(average(&[3.5, 0.3, 13.0, 11.7]), 7.125);
}
}

10
exercises/enums/README.md Normal file
View File

@ -0,0 +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.
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)

17
exercises/enums/enums1.rs Normal file
View File

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

30
exercises/enums/enums2.rs Normal file
View File

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

73
exercises/enums/enums3.rs Normal file
View File

@ -0,0 +1,73 @@
// enums3.rs
//
// Address all the TODOs to make the tests pass!
//
// Execute `rustlings hint enums3` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
enum Message {
// TODO: implement the message variant types based on their usage below
}
struct Point {
x: u8,
y: u8,
}
struct State {
color: (u8, u8, u8),
position: Point,
quit: bool,
message: String,
}
impl State {
fn change_color(&mut self, color: (u8, u8, u8)) {
self.color = color;
}
fn quit(&mut self) {
self.quit = true;
}
fn echo(&mut self, s: String) {
self.message = s
}
fn move_position(&mut self, p: Point) {
self.position = p;
}
fn process(&mut self, message: Message) {
// TODO: create a match expression to process the different message variants
// Remember: When passing a tuple as a function argument, you'll need extra parentheses:
// fn function((t, u, p, l, e))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_match_message_call() {
let mut state = State {
quit: false,
position: Point { x: 0, y: 0 },
color: (0, 0, 0),
message: "hello world".to_string(),
};
state.process(Message::ChangeColor(255, 0, 255));
state.process(Message::Echo(String::from("Hello world!")));
state.process(Message::Move(Point { x: 10, y: 15 }));
state.process(Message::Quit);
assert_eq!(state.color, (255, 0, 255));
assert_eq!(state.position.x, 10);
assert_eq!(state.position.y, 15);
assert_eq!(state.quit, true);
assert_eq!(state.message, "Hello world!");
}
}

View File

@ -1,5 +1,12 @@
For this exercise check out the sections:
- [Error Handling](https://doc.rust-lang.org/book/2018-edition/ch09-02-recoverable-errors-with-result.html)
- [Generics](https://doc.rust-lang.org/book/2018-edition/ch10-01-syntax.html)
# Error handling
of the Rust Book.
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.
## Further information
- [Error Handling](https://doc.rust-lang.org/book/ch09-02-recoverable-errors-with-result.html)
- [Generics](https://doc.rust-lang.org/book/ch10-01-syntax.html)
- [Result](https://doc.rust-lang.org/rust-by-example/error/result.html)
- [Boxing errors](https://doc.rust-lang.org/rust-by-example/error/multiple_error_types/boxing_errors.html)

View File

@ -1,17 +1,22 @@
// errors1.rs
// This function refuses to generate text to be printed on a nametag if
// you pass it an empty string. It'd be nicer if it explained what the problem
// was, instead of just sometimes returning `None`. The 2nd test currently
// does not compile or pass, but it illustrates the behavior we would like
// this function to have.
// Scroll down for hints!!!
//
// This function refuses to generate text to be printed on a nametag if you pass
// it an empty string. It'd be nicer if it explained what the problem was,
// instead of just sometimes returning `None`. Thankfully, Rust has a similar
// construct to `Option` that can be used to express error conditions. Let's use
// it!
//
// Execute `rustlings hint errors1` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
pub fn generate_nametag_text(name: String) -> Option<String> {
if name.len() > 0 {
Some(format!("Hi! My name is {}", name))
} else {
if name.is_empty() {
// Empty names aren't allowed.
None
} else {
Some(format!("Hi! My name is {}", name))
}
}
@ -19,14 +24,11 @@ pub fn generate_nametag_text(name: String) -> Option<String> {
mod tests {
use super::*;
// This test passes initially if you comment out the 2nd test.
// You'll need to update what this test expects when you change
// the function under test!
#[test]
fn generates_nametag_text_for_a_nonempty_name() {
assert_eq!(
generate_nametag_text("Beyoncé".into()),
Some("Hi! My name is Beyoncé".into())
Ok("Hi! My name is Beyoncé".into())
);
}
@ -34,40 +36,8 @@ mod tests {
fn explains_why_generating_nametag_text_fails() {
assert_eq!(
generate_nametag_text("".into()),
// Don't change this line
Err("`name` was empty; it must be nonempty.".into())
);
}
}
// `Err` is one of the variants of `Result`, so what the 2nd test is saying
// is that `generate_nametag_text` should return a `Result` instead of an
// `Option`.
// To make this change, you'll need to:
// - update the return type in the function signature to be a Result that
// could be the variants `Ok(String)` and `Err(String)`
// - change the body of the function to return `Ok(stuff)` where it currently
// returns `Some(stuff)`
// - change the body of the function to return `Err(error message)` where it
// currently returns `None`
// - change the first test to expect `Ok(stuff)` where it currently expects
// `Some(stuff)`.

View File

@ -1,20 +1,25 @@
// 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!
// 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 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.
// handling the success case properly either). 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`, 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.
// There are at least two ways to implement this that are both correct-- but
// one is a lot shorter! Scroll down for hints to both ways.
// I AM NOT DONE
use std::num::ParseIntError;
@ -32,10 +37,7 @@ mod tests {
#[test]
fn item_quantity_is_a_valid_number() {
assert_eq!(
total_cost("34"),
Ok(171)
);
assert_eq!(total_cost("34"), Ok(171));
}
#[test]
@ -46,27 +48,3 @@ mod tests {
);
}
}
// One way to handle this is using a `match` statement on
// `item_quantity.parse::<i32>()` where the cases are `Ok(something)` and
// `Err(something)`. This pattern is very common in Rust, though, so there's
// a `?` operator that does pretty much what you would make that match statement
// do for you! Take a look at this section of the Error Handling chapter:
// https://doc.rust-lang.org/book/ch09-02-recoverable-errors-with-result.html#a-shortcut-for-propagating-errors-the--operator
// and give it a try!

View File

@ -1,8 +1,13 @@
// 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--
// we can't use the `?` operator in the `main()` function! Why not?
// What should we do instead? Scroll for hints!
// `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;
@ -27,36 +32,3 @@ pub fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
Ok(qty * cost_per_item + processing_fee)
}
// Since the `?` operator returns an `Err` early if the thing it's trying to
// do fails, you can only use the `?` operator in functions that have a
// `Result` as their return type.
// Hence the error that you get if you run this code is:
// ```
// error[E0277]: the `?` operator can only be used in a function that returns `Result` (or another type that implements `std::ops::Try`)
// ```
// So we have to use another way of handling a `Result` within `main`.
// Decide what we should do if `pretend_user_input` has a string value that does
// not parse to an integer, and implement that instead of using the `?`
// operator.

View File

@ -0,0 +1,32 @@
// errors4.rs
//
// Execute `rustlings hint errors4` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
#[derive(PartialEq, Debug)]
struct PositiveNonzeroInteger(u64);
#[derive(PartialEq, Debug)]
enum CreationError {
Negative,
Zero,
}
impl PositiveNonzeroInteger {
fn new(value: i64) -> Result<PositiveNonzeroInteger, CreationError> {
// Hmm... Why is this always returning an Ok value?
Ok(PositiveNonzeroInteger(value as u64))
}
}
#[test]
fn test_creation() {
assert!(PositiveNonzeroInteger::new(10).is_ok());
assert_eq!(
Err(CreationError::Negative),
PositiveNonzeroInteger::new(-10)
);
assert_eq!(Err(CreationError::Zero), PositiveNonzeroInteger::new(0));
}

View File

@ -0,0 +1,71 @@
// errors5.rs
//
// This program uses an altered version of the code from errors4.
//
// This exercise 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, which,
// given Rust's usual standards for runtime safety, should strike you as
// somewhat lenient!
//
// 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.
//
// What can we use to describe both errors? In other words, is there a trait
// which both errors implement?
//
// Execute `rustlings hint errors5` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
use std::error;
use std::fmt;
use std::num::ParseIntError;
// TODO: update the return type of `main()` to make this compile.
fn main() -> Result<(), Box<dyn ???>> {
let pretend_user_input = "42";
let x: i64 = pretend_user_input.parse()?;
println!("output={:?}", PositiveNonzeroInteger::new(x)?);
Ok(())
}
// Don't change anything below this line.
#[derive(PartialEq, Debug)]
struct PositiveNonzeroInteger(u64);
#[derive(PartialEq, Debug)]
enum CreationError {
Negative,
Zero,
}
impl PositiveNonzeroInteger {
fn new(value: i64) -> Result<PositiveNonzeroInteger, CreationError> {
match value {
x if x < 0 => Err(CreationError::Negative),
x if x == 0 => Err(CreationError::Zero),
x => Ok(PositiveNonzeroInteger(x as u64)),
}
}
}
// This is required so that `CreationError` can implement `error::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::Error for CreationError {}

View File

@ -0,0 +1,94 @@
// errors6.rs
//
// Using catch-all error types like `Box<dyn error::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.
//
// Execute `rustlings hint errors6` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
use std::num::ParseIntError;
// This is a custom error type that we will be using in `parse_pos_nonzero()`.
#[derive(PartialEq, Debug)]
enum ParsePosNonzeroError {
Creation(CreationError),
ParseInt(ParseIntError),
}
impl ParsePosNonzeroError {
fn from_creation(err: CreationError) -> ParsePosNonzeroError {
ParsePosNonzeroError::Creation(err)
}
// TODO: add another error conversion function here.
// fn from_parseint...
}
fn parse_pos_nonzero(s: &str) -> Result<PositiveNonzeroInteger, ParsePosNonzeroError> {
// TODO: change this to return an appropriate error instead of panicking
// when `parse()` returns an error.
let x: i64 = s.parse().unwrap();
PositiveNonzeroInteger::new(x).map_err(ParsePosNonzeroError::from_creation)
}
// Don't change anything below this line.
#[derive(PartialEq, Debug)]
struct PositiveNonzeroInteger(u64);
#[derive(PartialEq, Debug)]
enum CreationError {
Negative,
Zero,
}
impl PositiveNonzeroInteger {
fn new(value: i64) -> Result<PositiveNonzeroInteger, CreationError> {
match value {
x if x < 0 => Err(CreationError::Negative),
x if x == 0 => Err(CreationError::Zero),
x => Ok(PositiveNonzeroInteger(x as u64)),
}
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_parse_error() {
// We can't construct a ParseIntError, so we have to pattern match.
assert!(matches!(
parse_pos_nonzero("not a number"),
Err(ParsePosNonzeroError::ParseInt(_))
));
}
#[test]
fn test_negative() {
assert_eq!(
parse_pos_nonzero("-555"),
Err(ParsePosNonzeroError::Creation(CreationError::Negative))
);
}
#[test]
fn test_zero() {
assert_eq!(
parse_pos_nonzero("0"),
Err(ParsePosNonzeroError::Creation(CreationError::Zero))
);
}
#[test]
fn test_positive() {
let x = PositiveNonzeroInteger::new(42);
assert!(x.is_ok());
assert_eq!(parse_pos_nonzero("42"), Ok(x.unwrap()));
}
}

View File

@ -1,138 +0,0 @@
// errorsn.rs
// This is a bigger error exercise than the previous ones!
// You can do it! :)
//
// Edit the `read_and_validate` function so that it compiles and
// passes the tests... so many things could go wrong!
//
// - Reading from stdin could produce an io::Error
// - Parsing the input could produce a num::ParseIntError
// - Validating the input could produce a CreationError (defined below)
//
// How can we lump these errors into one general error? That is, what
// type goes where the question marks are, and how do we return
// that type from the body of read_and_validate?
//
// Scroll down for hints :)
use std::error;
use std::fmt;
use std::io;
// PositiveNonzeroInteger is a struct defined below the tests.
fn read_and_validate(b: &mut io::BufRead) -> Result<PositiveNonzeroInteger, ???> {
let mut line = String::new();
b.read_line(&mut line);
let num: i64 = line.trim().parse();
let answer = PositiveNonzeroInteger::new(num);
answer
}
// This is a test helper function that turns a &str into a BufReader.
fn test_with_str(s: &str) -> Result<PositiveNonzeroInteger, Box<error::Error>> {
let mut b = io::BufReader::new(s.as_bytes());
read_and_validate(&mut b)
}
#[test]
fn test_success() {
let x = test_with_str("42\n");
assert_eq!(PositiveNonzeroInteger(42), x.unwrap());
}
#[test]
fn test_not_num() {
let x = test_with_str("eleven billion\n");
assert!(x.is_err());
}
#[test]
fn test_non_positive() {
let x = test_with_str("-40\n");
assert!(x.is_err());
}
#[test]
fn test_ioerror() {
struct Broken;
impl io::Read for Broken {
fn read(&mut self, _buf: &mut [u8]) -> io::Result<usize> {
Err(io::Error::new(io::ErrorKind::BrokenPipe, "uh-oh!"))
}
}
let mut b = io::BufReader::new(Broken);
assert!(read_and_validate(&mut b).is_err());
assert_eq!("uh-oh!", read_and_validate(&mut b).unwrap_err().to_string());
}
#[derive(PartialEq,Debug)]
struct PositiveNonzeroInteger(u64);
impl PositiveNonzeroInteger {
fn new(value: i64) -> Result<PositiveNonzeroInteger, CreationError> {
if value == 0 {
Err(CreationError::Zero)
} else if value < 0 {
Err(CreationError::Negative)
} else {
Ok(PositiveNonzeroInteger(value as u64))
}
}
}
#[test]
fn test_positive_nonzero_integer_creation() {
assert!(PositiveNonzeroInteger::new(10).is_ok());
assert_eq!(Err(CreationError::Negative), PositiveNonzeroInteger::new(-10));
assert_eq!(Err(CreationError::Zero), PositiveNonzeroInteger::new(0));
}
#[derive(PartialEq,Debug)]
enum CreationError {
Negative,
Zero,
}
impl fmt::Display for CreationError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str((self as &error::Error).description())
}
}
impl error::Error for CreationError {
fn description(&self) -> &str {
match *self {
CreationError::Negative => "Negative",
CreationError::Zero => "Zero",
}
}
}
// First hint: To figure out what type should go where the ??? is, take a look
// at the test helper function `test_with_str`, since it returns whatever
// `read_and_validate` returns and`test_with_str` has its signature fully
// specified.
// Next hint: There are three places in `read_and_validate` that we call a
// function that returns a `Result` (that is, the functions might fail).
// Apply the `?` operator on those calls so that we return immediately from
// `read_and_validate` if those function calls fail.
// Another hint: under the hood, the `?` operator calls `From::from`
// on the error value to convert it to a boxed trait object, a Box<error::Error>,
// which is polymorphic-- that means that lots of different kinds of errors
// can be returned from the same function because all errors act the same
// since they all implement the `error::Error` trait.
// Check out this section of the book:
// https://doc.rust-lang.org/stable/book/second-edition/ch09-02-recoverable-errors-with-result.html#a-shortcut-for-propagating-errors-the--operator
// Another another hint: Note that because the `?` operator returns
// the *unwrapped* value in the `Ok` case, if we want to return a `Result` from
// `read_and_validate` for *its* success case, we'll have to rewrap a value
// that we got from the return value of a `?`ed call in an `Ok`-- this will
// look like `Ok(something)`.
// Another another another hint: `Result`s must be "used", that is, you'll
// get a warning if you don't handle a `Result` that you get in your
// function. Read more about that in the `std::result` module docs:
// https://doc.rust-lang.org/std/result/#results-must-be-used

View File

@ -1,45 +0,0 @@
// option1.rs
// This example panics because the second time it calls `pop`, the `vec`
// is empty, so `pop` returns `None`, and `unwrap` panics if it's called
// on `None`. Handle this in a more graceful way than calling `unwrap`!
// Scroll down for hints :)
fn main() {
let mut list = vec![3];
let last = list.pop().unwrap();
println!("The last item in the list is {:?}", last);
let second_to_last = list.pop().unwrap();
println!("The second-to-last item in the list is {:?}", second_to_last);
}
// Try using a `match` statement where the arms are `Some(thing)` and `None`.
// Or set a default value to print out if you get `None` by using the
// function `unwrap_or`.
// Or use an `if let` statement on the result of `pop()` to both destructure
// a `Some` value and only print out something if we have a value!

View File

@ -1,43 +0,0 @@
// result1.rs
// Make this test pass! Scroll down for hints :)
#[derive(PartialEq,Debug)]
struct PositiveNonzeroInteger(u64);
#[derive(PartialEq,Debug)]
enum CreationError {
Negative,
Zero,
}
impl PositiveNonzeroInteger {
fn new(value: i64) -> Result<PositiveNonzeroInteger, CreationError> {
Ok(PositiveNonzeroInteger(value as u64))
}
}
#[test]
fn test_creation() {
assert!(PositiveNonzeroInteger::new(10).is_ok());
assert_eq!(Err(CreationError::Negative), PositiveNonzeroInteger::new(-10));
assert_eq!(Err(CreationError::Zero), PositiveNonzeroInteger::new(0));
}
// `PositiveNonzeroInteger::new` is always creating a new instance and returning an `Ok` result.
// It should be doing some checking, returning an `Err` result if those checks fail, and only
// returning an `Ok` result if those checks determine that everything is... okay :)

View File

@ -1,7 +1,8 @@
### Functions
# Functions
Here, you'll learn how to write functions and how Rust's compiler can trace things way back.
Here, you'll learn how to write functions and how the Rust compiler can help you debug errors even
in more complex code.
#### Book Sections
## Further information
- [How Functions Work](https://doc.rust-lang.org/stable/book/ch03-03-how-functions-work.html)
- [How Functions Work](https://doc.rust-lang.org/book/ch03-03-how-functions-work.html)

View File

@ -1,44 +1,10 @@
// functions1.rs
// Make me compile! Scroll down for hints :)
//
// Execute `rustlings hint functions1` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
fn main() {
call_me();
}
// This main function is calling a function that it expects to exist, but the
// function doesn't exist. It expects this function to have the name `call_me`.
// It expects this function to not take any arguments and not return a value.
// Sounds a lot like `main`, doesn't it?

View File

@ -1,42 +1,16 @@
// functions2.rs
// Make me compile! Scroll down for hints :)
//
// Execute `rustlings hint functions2` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
fn main() {
call_me(3);
}
fn call_me(num) {
fn call_me(num:) {
for i in 0..num {
println!("Ring! Call number {}", i + 1);
}
}
// Rust requires that all parts of a function's signature have type annotations,
// but `call_me` is missing the type annotation of `num`.

View File

@ -1,42 +1,16 @@
// functions3.rs
// Make me compile! Scroll down for hints :)
//
// Execute `rustlings hint functions3` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
fn main() {
call_me();
}
fn call_me(num: i32) {
fn call_me(num: u32) {
for i in 0..num {
println!("Ring! Call number {}", i + 1);
}
}
// This time, the function *declaration* is okay, but there's something wrong
// with the place where we're calling the function.

View File

@ -1,8 +1,14 @@
// functions4.rs
// Make me compile! Scroll down for hints :)
//
// 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're only interested in the signatures
// for now. If anything, this is a good way to peek ahead to future exercises!)
//
// Execute `rustlings hint functions4` or use the `hint` watch subcommand for a
// hint.
// This store is having a sale where if the price is an even number, you get
// 10 (money unit) off, but if it's an odd number, it's 3 (money unit) less.
// I AM NOT DONE
fn main() {
let original_price = 51;
@ -20,25 +26,3 @@ fn sale_price(price: i32) -> {
fn is_even(num: i32) -> bool {
num % 2 == 0
}
// The error message points to line 12 and says it expects a type after the
// `->`. This is where the function's return type should be-- take a look at
// the `is_even` function for an example!

View File

@ -1,47 +1,15 @@
// functions5.rs
// Make me compile! Scroll down for hints :)
//
// Execute `rustlings hint functions5` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
fn main() {
let answer = square(3);
println!("The answer is {}", answer);
println!("The square of 3 is {}", answer);
}
fn square(num: i32) -> i32 {
num * num;
}
// This is a really common error that can be fixed by removing one character.
// It happens because Rust distinguishes between expressions and statements: expressions return
// a value based on its operand, and statements simply return a () type which behaves just like `void` in C/C++ language.
// We want to return a value of `i32` type from the `square` function, but it is returning a `()` type...
// They are not the same. There are two solutions:
// 1. Add a `return` ahead of `num * num;`
// 2. remove `;`, make it to be `num * num`

View File

@ -0,0 +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.
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)
- [Bounds](https://doc.rust-lang.org/rust-by-example/generics/bounds.html)

View File

@ -0,0 +1,14 @@
// generics1.rs
//
// This shopping list program isn't compiling! Use your knowledge of generics to
// fix it.
//
// Execute `rustlings hint generics1` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
fn main() {
let mut shopping_list: Vec<?> = Vec::new();
shopping_list.push("milk");
}

View File

@ -0,0 +1,34 @@
// generics2.rs
//
// 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
struct Wrapper {
value: u32,
}
impl Wrapper {
pub fn new(value: u32) -> Self {
Wrapper { value }
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn store_u32_in_wrapper() {
assert_eq!(Wrapper::new(42).value, 42);
}
#[test]
fn store_str_in_wrapper() {
assert_eq!(Wrapper::new("Foo").value, "Foo");
}
}

View File

@ -0,0 +1,12 @@
# 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),
[*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
talking about Vecs.
## Further information
- [Storing Keys with Associated Values in Hash Maps](https://doc.rust-lang.org/book/ch08-03-hash-maps.html)

View File

@ -0,0 +1,44 @@
// 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
use std::collections::HashMap;
fn fruit_basket() -> HashMap<String, u32> {
let mut basket = // TODO: declare your hash map here.
// Two bananas are already given for you :)
basket.insert(String::from("banana"), 2);
// TODO: Put more fruits in your basket here.
basket
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn at_least_three_types_of_fruits() {
let basket = fruit_basket();
assert!(basket.len() >= 3);
}
#[test]
fn at_least_five_fruits() {
let basket = fruit_basket();
assert!(basket.values().sum::<u32>() >= 5);
}
}

View File

@ -0,0 +1,93 @@
// hashmaps2.rs
//
// We're collecting different fruits to bake a delicious fruit cake. For this,
// we have a basket, which we'll represent in the form of a hash map. The key
// represents the name of each fruit we collect and the value represents how
// many of that particular fruit we have collected. Three types of fruits -
// Apple (4), Mango (2) and Lychee (5) are already in the basket hash map. You
// must add fruit to the basket so that there is at least one of each kind and
// more than 11 in total - we have a lot of mouths to feed. You are not allowed
// to insert any more of these fruits!
//
// Make me pass the tests!
//
// Execute `rustlings hint hashmaps2` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
use std::collections::HashMap;
#[derive(Hash, PartialEq, Eq)]
enum Fruit {
Apple,
Banana,
Mango,
Lychee,
Pineapple,
}
fn fruit_basket(basket: &mut HashMap<Fruit, u32>) {
let fruit_kinds = vec![
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!
}
}
#[cfg(test)]
mod tests {
use super::*;
// Don't modify this function!
fn get_fruit_basket() -> HashMap<Fruit, u32> {
let mut basket = HashMap::<Fruit, u32>::new();
basket.insert(Fruit::Apple, 4);
basket.insert(Fruit::Mango, 2);
basket.insert(Fruit::Lychee, 5);
basket
}
#[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 mut basket = get_fruit_basket();
fruit_basket(&mut basket);
for amount in basket.values() {
assert_ne!(amount, &0);
}
}
}

View File

@ -0,0 +1,86 @@
// hashmaps3.rs
//
// 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, goals the
// team scored, and goals the team conceded. One approach to build the scores
// table is to use a Hashmap. The solution is partially written to use a
// Hashmap, complete it to pass the test.
//
// Make me pass the tests!
//
// Execute `rustlings hint hashmaps3` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
use std::collections::HashMap;
// A structure to store the goal details of a team.
struct Team {
goals_scored: u8,
goals_conceded: u8,
}
fn build_scores_table(results: String) -> HashMap<String, Team> {
// The name of the team is the key and its associated struct is the value.
let mut scores: HashMap<String, Team> = HashMap::new();
for r in results.lines() {
let v: Vec<&str> = r.split(',').collect();
let team_1_name = v[0].to_string();
let team_1_score: u8 = v[2].parse().unwrap();
let team_2_name = v[1].to_string();
let team_2_score: u8 = v[3].parse().unwrap();
// TODO: Populate the scores table with details extracted from the
// current line. Keep in mind that goals scored by team_1
// will be the number of goals conceded from team_2, and similarly
// goals scored by team_2 will be the number of goals conceded by
// team_1.
}
scores
}
#[cfg(test)]
mod tests {
use super::*;
fn get_results() -> String {
let results = "".to_string()
+ "England,France,4,2\n"
+ "France,Italy,3,1\n"
+ "Poland,Spain,2,0\n"
+ "Germany,England,2,1\n";
results
}
#[test]
fn build_scores() {
let scores = build_scores_table(get_results());
let mut keys: Vec<&String> = scores.keys().collect();
keys.sort();
assert_eq!(
keys,
vec!["England", "France", "Germany", "Italy", "Poland", "Spain"]
);
}
#[test]
fn validate_team_score_1() {
let scores = build_scores_table(get_results());
let team = scores.get("England").unwrap();
assert_eq!(team.goals_scored, 5);
assert_eq!(team.goals_conceded, 4);
}
#[test]
fn validate_team_score_2() {
let scores = build_scores_table(get_results());
let team = scores.get("Spain").unwrap();
assert_eq!(team.goals_scored, 0);
assert_eq!(team.goals_conceded, 2);
}
}

View File

@ -1,7 +1,7 @@
### If
# If
`if`, the most basic type of control flow, is what you'll learn here.
`if`, the most basic (but still surprisingly versatile!) type of control flow, is what you'll learn here.
#### Book Sections
## Further information
- [Control Flow - if expressions](https://doc.rust-lang.org/stable/book/ch03-05-control-flow.html#if-expressions)
- [Control Flow - if expressions](https://doc.rust-lang.org/book/ch03-05-control-flow.html#if-expressions)

View File

@ -1,12 +1,14 @@
// if1.rs
//
// Execute `rustlings hint if1` or use the `hint` watch subcommand for a hint.
pub fn bigger(a: i32, b:i32) -> i32 {
// I AM NOT DONE
pub fn bigger(a: i32, b: i32) -> i32 {
// Complete this function to return the bigger number!
// Do not use:
// - return
// - another function call
// - additional variables
// Scroll down for hints.
}
// Don't mind this for now :)
@ -23,37 +25,9 @@ mod tests {
fn fortytwo_is_bigger_than_thirtytwo() {
assert_eq!(42, bigger(32, 42));
}
#[test]
fn equal_numbers() {
assert_eq!(42, bigger(42, 42));
}
}
// It's possible to do this in one line if you would like!
// Some similar examples from other languages:
// - In C(++) this would be: `a > b ? a : b`
// - In Python this would be: `a if a > b else b`
// Remember in Rust that:
// - the `if` condition does not need to be surrounded by parentheses
// - `if`/`else` conditionals are expressions
// - Each condition is followed by a `{}` block.

37
exercises/if/if2.rs Normal file
View File

@ -0,0 +1,37 @@
// if2.rs
//
// Step 1: Make me compile!
// Step 2: Get the bar_for_fuzz and default_to_baz tests passing!
//
// Execute `rustlings hint if2` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
pub fn foo_if_fizz(fizzish: &str) -> &str {
if fizzish == "fizz" {
"foo"
} else {
1
}
}
// No test changes needed!
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn foo_for_fizz() {
assert_eq!(foo_if_fizz("fizz"), "foo")
}
#[test]
fn bar_for_fuzz() {
assert_eq!(foo_if_fizz("fuzz"), "bar")
}
#[test]
fn default_to_baz() {
assert_eq!(foo_if_fizz("literally anything"), "baz")
}
}

56
exercises/if/if3.rs Normal file
View File

@ -0,0 +1,56 @@
// if3.rs
//
// Execute `rustlings hint if3` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
pub fn animal_habitat(animal: &str) -> &'static str {
let identifier = if animal == "crab" {
1
} else if animal == "gopher" {
2.0
} else if animal == "snake" {
3
} else {
"Unknown"
};
// DO NOT CHANGE THIS STATEMENT BELOW
let habitat = if identifier == 1 {
"Beach"
} else if identifier == 2 {
"Burrow"
} else if identifier == 3 {
"Desert"
} else {
"Unknown"
};
habitat
}
// No test changes needed.
#[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

@ -0,0 +1,8 @@
# Intro
Rust uses the `print!` and `println!` macros to print text to the console.
## Further information
- [Hello World](https://doc.rust-lang.org/rust-by-example/hello.html)
- [Formatted print](https://doc.rust-lang.org/rust-by-example/hello/print.html)

41
exercises/intro/intro1.rs Normal file
View File

@ -0,0 +1,41 @@
// intro1.rs
//
// About this `I AM NOT DONE` thing:
// 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, remove the `I AM NOT DONE` comment below.
//
// If you're running this using `rustlings watch`: The exercise file will be
// reloaded when you change one of the lines below! Try adding a `println!`
// line, or try changing what it outputs in your terminal. Try removing a
// semicolon and see what happens!
//
// Execute `rustlings hint intro1` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
fn main() {
println!("Hello and");
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 source for this exercise is in `exercises/intro/intro1.rs`. Have a look!");
println!(
"Going forward, the source of the exercises will always be in the success/failure output."
);
println!();
println!(
"If you want to use rust-analyzer, Rust's LSP implementation, make sure your editor is set"
);
println!("up, and then run `rustlings lsp` before continuing.")
}

12
exercises/intro/intro2.rs Normal file
View File

@ -0,0 +1,12 @@
// intro2.rs
//
// Make the code print a greeting to the world.
//
// Execute `rustlings hint intro2` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
fn main() {
println!("Hello {}!");
}

View File

@ -0,0 +1,8 @@
# Iterators
This section will teach you about Iterators.
## Further information
- [Iterator](https://doc.rust-lang.org/book/ch13-02-iterators.html)
- [Iterator documentation](https://doc.rust-lang.org/stable/std/iter/)

View File

@ -0,0 +1,26 @@
// iterators1.rs
//
// When performing operations on elements within a collection, iterators are
// essential. This module helps you get familiar with the structure of using an
// iterator and how to go through elements within an iterable collection.
//
// Make me compile by filling in the `???`s
//
// Execute `rustlings hint iterators1` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
#[test]
fn main() {
let my_fav_fruits = vec!["banana", "custard apple", "avocado", "peach", "raspberry"];
let mut my_iterable_fav_fruits = ???; // TODO: Step 1
assert_eq!(my_iterable_fav_fruits.next(), Some(&"banana"));
assert_eq!(my_iterable_fav_fruits.next(), ???); // TODO: Step 2
assert_eq!(my_iterable_fav_fruits.next(), Some(&"avocado"));
assert_eq!(my_iterable_fav_fruits.next(), ???); // TODO: Step 3
assert_eq!(my_iterable_fav_fruits.next(), Some(&"raspberry"));
assert_eq!(my_iterable_fav_fruits.next(), ???); // TODO: Step 4
}

View File

@ -0,0 +1,63 @@
// iterators2.rs
//
// In this exercise, you'll learn some of the unique advantages that iterators
// can offer. Follow the steps to complete the exercise.
//
// Execute `rustlings hint iterators2` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
// Step 1.
// Complete the `capitalize_first` function.
// "hello" -> "Hello"
pub fn capitalize_first(input: &str) -> String {
let mut c = input.chars();
match c.next() {
None => String::new(),
Some(first) => ???,
}
}
// Step 2.
// Apply the `capitalize_first` function to a slice of string slices.
// Return a vector of strings.
// ["hello", "world"] -> ["Hello", "World"]
pub fn capitalize_words_vector(words: &[&str]) -> Vec<String> {
vec![]
}
// Step 3.
// Apply the `capitalize_first` function again to a slice of string slices.
// Return a single string.
// ["hello", " ", "world"] -> "Hello World"
pub fn capitalize_words_string(words: &[&str]) -> String {
String::new()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_success() {
assert_eq!(capitalize_first("hello"), "Hello");
}
#[test]
fn test_empty() {
assert_eq!(capitalize_first(""), "");
}
#[test]
fn test_iterate_string_vec() {
let words = vec!["hello", "world"];
assert_eq!(capitalize_words_vector(&words), ["Hello", "World"]);
}
#[test]
fn test_iterate_into_string() {
let words = vec!["hello", " ", "world"];
assert_eq!(capitalize_words_string(&words), "Hello World");
}
}

View File

@ -0,0 +1,90 @@
// iterators3.rs
//
// This is a bigger exercise than most of the others! You can do it! Here is
// your mission, should you choose to accept it:
// 1. Complete the divide function to get the first four tests to pass.
// 2. Get the remaining tests to pass by completing the result_with_list and
// list_of_results functions.
//
// Execute `rustlings hint iterators3` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
#[derive(Debug, PartialEq, Eq)]
pub enum DivisionError {
NotDivisible(NotDivisibleError),
DivideByZero,
}
#[derive(Debug, PartialEq, Eq)]
pub struct NotDivisibleError {
dividend: i32,
divisor: i32,
}
// Calculate `a` divided by `b` if `a` is evenly divisible by `b`.
// Otherwise, return a suitable error.
pub fn divide(a: i32, b: i32) -> Result<i32, DivisionError> {
todo!();
}
// Complete the function and return a value of the correct type so the test
// passes.
// Desired output: Ok([1, 11, 1426, 3])
fn result_with_list() -> () {
let numbers = vec![27, 297, 38502, 81];
let division_results = numbers.into_iter().map(|n| divide(n, 27));
}
// Complete the function and return a value of the correct type so the test
// passes.
// Desired output: [Ok(1), Ok(11), Ok(1426), Ok(3)]
fn list_of_results() -> () {
let numbers = vec![27, 297, 38502, 81];
let division_results = numbers.into_iter().map(|n| divide(n, 27));
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_success() {
assert_eq!(divide(81, 9), Ok(9));
}
#[test]
fn test_not_divisible() {
assert_eq!(
divide(81, 6),
Err(DivisionError::NotDivisible(NotDivisibleError {
dividend: 81,
divisor: 6
}))
);
}
#[test]
fn test_divide_by_0() {
assert_eq!(divide(81, 0), Err(DivisionError::DivideByZero));
}
#[test]
fn test_divide_0_by_something() {
assert_eq!(divide(0, 81), Ok(0));
}
#[test]
fn test_result_with_list() {
assert_eq!(format!("{:?}", result_with_list()), "Ok([1, 11, 1426, 3])");
}
#[test]
fn test_list_of_results() {
assert_eq!(
format!("{:?}", list_of_results()),
"[Ok(1), Ok(11), Ok(1426), Ok(3)]"
);
}
}

View File

@ -1,21 +1,31 @@
// iterators4.rs
//
// Execute `rustlings hint iterators4` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
pub fn factorial(num: u64) -> u64 {
// Complete this function to return factorial of num
// Complete this function to return the factorial of num
// Do not use:
// - return
// For extra fun don't use:
// Try not to use:
// - imperative style loops (for, while)
// - additional variables
// For the most fun don't use:
// For an extra challenge, don't use:
// - recursion
// Scroll down for hints.
// Execute `rustlings hint iterators4` for hints.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn factorial_of_0() {
assert_eq!(1, factorial(0));
}
#[test]
fn factorial_of_1() {
assert_eq!(1, factorial(1));
@ -30,32 +40,3 @@ mod tests {
assert_eq!(24, factorial(4));
}
}
// In an imperative language you might write a for loop to iterate through
// multiply the values into a mutable variable. Or you might write code more
// functionally with recursion and a match clause. But you can also use ranges
// and iterators to solve this in rust.

View File

@ -0,0 +1,156 @@
// iterators5.rs
//
// Let's define a simple model to track Rustlings exercise progress. Progress
// will be modelled using a hash map. The name of the exercise is the key and
// the progress is the value. Two counting functions were created to count the
// number of exercises with a given progress. Recreate this counting
// functionality using iterators. Try not to use imperative loops (for, while).
// Only the two iterator methods (count_iterator and count_collection_iterator)
// need to be modified.
//
// Execute `rustlings hint iterators5` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
use std::collections::HashMap;
#[derive(Clone, Copy, PartialEq, Eq)]
enum Progress {
None,
Some,
Complete,
}
fn count_for(map: &HashMap<String, Progress>, value: Progress) -> usize {
let mut count = 0;
for val in map.values() {
if val == &value {
count += 1;
}
}
count
}
fn count_iterator(map: &HashMap<String, Progress>, value: Progress) -> usize {
// map is a hashmap with String keys and Progress values.
// map = { "variables1": Complete, "from_str": None, ... }
todo!();
}
fn count_collection_for(collection: &[HashMap<String, Progress>], value: Progress) -> usize {
let mut count = 0;
for map in collection {
for val in map.values() {
if val == &value {
count += 1;
}
}
}
count
}
fn count_collection_iterator(collection: &[HashMap<String, Progress>], value: Progress) -> usize {
// collection is a slice of hashmaps.
// collection = [{ "variables1": Complete, "from_str": None, ... },
// { "variables2": Complete, ... }, ... ]
todo!();
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn count_complete() {
let map = get_map();
assert_eq!(3, count_iterator(&map, Progress::Complete));
}
#[test]
fn count_some() {
let map = get_map();
assert_eq!(1, count_iterator(&map, Progress::Some));
}
#[test]
fn count_none() {
let map = get_map();
assert_eq!(2, count_iterator(&map, Progress::None));
}
#[test]
fn count_complete_equals_for() {
let map = get_map();
let progress_states = vec![Progress::Complete, Progress::Some, Progress::None];
for progress_state in progress_states {
assert_eq!(
count_for(&map, progress_state),
count_iterator(&map, progress_state)
);
}
}
#[test]
fn count_collection_complete() {
let collection = get_vec_map();
assert_eq!(
6,
count_collection_iterator(&collection, Progress::Complete)
);
}
#[test]
fn count_collection_some() {
let collection = get_vec_map();
assert_eq!(1, count_collection_iterator(&collection, Progress::Some));
}
#[test]
fn count_collection_none() {
let collection = get_vec_map();
assert_eq!(4, count_collection_iterator(&collection, Progress::None));
}
#[test]
fn count_collection_equals_for() {
let progress_states = vec![Progress::Complete, Progress::Some, Progress::None];
let collection = get_vec_map();
for progress_state in progress_states {
assert_eq!(
count_collection_for(&collection, progress_state),
count_collection_iterator(&collection, progress_state)
);
}
}
fn get_map() -> HashMap<String, Progress> {
use Progress::*;
let mut map = HashMap::new();
map.insert(String::from("variables1"), Complete);
map.insert(String::from("functions1"), Complete);
map.insert(String::from("hashmap1"), Complete);
map.insert(String::from("arc1"), Some);
map.insert(String::from("as_ref_mut"), None);
map.insert(String::from("from_str"), None);
map
}
fn get_vec_map() -> Vec<HashMap<String, Progress>> {
use Progress::*;
let map = get_map();
let mut other = HashMap::new();
other.insert(String::from("variables2"), Complete);
other.insert(String::from("functions2"), Complete);
other.insert(String::from("if1"), Complete);
other.insert(String::from("from_into"), None);
other.insert(String::from("try_from_into"), None);
vec![map, other]
}
}

View File

@ -0,0 +1,22 @@
# Lifetimes
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".
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
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
- [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,27 @@
// lifetimes1.rs
//
// 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?
//
// Execute `rustlings hint lifetimes1` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
fn longest(x: &str, y: &str) -> &str {
if x.len() > y.len() {
x
} else {
y
}
}
fn main() {
let string1 = String::from("abcd");
let string2 = "xyz";
let result = longest(string1.as_str(), string2);
println!("The longest string is '{}'", result);
}

View File

@ -0,0 +1,27 @@
// lifetimes2.rs
//
// So if the compiler is just validating the references passed to the annotated
// parameters and the return type, what do we need to change?
//
// Execute `rustlings hint lifetimes2` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
fn main() {
let string1 = String::from("long string is long");
let result;
{
let string2 = String::from("xyz");
result = longest(string1.as_str(), string2.as_str());
}
println!("The longest string is '{}'", result);
}

View File

@ -0,0 +1,21 @@
// lifetimes3.rs
//
// Lifetimes are also needed when structs hold references.
//
// Execute `rustlings hint lifetimes3` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
struct Book {
author: &str,
title: &str,
}
fn main() {
let name = String::from("Jill Smith");
let title = String::from("Fish Flying");
let book = Book { author: &name, title: &title };
println!("{} by {}", book.title, book.author);
}

View File

@ -1,10 +1,14 @@
### Macros
# Macros
Rust's macro system is very powerful, but also kind of difficult to wrap your
head around. We're not going to teach you how to write your own fully-featured
modules, instead we'll show you how to use and create them.
macros. Instead, we'll show you how to use and create them.
#### Book Sections
If you'd like to learn more about writing your own macros, the
[macrokata](https://github.com/tfpk/macrokata) project has a similar style
of exercises to Rustlings, but is all about learning to write Macros.
- [Macros](https://doc.rust-lang.org/stable/book/ch19-06-macros.html)
- [The Little Book of Rust Macros](https://danielkeep.github.io/tlborm/book/index.html)
## Further information
- [Macros](https://doc.rust-lang.org/book/ch19-06-macros.html)
- [The Little Book of Rust Macros](https://veykril.github.io/tlborm/)

View File

@ -1,5 +1,9 @@
// macros1.rs
// Make me compile! Scroll down for hints :)
//
// Execute `rustlings hint macros1` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
macro_rules! my_macro {
() => {
@ -10,55 +14,3 @@ macro_rules! my_macro {
fn main() {
my_macro();
}
// When you call a macro, you need to add something special compared to a
// regular function call. If you're stuck, take a look at what's inside
// `my_macro`.

View File

@ -1,5 +1,9 @@
// macros2.rs
// Make me compile! Scroll down for hints :)
//
// Execute `rustlings hint macros2` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
fn main() {
my_macro!();
@ -10,64 +14,3 @@ macro_rules! my_macro {
println!("Check out my macro!");
};
}
// Macros don't quite play by the same rules as the rest of Rust, in terms of
// what's available where.
// Unlike other things in Rust, the order of "where you define a macro" versus
// "where you use it" actually matters.

View File

@ -1,5 +1,11 @@
// macros3.rs
// Make me compile, without taking the macro out of the module! Scroll down for hints :)
//
// Make me compile, without taking the macro out of the module!
//
// Execute `rustlings hint macros3` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
mod macros {
macro_rules! my_macro {
@ -12,64 +18,3 @@ mod macros {
fn main() {
my_macro!();
}
// In order to use a macro outside of its module, you need to do something
// special to the module to lift the macro out into its parent.
// The same trick also works on "extern crate" statements for crates that have
// exported macros, if you've seen any of those around.

View File

@ -1,6 +1,11 @@
// macros4.rs
// Make me compile! Scroll down for hints :)
//
// Execute `rustlings hint macros4` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
#[rustfmt::skip]
macro_rules! my_macro {
() => {
println!("Check out my macro!");
@ -14,64 +19,3 @@ fn main() {
my_macro!();
my_macro!(7777);
}
// You only need to add a single character to make this compile.
// The way macros are written, it wants to see something between each
// "macro arm", so it can separate them.

View File

@ -1,7 +1,7 @@
### Modules
# Modules
In this section we'll give you an introduction to Rust's module system.
#### Book Sections
## Further information
- [The Module System](https://doc.rust-lang.org/stable/book/ch07-02-modules-and-use-to-control-scope-and-privacy.html)
- [The Module System](https://doc.rust-lang.org/book/ch07-00-managing-growing-projects-with-packages-crates-and-modules.html)

View File

@ -1,8 +1,18 @@
// modules1.rs
// Make me compile! Scroll down for hints :)
//
// Execute `rustlings hint modules1` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
mod sausage_factory {
// Don't let anybody outside of this module see this!
fn get_secret_recipe() -> String {
String::from("Ginger")
}
fn make_sausage() {
get_secret_recipe();
println!("sausage!");
}
}
@ -10,34 +20,3 @@ mod sausage_factory {
fn main() {
sausage_factory::make_sausage();
}
// Everything is private in Rust by default-- but there's a keyword we can use
// to make something public! The compiler error should point to the thing that
// needs to be public.

View File

@ -1,9 +1,18 @@
// modules2.rs
// Make me compile! Scroll down for hints :)
//
// You can bring module paths into scopes and provide new names for them with
// the 'use' and 'as' keywords. Fix these 'use' statements to make the code
// compile.
//
// Execute `rustlings hint modules2` or use the `hint` watch subcommand for a
// hint.
mod delicious_snacks {
use self::fruits::PEAR as fruit;
use self::veggies::CUCUMBER as veggie;
// I AM NOT DONE
mod delicious_snacks {
// TODO: Fix these use statements
use self::fruits::PEAR as ???
use self::veggies::CUCUMBER as ???
mod fruits {
pub const PEAR: &'static str = "Pear";
@ -17,29 +26,9 @@ mod delicious_snacks {
}
fn main() {
println!("favorite snacks: {} and {}",
delicious_snacks::fruit,
delicious_snacks::veggie);
println!(
"favorite snacks: {} and {}",
delicious_snacks::fruit,
delicious_snacks::veggie
);
}
// The delicious_snacks module is trying to present an external
// interface (the `fruit` and `veggie` constants) that is different than
// its internal structure (the `fruits` and `veggies` modules and
// associated constants). It's almost there except for one keyword missing for
// each constant.

View File

@ -0,0 +1,21 @@
// modules3.rs
//
// You can use the 'use' keyword to bring module paths from modules from
// anywhere and especially from the Rust standard library into your scope. Bring
// SystemTime and UNIX_EPOCH from the std::time module. Bonus style points if
// you can do it with one line!
//
// Execute `rustlings hint modules3` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
// TODO: Complete this use statement
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,10 +1,10 @@
### Move Semantics
# Move Semantics
These exercises are adapted from [pnkfelix](https://github.com/pnkfelix)'s [Rust Tutorial](https://pnkfelix.github.io/rust-examples-icfp2014/) -- Thank you Felix!!!
#### Book Sections
## Further information
For this section, the book links are especially important.
- [Ownership](https://doc.rust-lang.org/stable/book/ch04-01-what-is-ownership.html)
- [Reference and borrowing](https://doc.rust-lang.org/stable/book/ch04-02-references-and-borrowing.html)
- [Ownership](https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html)
- [Reference and borrowing](https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html)

View File

@ -1,43 +1,23 @@
// move_semantics1.rs
// Make me compile! Scroll down for hints :)
//
// Execute `rustlings hint move_semantics1` or use the `hint` watch subcommand
// for a hint.
// I AM NOT DONE
#[test]
fn main() {
let vec0 = Vec::new();
let vec0 = vec![22, 44, 66];
let vec1 = fill_vec(vec0);
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
vec1.push(88);
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
assert_eq!(vec1, vec![22, 44, 66, 88]);
}
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
let mut vec = vec;
let vec = vec;
vec.push(22);
vec.push(44);
vec.push(66);
vec.push(88);
vec
}
// So you've got the "cannot borrow immutable local variable `vec1` as mutable" error on line 11,
// right? The fix for this is going to be adding one keyword, and the addition is NOT on line 11
// where the error is.

View File

@ -1,54 +1,26 @@
// move_semantics2.rs
// Make me compile without changing line 10! Scroll down for hints :)
//
// Make the test pass by finding a way to keep both Vecs separate!
//
// Execute `rustlings hint move_semantics2` or use the `hint` watch subcommand
// for a hint.
// I AM NOT DONE
#[test]
fn main() {
let vec0 = Vec::new();
let vec0 = vec![22, 44, 66];
let mut vec1 = fill_vec(vec0);
// Do not change the following line!
println!("{} has length {} content `{:?}`", "vec0", vec0.len(), vec0);
vec1.push(88);
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
assert_eq!(vec0, vec![22, 44, 66]);
assert_eq!(vec1, vec![22, 44, 66, 88]);
}
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
let mut vec = vec;
vec.push(22);
vec.push(44);
vec.push(66);
vec.push(88);
vec
}
// So `vec0` is being *moved* into the function `fill_vec` when we call it on
// line 7, which means it gets dropped at the end of `fill_vec`, which means we
// can't use `vec0` again on line 10 (or anywhere else in `main` after the
// `fill_vec` call for that matter). We could fix this in a few ways, try them
// all!
// 1. Make another, separate version of the data that's in `vec0` and pass that
// to `fill_vec` instead.
// 2. Make `fill_vec` borrow its argument instead of taking ownership of it,
// and then copy the data within the function in order to return an owned
// `Vec<i32>`
// 3. Make `fill_vec` *mutably* borrow its argument (which will need to be
// mutable), modify it directly, then not return anything. Then you can get rid
// of `vec1` entirely -- note that this will change what gets printed by the
// first `println!`

View File

@ -1,46 +1,24 @@
// move_semantics3.rs
// Make me compile without adding new lines-- just changing existing lines!
// (no lines with multiple semicolons necessary!)
// Scroll down for hints :)
//
// Make me compile without adding new lines -- just changing existing lines! (no
// lines with multiple semicolons necessary!)
//
// Execute `rustlings hint move_semantics3` or use the `hint` watch subcommand
// for a hint.
// I AM NOT DONE
#[test]
fn main() {
let vec0 = Vec::new();
let vec0 = vec![22, 44, 66];
let mut vec1 = fill_vec(vec0);
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
vec1.push(88);
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
assert_eq!(vec1, vec![22, 44, 66, 88]);
}
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
vec.push(22);
vec.push(44);
vec.push(66);
vec.push(88);
vec
}
// The difference between this one and the previous ones is that the first line
// of `fn fill_vec` that had `let mut vec = vec;` is no longer there. You can,
// instead of adding that line back, add `mut` in one place that will change
// an existing binding to be a mutable binding instead of an immutable one :)

View File

@ -1,48 +1,29 @@
// move_semantics4.rs
// Refactor this code so that instead of having `vec0` and creating the vector
// in `fn main`, we instead create it within `fn fill_vec` and transfer the
// freshly created vector from fill_vec to its caller. Scroll for hints!
//
// Refactor this code so that instead of passing `vec0` into the `fill_vec`
// function, the Vector gets created in the function itself and passed back to
// the main function.
//
// Execute `rustlings hint move_semantics4` or use the `hint` watch subcommand
// for a hint.
// I AM NOT DONE
#[test]
fn main() {
let vec0 = Vec::new();
let vec0 = vec![22, 44, 66];
let mut vec1 = fill_vec(vec0);
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
vec1.push(88);
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
assert_eq!(vec1, vec![22, 44, 66, 88]);
}
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
// `fill_vec()` no longer takes `vec: Vec<i32>` as argument - don't change this!
fn fill_vec() -> Vec<i32> {
// Instead, let's create and fill the Vec in here - how do you do that?
let mut vec = vec;
vec.push(22);
vec.push(44);
vec.push(66);
vec.push(88);
vec
}
// Stop reading whenever you feel like you have enough direction :) Or try
// doing one step and then fixing the compiler errors that result!
// So the end goal is to:
// - get rid of the first line in main that creates the new vector
// - so then `vec0` doesn't exist, so we can't pass it to `fill_vec`
// - we don't want to pass anything to `fill_vec`, so its signature should
// reflect that it does not take any arguments
// - since we're not creating a new vec in `main` anymore, we need to create
// a new vec in `fill_vec`, similarly to the way we did in `main`

View File

@ -0,0 +1,19 @@
// move_semantics5.rs
//
// Make me compile only by reordering the lines in `main()`, but without adding,
// changing or removing any of them.
//
// Execute `rustlings hint move_semantics5` or use the `hint` watch subcommand
// for a hint.
// I AM NOT DONE
#[test]
fn main() {
let mut x = 100;
let y = &mut x;
let z = &mut x;
*y += 100;
*z += 1000;
assert_eq!(x, 1200);
}

View File

@ -0,0 +1,28 @@
// move_semantics6.rs
//
// You can't change anything except adding or removing references.
//
// Execute `rustlings hint move_semantics6` or use the `hint` watch subcommand
// for a hint.
// I AM NOT DONE
fn main() {
let data = "Rust is great!".to_string();
get_char(data);
string_uppercase(&data);
}
// Should not 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);
}

View File

@ -0,0 +1,21 @@
# Options
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
- Optional struct fields
- Struct fields that can be loaned or "taken"
- Optional function arguments
- Nullable pointers
- Swapping things out of difficult situations
## Further Information
- [Option Enum Format](https://doc.rust-lang.org/stable/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)
- [while let](https://doc.rust-lang.org/rust-by-example/flow_control/while_let.html)

View File

@ -0,0 +1,39 @@
// options1.rs
//
// Execute `rustlings hint options1` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
// This function returns how much icecream there is left in the fridge.
// If it's before 10PM, there's 5 pieces left. At 10PM, someone eats them
// all, so there'll be no more left :(
fn maybe_icecream(time_of_day: u16) -> Option<u16> {
// We use the 24-hour system here, so 10PM is a value of 22 and 12AM is a
// value of 0 The Option output should gracefully handle cases where
// time_of_day > 23.
// TODO: Complete the function body - remember to return an Option!
???
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn check_icecream() {
assert_eq!(maybe_icecream(9), Some(5));
assert_eq!(maybe_icecream(10), Some(5));
assert_eq!(maybe_icecream(23), Some(0));
assert_eq!(maybe_icecream(22), Some(0));
assert_eq!(maybe_icecream(25), None);
}
#[test]
fn raw_value() {
// TODO: Fix this test. How do you get at the value contained in the
// Option?
let icecreams = maybe_icecream(12);
assert_eq!(icecreams, 5);
}
}

View File

@ -0,0 +1,42 @@
// options2.rs
//
// Execute `rustlings hint options2` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
#[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" type
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 + 1) {
optional_integers.push(Some(i));
}
let mut cursor = range;
// TODO: make this a while let statement - remember that vector.pop also
// adds another layer of Option<T>. You can stack `Option<T>`s into
// while let and if let.
integer = optional_integers.pop() {
assert_eq!(integer, cursor);
cursor -= 1;
}
assert_eq!(cursor, 0);
}
}

View File

@ -0,0 +1,21 @@
// options3.rs
//
// Execute `rustlings hint options3` or use the `hint` watch subcommand for a
// hint.
// I AM NOT DONE
struct Point {
x: i32,
y: i32,
}
fn main() {
let y: Option<Point> = Some(Point { x: 100, y: 200 });
match y {
Some(p) => println!("Co-ordinates are {},{} ", p.x, p.y),
_ => panic!("no match!"),
}
y; // Fix without deleting this line.
}

View File

@ -1,8 +1,9 @@
### Primitive Types
# Primitive Types
Rust has a couple of basic types that are directly implemented into the
compiler. In this section, we'll go through the most important ones.
#### Book Sections
## 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)

View File

@ -1,6 +1,9 @@
// primitive_types1.rs
// Fill in the rest of the line that has code missing!
// No hints, there's no tricks, just get used to typing these :)
//
// 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
fn main() {
// Booleans (`bool`)

View File

@ -1,10 +1,15 @@
// 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 :)
//
// 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
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';
if my_first_initial.is_alphabetic() {
println!("Alphabetical!");

View File

@ -1,6 +1,11 @@
// primitive_types3.rs
// Create an array with at least 100 elements in it where the ??? is.
// Scroll down for hints!
//
// Create an array with at least 100 elements in it where the ??? is.
//
// Execute `rustlings hint primitive_types3` or use the `hint` watch subcommand
// for a hint.
// I AM NOT DONE
fn main() {
let a = ???
@ -9,39 +14,6 @@ fn main() {
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")
}
}
// There's a shorthand to initialize Arrays with a certain size that does not
// require you to type in 100 items (but you certainly can if you want!).
// For example, you can do:
// let array = ["Are we there yet?"; 10];
// Bonus: what are some other things you could have that would return true
// for `a.len() >= 100`?

View File

@ -1,49 +1,17 @@
// primitive_types4.rs
// Get a slice out of Array a where the ??? is so that the `if` statement
// returns true. Scroll down for hints!!
//
// Get a slice out of Array a where the ??? is so that the test passes.
//
// Execute `rustlings hint primitive_types4` or use the `hint` watch subcommand
// for a hint.
fn main() {
// I AM NOT DONE
#[test]
fn slice_out_of_array() {
let a = [1, 2, 3, 4, 5];
let nice_slice = ???
if nice_slice == [2, 3, 4] {
println!("Nice slice!");
} else {
println!("Not quite what I was expecting... I see: {:?}", nice_slice);
}
assert_eq!([2, 3, 4], nice_slice)
}
// Take a look at the Understanding Ownership -> Slices -> Other Slices section of the book:
// https://doc.rust-lang.org/book/ch04-03-slices.html
// and use the starting and ending indices of the items in the Array
// that you want to end up in the slice.
// If you're curious why the right hand of the `==` comparison does not
// have an ampersand for a reference since the left hand side is a
// reference, take a look at the Deref coercions section of the book:
// https://doc.rust-lang.org/book/ch15-02-deref.html

View File

@ -1,6 +1,11 @@
// primitive_types5.rs
//
// Destructure the `cat` tuple so that the println will work.
// Scroll down for hints!
//
// Execute `rustlings hint primitive_types5` or use the `hint` watch subcommand
// for a hint.
// I AM NOT DONE
fn main() {
let cat = ("Furry McFurson", 3.5);
@ -8,38 +13,3 @@ fn main() {
println!("{} is {} years old.", name, age);
}
// Take a look at the Data Types -> The Tuple Type section of the book:
// https://doc.rust-lang.org/stable/book/ch03-02-data-types.html#the-tuple-type
// Particularly the part about destructuring (second to last example in the section).
// You'll need to make a pattern to bind `name` and `age` to the appropriate parts
// of the tuple. You can do it!!

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