[INFO] updating cached repository EmmaLa/MonkeyInterpreter [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/EmmaLa/MonkeyInterpreter [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/EmmaLa/MonkeyInterpreter" "work/ex/clippy-test-run/sources/stable/gh/EmmaLa/MonkeyInterpreter"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/EmmaLa/MonkeyInterpreter'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/EmmaLa/MonkeyInterpreter" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/EmmaLa/MonkeyInterpreter"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/EmmaLa/MonkeyInterpreter'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 538fab97895b45c362be501f897eecf95811dcf0 [INFO] sha for GitHub repo EmmaLa/MonkeyInterpreter: 538fab97895b45c362be501f897eecf95811dcf0 [INFO] validating manifest of EmmaLa/MonkeyInterpreter 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 EmmaLa/MonkeyInterpreter 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 EmmaLa/MonkeyInterpreter [INFO] finished frobbing EmmaLa/MonkeyInterpreter [INFO] frobbed toml for EmmaLa/MonkeyInterpreter written to work/ex/clippy-test-run/sources/stable/gh/EmmaLa/MonkeyInterpreter/Cargo.toml [INFO] started frobbing EmmaLa/MonkeyInterpreter [INFO] finished frobbing EmmaLa/MonkeyInterpreter [INFO] frobbed toml for EmmaLa/MonkeyInterpreter written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/EmmaLa/MonkeyInterpreter/Cargo.toml [INFO] crate EmmaLa/MonkeyInterpreter 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 EmmaLa/MonkeyInterpreter against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/EmmaLa/MonkeyInterpreter:/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] 8c9e45dfa504e45839e4a4fb26e91d56ef3d7c16b1f5b27e652b48df80c95a88 [INFO] running `"docker" "start" "-a" "8c9e45dfa504e45839e4a4fb26e91d56ef3d7c16b1f5b27e652b48df80c95a88"` [INFO] [stderr] Checking monkey_int v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer/reader.rs:19:11 [INFO] [stderr] | [INFO] [stderr] 19 | Reader{ code: code } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `code` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:51:7 [INFO] [stderr] | [INFO] [stderr] 51 | lexer: lexer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `lexer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:52:4 [INFO] [stderr] | [INFO] [stderr] 52 | prefix_parse_funcs: prefix_parse_funcs, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `prefix_parse_funcs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:53:4 [INFO] [stderr] | [INFO] [stderr] 53 | infix_parse_funcs: infix_parse_funcs, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `infix_parse_funcs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:54:4 [INFO] [stderr] | [INFO] [stderr] 54 | precedences: precedences [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `precedences` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:64:4 [INFO] [stderr] | [INFO] [stderr] 64 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:85:5 [INFO] [stderr] | [INFO] [stderr] 85 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:97:5 [INFO] [stderr] | [INFO] [stderr] 97 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer/reader.rs:19:11 [INFO] [stderr] | [INFO] [stderr] 19 | Reader{ code: code } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `code` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:51:7 [INFO] [stderr] | [INFO] [stderr] 51 | lexer: lexer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `lexer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:52:4 [INFO] [stderr] | [INFO] [stderr] 52 | prefix_parse_funcs: prefix_parse_funcs, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `prefix_parse_funcs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:53:4 [INFO] [stderr] | [INFO] [stderr] 53 | infix_parse_funcs: infix_parse_funcs, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `infix_parse_funcs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:54:4 [INFO] [stderr] | [INFO] [stderr] 54 | precedences: precedences [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `precedences` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:64:4 [INFO] [stderr] | [INFO] [stderr] 64 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:85:5 [INFO] [stderr] | [INFO] [stderr] 85 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser/mod.rs:97:5 [INFO] [stderr] | [INFO] [stderr] 97 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/parser/mod.rs:78:3 [INFO] [stderr] | [INFO] [stderr] 78 | prefix_expression [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/parser/mod.rs:74:27 [INFO] [stderr] | [INFO] [stderr] 74 | let prefix_expression = PrefixExpression{ [INFO] [stderr] | _________________________________^ [INFO] [stderr] 75 | | token: saved_current_token, [INFO] [stderr] 76 | | right: Box::new(self.parse_expression(TokenPriority::Prefix).unwrap()) [INFO] [stderr] 77 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `ast::Statement::*` [INFO] [stderr] --> src/parser/mod.rs:155:7 [INFO] [stderr] | [INFO] [stderr] 155 | use ast::Statement::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `repl::Repl` [INFO] [stderr] --> src/main.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use repl::Repl; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::fs::File` [INFO] [stderr] --> src/main.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use std::fs::File; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::Read` [INFO] [stderr] --> src/main.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use std::io::Read; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::iter::Peekable` [INFO] [stderr] --> src/main.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | use std::iter::Peekable; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `lexer::token::Token::*` [INFO] [stderr] --> src/main.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | use lexer::token::Token::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `n` [INFO] [stderr] --> src/repl/mod.rs:26:10 [INFO] [stderr] | [INFO] [stderr] 26 | Ok(n) => buffer, [INFO] [stderr] | ^ help: consider using `_n` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `error` [INFO] [stderr] --> src/repl/mod.rs:27:11 [INFO] [stderr] | [INFO] [stderr] 27 | Err(error) => { [INFO] [stderr] | ^^^^^ help: consider using `_error` instead [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/main.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | let mut content = String::from("-4+2;"); [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: function is never used: `is_equal_sign` [INFO] [stderr] --> src/lexer/reader.rs:13:1 [INFO] [stderr] | [INFO] [stderr] 13 | fn is_equal_sign(character: &char) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `read_identifier` [INFO] [stderr] --> src/lexer/reader.rs:69:2 [INFO] [stderr] | [INFO] [stderr] 69 | pub fn read_identifier(&mut self, character: char) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `is_letter` [INFO] [stderr] --> src/lexer/mod.rs:13:1 [INFO] [stderr] | [INFO] [stderr] 13 | fn is_letter(character: &char) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `Repl` [INFO] [stderr] --> src/repl/mod.rs:6:1 [INFO] [stderr] | [INFO] [stderr] 6 | pub struct Repl; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `run` [INFO] [stderr] --> src/repl/mod.rs:9:2 [INFO] [stderr] | [INFO] [stderr] 9 | pub fn run(){ [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `read_user_input` [INFO] [stderr] --> src/repl/mod.rs:23:2 [INFO] [stderr] | [INFO] [stderr] 23 | fn read_user_input(&mut self) -> String { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Expression` [INFO] [stderr] --> src/ast/mod.rs:51:2 [INFO] [stderr] | [INFO] [stderr] 51 | Expression { [INFO] [stderr] | _____^ [INFO] [stderr] 52 | | token: Token, [INFO] [stderr] 53 | | value: Box [INFO] [stderr] 54 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Call` [INFO] [stderr] --> src/parser/mod.rs:15:2 [INFO] [stderr] | [INFO] [stderr] 15 | Call = 7 [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `next_token_is_int` [INFO] [stderr] --> src/parser/mod.rs:236:2 [INFO] [stderr] | [INFO] [stderr] 236 | fn next_token_is_int(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lexer/reader.rs:9:25 [INFO] [stderr] | [INFO] [stderr] 9 | fn is_letter(character: &char) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lexer/reader.rs:13:29 [INFO] [stderr] | [INFO] [stderr] 13 | fn is_equal_sign(character: &char) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the `ch @ _` pattern can be written as just `ch` [INFO] [stderr] --> src/lexer/reader.rs:29:9 [INFO] [stderr] | [INFO] [stderr] 29 | Some(ch @ _) => func(ch), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lexer/mod.rs:13:25 [INFO] [stderr] | [INFO] [stderr] 13 | fn is_letter(character: &char) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the `character @ _` pattern can be written as just `character` [INFO] [stderr] --> src/lexer/mod.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | Some(character @ _) => self.read_identifier(character), [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: variable `PROMPT` should have a snake case name such as `prompt` [INFO] [stderr] --> src/repl/mod.rs:11:7 [INFO] [stderr] | [INFO] [stderr] 11 | let PROMPT = ">> "; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/repl/mod.rs:14:4 [INFO] [stderr] | [INFO] [stderr] 14 | io::stdout().flush(); [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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/parser/mod.rs:275:3 [INFO] [stderr] | [INFO] [stderr] 275 | self.precedences [INFO] [stderr] | _________^ [INFO] [stderr] 276 | | .get(&self.next_token.clone().unwrap_or(Token::Illegal)) [INFO] [stderr] 277 | | .map(|precedence| precedence.clone()) [INFO] [stderr] | |_________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 275 | self.precedences [INFO] [stderr] 276 | .get(&self.next_token.clone().unwrap_or(Token::Illegal)).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/parser/mod.rs:282:3 [INFO] [stderr] | [INFO] [stderr] 282 | self.precedences [INFO] [stderr] | _________^ [INFO] [stderr] 283 | | .get(&self.current_token.clone().unwrap_or(Token::Illegal)) [INFO] [stderr] 284 | | .map(|precedence| precedence.clone()) [INFO] [stderr] | |_________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 282 | self.precedences [INFO] [stderr] 283 | .get(&self.current_token.clone().unwrap_or(Token::Illegal)).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/parser/mod.rs:78:3 [INFO] [stderr] | [INFO] [stderr] 78 | prefix_expression [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/parser/mod.rs:74:27 [INFO] [stderr] | [INFO] [stderr] 74 | let prefix_expression = PrefixExpression{ [INFO] [stderr] | _________________________________^ [INFO] [stderr] 75 | | token: saved_current_token, [INFO] [stderr] 76 | | right: Box::new(self.parse_expression(TokenPriority::Prefix).unwrap()) [INFO] [stderr] 77 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `ast::Statement::*` [INFO] [stderr] --> src/parser/mod.rs:155:7 [INFO] [stderr] | [INFO] [stderr] 155 | use ast::Statement::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `repl::Repl` [INFO] [stderr] --> src/main.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use repl::Repl; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::fs::File` [INFO] [stderr] --> src/main.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use std::fs::File; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::Read` [INFO] [stderr] --> src/main.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use std::io::Read; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::iter::Peekable` [INFO] [stderr] --> src/main.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | use std::iter::Peekable; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `lexer::token::Token::*` [INFO] [stderr] --> src/main.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | use lexer::token::Token::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `n` [INFO] [stderr] --> src/repl/mod.rs:26:10 [INFO] [stderr] | [INFO] [stderr] 26 | Ok(n) => buffer, [INFO] [stderr] | ^ help: consider using `_n` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `error` [INFO] [stderr] --> src/repl/mod.rs:27:11 [INFO] [stderr] | [INFO] [stderr] 27 | Err(error) => { [INFO] [stderr] | ^^^^^ help: consider using `_error` instead [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/main.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | let mut content = String::from("-4+2;"); [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: function is never used: `is_equal_sign` [INFO] [stderr] --> src/lexer/reader.rs:13:1 [INFO] [stderr] | [INFO] [stderr] 13 | fn is_equal_sign(character: &char) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `read_identifier` [INFO] [stderr] --> src/lexer/reader.rs:69:2 [INFO] [stderr] | [INFO] [stderr] 69 | pub fn read_identifier(&mut self, character: char) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `is_letter` [INFO] [stderr] --> src/lexer/mod.rs:13:1 [INFO] [stderr] | [INFO] [stderr] 13 | fn is_letter(character: &char) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `Repl` [INFO] [stderr] --> src/repl/mod.rs:6:1 [INFO] [stderr] | [INFO] [stderr] 6 | pub struct Repl; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `run` [INFO] [stderr] --> src/repl/mod.rs:9:2 [INFO] [stderr] | [INFO] [stderr] 9 | pub fn run(){ [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `read_user_input` [INFO] [stderr] --> src/repl/mod.rs:23:2 [INFO] [stderr] | [INFO] [stderr] 23 | fn read_user_input(&mut self) -> String { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Expression` [INFO] [stderr] --> src/ast/mod.rs:51:2 [INFO] [stderr] | [INFO] [stderr] 51 | Expression { [INFO] [stderr] | _____^ [INFO] [stderr] 52 | | token: Token, [INFO] [stderr] 53 | | value: Box [INFO] [stderr] 54 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Call` [INFO] [stderr] --> src/parser/mod.rs:15:2 [INFO] [stderr] | [INFO] [stderr] 15 | Call = 7 [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `next_token_is_int` [INFO] [stderr] --> src/parser/mod.rs:236:2 [INFO] [stderr] | [INFO] [stderr] 236 | fn next_token_is_int(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lexer/reader.rs:9:25 [INFO] [stderr] | [INFO] [stderr] 9 | fn is_letter(character: &char) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lexer/reader.rs:13:29 [INFO] [stderr] | [INFO] [stderr] 13 | fn is_equal_sign(character: &char) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the `ch @ _` pattern can be written as just `ch` [INFO] [stderr] --> src/lexer/reader.rs:29:9 [INFO] [stderr] | [INFO] [stderr] 29 | Some(ch @ _) => func(ch), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lexer/mod.rs:13:25 [INFO] [stderr] | [INFO] [stderr] 13 | fn is_letter(character: &char) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the `character @ _` pattern can be written as just `character` [INFO] [stderr] --> src/lexer/mod.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | Some(character @ _) => self.read_identifier(character), [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: variable `PROMPT` should have a snake case name such as `prompt` [INFO] [stderr] --> src/repl/mod.rs:11:7 [INFO] [stderr] | [INFO] [stderr] 11 | let PROMPT = ">> "; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/repl/mod.rs:14:4 [INFO] [stderr] | [INFO] [stderr] 14 | io::stdout().flush(); [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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/parser/mod.rs:275:3 [INFO] [stderr] | [INFO] [stderr] 275 | self.precedences [INFO] [stderr] | _________^ [INFO] [stderr] 276 | | .get(&self.next_token.clone().unwrap_or(Token::Illegal)) [INFO] [stderr] 277 | | .map(|precedence| precedence.clone()) [INFO] [stderr] | |_________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 275 | self.precedences [INFO] [stderr] 276 | .get(&self.next_token.clone().unwrap_or(Token::Illegal)).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/parser/mod.rs:282:3 [INFO] [stderr] | [INFO] [stderr] 282 | self.precedences [INFO] [stderr] | _________^ [INFO] [stderr] 283 | | .get(&self.current_token.clone().unwrap_or(Token::Illegal)) [INFO] [stderr] 284 | | .map(|precedence| precedence.clone()) [INFO] [stderr] | |_________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 282 | self.precedences [INFO] [stderr] 283 | .get(&self.current_token.clone().unwrap_or(Token::Illegal)).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1.65s [INFO] running `"docker" "inspect" "8c9e45dfa504e45839e4a4fb26e91d56ef3d7c16b1f5b27e652b48df80c95a88"` [INFO] running `"docker" "rm" "-f" "8c9e45dfa504e45839e4a4fb26e91d56ef3d7c16b1f5b27e652b48df80c95a88"` [INFO] [stdout] 8c9e45dfa504e45839e4a4fb26e91d56ef3d7c16b1f5b27e652b48df80c95a88