[INFO] cloning repository https://github.com/ryyanmapes/Minecraft-Recipe-Randomizer
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/ryyanmapes/Minecraft-Recipe-Randomizer" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fryyanmapes%2FMinecraft-Recipe-Randomizer", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fryyanmapes%2FMinecraft-Recipe-Randomizer'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] ed090bb135f3aa550e74b84a4c56f28e0d6188e1
[INFO] checking ryyanmapes/Minecraft-Recipe-Randomizer against master#dc375db7d8df0aa450e622c529147c95eee756f5 for pr-156749
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fryyanmapes%2FMinecraft-Recipe-Randomizer" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/ryyanmapes/Minecraft-Recipe-Randomizer
[INFO] finished tweaking git repo https://github.com/ryyanmapes/Minecraft-Recipe-Randomizer
[INFO] tweaked toml for git repo https://github.com/ryyanmapes/Minecraft-Recipe-Randomizer written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/ryyanmapes/Minecraft-Recipe-Randomizer on toolchain dc375db7d8df0aa450e622c529147c95eee756f5
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+dc375db7d8df0aa450e622c529147c95eee756f5" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/ryyanmapes/Minecraft-Recipe-Randomizer already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+dc375db7d8df0aa450e622c529147c95eee756f5" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded serde v1.0.91
[INFO] [stderr]   Downloaded autocfg v0.1.4
[INFO] [stderr]   Downloaded itoa v0.4.4
[INFO] [stderr]   Downloaded ryu v0.2.8
[INFO] [stderr]   Downloaded libc v0.2.55
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3e793bdf10248eb2ddbd6b0faebed8155c11b4589982e2893733958d93e8d540" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] b3cbe7f896491ff6302e9fc6ff53982c3adcdf351c863a0b0f6d0df6467fd7cb
[INFO] running `Command { std: "docker" "start" "b3cbe7f896491ff6302e9fc6ff53982c3adcdf351c863a0b0f6d0df6467fd7cb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "b3cbe7f896491ff6302e9fc6ff53982c3adcdf351c863a0b0f6d0df6467fd7cb" "/opt/rustwide/cargo-home/bin/cargo" "+dc375db7d8df0aa450e622c529147c95eee756f5" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "b3cbe7f896491ff6302e9fc6ff53982c3adcdf351c863a0b0f6d0df6467fd7cb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "b3cbe7f896491ff6302e9fc6ff53982c3adcdf351c863a0b0f6d0df6467fd7cb" "/opt/rustwide/cargo-home/bin/cargo" "+dc375db7d8df0aa450e622c529147c95eee756f5" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling autocfg v0.1.4
[INFO] [stderr]    Compiling libc v0.2.55
[INFO] [stderr]    Compiling serde v1.0.91
[INFO] [stderr]    Compiling ryu v0.2.8
[INFO] [stderr]     Checking itoa v0.4.4
[INFO] [stderr]     Checking rand_jitter v0.1.4
[INFO] [stderr]    Compiling rand_pcg v0.1.2
[INFO] [stderr]    Compiling rand_chacha v0.1.1
[INFO] [stderr]    Compiling rand v0.6.5
[INFO] [stderr]     Checking rand_os v0.1.3
[INFO] [stderr]     Checking serde_json v1.0.39
[INFO] [stderr]     Checking minecraft_randomizer v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Result`
[INFO] [stdout]  --> src/main.rs:7:18
[INFO] [stdout]   |
[INFO] [stdout] 7 | use serde_json::{Result, Value};
[INFO] [stdout]   |                  ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/main.rs:77:6
[INFO] [stdout]    |
[INFO] [stdout] 77 |         if ((iterations >= 5 && rng.gen_range(0,2) == 1) || craftable_recipes.len() == 0) {
[INFO] [stdout]    |            ^                                                                            ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 77 -         if ((iterations >= 5 && rng.gen_range(0,2) == 1) || craftable_recipes.len() == 0) {
[INFO] [stdout] 77 +         if (iterations >= 5 && rng.gen_range(0,2) == 1) || craftable_recipes.len() == 0  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/main.rs:128:6
[INFO] [stdout]     |
[INFO] [stdout] 128 |         if (remaining_products.len() == 0) {
[INFO] [stdout]     |            ^                             ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 128 -         if (remaining_products.len() == 0) {
[INFO] [stdout] 128 +         if remaining_products.len() == 0  {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Result`
[INFO] [stdout]  --> src/main.rs:7:18
[INFO] [stdout]   |
[INFO] [stdout] 7 | use serde_json::{Result, Value};
[INFO] [stdout]   |                  ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/main.rs:77:6
[INFO] [stdout]    |
[INFO] [stdout] 77 |         if ((iterations >= 5 && rng.gen_range(0,2) == 1) || craftable_recipes.len() == 0) {
[INFO] [stdout]    |            ^                                                                            ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 77 -         if ((iterations >= 5 && rng.gen_range(0,2) == 1) || craftable_recipes.len() == 0) {
[INFO] [stdout] 77 +         if (iterations >= 5 && rng.gen_range(0,2) == 1) || craftable_recipes.len() == 0  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/main.rs:128:6
[INFO] [stdout]     |
[INFO] [stdout] 128 |         if (remaining_products.len() == 0) {
[INFO] [stdout]     |            ^                             ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 128 -         if (remaining_products.len() == 0) {
[INFO] [stdout] 128 +         if remaining_products.len() == 0  {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:55:6
[INFO] [stdout]    |
[INFO] [stdout] 55 |     let mut all_recipes = get_all_products(&all_recipe_files);
[INFO] [stdout]    |         ----^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:57:6
[INFO] [stdout]    |
[INFO] [stdout] 57 |     let mut all_products = get_products_from_recipes(&all_recipes);
[INFO] [stdout]    |         ----^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:145:7
[INFO] [stdout]     |
[INFO] [stdout] 145 |         let mut reader = BufReader::new(&f);
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:155:9
[INFO] [stdout]     |
[INFO] [stdout] 155 |                 let mut result = obj.get_mut("result")
[INFO] [stdout]     |                     ----^^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:161:11
[INFO] [stdout]     |
[INFO] [stdout] 161 |                         let mut item = result_obj.get_mut("item")
[INFO] [stdout]     |                             ----^^^^
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `s`
[INFO] [stdout]    --> src/main.rs:166:20
[INFO] [stdout]     |
[INFO] [stdout] 166 |                     Value::String(s) => {
[INFO] [stdout]     |                                   ^ help: if this is intentional, prefix it with an underscore: `_s`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `random_num_3` is never read
[INFO] [stdout]   --> src/main.rs:78:34
[INFO] [stdout]    |
[INFO] [stdout] 78 |             let mut random_num_3: usize = 0;
[INFO] [stdout]    |                                           ^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 82 |                 random_num_3 = rng.gen_range(0, scrambled_recipes.len());
[INFO] [stdout]    |                 -------------------------------------------------------- `random_num_3` is overwritten here before the previous value is read
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:215:6
[INFO] [stdout]     |
[INFO] [stdout] 215 |     let mut filename = file.file_name().unwrap().to_str().unwrap().to_string();
[INFO] [stdout]     |         ----^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:392:7
[INFO] [stdout]     |
[INFO] [stdout] 392 |         let mut reader = BufReader::new(f);
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:601:7
[INFO] [stdout]     |
[INFO] [stdout] 601 |         let mut reader = BufReader::new(f);
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:661:6
[INFO] [stdout]     |
[INFO] [stdout] 661 |     let mut reader = BufReader::new(f);
[INFO] [stdout]     |         ----^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_dead_end_products` is never used
[INFO] [stdout]    --> src/main.rs:237:4
[INFO] [stdout]     |
[INFO] [stdout] 237 | fn get_dead_end_products(recipes: &Vec<Recipe>, products: &Vec<String>, tags: &HashMap<String, LogicDependency>) -> Vec<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/main.rs:179:3
[INFO] [stdout]     |
[INFO] [stdout] 179 |         f.set_len(0);
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 179 |         let _ = f.set_len(0);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/main.rs:182:3
[INFO] [stdout]     |
[INFO] [stdout] 182 |         writer.seek(SeekFrom::Start(0));
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 182 |         let _ = writer.seek(SeekFrom::Start(0));
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/main.rs:183:3
[INFO] [stdout]     |
[INFO] [stdout] 183 |         writer.write(new_json.as_bytes());
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 183 |         let _ = writer.write(new_json.as_bytes());
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over a `Result`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/main.rs:647:11
[INFO] [stdout]     |
[INFO] [stdout] 647 |     for a in fs::read_dir(recipes_dir) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(for_loops_over_fallibles)]` on by default
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 647 -     for a in fs::read_dir(recipes_dir) {
[INFO] [stdout] 647 +     while let Ok(a) = fs::read_dir(recipes_dir) {
[INFO] [stdout]     |
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 647 -     for a in fs::read_dir(recipes_dir) {
[INFO] [stdout] 647 +     if let Ok(a) = fs::read_dir(recipes_dir) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:55:6
[INFO] [stdout]    |
[INFO] [stdout] 55 |     let mut all_recipes = get_all_products(&all_recipe_files);
[INFO] [stdout]    |         ----^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:57:6
[INFO] [stdout]    |
[INFO] [stdout] 57 |     let mut all_products = get_products_from_recipes(&all_recipes);
[INFO] [stdout]    |         ----^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:145:7
[INFO] [stdout]     |
[INFO] [stdout] 145 |         let mut reader = BufReader::new(&f);
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:155:9
[INFO] [stdout]     |
[INFO] [stdout] 155 |                 let mut result = obj.get_mut("result")
[INFO] [stdout]     |                     ----^^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:161:11
[INFO] [stdout]     |
[INFO] [stdout] 161 |                         let mut item = result_obj.get_mut("item")
[INFO] [stdout]     |                             ----^^^^
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `s`
[INFO] [stdout]    --> src/main.rs:166:20
[INFO] [stdout]     |
[INFO] [stdout] 166 |                     Value::String(s) => {
[INFO] [stdout]     |                                   ^ help: if this is intentional, prefix it with an underscore: `_s`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `random_num_3` is never read
[INFO] [stdout]   --> src/main.rs:78:34
[INFO] [stdout]    |
[INFO] [stdout] 78 |             let mut random_num_3: usize = 0;
[INFO] [stdout]    |                                           ^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 82 |                 random_num_3 = rng.gen_range(0, scrambled_recipes.len());
[INFO] [stdout]    |                 -------------------------------------------------------- `random_num_3` is overwritten here before the previous value is read
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:215:6
[INFO] [stdout]     |
[INFO] [stdout] 215 |     let mut filename = file.file_name().unwrap().to_str().unwrap().to_string();
[INFO] [stdout]     |         ----^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:392:7
[INFO] [stdout]     |
[INFO] [stdout] 392 |         let mut reader = BufReader::new(f);
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:601:7
[INFO] [stdout]     |
[INFO] [stdout] 601 |         let mut reader = BufReader::new(f);
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:661:6
[INFO] [stdout]     |
[INFO] [stdout] 661 |     let mut reader = BufReader::new(f);
[INFO] [stdout]     |         ----^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_dead_end_products` is never used
[INFO] [stdout]    --> src/main.rs:237:4
[INFO] [stdout]     |
[INFO] [stdout] 237 | fn get_dead_end_products(recipes: &Vec<Recipe>, products: &Vec<String>, tags: &HashMap<String, LogicDependency>) -> Vec<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/main.rs:179:3
[INFO] [stdout]     |
[INFO] [stdout] 179 |         f.set_len(0);
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 179 |         let _ = f.set_len(0);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/main.rs:182:3
[INFO] [stdout]     |
[INFO] [stdout] 182 |         writer.seek(SeekFrom::Start(0));
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 182 |         let _ = writer.seek(SeekFrom::Start(0));
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/main.rs:183:3
[INFO] [stdout]     |
[INFO] [stdout] 183 |         writer.write(new_json.as_bytes());
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 183 |         let _ = writer.write(new_json.as_bytes());
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over a `Result`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/main.rs:647:11
[INFO] [stdout]     |
[INFO] [stdout] 647 |     for a in fs::read_dir(recipes_dir) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(for_loops_over_fallibles)]` on by default
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 647 -     for a in fs::read_dir(recipes_dir) {
[INFO] [stdout] 647 +     while let Ok(a) = fs::read_dir(recipes_dir) {
[INFO] [stdout]     |
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 647 -     for a in fs::read_dir(recipes_dir) {
[INFO] [stdout] 647 +     if let Ok(a) = fs::read_dir(recipes_dir) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 5.17s
[INFO] running `Command { std: "docker" "inspect" "b3cbe7f896491ff6302e9fc6ff53982c3adcdf351c863a0b0f6d0df6467fd7cb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "b3cbe7f896491ff6302e9fc6ff53982c3adcdf351c863a0b0f6d0df6467fd7cb", kill_on_drop: false }`
[INFO] [stdout] b3cbe7f896491ff6302e9fc6ff53982c3adcdf351c863a0b0f6d0df6467fd7cb
