[INFO] updating cached repository VoxWave/Compilers2018 [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/VoxWave/Compilers2018 [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/VoxWave/Compilers2018" "work/ex/clippy-test-run/sources/stable/gh/VoxWave/Compilers2018"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/VoxWave/Compilers2018'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/VoxWave/Compilers2018" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/VoxWave/Compilers2018"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/VoxWave/Compilers2018'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] ba4fcdaabdef34f3da20321a7a9e49d6556eb676 [INFO] sha for GitHub repo VoxWave/Compilers2018: ba4fcdaabdef34f3da20321a7a9e49d6556eb676 [INFO] validating manifest of VoxWave/Compilers2018 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of VoxWave/Compilers2018 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing VoxWave/Compilers2018 [INFO] finished frobbing VoxWave/Compilers2018 [INFO] frobbed toml for VoxWave/Compilers2018 written to work/ex/clippy-test-run/sources/stable/gh/VoxWave/Compilers2018/Cargo.toml [INFO] started frobbing VoxWave/Compilers2018 [INFO] finished frobbing VoxWave/Compilers2018 [INFO] frobbed toml for VoxWave/Compilers2018 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/VoxWave/Compilers2018/Cargo.toml [INFO] crate VoxWave/Compilers2018 has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting VoxWave/Compilers2018 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/VoxWave/Compilers2018:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] fc174c81839ea207a33d7e9f6265063b5f98ae7584e53d27e0287865345c1b66 [INFO] running `"docker" "start" "-a" "fc174c81839ea207a33d7e9f6265063b5f98ae7584e53d27e0287865345c1b66"` [INFO] [stderr] Checking char_stream v0.1.8 [INFO] [stderr] Checking num-complex v0.1.43 [INFO] [stderr] Checking num-bigint v0.1.43 [INFO] [stderr] Checking rayon-core v1.4.0 [INFO] [stderr] Checking rayon v1.0.1 [INFO] [stderr] Checking num-rational v0.1.42 [INFO] [stderr] Checking num v0.1.42 [INFO] [stderr] Checking minipl-compiler v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: unused import: `std::sync::mpsc::Sender` [INFO] [stderr] --> src/main.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use std::sync::mpsc::Sender; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::sync::mpsc::Receiver` [INFO] [stderr] --> src/main.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use std::sync::mpsc::Receiver; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::process::abort` [INFO] [stderr] --> src/main.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | use std::process::abort; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/parser/mod.rs:255:17 [INFO] [stderr] | [INFO] [stderr] 255 | _ => panic!("unexpected Token {:#?} read during", t), [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `b` [INFO] [stderr] --> src/interpreter.rs:207:33 [INFO] [stderr] | [INFO] [stderr] 207 | Value::Bool(b) => panic!("boolean printing is not supported"), [INFO] [stderr] | ^ help: consider using `_b` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/main.rs:29:27 [INFO] [stderr] | [INFO] [stderr] 29 | let (mut kill_switch, mut kill_signal) = channel(); [INFO] [stderr] | ----^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/main.rs:29:10 [INFO] [stderr] | [INFO] [stderr] 29 | let (mut kill_switch, mut kill_signal) = channel(); [INFO] [stderr] | ----^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::sync::mpsc::Sender` [INFO] [stderr] --> src/main.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use std::sync::mpsc::Sender; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::sync::mpsc::Receiver` [INFO] [stderr] --> src/main.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use std::sync::mpsc::Receiver; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::process::abort` [INFO] [stderr] --> src/main.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | use std::process::abort; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/file_handling.rs:36:5 [INFO] [stderr] | [INFO] [stderr] 36 | / match file.read_to_string(&mut source_text) { [INFO] [stderr] 37 | | Err(why) => panic!("couldn't read {}: {}", display, Error::description(&why)), [INFO] [stderr] 38 | | Ok(_) => {} [INFO] [stderr] 39 | | } [INFO] [stderr] | |_____^ help: try this: `if let Err(why) = file.read_to_string(&mut source_text) { panic!("couldn't read {}: {}", display, Error::description(&why)) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `scanner::Scanner` [INFO] [stderr] --> src/scanner/mod.rs:102:5 [INFO] [stderr] | [INFO] [stderr] 102 | / pub fn new() -> Self { [INFO] [stderr] 103 | | Scanner { [INFO] [stderr] 104 | | tokens: VecDeque::new(), [INFO] [stderr] 105 | | scan_mode: ScanMode::Normal, [INFO] [stderr] ... | [INFO] [stderr] 109 | | } [INFO] [stderr] 110 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 100 | impl Default for scanner::Scanner { [INFO] [stderr] 101 | fn default() -> Self { [INFO] [stderr] 102 | Self::new() [INFO] [stderr] 103 | } [INFO] [stderr] 104 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/parser/mod.rs:237:37 [INFO] [stderr] | [INFO] [stderr] 237 | let statement = match &self.buffer[0] { [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 238 | | &Token::Identifier(ref identifier) => { [INFO] [stderr] 239 | | Statement::Assignment( [INFO] [stderr] 240 | | identifier.clone(), [INFO] [stderr] ... | [INFO] [stderr] 246 | | ), [INFO] [stderr] 247 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 237 | let statement = match self.buffer[0] { [INFO] [stderr] 238 | Token::Identifier(ref identifier) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/parser/mod.rs:269:29 [INFO] [stderr] | [INFO] [stderr] 269 | _ => panic!("Expected keyword 'in', found {:#?}"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::panic_params)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parser/mod.rs:337:20 [INFO] [stderr] | [INFO] [stderr] 337 | if 0 < self.buffer.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/parser/mod.rs:449:92 [INFO] [stderr] | [INFO] [stderr] 449 | let operand2 = Operand::Expr(Box::new(parse_expression(&tokens[opening_index..(closing_index_2+1)]))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `opening_index..=closing_index_2` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/parser/mod.rs:477:29 [INFO] [stderr] | [INFO] [stderr] 477 | _ => panic!("expression started with and invalid token {:#?}"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/parser/mod.rs:489:21 [INFO] [stderr] | [INFO] [stderr] 489 | _ => panic!("expected an operand but found a {:#?} instead"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/parser/mod.rs:512:21 [INFO] [stderr] | [INFO] [stderr] 512 | _ => panic!("expected an operator but found {:#?} instead"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/mod.rs:520:18 [INFO] [stderr] | [INFO] [stderr] 520 | 0 => match t { [INFO] [stderr] | __________________^ [INFO] [stderr] 521 | | &Token::Bracket(Direction::Left) => opened_brackets += 1, [INFO] [stderr] 522 | | _ => panic!("the first token was a {:#?} instead of an opening bracket"), [INFO] [stderr] 523 | | }, [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 520 | 0 => match *t { [INFO] [stderr] 521 | Token::Bracket(Direction::Left) => opened_brackets += 1, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/parser/mod.rs:522:29 [INFO] [stderr] | [INFO] [stderr] 522 | _ => panic!("the first token was a {:#?} instead of an opening bracket"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/mod.rs:524:18 [INFO] [stderr] | [INFO] [stderr] 524 | _ => match t { [INFO] [stderr] | __________________^ [INFO] [stderr] 525 | | &Token::Bracket(Direction::Left) => opened_brackets += 1, [INFO] [stderr] 526 | | &Token::Bracket(Direction::Right) => { [INFO] [stderr] 527 | | opened_brackets -= 1; [INFO] [stderr] ... | [INFO] [stderr] 532 | | _ => {} [INFO] [stderr] 533 | | }, [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 524 | _ => match *t { [INFO] [stderr] 525 | Token::Bracket(Direction::Left) => opened_brackets += 1, [INFO] [stderr] 526 | Token::Bracket(Direction::Right) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `interpreter::Interpreter` [INFO] [stderr] --> src/interpreter.rs:50:5 [INFO] [stderr] | [INFO] [stderr] 50 | / pub fn new() -> Self { [INFO] [stderr] 51 | | Interpreter { [INFO] [stderr] 52 | | context: HashMap::new(), [INFO] [stderr] 53 | | } [INFO] [stderr] 54 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 45 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/interpreter.rs:112:18 [INFO] [stderr] | [INFO] [stderr] 112 | .expect(&format!("undefined variable {}", iden)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("undefined variable {}", iden))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/interpreter.rs:131:33 [INFO] [stderr] | [INFO] [stderr] 131 | _ => panic!("{:#?} did not evaluate to a boolean"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/interpreter.rs:165:21 [INFO] [stderr] | [INFO] [stderr] 165 | / if self.context.contains_key(&var) { [INFO] [stderr] 166 | | panic!("Tried to initialize a variable that was already initialized"); [INFO] [stderr] 167 | | } else { [INFO] [stderr] 168 | | self.context.insert(var, Mutable(value)); [INFO] [stderr] 169 | | } [INFO] [stderr] | |_____________________^ help: consider using: `self.context.entry(var)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | kill_switch.send(true); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:43:5 [INFO] [stderr] | [INFO] [stderr] 43 | kill_signal.recv(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/parser/mod.rs:255:17 [INFO] [stderr] | [INFO] [stderr] 255 | _ => panic!("unexpected Token {:#?} read during", t), [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `b` [INFO] [stderr] --> src/interpreter.rs:207:33 [INFO] [stderr] | [INFO] [stderr] 207 | Value::Bool(b) => panic!("boolean printing is not supported"), [INFO] [stderr] | ^ help: consider using `_b` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/main.rs:29:27 [INFO] [stderr] | [INFO] [stderr] 29 | let (mut kill_switch, mut kill_signal) = channel(); [INFO] [stderr] | ----^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/main.rs:29:10 [INFO] [stderr] | [INFO] [stderr] 29 | let (mut kill_switch, mut kill_signal) = channel(); [INFO] [stderr] | ----^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parser/test.rs:20:9 [INFO] [stderr] | [INFO] [stderr] 20 | let mut expected: VecDeque<_> = vec![ [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/file_handling.rs:36:5 [INFO] [stderr] | [INFO] [stderr] 36 | / match file.read_to_string(&mut source_text) { [INFO] [stderr] 37 | | Err(why) => panic!("couldn't read {}: {}", display, Error::description(&why)), [INFO] [stderr] 38 | | Ok(_) => {} [INFO] [stderr] 39 | | } [INFO] [stderr] | |_____^ help: try this: `if let Err(why) = file.read_to_string(&mut source_text) { panic!("couldn't read {}: {}", display, Error::description(&why)) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `scanner::Scanner` [INFO] [stderr] --> src/scanner/mod.rs:102:5 [INFO] [stderr] | [INFO] [stderr] 102 | / pub fn new() -> Self { [INFO] [stderr] 103 | | Scanner { [INFO] [stderr] 104 | | tokens: VecDeque::new(), [INFO] [stderr] 105 | | scan_mode: ScanMode::Normal, [INFO] [stderr] ... | [INFO] [stderr] 109 | | } [INFO] [stderr] 110 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 100 | impl Default for scanner::Scanner { [INFO] [stderr] 101 | fn default() -> Self { [INFO] [stderr] 102 | Self::new() [INFO] [stderr] 103 | } [INFO] [stderr] 104 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/parser/mod.rs:237:37 [INFO] [stderr] | [INFO] [stderr] 237 | let statement = match &self.buffer[0] { [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 238 | | &Token::Identifier(ref identifier) => { [INFO] [stderr] 239 | | Statement::Assignment( [INFO] [stderr] 240 | | identifier.clone(), [INFO] [stderr] ... | [INFO] [stderr] 246 | | ), [INFO] [stderr] 247 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 237 | let statement = match self.buffer[0] { [INFO] [stderr] 238 | Token::Identifier(ref identifier) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/parser/mod.rs:269:29 [INFO] [stderr] | [INFO] [stderr] 269 | _ => panic!("Expected keyword 'in', found {:#?}"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::panic_params)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parser/mod.rs:337:20 [INFO] [stderr] | [INFO] [stderr] 337 | if 0 < self.buffer.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/parser/mod.rs:449:92 [INFO] [stderr] | [INFO] [stderr] 449 | let operand2 = Operand::Expr(Box::new(parse_expression(&tokens[opening_index..(closing_index_2+1)]))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `opening_index..=closing_index_2` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/parser/mod.rs:477:29 [INFO] [stderr] | [INFO] [stderr] 477 | _ => panic!("expression started with and invalid token {:#?}"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/parser/mod.rs:489:21 [INFO] [stderr] | [INFO] [stderr] 489 | _ => panic!("expected an operand but found a {:#?} instead"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/parser/mod.rs:512:21 [INFO] [stderr] | [INFO] [stderr] 512 | _ => panic!("expected an operator but found {:#?} instead"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/mod.rs:520:18 [INFO] [stderr] | [INFO] [stderr] 520 | 0 => match t { [INFO] [stderr] | __________________^ [INFO] [stderr] 521 | | &Token::Bracket(Direction::Left) => opened_brackets += 1, [INFO] [stderr] 522 | | _ => panic!("the first token was a {:#?} instead of an opening bracket"), [INFO] [stderr] 523 | | }, [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 520 | 0 => match *t { [INFO] [stderr] 521 | Token::Bracket(Direction::Left) => opened_brackets += 1, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/parser/mod.rs:522:29 [INFO] [stderr] | [INFO] [stderr] 522 | _ => panic!("the first token was a {:#?} instead of an opening bracket"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/mod.rs:524:18 [INFO] [stderr] | [INFO] [stderr] 524 | _ => match t { [INFO] [stderr] | __________________^ [INFO] [stderr] 525 | | &Token::Bracket(Direction::Left) => opened_brackets += 1, [INFO] [stderr] 526 | | &Token::Bracket(Direction::Right) => { [INFO] [stderr] 527 | | opened_brackets -= 1; [INFO] [stderr] ... | [INFO] [stderr] 532 | | _ => {} [INFO] [stderr] 533 | | }, [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 524 | _ => match *t { [INFO] [stderr] 525 | Token::Bracket(Direction::Left) => opened_brackets += 1, [INFO] [stderr] 526 | Token::Bracket(Direction::Right) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `interpreter::Interpreter` [INFO] [stderr] --> src/interpreter.rs:50:5 [INFO] [stderr] | [INFO] [stderr] 50 | / pub fn new() -> Self { [INFO] [stderr] 51 | | Interpreter { [INFO] [stderr] 52 | | context: HashMap::new(), [INFO] [stderr] 53 | | } [INFO] [stderr] 54 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 45 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/interpreter.rs:112:18 [INFO] [stderr] | [INFO] [stderr] 112 | .expect(&format!("undefined variable {}", iden)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("undefined variable {}", iden))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/interpreter.rs:131:33 [INFO] [stderr] | [INFO] [stderr] 131 | _ => panic!("{:#?} did not evaluate to a boolean"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/interpreter.rs:165:21 [INFO] [stderr] | [INFO] [stderr] 165 | / if self.context.contains_key(&var) { [INFO] [stderr] 166 | | panic!("Tried to initialize a variable that was already initialized"); [INFO] [stderr] 167 | | } else { [INFO] [stderr] 168 | | self.context.insert(var, Mutable(value)); [INFO] [stderr] 169 | | } [INFO] [stderr] | |_____________________^ help: consider using: `self.context.entry(var)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | kill_switch.send(true); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:43:5 [INFO] [stderr] | [INFO] [stderr] 43 | kill_signal.recv(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 11.57s [INFO] running `"docker" "inspect" "fc174c81839ea207a33d7e9f6265063b5f98ae7584e53d27e0287865345c1b66"` [INFO] running `"docker" "rm" "-f" "fc174c81839ea207a33d7e9f6265063b5f98ae7584e53d27e0287865345c1b66"` [INFO] [stdout] fc174c81839ea207a33d7e9f6265063b5f98ae7584e53d27e0287865345c1b66