commit ea71ae1c72d82cddd715584c6381579ae6c0f553 Author: mo8it <76752051+mo8it@users.noreply.github.com> Date: Thu Oct 17 13:00:03 2024 +0000 Deploying to gh-pages from @ rust-lang/rustlings@e90f5f03f3da639bf3157aec12ebf0cec62ac7ae 🚀 diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..5042fd55 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +rustlings.cool \ No newline at end of file diff --git a/artifacts.js b/artifacts.js new file mode 100644 index 00000000..2dbfc707 --- /dev/null +++ b/artifacts.js @@ -0,0 +1,245 @@ +/* Code modified from the blender website + * https://www.blender.org/wp-content/themes/bthree/assets/js/get_os.js?x82196 + */ + +let options = { + windows64: "x86_64-pc-windows", + windows32: "i686-pc-windows", + windowsArm: "aarch64-pc-windows", + + mac64: "x86_64-apple", + mac32: "i686-apple", + macSilicon: "aarch64-apple", + + linux64: "x86_64-unknown-linux", + linux32: "i686-unknown-linux", + linuxArm: "aarch64-unknown-linux", + + // ios: "ios", + // android: "linux-android", + // freebsd: "freebsd", +}; + +function isAppleSilicon() { + try { + var glcontext = document.createElement("canvas").getContext("webgl"); + var debugrenderer = glcontext + ? glcontext.getExtension("WEBGL_debug_renderer_info") + : null; + var renderername = + (debugrenderer && + glcontext.getParameter(debugrenderer.UNMASKED_RENDERER_WEBGL)) || + ""; + if (renderername.match(/Apple M/) || renderername.match(/Apple GPU/)) { + return true; + } + + return false; + } catch (e) {} +} + +function getOS() { + var OS = options.windows64.default; + var userAgent = navigator.userAgent; + var platform = navigator.platform; + + if (navigator.appVersion.includes("Win")) { + if ( + !userAgent.includes("Windows NT 5.0") && + !userAgent.includes("Windows NT 5.1") && + (userAgent.indexOf("Win64") > -1 || + platform == "Win64" || + userAgent.indexOf("x86_64") > -1 || + userAgent.indexOf("x86_64") > -1 || + userAgent.indexOf("amd64") > -1 || + userAgent.indexOf("AMD64") > -1 || + userAgent.indexOf("WOW64") > -1) + ) { + OS = options.windows64; + } else { + if ( + window.external && + window.external.getHostEnvironmentValue && + window.external + .getHostEnvironmentValue("os-architecture") + .includes("ARM64") + ) { + OS = options.windowsArm; + } else { + try { + var canvas = document.createElement("canvas"); + var gl = canvas.getContext("webgl"); + + var debugInfo = gl.getExtension("WEBGL_debug_renderer_info"); + var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL); + if (renderer.includes("Qualcomm")) OS = options.windowsArm; + } catch (e) {} + } + } + } + + //MacOS, MacOS X, macOS + if (navigator.appVersion.includes("Mac")) { + if ( + navigator.userAgent.includes("OS X 10.5") || + navigator.userAgent.includes("OS X 10.6") + ) { + OS = options.mac32; + } else { + OS = options.mac64; + + const isSilicon = isAppleSilicon(); + if (isSilicon) { + OS = options.macSilicon; + } + } + } + + // linux + if (platform.includes("Linux")) { + OS = options.linux64; + // FIXME: Can we find out whether linux 32-bit or ARM are used? + } + + // if ( + // userAgent.includes("iPad") || + // userAgent.includes("iPhone") || + // userAgent.includes("iPod") + // ) { + // OS = options.ios; + // } + // if (platform.toLocaleLowerCase().includes("freebsd")) { + // OS = options.freebsd; + // } + + return OS; +} + +let os = getOS(); +window.os = os; + +// Unhide and hydrate selector with events +const archSelect = document.querySelector(".arch-select"); +if (archSelect) { + archSelect.classList.remove("hidden"); + const selector = document.querySelector("#install-arch-select"); + if (selector) { + selector.addEventListener("change", onArchChange); + } +} + +// Hydrate tab buttons with events +Array.from(document.querySelectorAll(".install-tab[data-id]")).forEach((tab) => { + tab.addEventListener("click", onTabClick); +}); + +function onArchChange(evt) { + // Get target + const target = evt.currentTarget.value; + // Find corresponding installer lists + const newContentEl = document.querySelector(`.arch[data-arch=${target}]`); + const oldContentEl = document.querySelector(`.arch[data-arch]:not(.hidden)`); + // Hide old content element (if applicable) + if (oldContentEl) { + oldContentEl.classList.add("hidden"); + } + // Show new content element + newContentEl.classList.remove("hidden"); + // Show the first tab's content if nothing was selected before + if (newContentEl.querySelectorAll(".install-tab.selected").length === 0) { + const firstContentChild = newContentEl.querySelector(".install-content:first-of-type"); + const firstTabChild = newContentEl.querySelector(".install-tab:first-of-type"); + firstContentChild.classList.remove("hidden"); + if (firstTabChild) { + firstTabChild.classList.add("selected"); + } + } + // Hide "no OS detected" message + const noDetectEl = document.querySelector(".no-autodetect"); + noDetectEl.classList.add("hidden"); + // Hide Mac hint + document.querySelector(".mac-switch").classList.add("hidden"); +} + +function onTabClick(evt) { + // Get target and ID + const {triple, id} = evt.currentTarget.dataset; + if (triple) { + // Find corresponding content elements + const newContentEl = document.querySelector(`.install-content[data-id="${String(id)}"][data-triple=${triple}]`); + const oldContentEl = document.querySelector(`.install-content[data-triple=${triple}][data-id]:not(.hidden)`); + // Find old tab to unselect + const oldTabEl = document.querySelector(`.install-tab[data-triple=${triple}].selected`); + // Hide old content element + if (oldContentEl && oldTabEl) { + oldContentEl.classList.add("hidden"); + oldTabEl.classList.remove("selected"); + } + + // Unhide new content element + newContentEl.classList.remove("hidden"); + // Select new tab element + evt.currentTarget.classList.add("selected"); + } +} + +const allPlatforms = Array.from(document.querySelectorAll(`.arch[data-arch]`)); +let hit = allPlatforms.find( + (a) => { + // Show Intel Mac downloads if no M1 Mac downloads are available + if ( + a.attributes["data-arch"].value.includes(options.mac64) && + os.includes(options.macSilicon) && + !allPlatforms.find(p => p.attributes["data-arch"].value.includes(options.macSilicon))) { + // Unhide hint + document.querySelector(".mac-switch").classList.remove("hidden"); + return true; + } + return a.attributes["data-arch"].value.includes(os); + } +); + +if (hit) { + hit.classList.remove("hidden"); + const selectEl = document.querySelector("#install-arch-select"); + selectEl.value = hit.dataset.arch; + const firstContentChild = hit.querySelector(".install-content:first-of-type"); + const firstTabChild = hit.querySelector(".install-tab:first-of-type"); + firstContentChild.classList.remove("hidden"); + if (firstTabChild) { + firstTabChild.classList.add("selected"); + } +} else { + const noDetectEl = document.querySelector(".no-autodetect"); + if (noDetectEl) { + const noDetectElDetails = document.querySelector(".no-autodetect-details"); + if (noDetectElDetails) { + noDetectElDetails.innerHTML = `We detected you're on ${os} but there don't seem to be installers for that. ` + } + noDetectEl.classList.remove("hidden"); + } +} + +let copyButtons = Array.from(document.querySelectorAll("[data-copy]")); +if (copyButtons.length) { + copyButtons.forEach(function (element) { + element.addEventListener("click", () => { + navigator.clipboard.writeText(element.attributes["data-copy"].value); + }); + }); +} + +// Toggle for pre releases +const checkbox = document.getElementById("show-prereleases"); + +if (checkbox) { + checkbox.addEventListener("click", () => { + const all = document.getElementsByClassName("pre-release"); + + if (all) { + for (var item of all) { + item.classList.toggle("hidden"); + } + } + }); +} \ No newline at end of file diff --git a/changelog/2.2.0/index.html b/changelog/2.2.0/index.html new file mode 100644 index 00000000..19308a70 --- /dev/null +++ b/changelog/2.2.0/index.html @@ -0,0 +1,146 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 2.2.0

+
+ + +
+ +
+ + + + + 2.2.0 + + + + + Feb 25 2020 at 22:09 UTC + + +
+
+

Bug Fixes

+
    +
  • Update deps to version compatable with aarch64-pc-windows (#263) (19a93428)
  • +
  • docs: +
      +
    • Added a necessary step to Windows installation process (#242) (3906efcd)
    • +
    • Fixed mangled sentence from book; edited for clarity (#266) (ade52ff)
    • +
    • Updated iterators readme to account for iterators4 exercise (#273) (bec8e3a)
    • +
    +
  • +
  • installation: make fatal errors more obvious (#272) (17d0951e)
  • +
  • iterators2: +
      +
    • Remove reference to missing iterators2.rs (#245) (419f7797)
    • +
    +
  • +
  • as_ref_mut: Enable a test and improve per clippy's suggestion (#256) (dfdf809)
  • +
  • tests1: +
      +
    • Change test command (fe10e06c
    • +
    • Correct test command in tests1.rs comment (#263) (39fa7ae)
    • +
    +
  • +
+

Features

+
    +
  • Add variables5.rs exercise (#264) (0c73609e)
  • +
  • Show a completion message when watching (#253) (d25ee55a)
  • +
  • Add type conversion and parsing exercises (#249) (0c85dc11)
  • +
  • Created consistent money unit (#258) (fd57f8f)
  • +
  • Enable test for exercise test4 (#276) (8b971ff)
  • +
  • Added traits exercises (#274 but specifically #216, which originally added +this :heart:) (b559cdd)
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/2.2.1/index.html b/changelog/2.2.1/index.html new file mode 100644 index 00000000..71dbb249 --- /dev/null +++ b/changelog/2.2.1/index.html @@ -0,0 +1,111 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 2.2.1

+
+ + +
+ +
+ + + + + 2.2.1 + + + + + Feb 27 2020 at 18:24 UTC + + +
+
+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/3.0.0/index.html b/changelog/3.0.0/index.html new file mode 100644 index 00000000..a7989021 --- /dev/null +++ b/changelog/3.0.0/index.html @@ -0,0 +1,145 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 3.0.0

+
+ + +
+ +
+ + + + + 3.0.0 + + + + + Apr 11 2020 at 22:04 UTC + + +
+
+

Breaking Changes

+
    +
  • make "compile" exercises print output (#278) (3b6d5c)
  • +
+

Bug Fixes

+
    +
  • primitive_types: revert primitive_types4 (#296) (b3a3351e)
  • +
  • run: compile clippy exercise files (#295) (3ab084a4)
  • +
  • conversions: +
      +
    • add additional test to meet exercise rules (#284) (bc22ec3)
    • +
    • remove duplicate not done comment (#292) (dab90f)
    • +
    +
  • +
  • don't hardcode documentation version for traits (#288) (30e6af)
  • +
+

Features

+
    +
  • add Option2 exercise (#290) (86b5c08b)
  • +
  • add exercise for option (#282) (135e5d47)
  • +
  • add new exercises for generics (#280) (76be5e4e)
  • +
  • ci: add buildkite config (b049fa2c)
  • +
+

+

2.2.1 (2020-02-27)

+

Bug Fixes

+
    +
  • Re-add cloning the repo to install scripts (3d9b03c5)
  • +
+

Features

+ +

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/4.0.0/index.html b/changelog/4.0.0/index.html new file mode 100644 index 00000000..7cbf428a --- /dev/null +++ b/changelog/4.0.0/index.html @@ -0,0 +1,157 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 4.0.0

+
+ + +
+ +
+ + + + + 4.0.0 + + + + + Jul 8 2020 at 09:41 UTC + + +
+
+

Breaking Changes

+
    +
  • Add a --nocapture option to display test harnesses' outputs (8ad5f9bf)
  • +
  • Rename test to quiz, fixes #244 (010a0456)
  • +
+

Features

+ +

Bug Fixes

+
    +
  • Change then to than (ddd98ad7)
  • +
  • rename quiz1 to tests1 in info (#420) (0dd1c6ca)
  • +
  • fix quiz naming inconsistency (#421) (5563adbb)
  • +
  • confine the user further in variable exercises (06ef4cc6)
  • +
  • update iterator and macro text for typos and clarity (95900828)
  • +
  • update generics2 closes #362 (964c974a)
  • +
  • confusing comment in conversions/try_from_into.rs (c9e4f2cf)
  • +
  • arc1: Passively introduce attributes (#429) (113cdae2)
  • +
  • box1: fix comment typo (#426) (bb2ca251)
  • +
  • errorsn: Try harder to confine the user. (#388) (2b20c8a0)
  • +
  • from_into.rs: typo (a901499e)
  • +
  • generics2: Guide students to the answer (#430) (e6bd8021)
  • +
  • installation: +
      +
    • Provide a backup git reference when tag can't be curl (9e4fb100)
    • +
    • Check if python is available while checking for git,rustc and cargo (9cfb617d)
    • +
    +
  • +
  • option1: +
      +
    • Don't add only zeros to the numbers array (cce6a442)
    • +
    • Add cast to usize, as it is confusing in the context of an exercise about Option (f6cffc7e)
    • +
    +
  • +
  • option2: Add TODO to comments (#400) (10967bce)
  • +
  • options1: Add hint about Array Initialization (#389) (9f75554f)
  • +
  • test2: name of type String and &str (#394) (d6c0a688)
  • +
  • variables6: minor typo (#419) (524e17df)
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/4.1.0/index.html b/changelog/4.1.0/index.html new file mode 100644 index 00000000..8b9563c6 --- /dev/null +++ b/changelog/4.1.0/index.html @@ -0,0 +1,132 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 4.1.0

+
+ + +
+ +
+ + + + + 4.1.0 + + + + + Oct 5 2020 at 16:45 UTC + + +
+
+

Bug Fixes

+
    +
  • Update rustlings version in Cargo.lock (1cc40bc9)
  • +
  • arc1: index mod should equal thread count (b4062ef6)
  • +
  • enums3: Update Message::ChangeColor to take a tuple. (#457) (4b6540c7)
  • +
  • exercises: adding question mark to quiz2 (101072ab)
  • +
  • generics3: clarify grade change (47f7672c)
  • +
  • structs3: Small adjustment of variable name (114b54cb)
  • +
  • using_as: Add test so that proper type is returned. (#512) (3286c5ec)
  • +
+

Features

+
    +
  • Added iterators1.rs exercise (9642f5a3)
  • +
  • Add ability to run rustlings on repl.it (#471) (8f7b5bd0)
  • +
  • Add gitpod support (#473) (4821a8be)
  • +
  • Remind the user of the hint option (#425) (816b1f5e)
  • +
  • Remind the user of the hint option (#425) (9f61db5d)
  • +
  • cli: Added 'cls' command to 'watch' mode (#474) (4f2468e1)
  • +
  • try_from_into: Add insufficient length test (#469) (523d18b8)
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/4.2.0/index.html b/changelog/4.2.0/index.html new file mode 100644 index 00000000..2f9bbf73 --- /dev/null +++ b/changelog/4.2.0/index.html @@ -0,0 +1,133 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 4.2.0

+
+ + +
+ +
+ + + + + 4.2.0 + + + + + Nov 7 2020 at 13:22 UTC + + +
+
+

Features

+ +

Bug Fixes

+
    +
  • log error output when inotify limit is exceeded (d61b4e5a)
  • +
  • more unique temp_file (5643ef05)
  • +
  • installation: Update the MinRustVersion (21bfb2d4)
  • +
  • iterators2: Update description (#578) (197d3a3d)
  • +
  • primitive_types6: +
      +
    • remove 'unused doc comment' warning (472d8592)
    • +
    • missing comma in test (4fb230da)
    • +
    +
  • +
  • quiz3: Second test is for odd numbers, not even. (#553) (18e0bfef)
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/4.3.0/index.html b/changelog/4.3.0/index.html new file mode 100644 index 00000000..99882118 --- /dev/null +++ b/changelog/4.3.0/index.html @@ -0,0 +1,135 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 4.3.0

+
+ + +
+ +
+ + + + + 4.3.0 + + + + + Dec 29 2020 at 10:41 UTC + + +
+
+

Features

+
    +
  • Rewrite default out text (44d39112)
  • +
  • match exercise order to book chapters (#541) (033bf119)
  • +
  • Crab? (#586) (fa9f522b)
  • +
  • add "rustlings list" command (838f9f30)
  • +
  • try_from_into: remove duplicate annotation (04f1d079)
  • +
+

Bug Fixes

+
    +
  • update structs README (bcf14cf6)
  • +
  • added missing exercises to info.toml (90cfb6ff)
  • +
  • gives a bit more context to magic number (30644c9a)
  • +
  • functions2: Change signature to trigger precise error message: (#605) (0ef95947)
  • +
  • structs1: Adjust wording (#573) (9334783d)
  • +
  • try_from_into: + +
  • +
  • vec1: Have test compare every element in a and v (9b6c6293)
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/4.4.0/index.html b/changelog/4.4.0/index.html new file mode 100644 index 00000000..e602cc23 --- /dev/null +++ b/changelog/4.4.0/index.html @@ -0,0 +1,163 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 4.4.0

+
+ + +
+ +
+ + + + + 4.4.0 + + + + + Apr 24 2021 at 10:04 UTC + + +
+
+

Bug Fixes

+
    +
  • Fix spelling error in main.rs (91ee27f2)
  • +
  • typo in default out text (644c49f1)
  • +
  • collections: Naming exercises for vectors and hashmap (bef39b12)
  • +
  • from_str: +
      +
    • Correct typos (5f7c89f8)
    • +
    • test for error instead of unwrap/should_panic (15e71535)
    • +
    • use trait objects for from_str (c3e7b831)
    • +
    +
  • +
  • functions3: improve function argument type (#687) (a6509cc4)
  • +
  • hashmap2: Update incorrect assertion (#660) (72aaa15e)
  • +
  • info: Fix typo (#635) (cddc1e86)
  • +
  • iterators2: Moved errors out of tests. (baf4ba17, closes #359)
  • +
  • iterators3: Enabled iterators3.rs to run without commented out tests. (c6712dfc)
  • +
  • main: Let find_exercise work with borrows (347f30bd)
  • +
  • move_semantics4: +
      +
    • Remove redundant "instead" (#640) (cc266d7d)
    • +
    • Small readbility improvement (#617) (10965920)
    • +
    +
  • +
  • option2: Rename uninformative variables (#675) (b4de6594)
  • +
  • quiz3: Force an answer to Q2 (#672) (0d894e6f)
  • +
  • structs: Add 5.3 to structs/README (#652) (6bd791f2)
  • +
  • structs2: correct grammar in hint (#663) (ebdb66c7)
  • +
  • structs3: +
      +
    • reword heading comment (#664) (9f3e8c2d)
    • +
    • add check to prevent naive implementation of is_international (05a753fe)
    • +
    +
  • +
  • threads1: line number correction (7857b0a6)
  • +
  • try_from_into: use trait objects (2e93a588)
  • +
+

Features

+
    +
  • Replace clap with argh (7928122f)
  • +
  • Replace emojis when NO_EMOJI env variable present (8d62a996)
  • +
  • Added iterators5.rs exercise. (b29ea17e)
  • +
  • arc1: Add more details to description and hint (#710) (81be4044)
  • +
  • cli: Improve the list command with options, and then some (8bbe4ff1)
  • +
  • list: + +
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/4.5.0/index.html b/changelog/4.5.0/index.html new file mode 100644 index 00000000..b226443b --- /dev/null +++ b/changelog/4.5.0/index.html @@ -0,0 +1,130 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 4.5.0

+
+ + +
+ +
+ + + + + 4.5.0 + + + + + Jul 7 2021 at 20:30 UTC + + +
+
+

Features

+
    +
  • Add move_semantics5 exercise. (#746) (399ab328)
  • +
  • cli: Add "next" to run the next unsolved exercise. (#785) (d20e413a)
  • +
+

Bug Fixes

+
    +
  • rename result1 to errors4 (50ab289d)
  • +
  • move_semantics5 hints (1b858285)
  • +
  • remove trailing whitespaces from iterators1 (4d4fa774)
  • +
  • add hints to generics1 and generics2 exercises (31457940)
  • +
  • remove trailing whitespace (d9b69bd1)
  • +
  • installation: first PowerShell command (aa9a943d)
  • +
  • iterators5: derive Clone, Copy (91fc9e31)
  • +
  • quiz1: Updated question description (#794) (d8766496)
  • +
  • try_from_into, from_str: hints for dyn Error (11d2cf0d)
  • +
  • variables5: confine the answer further (48ffcbd2)
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/4.6.0/index.html b/changelog/4.6.0/index.html new file mode 100644 index 00000000..05f69f6e --- /dev/null +++ b/changelog/4.6.0/index.html @@ -0,0 +1,135 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 4.6.0

+
+ + +
+ +
+ + + + + 4.6.0 + + + + + Sep 25 2021 at 09:27 UTC + + +
+
+

Features

+
    +
  • add advanced_errs2 (abd6b70c)
  • +
  • add advanced_errs1 (882d535b)
  • +
  • Add a farewell message when quitting watch (1caef0b4)
  • +
  • add more watch commands (a7dc080b, closes #842)
  • +
  • modules: update exercises, add modules3 (#822) (dfd2fab4)
  • +
  • quiz1: add default function name in comment (#838) (0a11bad7)
  • +
+

Bug Fixes

+
    +
  • Correct small typo in exercises/conversions/from_str.rs (86cc8529)
  • +
  • cli: typo in exercise.rs (#848) (06d5c097)
  • +
  • from_str, try_from_into: custom error types (2dc93cad)
  • +
  • modules2: fix typo (#835) (1c3beb0a)
  • +
  • move_semantics5: + +
  • +
  • quiz1: Fix inconsistent wording (#826) (03131a3d)
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/4.7.0/index.html b/changelog/4.7.0/index.html new file mode 100644 index 00000000..f6aa7ca5 --- /dev/null +++ b/changelog/4.7.0/index.html @@ -0,0 +1,162 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 4.7.0

+
+ + +
+ +
+ + + + + 4.7.0 + + + + + Apr 14 2022 at 09:23 UTC + + +
+
+

Features

+
    +
  • Add move_semantics6.rs exercise (#908) (3f0e1303)
  • +
  • intro: Add intro section. (21c9f441)
  • +
  • Include exercises folder in the project structure behind a feature, enabling rust-analyzer to work (#917) (179a75a6)
  • +
+

Bug Fixes

+
    +
  • Fix a few spelling mistakes (1c0fe3cb)
  • +
  • cli: +
      +
    • Move long text strings into constants. (f78c4802)
    • +
    • Replace filter_map() with find_map() (9b27e8d)
    • +
    +
  • +
  • clippy1: +
      +
    • Set clippy::float_cmp lint to deny (#907) (71a06044)
    • +
    • Updated code to test correctness clippy lint with approx_constant lint rule (f2650de3)
    • +
    +
  • +
  • errors1: +
      +
    • Add a comment to make the purpose more clear (#486) (cbcde345)
    • +
    • Don't modify tests (#958) (60bb7cc)
    • +
    +
  • +
  • errors6: Remove existing answer code (43d0623)
  • +
  • functions5: Remove wrong new line and small English improvements (#885) (8ef4869b)
  • +
  • install: protect path with whitespaces using quotes and stop at the first error (d114847f)
  • +
  • intro1: Add compiler error explanation. (9b8de655)
  • +
  • iterators1: reorder TODO steps (0bd7a063)
  • +
  • move_semantics2: Add comment (89650f80)
  • +
  • move_semantics5: correct typo (#857) (46c28d5c)
  • +
  • quiz1: update to say quiz covers "If" (1622e8c1)
  • +
  • structs3: +
      +
    • Add a hint for panic (#608) (4f7ff5d9)
    • +
    • remove redundant 'return' (#852) (bf33829d)
    • +
    • Assigned value to cents_per_gram in test (d1ee2da)
    • +
    +
  • +
  • structs3.rs: assigned value to cents_per_gram in test (d1ee2daf)
  • +
  • traits1: rename test functions to snake case (#854) (1663a16e)
  • +
+

Documentation improvements

+
    +
  • Add hints on how to get GCC installed (#741) (bc56861)
  • +
  • Fix some code blocks that were not highlighted (17f9d74)
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/4.7.1/index.html b/changelog/4.7.1/index.html new file mode 100644 index 00000000..31fbbc45 --- /dev/null +++ b/changelog/4.7.1/index.html @@ -0,0 +1,130 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 4.7.1

+
+ + +
+ +
+ + + + + 4.7.1 + + + + + Apr 20 2022 at 07:46 UTC + + +
+
+

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.
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/4.8.0/index.html b/changelog/4.8.0/index.html new file mode 100644 index 00000000..e4a651a1 --- /dev/null +++ b/changelog/4.8.0/index.html @@ -0,0 +1,130 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 4.8.0

+
+ + +
+ +
+ + + + + 4.8.0 + + + + + Jul 1 2022 at 14:50 UTC + + +
+
+

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.
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/5.0.0/index.html b/changelog/5.0.0/index.html new file mode 100644 index 00000000..55f30fb4 --- /dev/null +++ b/changelog/5.0.0/index.html @@ -0,0 +1,182 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 5.0.0

+
+ + +
+ +
+ + + + + 5.0.0 + + + + + Jul 16 2022 at 12:36 UTC + + +
+
+

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 +JoinHandles.
  • +
  • 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.
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/5.1.0/index.html b/changelog/5.1.0/index.html new file mode 100644 index 00000000..d991f185 --- /dev/null +++ b/changelog/5.1.0/index.html @@ -0,0 +1,150 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 5.1.0

+
+ + +
+ +
+ + + + + 5.1.0 + + + + + Aug 16 2022 at 07:56 UTC + + +
+
+

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
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/5.1.1/index.html b/changelog/5.1.1/index.html new file mode 100644 index 00000000..73c5fc6a --- /dev/null +++ b/changelog/5.1.1/index.html @@ -0,0 +1,116 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 5.1.1

+
+ + +
+ +
+ + + + + 5.1.1 + + + + + Aug 17 2022 at 08:44 UTC + + +
+
+

Bug Fixes

+
    +
  • Fixed an incorrect assertion in options1
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/5.2.0/index.html b/changelog/5.2.0/index.html new file mode 100644 index 00000000..5b9578fe --- /dev/null +++ b/changelog/5.2.0/index.html @@ -0,0 +1,126 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 5.2.0

+
+ + +
+ +
+ + + + + 5.2.0 + + + + + Aug 27 2022 at 18:50 UTC + + +
+
+

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
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/5.2.1/index.html b/changelog/5.2.1/index.html new file mode 100644 index 00000000..f244c383 --- /dev/null +++ b/changelog/5.2.1/index.html @@ -0,0 +1,123 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 5.2.1

+
+ + +
+ +
+ + + + + 5.2.1 + + + + + Sep 6 2022 at 10:23 UTC + + +
+
+

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
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/5.3.0/index.html b/changelog/5.3.0/index.html new file mode 100644 index 00000000..534abc65 --- /dev/null +++ b/changelog/5.3.0/index.html @@ -0,0 +1,142 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 5.3.0

+
+ + +
+ +
+ + + + + 5.3.0 + + + + + Dec 23 2022 at 16:10 UTC + + +
+
+

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 unnecessary 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
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/5.4.0/index.html b/changelog/5.4.0/index.html new file mode 100644 index 00000000..d0ff6aa1 --- /dev/null +++ b/changelog/5.4.0/index.html @@ -0,0 +1,147 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 5.4.0

+
+ + +
+ +
+ + + + + 5.4.0 + + + + + Feb 12 2023 at 17:03 UTC + + +
+
+

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
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/5.4.1/index.html b/changelog/5.4.1/index.html new file mode 100644 index 00000000..1b582a72 --- /dev/null +++ b/changelog/5.4.1/index.html @@ -0,0 +1,125 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 5.4.1

+
+ + +
+ +
+ + + + + 5.4.1 + + + + + Mar 10 2023 at 16:40 UTC + + +
+
+

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
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/5.5.0/index.html b/changelog/5.5.0/index.html new file mode 100644 index 00000000..17e67a0d --- /dev/null +++ b/changelog/5.5.0/index.html @@ -0,0 +1,144 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 5.5.0

+
+ + +
+ +
+ + + + + 5.5.0 + + + + + May 17 2023 at 14:31 UTC + + +
+
+

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
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/5.5.1/index.html b/changelog/5.5.1/index.html new file mode 100644 index 00000000..cff8aa0b --- /dev/null +++ b/changelog/5.5.1/index.html @@ -0,0 +1,116 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 5.5.1

+
+ + +
+ +
+ + + + + 5.5.1 + + + + + May 17 2023 at 19:07 UTC + + +
+
+

Fixed

+
    +
  • Reverted rust-project.json path generation due to an upstream rust-analyzer fix.
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/5.6.0/index.html b/changelog/5.6.0/index.html new file mode 100644 index 00000000..c613e91d --- /dev/null +++ b/changelog/5.6.0/index.html @@ -0,0 +1,152 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 5.6.0

+
+ + +
+ +
+ + + + + 5.6.0 + + + + + Sep 4 2023 at 13:24 UTC + + +
+
+

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.
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/5.6.1/index.html b/changelog/5.6.1/index.html new file mode 100644 index 00000000..fb2d0a77 --- /dev/null +++ b/changelog/5.6.1/index.html @@ -0,0 +1,125 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 5.6.1

+
+ + +
+ +
+ + + + + 5.6.1 + + + + + Sep 18 2023 at 08:18 UTC + + +
+
+

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.
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/index.html b/changelog/index.html new file mode 100644 index 00000000..b0900482 --- /dev/null +++ b/changelog/index.html @@ -0,0 +1,1866 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Releases

+
+ + +
+ + +
+

+ + + Rustlings 6.3.0 + + +

+
+ + + + + v6.3.0 + + + + + Aug 29 2024 at 15:24 UTC + + +
+
+

Added

+
    +
  • Add the following exercise lints: +
      +
    • forbid(unsafe_code): You shouldn't write unsafe code in Rustlings.
    • +
    • forbid(unstable_features): You don't need unstable features in Rustlings and shouldn't rely on them while learning Rust.
    • +
    • forbid(todo): You forgot a todo!().
    • +
    • forbid(empty_loop): This can only happen by mistake in Rustlings.
    • +
    • deny(infinite_loop): No infinite loops are needed in Rustlings.
    • +
    • deny(mem_forget): You shouldn't leak memory while still learning Rust.
    • +
    +
  • +
  • Show a link to every exercise file in the list.
  • +
  • Add scroll padding in the list.
  • +
  • Break the help footer of the list into two lines when the terminal width isn't big enough.
  • +
  • Enable scrolling with the mouse in the list.
  • +
  • dev check: Show the progress of checks.
  • +
  • dev check: Check that the length of all exercise names is lower than 32.
  • +
  • dev check: Check if exercise contains no tests and isn't marked with test = false.
  • +
+

Changed

+
    +
  • The compilation time when installing Rustlings is reduced.
  • +
  • Pressing c in the list for "continue on" now quits the list after setting the selected exercise as the current one.
  • +
  • Better highlighting of the solution file after an exercise is done.
  • +
  • Don't show the output of successful tests anymore. Instead, show the pretty output for tests.
  • +
  • Be explicit about q only quitting the list and not the whole program in the list.
  • +
  • Be explicit about r only resetting one exercise (the selected one) in the list.
  • +
  • Ignore the standard output of git init.
  • +
  • threads3: Remove the queue length and improve tests.
  • +
  • errors4: Use match instead of a comparison chain in the solution.
  • +
  • functions3: Only take u8 to avoid using a too high number of iterations by mistake.
  • +
  • dev check: Always check with strict Clippy (warnings to errors) when checking the solutions.
  • +
+

Fixed

+
    +
  • Fix the error on some systems about too many open files during the final check of all exercises.
  • +
  • Fix the list when the terminal height is too low.
  • +
  • Restore the terminal after an error in the list.
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 6.2.0 + + +

+
+ + + + + v6.2.0 + + + + + Aug 9 2024 at 09:59 UTC + + +
+
+

Added

+
    +
  • Show a message before checking and running an exercise. This gives the user instant feedback and avoids confusion if the checks take too long.
  • +
  • Show a helpful error message when trying to install Rustlings with a Rust version lower than the minimum one that Rustlings supports.
  • +
  • Add a README.md file to the solutions/ directory.
  • +
  • Allow initializing Rustlings in a Cargo workspace.
  • +
  • dev check: Check that all solutions are formatted with rustfmt.
  • +
+

Changed

+
    +
  • Remove the state file and the solutions directory from the generated .gitignore file.
  • +
  • Run the final check of all exercises in parallel.
  • +
  • Small exercise improvements.
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 6.1.0 + + +

+
+ + + + + v6.1.0 + + + + + Jul 10 2024 at 14:55 UTC + + +
+
+

Added

+
    +
  • dev check: Check that all exercises (including third-party ones) include at least one TODO comment.
  • +
  • dev check: Check that all exercises actually fail to run (not already solved).
  • +
+

Changed

+
    +
  • Make enum variants more consistent between enum exercises.
  • +
  • iterators3: Teach about the possible case of integer overflow during division.
  • +
+

Fixed

+
    +
  • Exit with a helpful error message on missing/unsupported terminal/TTY.
  • +
  • Mark the last exercise as done.
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 6.0.1 + + +

+
+ + + + + v6.0.1 + + + + + Jul 4 2024 at 18:04 UTC + + +
+
+

Small exercise improvements and fixes. +Most importantly, fixed that the exercise clippy1 was already solved 😅

+

+ +
+
+ + +
+

+ + + Rustlings 6.0.0 + + +

+
+ + + + + v6.0.0 + + + + + Jul 3 2024 at 13:43 UTC + + +
+
+

This release is the result of a complete rewrite to deliver a ton of new features and improvements ✨ +The most important changes are highlighted below.

+

Installation

+

The installation has been simplified a lot! +To install Rustlings after installing Rust, all what you need to do now is running the following command:

+
cargo install rustlings
+
+ +

Yes, this means that Rustlings is now on crates.io 🎉

+

You can read about the motivations of this change in this issue.

+

UI/UX

+
    +
  • The UI is now responsive when the terminal is resized.
  • +
  • The progress bar was moved to the bottom so that you can always see your progress and the current exercise to work on.
  • +
  • The current exercise path is now a terminal link. It will open the exercise file in your default editor when you click on it.
  • +
  • A small prompt is now always shown at the bottom. It allows you to choose an action by entering a character. For example, entering h will show you the hint of the current exercise.
  • +
  • The comment "I AM NOT DONE!" doesn't exist anymore. Instead of needing to remove it to go to the next exercise, you need to enter n in the terminal.
  • +
+

List mode

+

A list mode was added using Ratatui. +You can enter it by entering l in the watch mode. +It offers the following features:

+
    +
  • Browse all exercises and see their state (pending/done).
  • +
  • Filter exercises based on their state (pending/done).
  • +
  • Continue at another exercise. This allows you to skip some exercises or go back to previous ones.
  • +
  • Reset an exercise so you can start over and revert your changes.
  • +
+

Solutions

+

After finishing an exercise, a solution file will be available and Rustlings will show you its path in green. +This allows you to compare your solution with an idiomatic solution and maybe learn about other ways to solve a problem.

+

While writing the solutions, all exercises have been polished 🌟 +For example, every exercise now contains TODO comments to highlight what the user needs to change and where.

+

LSP support out of the box

+

Instead of creating a project.json file using rustlings lsp, Rustlings now works with a Cargo.toml file out of the box. +No actions are needed to activate the language server rust-analyzer.

+

This should avoid issues related to the language server or to running exercises, especially the ones with Clippy.

+

Clippy

+

Clippy lints are now shown on all exercises, not only the Clippy exercises 📎 +Make Clippy your friend from early on 🥰

+

Third-party exercises

+

Rustlings now supports third-party exercises!

+

Do you want to create your own set of Rustlings exercises to focus on some specific topic? +Or do you want to translate the original Rustlings exercises? +Then follow the link to the guide about third-party exercises!

+

+ +
+
+ + +
+

+ + + Rustlings 5.6.1 + + +

+
+ + + + + 5.6.1 + + + + + Sep 18 2023 at 08:18 UTC + + +
+
+

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.
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 5.6.0 + + +

+
+ + + + + 5.6.0 + + + + + Sep 4 2023 at 13:24 UTC + + +
+
+

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.
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 5.5.1 + + +

+
+ + + + + 5.5.1 + + + + + May 17 2023 at 19:07 UTC + + +
+
+

Fixed

+
    +
  • Reverted rust-project.json path generation due to an upstream rust-analyzer fix.
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 5.5.0 + + +

+
+ + + + + 5.5.0 + + + + + May 17 2023 at 14:31 UTC + + +
+
+

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
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 5.4.1 + + +

+
+ + + + + 5.4.1 + + + + + Mar 10 2023 at 16:40 UTC + + +
+
+

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
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 5.4.0 + + +

+
+ + + + + 5.4.0 + + + + + Feb 12 2023 at 17:03 UTC + + +
+
+

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
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 5.3.0 + + +

+
+ + + + + 5.3.0 + + + + + Dec 23 2022 at 16:10 UTC + + +
+
+

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 unnecessary 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
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 5.2.1 + + +

+
+ + + + + 5.2.1 + + + + + Sep 6 2022 at 10:23 UTC + + +
+
+

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
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 5.2.0 + + +

+
+ + + + + 5.2.0 + + + + + Aug 27 2022 at 18:50 UTC + + +
+
+

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
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 5.1.1 + + +

+
+ + + + + 5.1.1 + + + + + Aug 17 2022 at 08:44 UTC + + +
+
+

Bug Fixes

+
    +
  • Fixed an incorrect assertion in options1
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 5.1.0 + + +

+
+ + + + + 5.1.0 + + + + + Aug 16 2022 at 07:56 UTC + + +
+
+

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
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 5.0.0 + + +

+
+ + + + + 5.0.0 + + + + + Jul 16 2022 at 12:36 UTC + + +
+
+

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 +JoinHandles.
  • +
  • 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.
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 4.8.0 + + +

+
+ + + + + 4.8.0 + + + + + Jul 1 2022 at 14:50 UTC + + +
+
+

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.
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 4.7.1 + + +

+
+ + + + + 4.7.1 + + + + + Apr 20 2022 at 07:46 UTC + + +
+
+

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.
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 4.7.0 + + +

+
+ + + + + 4.7.0 + + + + + Apr 14 2022 at 09:23 UTC + + +
+
+

Features

+
    +
  • Add move_semantics6.rs exercise (#908) (3f0e1303)
  • +
  • intro: Add intro section. (21c9f441)
  • +
  • Include exercises folder in the project structure behind a feature, enabling rust-analyzer to work (#917) (179a75a6)
  • +
+

Bug Fixes

+
    +
  • Fix a few spelling mistakes (1c0fe3cb)
  • +
  • cli: +
      +
    • Move long text strings into constants. (f78c4802)
    • +
    • Replace filter_map() with find_map() (9b27e8d)
    • +
    +
  • +
  • clippy1: +
      +
    • Set clippy::float_cmp lint to deny (#907) (71a06044)
    • +
    • Updated code to test correctness clippy lint with approx_constant lint rule (f2650de3)
    • +
    +
  • +
  • errors1: +
      +
    • Add a comment to make the purpose more clear (#486) (cbcde345)
    • +
    • Don't modify tests (#958) (60bb7cc)
    • +
    +
  • +
  • errors6: Remove existing answer code (43d0623)
  • +
  • functions5: Remove wrong new line and small English improvements (#885) (8ef4869b)
  • +
  • install: protect path with whitespaces using quotes and stop at the first error (d114847f)
  • +
  • intro1: Add compiler error explanation. (9b8de655)
  • +
  • iterators1: reorder TODO steps (0bd7a063)
  • +
  • move_semantics2: Add comment (89650f80)
  • +
  • move_semantics5: correct typo (#857) (46c28d5c)
  • +
  • quiz1: update to say quiz covers "If" (1622e8c1)
  • +
  • structs3: +
      +
    • Add a hint for panic (#608) (4f7ff5d9)
    • +
    • remove redundant 'return' (#852) (bf33829d)
    • +
    • Assigned value to cents_per_gram in test (d1ee2da)
    • +
    +
  • +
  • structs3.rs: assigned value to cents_per_gram in test (d1ee2daf)
  • +
  • traits1: rename test functions to snake case (#854) (1663a16e)
  • +
+

Documentation improvements

+
    +
  • Add hints on how to get GCC installed (#741) (bc56861)
  • +
  • Fix some code blocks that were not highlighted (17f9d74)
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 4.6.0 + + +

+
+ + + + + 4.6.0 + + + + + Sep 25 2021 at 09:27 UTC + + +
+
+

Features

+
    +
  • add advanced_errs2 (abd6b70c)
  • +
  • add advanced_errs1 (882d535b)
  • +
  • Add a farewell message when quitting watch (1caef0b4)
  • +
  • add more watch commands (a7dc080b, closes #842)
  • +
  • modules: update exercises, add modules3 (#822) (dfd2fab4)
  • +
  • quiz1: add default function name in comment (#838) (0a11bad7)
  • +
+

Bug Fixes

+
    +
  • Correct small typo in exercises/conversions/from_str.rs (86cc8529)
  • +
  • cli: typo in exercise.rs (#848) (06d5c097)
  • +
  • from_str, try_from_into: custom error types (2dc93cad)
  • +
  • modules2: fix typo (#835) (1c3beb0a)
  • +
  • move_semantics5: + +
  • +
  • quiz1: Fix inconsistent wording (#826) (03131a3d)
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 4.5.0 + + +

+
+ + + + + 4.5.0 + + + + + Jul 7 2021 at 20:30 UTC + + +
+
+

Features

+
    +
  • Add move_semantics5 exercise. (#746) (399ab328)
  • +
  • cli: Add "next" to run the next unsolved exercise. (#785) (d20e413a)
  • +
+

Bug Fixes

+
    +
  • rename result1 to errors4 (50ab289d)
  • +
  • move_semantics5 hints (1b858285)
  • +
  • remove trailing whitespaces from iterators1 (4d4fa774)
  • +
  • add hints to generics1 and generics2 exercises (31457940)
  • +
  • remove trailing whitespace (d9b69bd1)
  • +
  • installation: first PowerShell command (aa9a943d)
  • +
  • iterators5: derive Clone, Copy (91fc9e31)
  • +
  • quiz1: Updated question description (#794) (d8766496)
  • +
  • try_from_into, from_str: hints for dyn Error (11d2cf0d)
  • +
  • variables5: confine the answer further (48ffcbd2)
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 4.4.0 + + +

+
+ + + + + 4.4.0 + + + + + Apr 24 2021 at 10:04 UTC + + +
+
+

Bug Fixes

+
    +
  • Fix spelling error in main.rs (91ee27f2)
  • +
  • typo in default out text (644c49f1)
  • +
  • collections: Naming exercises for vectors and hashmap (bef39b12)
  • +
  • from_str: +
      +
    • Correct typos (5f7c89f8)
    • +
    • test for error instead of unwrap/should_panic (15e71535)
    • +
    • use trait objects for from_str (c3e7b831)
    • +
    +
  • +
  • functions3: improve function argument type (#687) (a6509cc4)
  • +
  • hashmap2: Update incorrect assertion (#660) (72aaa15e)
  • +
  • info: Fix typo (#635) (cddc1e86)
  • +
  • iterators2: Moved errors out of tests. (baf4ba17, closes #359)
  • +
  • iterators3: Enabled iterators3.rs to run without commented out tests. (c6712dfc)
  • +
  • main: Let find_exercise work with borrows (347f30bd)
  • +
  • move_semantics4: +
      +
    • Remove redundant "instead" (#640) (cc266d7d)
    • +
    • Small readbility improvement (#617) (10965920)
    • +
    +
  • +
  • option2: Rename uninformative variables (#675) (b4de6594)
  • +
  • quiz3: Force an answer to Q2 (#672) (0d894e6f)
  • +
  • structs: Add 5.3 to structs/README (#652) (6bd791f2)
  • +
  • structs2: correct grammar in hint (#663) (ebdb66c7)
  • +
  • structs3: +
      +
    • reword heading comment (#664) (9f3e8c2d)
    • +
    • add check to prevent naive implementation of is_international (05a753fe)
    • +
    +
  • +
  • threads1: line number correction (7857b0a6)
  • +
  • try_from_into: use trait objects (2e93a588)
  • +
+

Features

+
    +
  • Replace clap with argh (7928122f)
  • +
  • Replace emojis when NO_EMOJI env variable present (8d62a996)
  • +
  • Added iterators5.rs exercise. (b29ea17e)
  • +
  • arc1: Add more details to description and hint (#710) (81be4044)
  • +
  • cli: Improve the list command with options, and then some (8bbe4ff1)
  • +
  • list: + +
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 4.3.0 + + +

+
+ + + + + 4.3.0 + + + + + Dec 29 2020 at 10:41 UTC + + +
+
+

Features

+
    +
  • Rewrite default out text (44d39112)
  • +
  • match exercise order to book chapters (#541) (033bf119)
  • +
  • Crab? (#586) (fa9f522b)
  • +
  • add "rustlings list" command (838f9f30)
  • +
  • try_from_into: remove duplicate annotation (04f1d079)
  • +
+

Bug Fixes

+
    +
  • update structs README (bcf14cf6)
  • +
  • added missing exercises to info.toml (90cfb6ff)
  • +
  • gives a bit more context to magic number (30644c9a)
  • +
  • functions2: Change signature to trigger precise error message: (#605) (0ef95947)
  • +
  • structs1: Adjust wording (#573) (9334783d)
  • +
  • try_from_into: + +
  • +
  • vec1: Have test compare every element in a and v (9b6c6293)
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 4.2.0 + + +

+
+ + + + + 4.2.0 + + + + + Nov 7 2020 at 13:22 UTC + + +
+
+

Features

+ +

Bug Fixes

+
    +
  • log error output when inotify limit is exceeded (d61b4e5a)
  • +
  • more unique temp_file (5643ef05)
  • +
  • installation: Update the MinRustVersion (21bfb2d4)
  • +
  • iterators2: Update description (#578) (197d3a3d)
  • +
  • primitive_types6: +
      +
    • remove 'unused doc comment' warning (472d8592)
    • +
    • missing comma in test (4fb230da)
    • +
    +
  • +
  • quiz3: Second test is for odd numbers, not even. (#553) (18e0bfef)
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 4.1.0 + + +

+
+ + + + + 4.1.0 + + + + + Oct 5 2020 at 16:45 UTC + + +
+
+

Bug Fixes

+
    +
  • Update rustlings version in Cargo.lock (1cc40bc9)
  • +
  • arc1: index mod should equal thread count (b4062ef6)
  • +
  • enums3: Update Message::ChangeColor to take a tuple. (#457) (4b6540c7)
  • +
  • exercises: adding question mark to quiz2 (101072ab)
  • +
  • generics3: clarify grade change (47f7672c)
  • +
  • structs3: Small adjustment of variable name (114b54cb)
  • +
  • using_as: Add test so that proper type is returned. (#512) (3286c5ec)
  • +
+

Features

+
    +
  • Added iterators1.rs exercise (9642f5a3)
  • +
  • Add ability to run rustlings on repl.it (#471) (8f7b5bd0)
  • +
  • Add gitpod support (#473) (4821a8be)
  • +
  • Remind the user of the hint option (#425) (816b1f5e)
  • +
  • Remind the user of the hint option (#425) (9f61db5d)
  • +
  • cli: Added 'cls' command to 'watch' mode (#474) (4f2468e1)
  • +
  • try_from_into: Add insufficient length test (#469) (523d18b8)
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 4.0.0 + + +

+
+ + + + + 4.0.0 + + + + + Jul 8 2020 at 09:41 UTC + + +
+
+

Breaking Changes

+
    +
  • Add a --nocapture option to display test harnesses' outputs (8ad5f9bf)
  • +
  • Rename test to quiz, fixes #244 (010a0456)
  • +
+

Features

+ +

Bug Fixes

+
    +
  • Change then to than (ddd98ad7)
  • +
  • rename quiz1 to tests1 in info (#420) (0dd1c6ca)
  • +
  • fix quiz naming inconsistency (#421) (5563adbb)
  • +
  • confine the user further in variable exercises (06ef4cc6)
  • +
  • update iterator and macro text for typos and clarity (95900828)
  • +
  • update generics2 closes #362 (964c974a)
  • +
  • confusing comment in conversions/try_from_into.rs (c9e4f2cf)
  • +
  • arc1: Passively introduce attributes (#429) (113cdae2)
  • +
  • box1: fix comment typo (#426) (bb2ca251)
  • +
  • errorsn: Try harder to confine the user. (#388) (2b20c8a0)
  • +
  • from_into.rs: typo (a901499e)
  • +
  • generics2: Guide students to the answer (#430) (e6bd8021)
  • +
  • installation: +
      +
    • Provide a backup git reference when tag can't be curl (9e4fb100)
    • +
    • Check if python is available while checking for git,rustc and cargo (9cfb617d)
    • +
    +
  • +
  • option1: +
      +
    • Don't add only zeros to the numbers array (cce6a442)
    • +
    • Add cast to usize, as it is confusing in the context of an exercise about Option (f6cffc7e)
    • +
    +
  • +
  • option2: Add TODO to comments (#400) (10967bce)
  • +
  • options1: Add hint about Array Initialization (#389) (9f75554f)
  • +
  • test2: name of type String and &str (#394) (d6c0a688)
  • +
  • variables6: minor typo (#419) (524e17df)
  • +
+

+ +
+
+ + +
+

+ + + Rustlings 3.0.0 + + +

+
+ + + + + 3.0.0 + + + + + Apr 11 2020 at 22:04 UTC + + +
+
+

Breaking Changes

+
    +
  • make "compile" exercises print output (#278) (3b6d5c)
  • +
+

Bug Fixes

+
    +
  • primitive_types: revert primitive_types4 (#296) (b3a3351e)
  • +
  • run: compile clippy exercise files (#295) (3ab084a4)
  • +
  • conversions: +
      +
    • add additional test to meet exercise rules (#284) (bc22ec3)
    • +
    • remove duplicate not done comment (#292) (dab90f)
    • +
    +
  • +
  • don't hardcode documentation version for traits (#288) (30e6af)
  • +
+

Features

+
    +
  • add Option2 exercise (#290) (86b5c08b)
  • +
  • add exercise for option (#282) (135e5d47)
  • +
  • add new exercises for generics (#280) (76be5e4e)
  • +
  • ci: add buildkite config (b049fa2c)
  • +
+

+

2.2.1 (2020-02-27)

+

Bug Fixes

+
    +
  • Re-add cloning the repo to install scripts (3d9b03c5)
  • +
+

Features

+ +

+ +
+
+ + +
+

+ + + Rustlings 2.2.1 + + +

+
+ + + + + 2.2.1 + + + + + Feb 27 2020 at 18:24 UTC + + +
+
+ +
+
+ + +
+

+ + + Rustlings 2.2.0 + + +

+
+ + + + + 2.2.0 + + + + + Feb 25 2020 at 22:09 UTC + + +
+
+

Bug Fixes

+
    +
  • Update deps to version compatable with aarch64-pc-windows (#263) (19a93428)
  • +
  • docs: +
      +
    • Added a necessary step to Windows installation process (#242) (3906efcd)
    • +
    • Fixed mangled sentence from book; edited for clarity (#266) (ade52ff)
    • +
    • Updated iterators readme to account for iterators4 exercise (#273) (bec8e3a)
    • +
    +
  • +
  • installation: make fatal errors more obvious (#272) (17d0951e)
  • +
  • iterators2: +
      +
    • Remove reference to missing iterators2.rs (#245) (419f7797)
    • +
    +
  • +
  • as_ref_mut: Enable a test and improve per clippy's suggestion (#256) (dfdf809)
  • +
  • tests1: +
      +
    • Change test command (fe10e06c
    • +
    • Correct test command in tests1.rs comment (#263) (39fa7ae)
    • +
    +
  • +
+

Features

+
    +
  • Add variables5.rs exercise (#264) (0c73609e)
  • +
  • Show a completion message when watching (#253) (d25ee55a)
  • +
  • Add type conversion and parsing exercises (#249) (0c85dc11)
  • +
  • Created consistent money unit (#258) (fd57f8f)
  • +
  • Enable test for exercise test4 (#276) (8b971ff)
  • +
  • Added traits exercises (#274 but specifically #216, which originally added +this :heart:) (b559cdd)
  • +
+

+ +
+
+ +
+
+
+ +
+
+ + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/changelog/v6.0.0/index.html b/changelog/v6.0.0/index.html new file mode 100644 index 00000000..c88f4b16 --- /dev/null +++ b/changelog/v6.0.0/index.html @@ -0,0 +1,157 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 6.0.0

+
+ + +
+ +
+ + + + + v6.0.0 + + + + + Jul 3 2024 at 13:43 UTC + + +
+
+

This release is the result of a complete rewrite to deliver a ton of new features and improvements ✨ +The most important changes are highlighted below.

+

Installation

+

The installation has been simplified a lot! +To install Rustlings after installing Rust, all what you need to do now is running the following command:

+
cargo install rustlings
+
+ +

Yes, this means that Rustlings is now on crates.io 🎉

+

You can read about the motivations of this change in this issue.

+

UI/UX

+
    +
  • The UI is now responsive when the terminal is resized.
  • +
  • The progress bar was moved to the bottom so that you can always see your progress and the current exercise to work on.
  • +
  • The current exercise path is now a terminal link. It will open the exercise file in your default editor when you click on it.
  • +
  • A small prompt is now always shown at the bottom. It allows you to choose an action by entering a character. For example, entering h will show you the hint of the current exercise.
  • +
  • The comment "I AM NOT DONE!" doesn't exist anymore. Instead of needing to remove it to go to the next exercise, you need to enter n in the terminal.
  • +
+

List mode

+

A list mode was added using Ratatui. +You can enter it by entering l in the watch mode. +It offers the following features:

+
    +
  • Browse all exercises and see their state (pending/done).
  • +
  • Filter exercises based on their state (pending/done).
  • +
  • Continue at another exercise. This allows you to skip some exercises or go back to previous ones.
  • +
  • Reset an exercise so you can start over and revert your changes.
  • +
+

Solutions

+

After finishing an exercise, a solution file will be available and Rustlings will show you its path in green. +This allows you to compare your solution with an idiomatic solution and maybe learn about other ways to solve a problem.

+

While writing the solutions, all exercises have been polished 🌟 +For example, every exercise now contains TODO comments to highlight what the user needs to change and where.

+

LSP support out of the box

+

Instead of creating a project.json file using rustlings lsp, Rustlings now works with a Cargo.toml file out of the box. +No actions are needed to activate the language server rust-analyzer.

+

This should avoid issues related to the language server or to running exercises, especially the ones with Clippy.

+

Clippy

+

Clippy lints are now shown on all exercises, not only the Clippy exercises 📎 +Make Clippy your friend from early on 🥰

+

Third-party exercises

+

Rustlings now supports third-party exercises!

+

Do you want to create your own set of Rustlings exercises to focus on some specific topic? +Or do you want to translate the original Rustlings exercises? +Then follow the link to the guide about third-party exercises!

+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/v6.0.1/index.html b/changelog/v6.0.1/index.html new file mode 100644 index 00000000..7e7c4f5c --- /dev/null +++ b/changelog/v6.0.1/index.html @@ -0,0 +1,114 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 6.0.1

+
+ + +
+ +
+ + + + + v6.0.1 + + + + + Jul 4 2024 at 18:04 UTC + + +
+
+

Small exercise improvements and fixes. +Most importantly, fixed that the exercise clippy1 was already solved 😅

+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/v6.1.0/index.html b/changelog/v6.1.0/index.html new file mode 100644 index 00000000..b7287016 --- /dev/null +++ b/changelog/v6.1.0/index.html @@ -0,0 +1,127 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 6.1.0

+
+ + +
+ +
+ + + + + v6.1.0 + + + + + Jul 10 2024 at 14:55 UTC + + +
+
+

Added

+
    +
  • dev check: Check that all exercises (including third-party ones) include at least one TODO comment.
  • +
  • dev check: Check that all exercises actually fail to run (not already solved).
  • +
+

Changed

+
    +
  • Make enum variants more consistent between enum exercises.
  • +
  • iterators3: Teach about the possible case of integer overflow during division.
  • +
+

Fixed

+
    +
  • Exit with a helpful error message on missing/unsupported terminal/TTY.
  • +
  • Mark the last exercise as done.
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/v6.2.0/index.html b/changelog/v6.2.0/index.html new file mode 100644 index 00000000..c416e3fe --- /dev/null +++ b/changelog/v6.2.0/index.html @@ -0,0 +1,126 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 6.2.0

+
+ + +
+ +
+ + + + + v6.2.0 + + + + + Aug 9 2024 at 09:59 UTC + + +
+
+

Added

+
    +
  • Show a message before checking and running an exercise. This gives the user instant feedback and avoids confusion if the checks take too long.
  • +
  • Show a helpful error message when trying to install Rustlings with a Rust version lower than the minimum one that Rustlings supports.
  • +
  • Add a README.md file to the solutions/ directory.
  • +
  • Allow initializing Rustlings in a Cargo workspace.
  • +
  • dev check: Check that all solutions are formatted with rustfmt.
  • +
+

Changed

+
    +
  • Remove the state file and the solutions directory from the generated .gitignore file.
  • +
  • Run the final check of all exercises in parallel.
  • +
  • Small exercise improvements.
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/v6.3.0/index.html b/changelog/v6.3.0/index.html new file mode 100644 index 00000000..444b6644 --- /dev/null +++ b/changelog/v6.3.0/index.html @@ -0,0 +1,152 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + +
+

Rustlings 6.3.0

+
+ + +
+ +
+ + + + + v6.3.0 + + + + + Aug 29 2024 at 15:24 UTC + + +
+
+

Added

+
    +
  • Add the following exercise lints: +
      +
    • forbid(unsafe_code): You shouldn't write unsafe code in Rustlings.
    • +
    • forbid(unstable_features): You don't need unstable features in Rustlings and shouldn't rely on them while learning Rust.
    • +
    • forbid(todo): You forgot a todo!().
    • +
    • forbid(empty_loop): This can only happen by mistake in Rustlings.
    • +
    • deny(infinite_loop): No infinite loops are needed in Rustlings.
    • +
    • deny(mem_forget): You shouldn't leak memory while still learning Rust.
    • +
    +
  • +
  • Show a link to every exercise file in the list.
  • +
  • Add scroll padding in the list.
  • +
  • Break the help footer of the list into two lines when the terminal width isn't big enough.
  • +
  • Enable scrolling with the mouse in the list.
  • +
  • dev check: Show the progress of checks.
  • +
  • dev check: Check that the length of all exercise names is lower than 32.
  • +
  • dev check: Check if exercise contains no tests and isn't marked with test = false.
  • +
+

Changed

+
    +
  • The compilation time when installing Rustlings is reduced.
  • +
  • Pressing c in the list for "continue on" now quits the list after setting the selected exercise as the current one.
  • +
  • Better highlighting of the solution file after an exercise is done.
  • +
  • Don't show the output of successful tests anymore. Instead, show the pretty output for tests.
  • +
  • Be explicit about q only quitting the list and not the whole program in the list.
  • +
  • Be explicit about r only resetting one exercise (the selected one) in the list.
  • +
  • Ignore the standard output of git init.
  • +
  • threads3: Remove the queue length and improve tests.
  • +
  • errors4: Use match instead of a comparison chain in the solution.
  • +
  • functions3: Only take u8 to avoid using a too high number of iterations by mistake.
  • +
  • dev check: Always check with strict Clippy (warnings to errors) when checking the solutions.
  • +
+

Fixed

+
    +
  • Fix the error on some systems about too many open files during the final check of all exercises.
  • +
  • Fix the list when the terminal height is too low.
  • +
  • Restore the terminal after an error in the list.
  • +
+

+ +
+
+
+
+ +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..cae4c0ef --- /dev/null +++ b/index.html @@ -0,0 +1,203 @@ + + + + rustlings + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ +

rustlings

+ + + +
+ + + +
+

Rustlings 🦀❤️

+
+

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!

+

It is recommended to do the Rustlings exercises in parallel to reading the official Rust book, the most comprehensive resource for learning Rust 📚️

+

Rust By Example is another recommended resource that you might find helpful. +It contains code examples and exercises similar to Rustlings, but online.

+

Getting Started

+

Installing Rust

+

Before installing Rustlings, you need to have the latest version of Rust installed. +Visit www.rust-lang.org/tools/install for further instructions on installing Rust. +This will also install Cargo, Rust's package/project manager.

+
+

🐧 If you're on Linux, make sure you've installed gcc (for a linker).

+

Deb: sudo apt install gcc. +Dnf: sudo dnf install gcc.

+
+
+

🍎 If you're on MacOS, make sure you've installed Xcode and its developer tools by running xcode-select --install.

+
+

Installing Rustlings

+

The following command will download and compile Rustlings:

+
cargo install rustlings
+
+ +
+If the installation fails… (click to expand) +
    +
  • Make sure you have the latest Rust version by running rustup update
  • +
  • Try adding the --locked flag: cargo install rustlings --locked
  • +
  • Otherwise, please report the issue
  • +
+
+

Initialization

+

After installing Rustlings, run the following command to initialize the rustlings/ directory:

+
rustlings init
+
+ +
+If the command rustlings can't be found… (click to expand) +

You are probably using Linux and installed Rust using your package manager.

+

Cargo installs binaries to the directory ~/.cargo/bin. +Sadly, package managers often don't add ~/.cargo/bin to your PATH environment variable.

+

The solution is to …

+ +
+

Now, go into the newly initialized directory and launch Rustlings for further instructions on getting started with the exercises:

+
cd rustlings/
+rustlings
+
+ +

Working environment

+

Editor

+

Our general recommendation is VS Code with the rust-analyzer plugin. +But any editor that supports rust-analyzer should be enough for working on the exercises.

+

Terminal

+

While working with Rustlings, please use a modern terminal for the best user experience. +The default terminal on Linux and Mac should be sufficient. +On Windows, we recommend the Windows Terminal.

+

Doing exercises

+

The exercises are sorted by topic and can be found in the subdirectory exercises/<topic>. +For every topic, there is an additional README.md file with some resources to get you started on the topic. +We highly recommend that you have a look at them before you start 📚️

+

Most exercises contain an error that keeps them from compiling, and it's up to you to fix it! +Some exercises contain tests that need to pass for the exercise to be done ✅

+

Search for TODO and todo!() to find out what you need to change. +Ask for hints by entering h in the watch mode 💡

+

Watch Mode

+

After initialization, Rustlings can be launched by simply running the command rustlings.

+

This will start the watch mode which walks you through the exercises in a predefined order (what we think is best for newcomers). +It will rerun the current exercise automatically every time you change the exercise's file in the exercises/ directory.

+
+If detecting file changes in the exercises/ directory fails… (click to expand) +
+

You can add the --manual-run flag (rustlings --manual-run) to manually rerun the current exercise by entering r in the watch mode.

+

Please report the issue with some information about your operating system and whether you run Rustlings in a container or virtual machine (e.g. WSL).

+
+
+

Exercise List

+

In the watch mode (after launching rustlings), you can enter l to open the interactive exercise list.

+

The list allows you to…

+
    +
  • See the status of all exercises (done or pending)
  • +
  • c: Continue at another exercise (temporarily skip some exercises or go back to a previous one)
  • +
  • r: Reset status and file of the selected exercise (you need to reload/reopen its file in your editor afterwards)
  • +
+

See the footer of the list for all possible keys.

+

Questions?

+

If you need any help while doing the exercises and the builtin-hints aren't helpful, feel free to ask in the Q&A category of the discussions if your question wasn't asked yet 💡

+

Third-Party Exercises

+

Third-party exercises are a set of exercises maintained by the community. +You can use the same rustlings program that you installed with cargo install rustlings to run them:

+ +

Do you want to create your own set of Rustlings exercises to focus on some specific topic? +Or do you want to translate the original Rustlings exercises? +Then follow the the guide about third-party exercises!

+

Continuing On

+

Once you've completed Rustlings, put your new knowledge to good use! +Continue practicing your Rust skills by building your own projects, contributing to Rustlings, or finding other open-source projects to contribute to.

+

Uninstalling Rustlings

+

If you want to remove Rustlings from your system, run the following command:

+
cargo uninstall rustlings
+
+ +

Contributing

+

See CONTRIBUTING.md 🔗

+

Contributors ✨

+

Thanks to all the wonderful contributors 🎉

+ + +
+
+ + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/oranda-v0.3.1.css b/oranda-v0.3.1.css new file mode 100644 index 00000000..9a4687a5 --- /dev/null +++ b/oranda-v0.3.1.css @@ -0,0 +1,3 @@ +@import url("https://fonts.googleapis.com/css2?family=Fira+Sans:wght@400;700;900&display=swap");@import url("https://fonts.googleapis.com/css2?family=Comfortaa:wght@400;700&display=swap");@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;600;700&display=swap");@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap");:root{--dark-fg-color:#fff;--light-fg-color:#141414;--light-bg-color:var(--dark-fg-color);--dark-bg-color:var(--light-fg-color);--fg-color:var(--light-fg-color);--bg-color:var(--light-bg-color);--light-link-color:#0284c7;--dark-link-color:#8bb9fe;--link-color:var(--light-link-color);--light-highlight-bg-color:#ededed;--light-highlight-fg-color:#595959;--dark-highlight-bg-color:#27272a;--dark-highlight-fg-color:#ededed;--highlight-fg-color:var(--light-highlight-fg-color);--highlight-bg-color:var(--light-highlight-bg-color);--font-face:"Fira Sans",sans-serif}:root.dark{--fg-color:var(--dark-fg-color);--bg-color:var(--dark-bg-color);--link-color:var(--dark-link-color);--highlight-fg-color:var(--dark-highlight-fg-color);--highlight-bg-color:var(--dark-highlight-bg-color)} + +/*! tailwindcss v3.3.3 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple]{background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:#0000}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=checkbox]:indeterminate,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:#0000}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:#0000}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:root{--color-inherit:inherit;--color-current:currentColor;--color-transparent:#0000;--color-black:#000;--color-white:#fff;--color-slate-50:#f8fafc;--color-slate-100:#f1f5f9;--color-slate-200:#e2e8f0;--color-slate-300:#cbd5e1;--color-slate-400:#94a3b8;--color-slate-500:#64748b;--color-slate-600:#475569;--color-slate-700:#334155;--color-slate-800:#1e293b;--color-slate-900:#0f172a;--color-slate-950:#020617;--color-gray-50:#f9fafb;--color-gray-100:#f3f4f6;--color-gray-200:#e5e7eb;--color-gray-300:#d1d5db;--color-gray-400:#9ca3af;--color-gray-500:#6b7280;--color-gray-600:#4b5563;--color-gray-700:#374151;--color-gray-800:#1f2937;--color-gray-900:#111827;--color-gray-950:#030712;--color-zinc-50:#fafafa;--color-zinc-100:#f4f4f5;--color-zinc-200:#e4e4e7;--color-zinc-300:#d4d4d8;--color-zinc-400:#a1a1aa;--color-zinc-500:#71717a;--color-zinc-600:#52525b;--color-zinc-700:#3f3f46;--color-zinc-800:#27272a;--color-zinc-900:#18181b;--color-zinc-950:#09090b;--color-neutral-50:#fafafa;--color-neutral-100:#f5f5f5;--color-neutral-200:#e5e5e5;--color-neutral-300:#d4d4d4;--color-neutral-400:#a3a3a3;--color-neutral-500:#737373;--color-neutral-600:#525252;--color-neutral-700:#404040;--color-neutral-800:#262626;--color-neutral-900:#171717;--color-neutral-950:#0a0a0a;--color-stone-50:#fafaf9;--color-stone-100:#f5f5f4;--color-stone-200:#e7e5e4;--color-stone-300:#d6d3d1;--color-stone-400:#a8a29e;--color-stone-500:#78716c;--color-stone-600:#57534e;--color-stone-700:#44403c;--color-stone-800:#292524;--color-stone-900:#1c1917;--color-stone-950:#0c0a09;--color-red-50:#fef2f2;--color-red-100:#fee2e2;--color-red-200:#fecaca;--color-red-300:#fca5a5;--color-red-400:#f87171;--color-red-500:#ef4444;--color-red-600:#dc2626;--color-red-700:#b91c1c;--color-red-800:#991b1b;--color-red-900:#7f1d1d;--color-red-950:#450a0a;--color-orange-50:#fff7ed;--color-orange-100:#ffedd5;--color-orange-200:#fed7aa;--color-orange-300:#fdba74;--color-orange-400:#fb923c;--color-orange-500:#f97316;--color-orange-600:#ea580c;--color-orange-700:#c2410c;--color-orange-800:#9a3412;--color-orange-900:#7c2d12;--color-orange-950:#431407;--color-amber-50:#fffbeb;--color-amber-100:#fef3c7;--color-amber-200:#fde68a;--color-amber-300:#fcd34d;--color-amber-400:#fbbf24;--color-amber-500:#f59e0b;--color-amber-600:#d97706;--color-amber-700:#b45309;--color-amber-800:#92400e;--color-amber-900:#78350f;--color-amber-950:#451a03;--color-yellow-50:#fefce8;--color-yellow-100:#fef9c3;--color-yellow-200:#fef08a;--color-yellow-300:#fde047;--color-yellow-400:#facc15;--color-yellow-500:#eab308;--color-yellow-600:#ca8a04;--color-yellow-700:#a16207;--color-yellow-800:#854d0e;--color-yellow-900:#713f12;--color-yellow-950:#422006;--color-lime-50:#f7fee7;--color-lime-100:#ecfccb;--color-lime-200:#d9f99d;--color-lime-300:#bef264;--color-lime-400:#a3e635;--color-lime-500:#84cc16;--color-lime-600:#65a30d;--color-lime-700:#4d7c0f;--color-lime-800:#3f6212;--color-lime-900:#365314;--color-lime-950:#1a2e05;--color-green-50:#f0fdf4;--color-green-100:#dcfce7;--color-green-200:#bbf7d0;--color-green-300:#86efac;--color-green-400:#4ade80;--color-green-500:#22c55e;--color-green-600:#16a34a;--color-green-700:#15803d;--color-green-800:#166534;--color-green-900:#14532d;--color-green-950:#052e16;--color-emerald-50:#ecfdf5;--color-emerald-100:#d1fae5;--color-emerald-200:#a7f3d0;--color-emerald-300:#6ee7b7;--color-emerald-400:#34d399;--color-emerald-500:#10b981;--color-emerald-600:#059669;--color-emerald-700:#047857;--color-emerald-800:#065f46;--color-emerald-900:#064e3b;--color-emerald-950:#022c22;--color-teal-50:#f0fdfa;--color-teal-100:#ccfbf1;--color-teal-200:#99f6e4;--color-teal-300:#5eead4;--color-teal-400:#2dd4bf;--color-teal-500:#14b8a6;--color-teal-600:#0d9488;--color-teal-700:#0f766e;--color-teal-800:#115e59;--color-teal-900:#134e4a;--color-teal-950:#042f2e;--color-cyan-50:#ecfeff;--color-cyan-100:#cffafe;--color-cyan-200:#a5f3fc;--color-cyan-300:#67e8f9;--color-cyan-400:#22d3ee;--color-cyan-500:#06b6d4;--color-cyan-600:#0891b2;--color-cyan-700:#0e7490;--color-cyan-800:#155e75;--color-cyan-900:#164e63;--color-cyan-950:#083344;--color-sky-50:#f0f9ff;--color-sky-100:#e0f2fe;--color-sky-200:#bae6fd;--color-sky-300:#7dd3fc;--color-sky-400:#38bdf8;--color-sky-500:#0ea5e9;--color-sky-600:#0284c7;--color-sky-700:#0369a1;--color-sky-800:#075985;--color-sky-900:#0c4a6e;--color-sky-950:#082f49;--color-blue-50:#eff6ff;--color-blue-100:#dbeafe;--color-blue-200:#bfdbfe;--color-blue-300:#93c5fd;--color-blue-400:#60a5fa;--color-blue-500:#3b82f6;--color-blue-600:#2563eb;--color-blue-700:#1d4ed8;--color-blue-800:#1e40af;--color-blue-900:#1e3a8a;--color-blue-950:#172554;--color-indigo-50:#eef2ff;--color-indigo-100:#e0e7ff;--color-indigo-200:#c7d2fe;--color-indigo-300:#a5b4fc;--color-indigo-400:#818cf8;--color-indigo-500:#6366f1;--color-indigo-600:#4f46e5;--color-indigo-700:#4338ca;--color-indigo-800:#3730a3;--color-indigo-900:#312e81;--color-indigo-950:#1e1b4b;--color-violet-50:#f5f3ff;--color-violet-100:#ede9fe;--color-violet-200:#ddd6fe;--color-violet-300:#c4b5fd;--color-violet-400:#a78bfa;--color-violet-500:#8b5cf6;--color-violet-600:#7c3aed;--color-violet-700:#6d28d9;--color-violet-800:#5b21b6;--color-violet-900:#4c1d95;--color-violet-950:#2e1065;--color-purple-50:#faf5ff;--color-purple-100:#f3e8ff;--color-purple-200:#e9d5ff;--color-purple-300:#d8b4fe;--color-purple-400:#c084fc;--color-purple-500:#a855f7;--color-purple-600:#9333ea;--color-purple-700:#7e22ce;--color-purple-800:#6b21a8;--color-purple-900:#581c87;--color-purple-950:#3b0764;--color-fuchsia-50:#fdf4ff;--color-fuchsia-100:#fae8ff;--color-fuchsia-200:#f5d0fe;--color-fuchsia-300:#f0abfc;--color-fuchsia-400:#e879f9;--color-fuchsia-500:#d946ef;--color-fuchsia-600:#c026d3;--color-fuchsia-700:#a21caf;--color-fuchsia-800:#86198f;--color-fuchsia-900:#701a75;--color-fuchsia-950:#4a044e;--color-pink-50:#fdf2f8;--color-pink-100:#fce7f3;--color-pink-200:#fbcfe8;--color-pink-300:#f9a8d4;--color-pink-400:#f472b6;--color-pink-500:#ec4899;--color-pink-600:#db2777;--color-pink-700:#be185d;--color-pink-800:#9d174d;--color-pink-900:#831843;--color-pink-950:#500724;--color-rose-50:#fff1f2;--color-rose-100:#ffe4e6;--color-rose-200:#fecdd3;--color-rose-300:#fda4af;--color-rose-400:#fb7185;--color-rose-500:#f43f5e;--color-rose-600:#e11d48;--color-rose-700:#be123c;--color-rose-800:#9f1239;--color-rose-900:#881337;--color-rose-950:#4c0519;--color-axo-pink:#ff75c3;--color-axo-pink-dark:#cc5c9b;--color-axo-orange:#f57070;--color-axo-orange-dark:#e85e68;--color-axo-highlighter:#ffd900;--color-axo-black:#141414;--color-axo-light-gray:#ededed;--color-axo-dark-gray:#595959}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }body,html{font-family:var(--font-face);height:100%;scroll-behavior:smooth}.container{display:flex;flex-direction:column;min-height:100%}.page-body{flex-grow:1}:focus{outline-offset:4px;outline-style:solid;outline-width:2px}body{background-color:var(--bg-color);color:var(--fg-color)}a{color:var(--link-color)}a:hover{text-decoration-line:underline;text-underline-offset:4px}.title{font-size:3.75rem;line-height:1;padding-bottom:.5rem;text-align:center}@media (min-width:640px){.title{font-size:6rem;line-height:1}}h1{font-size:1.875rem;font-weight:900;line-height:2.25rem;line-height:1.25;margin-bottom:2rem}@media (min-width:640px){h1{font-size:3.75rem;line-height:1}}h2{font-size:1.5rem;font-weight:700;line-height:2rem;line-height:1.25;margin-bottom:1.5rem}@media (min-width:640px){h2{font-size:3rem;line-height:1}}h2,h3{margin-top:3rem}@media (min-width:640px){h2,h3{margin-top:6rem}}h3{font-size:1.5rem;font-weight:700;line-height:2rem;line-height:1.25;margin-bottom:1rem}@media (min-width:640px){h3{font-size:2.25rem;line-height:2.5rem}}h4{font-size:1.5rem;line-height:2rem;line-height:1.25;margin-bottom:1rem}@media (min-width:640px){h4{font-size:1.875rem;line-height:2.25rem}}h5{color:rgb(51 65 85/var(--tw-text-opacity));font-size:1.25rem;font-weight:700;line-height:1.75rem;line-height:1.25;margin-bottom:1rem}:is(.dark h5),h5{--tw-text-opacity:1}:is(.dark h5){color:rgb(226 232 240/var(--tw-text-opacity))}@media (min-width:640px){h5{font-size:1.5rem;line-height:2rem}}h6{color:rgb(30 41 59/var(--tw-text-opacity));font-size:1.25rem;font-weight:700;line-height:1.75rem;line-height:1.25;margin-bottom:1rem}:is(.dark h6),h6{--tw-text-opacity:1}:is(.dark h6){color:rgb(203 213 225/var(--tw-text-opacity))}@media (min-width:640px){h6{font-size:1.25rem;line-height:1.75rem}}p,table{font-size:1rem;line-height:1.5rem;line-height:1.625;margin-bottom:2rem}@media (min-width:640px){p,table{font-size:1.125rem;line-height:1.75rem}}b,li{font-size:1rem;line-height:1.5rem;line-height:1.625}@media (min-width:640px){b,li{font-size:1.125rem;line-height:1.75rem}}table{margin-bottom:4rem;margin-top:4rem}table th{padding:1rem;text-align:left;text-transform:uppercase}table td{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;padding:1rem;vertical-align:top}table td,table td>code{font-size:.875rem;line-height:1.25rem}table tbody tr{border-color:var(--fg-color);border-top-width:1px}div.table{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:4rem;margin-top:4rem;width:100%}div.table .th{font-size:1.125rem;font-weight:700;line-height:1.75rem;text-align:left;text-transform:uppercase}div.table .th,div.table span:not(.th){border-color:var(--fg-color);border-top-width:1px;padding:1rem}div.table span:not(.th){font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.875rem;line-height:1.25rem}li,ul{list-style-type:none}.rendered-markdown li,.rendered-markdown ul{list-style-type:disc}li{margin-bottom:1rem;margin-left:1rem}@media (min-width:640px){li{margin-left:2rem}}code{font-size:1rem;line-height:1.5rem;line-height:1.625;margin-bottom:1rem;white-space:pre-wrap}@media (min-width:640px){code{font-size:1.125rem;line-height:1.75rem}}code{color:var(--link-color)}div.table code{font-size:.875rem;line-height:1.25rem}h1 code,h2 code,h3 code,h4 code,h5 code,h6 code{font-size:inherit;line-height:inherit}pre{margin-bottom:4rem;margin-top:4rem;overflow:auto;padding:1rem}pre>code{font-size:.75rem;line-height:1rem}@media (min-width:640px){pre>code{font-size:1rem;line-height:1.5rem}}hr{border-style:dashed;border-width:1px;margin:5rem auto;text-align:center;width:16rem}@media (min-width:768px){hr{width:24rem}}img{display:inline}p>img:only-child{display:block;margin:auto}blockquote{border-color:var(--link-color);border-left-width:2px;font-size:1.5rem;line-height:2rem;padding-left:1.5rem}main{margin:6rem auto;max-width:80%}@media (min-width:1024px){main{max-width:56rem}}.github-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E");height:1.25rem;width:1.25rem}.dark .github-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23141414' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.dark .artifacts,.light .artifacts{padding:2rem}.logo{display:block;margin:auto;max-width:20rem}.inline-code{text-align:center;word-break:break-all}.oblique{font-style:oblique}.well-color{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.oranda-hide{display:none}.heading-1{font-size:1.875rem;font-weight:900;line-height:2.25rem;line-height:1.25;margin-bottom:2rem}@media (min-width:640px){.heading-1{font-size:3.75rem;line-height:1}}.heading-2{font-size:1.5rem;font-weight:700;line-height:2rem;line-height:1.25;margin-bottom:1.5rem}@media (min-width:640px){.heading-2{font-size:3rem;line-height:1}}.heading-3{font-size:1.5rem;font-weight:700;line-height:2rem;line-height:1.25;margin-bottom:1rem}@media (min-width:640px){.heading-3{font-size:2.25rem;line-height:2.5rem}}.heading-4{font-size:1.5rem;line-height:2rem;line-height:1.25;margin-bottom:1rem}@media (min-width:640px){.heading-4{font-size:1.875rem;line-height:2.25rem}}.heading-5{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity));font-size:1.25rem;font-weight:700;line-height:1.75rem;line-height:1.25;margin-bottom:1rem}:is(.dark .heading-5){--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}@media (min-width:640px){.heading-5{font-size:1.5rem;line-height:2rem}}.heading-6{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));font-size:1.25rem;font-weight:700;line-height:1.75rem;line-height:1.25;margin-bottom:1rem}:is(.dark .heading-6){--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}@media (min-width:640px){.heading-6{font-size:1.25rem;line-height:1.75rem}}.hidden{display:none}.button{border-radius:.25rem;border-width:2px;cursor:pointer;font-size:1.125rem;line-height:1.75rem;min-width:-moz-max-content;min-width:max-content;padding:.75rem;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:10rem}.button:disabled{cursor:default;opacity:.6}.button.primary{border-color:#0000}.button.primary,.button.secondary{background-color:var(--bg-color);color:var(--fg-color)}.button.secondary{border-color:var(--fg-color)}.button.secondary:hover{background-color:var(--fg-color);border-color:var(--bg-color);color:var(--bg-color)}select{background-color:var(--bg-color);color:var(--fg-color)}footer{align-items:center;background-color:var(--fg-color);color:var(--bg-color);display:flex;flex-grow:0;flex-shrink:1;font-size:.75rem;justify-content:space-between;line-height:1rem;padding:.5rem 1rem;width:100%}.nav{margin-bottom:3rem}.nav,.nav ul{padding:0;text-align:center}.nav ul{align-items:center;display:flex;flex-wrap:wrap;gap:1.5rem;justify-content:center;list-style-type:none}.nav ul li{margin:0;text-transform:capitalize}.repo_banner{background-color:var(--fg-color);color:var(--bg-color);padding-bottom:.375rem;padding-top:.375rem}.repo_banner>a{align-items:flex-start;display:flex;gap:.5rem;height:20px;justify-content:center}.repo_banner>a,.repo_banner>a:hover{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.repo_banner>a:hover{text-decoration-color:#f8fafc;text-decoration-line:underline;text-underline-offset:1px}:is(.dark .repo_banner>a){color:#141414}:is(.dark .repo_banner>a:hover){color:#141414;text-decoration-color:#141414}.funding-wrapper{align-items:center;display:flex;flex-direction:column;margin-top:2rem}.funding-list{gap:1rem;grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:3rem;margin-top:3rem;width:100%}@media (min-width:1024px){.funding-list{display:grid}}.funding-list li{margin:0 0 1rem}.funding-list li a{align-items:center;display:flex;gap:.5rem}.funding-list li a:hover button{--tw-text-opacity:1;background-color:#e85e68;background-color:var(--fg-color);border-color:#e85e68;border-color:var(--bg-color);color:rgb(241 245 249/var(--tw-text-opacity));color:var(--bg-color)}.funding-list .button{display:block;margin-right:.5rem;width:auto}.preferred-funding-list{grid-template-columns:repeat(1,minmax(0,1fr))}.preferred-funding-list li a{flex-direction:column;font-size:2.25rem;font-weight:700;line-height:2.5rem}.preferred-funding-list svg{height:3rem;width:3rem}.preferred-funding-list .button{border-width:0}.package-managers-downloads ul{margin-bottom:4rem;margin-top:4rem}.package-managers-downloads ul li{margin-left:0}.package-managers-downloads pre{margin-bottom:0;margin-top:0}.artifacts{align-items:center;display:none;flex-direction:column;margin-bottom:2rem;padding:0}@media (min-width:640px){.artifacts{display:flex}}.artifacts{background-color:var(--highlight-bg-color);color:var(--highlight-fg-color)}.artifacts-table{display:block;max-width:100%;overflow:auto}ul.tabs{border-bottom-width:2px;border-color:var(--highlight-fg-color);display:flex}ul.tabs li{font-size:1rem;line-height:1.5rem;margin:0;padding:.5rem .75rem}ul.tabs li:hover{cursor:pointer}ul.tabs li.selected{background-color:var(--highlight-fg-color);color:var(--highlight-bg-color)}.install-content{margin:0;max-width:100%;padding:0}.detect{padding-right:.5rem;text-align:center}@media (min-width:768px){.detect{padding-right:0}}.detect+a{display:block;margin-bottom:.5rem;margin-top:.5rem}@media (min-width:640px){.detect+a{display:inline;margin-bottom:0;margin-top:0}}.detect .detected-os{text-transform:capitalize}.artifact-header pre{margin:0 auto}.artifact-header>h4{font-weight:700;margin-bottom:-.5rem;text-align:center}.artifact-header{max-width:100%;width:100%}.artifact-header>div:not(.install-code-wrapper){align-items:center;justify-content:center;margin-top:1rem;text-align:center}@media (min-width:768px){.artifact-header>div:not(.install-code-wrapper){display:flex;gap:1rem;text-align:left}}.backup-download:hover{text-decoration-line:none}.bottom-options{align-items:center;display:flex;flex-direction:row;justify-content:space-between;width:100%}.bottom-options.one{justify-content:center}.install-code-wrapper{align-items:stretch;display:flex}.install-code-wrapper>pre{flex-grow:1;flex-shrink:1}.install-code-wrapper>.button{align-items:center;border-bottom-left-radius:0;border-top-left-radius:0;display:flex;width:auto}.install-code-wrapper>.button:hover{text-decoration-line:none}.install-code-wrapper>.button:focus{outline-offset:-2px}.install-code-wrapper>.button.copy-clipboard-button{border-radius:0}.download-wrapper{display:flex;flex-direction:row;justify-content:center}.button .button-subtitle{display:block;font-size:.75rem;line-height:1rem}.published-date{display:block;margin-bottom:.5rem}.arch{margin:0;padding:1rem 0 0}.arch .contents{min-height:7rem;padding-top:1rem}.mobile-download{display:block;margin-bottom:3rem;margin-left:auto;margin-right:auto}@media (min-width:640px){.mobile-download{display:none}}.install-code-wrapper>.button svg{height:1.5rem;width:1.5rem}.release-body{word-break:break-word}.release-body h1{font-size:1.5rem;font-weight:700;line-height:2rem;line-height:1.25;margin-bottom:1.5rem;margin-top:3rem}@media (min-width:640px){.release-body h1{font-size:3rem;line-height:1}}.release-body h2{font-size:1.5rem;font-weight:700;line-height:2rem;line-height:1.25;margin-bottom:1rem;margin-top:3rem}@media (min-width:640px){.release-body h2{font-size:2.25rem;line-height:2.5rem}}.release-body h3{font-size:1.5rem;line-height:2rem;line-height:1.25;margin-bottom:1rem}@media (min-width:640px){.release-body h3{font-size:1.875rem;line-height:2.25rem}}.release-body h4{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity));font-size:1.25rem;font-weight:700;line-height:1.75rem;line-height:1.25;margin-bottom:1rem}:is(.dark .release-body h4){--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}@media (min-width:640px){.release-body h4{font-size:1.5rem;line-height:2rem}}.release-body h5{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));font-size:1.25rem;font-weight:700;line-height:1.75rem;line-height:1.25;margin-bottom:1rem}:is(.dark .release-body h5){--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}@media (min-width:640px){.release-body h5{font-size:1.25rem;line-height:1.75rem}}.release-body li,.release-body ul{list-style-type:disc}.releases-nav{align-self:flex-start;position:sticky;top:3rem;width:-moz-max-content;width:max-content}.release>h2{margin-top:0}.release>h2 a{color:var(--fg-color)}.releases-list{display:flex;flex-direction:column;gap:8rem}.releases-wrapper{display:grid;gap:3rem;grid-template-columns:160px minmax(0,1fr);margin-top:3rem;position:relative}.releases-nav ul{border-color:var(--fg-color);border-left-width:4px;display:flex;flex-direction:column;gap:.5rem;list-style-type:none;margin:0;padding-left:1rem}.releases-nav ul li{font-size:.875rem;line-height:1.25rem;margin:0 0 0 .25rem;position:relative}.releases-nav ul li:before{--tw-translate-y:-50%;background-color:var(--fg-color);content:"";display:block;height:.25rem;left:-1.25rem;position:absolute;top:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:1rem}.releases-nav ul li a{text-decoration-color:#0000;text-underline-offset:2px}.releases-nav ul li a:hover{text-decoration-line:underline}.releases-nav ul li a{color:var(--fg-color)}.release-info{font-size:1rem;gap:2rem;line-height:1.5rem}.prereleases-toggle,.release-info{align-items:center;display:flex}.prereleases-toggle{margin-bottom:1.5rem;position:relative;width:-moz-max-content;width:max-content}.prereleases-toggle input{border-radius:.25rem;color:var(--fg-color);height:1.25rem;width:1.25rem}.prereleases-toggle label{font-weight:500;margin-left:.75rem}.release-info svg{height:1.5rem;width:1.5rem}.release-info>span{align-items:center;display:flex;gap:.5rem}ul.index-grid{align-items:stretch;display:grid;gap:2rem;margin-top:4rem}@media (min-width:768px){ul.index-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){ul.index-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}.index-grid li{border-color:var(--bg-color);border-radius:.25rem;border-width:1px;box-shadow:0 0 0 8px #0000004d;flex-direction:column;margin-left:0}.index-grid .content,.index-grid li{display:flex;justify-content:space-between}.index-grid .content{padding:1rem}.index-grid .links{display:flex;width:100%}.index-grid .links>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.index-grid .links{border-top-width:1px}.index-grid .links a{align-items:center;display:inline-flex;width:50%}.index-grid .links a>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.index-grid .links a{padding:1rem 1.5rem}.index-grid .content .index-logo{flex-shrink:0;height:5rem;position:relative;width:5rem}.index-grid li.preferred{grid-column:span 2/span 2}.index-about h2{margin-top:0}html.axo{--highlight-color:#a78bfa;--axo-orange-color:#f57070;--axo-pink-color:#ff75c3;--light-fg-color:#141414;--light-link-color:var(--axo-pink-color);--dark-link-color:var(--axo-pink-color);--light-highlight-bg-color:var(--light-bg-color);--light-highlight-fg-color:var(--light-fg-color);--dark-highlight-bg-color:var(--light-fg-color);--dark-highlight-fg-color:var(--light-bg-color);--font-face:"Comfortaa",sans-serif}code,h1,h2,h3{color:var(--highlight-color)}html.axo .button.primary{background-color:var(--link-color)}html.axo .repo_banner,html.axo footer{animation-duration:3s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:animation-gradient-title;background:-webkit-linear-gradient(left,var(--axo-orange-color),var(--axo-pink-color),var(--axo-orange-color));background-size:1600px 200px}@media (prefers-reduced-motion){html.axo .repo_banner,html.axo footer{animation-duration:0s}}html.hacker html.axo .repo_banner,html.hacker html.axo footer{background:-webkit-linear-gradient(left,var(--hacker-green),var(--color-green-600),var(--hacker-green))}html.cupcake html.axo .repo_banner,html.cupcake html.axo footer{background:var(--secondary)}html.axo h1.title{-webkit-text-fill-color:#0000;animation-duration:3s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:animation-gradient-title;background:-webkit-linear-gradient(left,var(--axo-orange-color),var(--axo-pink-color),var(--axo-orange-color));background-size:1600px 200px}@media (prefers-reduced-motion){html.axo h1.title{animation-duration:0s}}html.hacker html.axo h1.title{background:-webkit-linear-gradient(left,var(--hacker-green),var(--color-green-600),var(--hacker-green))}html.cupcake html.axo h1.title{background:var(--secondary)}html.axo h1.title{-webkit-background-clip:text;background-clip:text}.axo-gradient{animation-duration:3s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:animation-gradient-title;background:-webkit-linear-gradient(left,var(--axo-orange-color),var(--axo-pink-color),var(--axo-orange-color));background-size:1600px 200px}.text-fill-transparent{-webkit-text-fill-color:#0000}.axo-gradient-text{-webkit-text-fill-color:#0000;animation-duration:3s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:animation-gradient-title;background:-webkit-linear-gradient(left,var(--axo-orange-color),var(--axo-pink-color),var(--axo-orange-color));background-size:1600px 200px}@media (prefers-reduced-motion){.axo-gradient-text{animation-duration:0s}}html.hacker .axo-gradient-text{background:-webkit-linear-gradient(left,var(--hacker-green),var(--color-green-600),var(--hacker-green))}html.cupcake .axo-gradient-text{background:var(--secondary)}.axo-gradient-text{-webkit-background-clip:text;background-clip:text}@media (prefers-reduced-motion){.axo-gradient{animation-duration:0s}}@keyframes slide-in{0%{top:-100vh}to{top:0}}@keyframes animation-gradient-title{0%{background-position:0 1600px}to{background-position:1600px 0}}html.hacker{--light-highlight-bg-color:var(--dark-highlight-bg-color);--light-highlight-fg-color:var(--dark-highlight-fg-color);--hacker-green:#20c20e}html.hacker ::-moz-selection{background-color:#20c20e;color:#141414}html.hacker ::selection{background-color:#20c20e;color:#141414}html.hacker body{--tw-text-opacity:1;background-color:#141414;font-family:IBM Plex Mono,monospace}html.hacker .button.secondary,html.hacker body{color:rgb(203 213 225/var(--tw-text-opacity))}html.hacker .button.secondary{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}html.hacker .button.secondary:hover{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity));color:#141414}html.hacker h2,html.hacker h3,html.hacker h4,html.hacker h5,html.hacker h6{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}html.hacker .repo_banner>a,html.hacker footer{color:var(--light-color);padding-bottom:.5rem;padding-top:.5rem}html.hacker p,html.hacker table{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}html.hacker .title{display:inline-block;margin-left:2rem;position:relative;text-align:left}@keyframes blink-animation{to{visibility:hidden}}html.hacker .title:after{animation:blink-animation 1s steps(5,start) infinite;background:var(--hacker-green);content:"";display:block;height:70px;left:100%;margin-left:.75rem;position:absolute;top:.75rem;width:1rem}html.hacker .title:before{--tw-translate-y:-50%;--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity));content:"> ";display:block;font-size:3rem;left:-2rem;line-height:1;margin-top:.5rem;position:absolute;top:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}html.hacker .title,html.hacker div.table .th,html.hacker h1{color:var(--hacker-green)}html.hacker a{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}html.hacker a:hover{text-decoration-color:#f97316}html.hacker .axo-gradient{background:-webkit-linear-gradient(left,var(--hacker-green),var(--color-green-600),var(--hacker-green))}html.hacker .nav ul{justify-content:flex-start}html.hacker .button.primary{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity));border-color:#0000;color:#141414}html.hacker .button.primary:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}html.hacker .artifact-header>h4{color:var(--light-color);text-align:left}html.hacker .releases-nav ul li a{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}html.hacker .releases-nav ul li:before{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}html.hacker .releases-nav ul{--tw-border-opacity:1;border-left-color:rgb(75 85 99/var(--tw-border-opacity))}html.hacker .prereleases-toggle input:checked{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}html.hacker .releases-nav ul li a:hover{text-decoration-color:#f97316}html.hacker .funding-wrapper{align-items:flex-start}html.hacker .artifacts{padding:2rem}html.hacker .published-date{display:block;width:100%}html.hacker .logo{display:block;margin:0}html.cupcake body{--b1:#faf7f5;--b2:#dfaff7;--text:#291334cc;--links:#291334;--primary:#65c3c8;--secondary:#291334;--secondary-100:#210f2a;--code:#291334;background-color:var(--b1);color:var(--text);font-family:Inter,sans-serif}html.cupcake ::-moz-selection{-webkit-text-fill-color:var(--code);background-color:var(--b2);color:var(--code)}html.cupcake ::selection{-webkit-text-fill-color:var(--code);background-color:var(--b2);color:var(--code)}html.cupcake .button.primary{background:var(--secondary);border-color:#0000;color:var(--b2);text-decoration-line:none}html.cupcake .button.primary:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity));background:var(--secondary-100)}html.cupcake .button.secondary{border:1px solid var(--secondary);color:var(--secondary-100)}html.cupcake .button.secondary:hover{background:var(--secondary);color:var(--b2)}html.cupcake h1,html.cupcake h2,html.cupcake h3,html.cupcake h4,html.cupcake h5,html.cupcake h6,html.cupcake p,html.cupcake table{color:var(--text)}html.cupcake .title{color:var(--primary)}html.cupcake a{color:var(--links);font-weight:500;text-decoration-line:underline;text-underline-offset:4px}html.cupcake a:hover{color:var(--code);text-underline-offset:2px}html.cupcake .axo-gradient{background:var(--secondary)}html.cupcake .github-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23dfaff7' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}html.cupcake .repo_banner>a,html.cupcake footer{color:var(--b2);text-decoration:none}html.cupcake code{color:var(--code);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-weight:500}html.cupcake .prereleases-toggle input:checked{background-color:var(--primary)}html.cupcake .artifacts{padding:2rem}html.cupcake .releases-nav ul li a{color:var(--links)}html.cupcake .releases-nav ul li:before{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}html.cupcake .releases-nav ul{--tw-border-opacity:1;border-left-color:rgb(209 213 219/var(--tw-border-opacity))}html.cupcake div.table .th{color:var(--primary)} \ No newline at end of file