[INFO] crate lci 0.1.8 is already in cache [INFO] extracting crate lci 0.1.8 into work/ex/clippy-test-run/sources/stable/reg/lci/0.1.8 [INFO] extracting crate lci 0.1.8 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/lci/0.1.8 [INFO] validating manifest of lci-0.1.8 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 lci-0.1.8 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 lci-0.1.8 [INFO] finished frobbing lci-0.1.8 [INFO] frobbed toml for lci-0.1.8 written to work/ex/clippy-test-run/sources/stable/reg/lci/0.1.8/Cargo.toml [INFO] started frobbing lci-0.1.8 [INFO] finished frobbing lci-0.1.8 [INFO] frobbed toml for lci-0.1.8 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/lci/0.1.8/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [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 lci-0.1.8 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/lci/0.1.8:/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] aa884e94a1cf872a78bfe5141b4cdc3f1c64a2e42d914e4b05b01cabc9eb5a62 [INFO] running `"docker" "start" "-a" "aa884e94a1cf872a78bfe5141b4cdc3f1c64a2e42d914e4b05b01cabc9eb5a62"` [INFO] [stderr] Checking unic-ucd-name v0.7.0 [INFO] [stderr] Checking lci v0.1.8 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/eval.rs:57:13 [INFO] [stderr] | [INFO] [stderr] 57 | stdin: stdin, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `stdin` [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/eval.rs:58:13 [INFO] [stderr] | [INFO] [stderr] 58 | stdout: stdout, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `stdout` [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/eval.rs:366:21 [INFO] [stderr] | [INFO] [stderr] 366 | args: args, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `args` [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/eval.rs:367:21 [INFO] [stderr] | [INFO] [stderr] 367 | block: block [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `block` [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/eval.rs:57:13 [INFO] [stderr] | [INFO] [stderr] 57 | stdin: stdin, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `stdin` [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/eval.rs:58:13 [INFO] [stderr] | [INFO] [stderr] 58 | stdout: stdout, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `stdout` [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/eval.rs:366:21 [INFO] [stderr] | [INFO] [stderr] 366 | args: args, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `args` [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/eval.rs:367:21 [INFO] [stderr] | [INFO] [stderr] 367 | block: block [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `block` [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: unneeded return statement [INFO] [stderr] --> src/parser.rs:133:26 [INFO] [stderr] | [INFO] [stderr] 133 | _ => return Err(Error::ExpectedKind("numbar")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(Error::ExpectedKind("numbar"))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/tokenizer.rs:366:17 [INFO] [stderr] | [INFO] [stderr] 366 | / if clone.word() == "IZ" { [INFO] [stderr] 367 | | if clone.word() == "I" { [INFO] [stderr] 368 | | *self = clone; [INFO] [stderr] 369 | | return Ok(Some(Token::HowIzI)); [INFO] [stderr] 370 | | } [INFO] [stderr] 371 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 366 | if clone.word() == "IZ" && clone.word() == "I" { [INFO] [stderr] 367 | *self = clone; [INFO] [stderr] 368 | return Ok(Some(Token::HowIzI)); [INFO] [stderr] 369 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/tokenizer.rs:375:17 [INFO] [stderr] | [INFO] [stderr] 375 | / if clone.word() == "U" { [INFO] [stderr] 376 | | if clone.word() == "SAY" { [INFO] [stderr] 377 | | if clone.word() == "SO" { [INFO] [stderr] 378 | | *self = clone; [INFO] [stderr] ... | [INFO] [stderr] 381 | | } [INFO] [stderr] 382 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 375 | if clone.word() == "U" && clone.word() == "SAY" { [INFO] [stderr] 376 | if clone.word() == "SO" { [INFO] [stderr] 377 | *self = clone; [INFO] [stderr] 378 | return Ok(Some(Token::IfUSaySo)); [INFO] [stderr] 379 | } [INFO] [stderr] 380 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/tokenizer.rs:376:21 [INFO] [stderr] | [INFO] [stderr] 376 | / if clone.word() == "SAY" { [INFO] [stderr] 377 | | if clone.word() == "SO" { [INFO] [stderr] 378 | | *self = clone; [INFO] [stderr] 379 | | return Ok(Some(Token::IfUSaySo)); [INFO] [stderr] 380 | | } [INFO] [stderr] 381 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 376 | if clone.word() == "SAY" && clone.word() == "SO" { [INFO] [stderr] 377 | *self = clone; [INFO] [stderr] 378 | return Ok(Some(Token::IfUSaySo)); [INFO] [stderr] 379 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:133:26 [INFO] [stderr] | [INFO] [stderr] 133 | _ => return Err(Error::ExpectedKind("numbar")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(Error::ExpectedKind("numbar"))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/tokenizer.rs:366:17 [INFO] [stderr] | [INFO] [stderr] 366 | / if clone.word() == "IZ" { [INFO] [stderr] 367 | | if clone.word() == "I" { [INFO] [stderr] 368 | | *self = clone; [INFO] [stderr] 369 | | return Ok(Some(Token::HowIzI)); [INFO] [stderr] 370 | | } [INFO] [stderr] 371 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 366 | if clone.word() == "IZ" && clone.word() == "I" { [INFO] [stderr] 367 | *self = clone; [INFO] [stderr] 368 | return Ok(Some(Token::HowIzI)); [INFO] [stderr] 369 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/tokenizer.rs:375:17 [INFO] [stderr] | [INFO] [stderr] 375 | / if clone.word() == "U" { [INFO] [stderr] 376 | | if clone.word() == "SAY" { [INFO] [stderr] 377 | | if clone.word() == "SO" { [INFO] [stderr] 378 | | *self = clone; [INFO] [stderr] ... | [INFO] [stderr] 381 | | } [INFO] [stderr] 382 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 375 | if clone.word() == "U" && clone.word() == "SAY" { [INFO] [stderr] 376 | if clone.word() == "SO" { [INFO] [stderr] 377 | *self = clone; [INFO] [stderr] 378 | return Ok(Some(Token::IfUSaySo)); [INFO] [stderr] 379 | } [INFO] [stderr] 380 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/tokenizer.rs:376:21 [INFO] [stderr] | [INFO] [stderr] 376 | / if clone.word() == "SAY" { [INFO] [stderr] 377 | | if clone.word() == "SO" { [INFO] [stderr] 378 | | *self = clone; [INFO] [stderr] 379 | | return Ok(Some(Token::IfUSaySo)); [INFO] [stderr] 380 | | } [INFO] [stderr] 381 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 376 | if clone.word() == "SAY" && clone.word() == "SO" { [INFO] [stderr] 377 | *self = clone; [INFO] [stderr] 378 | return Ok(Some(Token::IfUSaySo)); [INFO] [stderr] 379 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/eval.rs:50:12 [INFO] [stderr] | [INFO] [stderr] 50 | funcs: HashMap, Box) -> Value>)>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/eval.rs:380:61 [INFO] [stderr] | [INFO] [stderr] 380 | stdout.write_all(result.as_bytes()).map_err(|err| Error::IoError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::IoError` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/eval.rs:382:53 [INFO] [stderr] | [INFO] [stderr] 382 | stdout.write_all(b"\n").map_err(|err| Error::IoError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::IoError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/eval.rs:384:44 [INFO] [stderr] | [INFO] [stderr] 384 | stdout.flush().map_err(|err| Error::IoError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::IoError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/eval.rs:391:52 [INFO] [stderr] | [INFO] [stderr] 391 | stdin.read_line(&mut text).map_err(|err| Error::IoError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::IoError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [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/parser.rs:89:13 [INFO] [stderr] | [INFO] [stderr] 89 | / match self.iter.peek() { [INFO] [stderr] 90 | | Some(token) => if until.contains(&token) { break; }, [INFO] [stderr] 91 | | None => () [INFO] [stderr] 92 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Some(token) = self.iter.peek() { if until.contains(&token) { break; } }` [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: redundant closure found [INFO] [stderr] --> src/parser.rs:296:44 [INFO] [stderr] | [INFO] [stderr] 296 | _ => Ok(self.expression()?.map(|expr| AST::It(expr))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `AST::It` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: defining a method called `next` on this type; consider implementing the `std::iter::Iterator` trait or choosing a less ambiguous name [INFO] [stderr] --> src/tokenizer.rs:138:5 [INFO] [stderr] | [INFO] [stderr] 138 | / pub fn next(&mut self) -> Result> { [INFO] [stderr] 139 | | let c = match self.peek() { [INFO] [stderr] 140 | | Some(c) => c, [INFO] [stderr] 141 | | None => return Ok(None) [INFO] [stderr] ... | [INFO] [stderr] 423 | | Err(Error::UnknownToken) [INFO] [stderr] 424 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 56 [INFO] [stderr] --> src/tokenizer.rs:138:5 [INFO] [stderr] | [INFO] [stderr] 138 | / pub fn next(&mut self) -> Result> { [INFO] [stderr] 139 | | let c = match self.peek() { [INFO] [stderr] 140 | | Some(c) => c, [INFO] [stderr] 141 | | None => return Ok(None) [INFO] [stderr] ... | [INFO] [stderr] 423 | | Err(Error::UnknownToken) [INFO] [stderr] 424 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/eval.rs:50:12 [INFO] [stderr] | [INFO] [stderr] 50 | funcs: HashMap, Box) -> Value>)>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:26:60 [INFO] [stderr] | [INFO] [stderr] 26 | let tokens = tokenizer::tokenize(code.chars()).map_err(|err| Error::TokenizeError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::TokenizeError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:28:48 [INFO] [stderr] | [INFO] [stderr] 28 | let parsed = parser::parse(tokens).map_err(|err| Error::ParseError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::ParseError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:42:43 [INFO] [stderr] | [INFO] [stderr] 42 | eval.scope().eval_all(parsed).map_err(|err| Error::EvalError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::EvalError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/eval.rs:380:61 [INFO] [stderr] | [INFO] [stderr] 380 | stdout.write_all(result.as_bytes()).map_err(|err| Error::IoError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::IoError` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/eval.rs:382:53 [INFO] [stderr] | [INFO] [stderr] 382 | stdout.write_all(b"\n").map_err(|err| Error::IoError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::IoError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/eval.rs:384:44 [INFO] [stderr] | [INFO] [stderr] 384 | stdout.flush().map_err(|err| Error::IoError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::IoError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/eval.rs:391:52 [INFO] [stderr] | [INFO] [stderr] 391 | stdin.read_line(&mut text).map_err(|err| Error::IoError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::IoError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [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/parser.rs:89:13 [INFO] [stderr] | [INFO] [stderr] 89 | / match self.iter.peek() { [INFO] [stderr] 90 | | Some(token) => if until.contains(&token) { break; }, [INFO] [stderr] 91 | | None => () [INFO] [stderr] 92 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Some(token) = self.iter.peek() { if until.contains(&token) { break; } }` [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: redundant closure found [INFO] [stderr] --> src/parser.rs:296:44 [INFO] [stderr] | [INFO] [stderr] 296 | _ => Ok(self.expression()?.map(|expr| AST::It(expr))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `AST::It` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: defining a method called `next` on this type; consider implementing the `std::iter::Iterator` trait or choosing a less ambiguous name [INFO] [stderr] --> src/tokenizer.rs:138:5 [INFO] [stderr] | [INFO] [stderr] 138 | / pub fn next(&mut self) -> Result> { [INFO] [stderr] 139 | | let c = match self.peek() { [INFO] [stderr] 140 | | Some(c) => c, [INFO] [stderr] 141 | | None => return Ok(None) [INFO] [stderr] ... | [INFO] [stderr] 423 | | Err(Error::UnknownToken) [INFO] [stderr] 424 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 56 [INFO] [stderr] --> src/tokenizer.rs:138:5 [INFO] [stderr] | [INFO] [stderr] 138 | / pub fn next(&mut self) -> Result> { [INFO] [stderr] 139 | | let c = match self.peek() { [INFO] [stderr] 140 | | Some(c) => c, [INFO] [stderr] 141 | | None => return Ok(None) [INFO] [stderr] ... | [INFO] [stderr] 423 | | Err(Error::UnknownToken) [INFO] [stderr] 424 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:26:60 [INFO] [stderr] | [INFO] [stderr] 26 | let tokens = tokenizer::tokenize(code.chars()).map_err(|err| Error::TokenizeError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::TokenizeError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:28:48 [INFO] [stderr] | [INFO] [stderr] 28 | let parsed = parser::parse(tokens).map_err(|err| Error::ParseError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::ParseError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:42:43 [INFO] [stderr] | [INFO] [stderr] 42 | eval.scope().eval_all(parsed).map_err(|err| Error::EvalError(err))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Error::EvalError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)` [INFO] [stderr] --> src/main.rs:6:22 [INFO] [stderr] | [INFO] [stderr] 6 | let file = match env::args().skip(1).next() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_skip_next)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_skip_next [INFO] [stderr] [INFO] [stderr] warning: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)` [INFO] [stderr] --> src/main.rs:6:22 [INFO] [stderr] | [INFO] [stderr] 6 | let file = match env::args().skip(1).next() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_skip_next)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_skip_next [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 26.80s [INFO] running `"docker" "inspect" "aa884e94a1cf872a78bfe5141b4cdc3f1c64a2e42d914e4b05b01cabc9eb5a62"` [INFO] running `"docker" "rm" "-f" "aa884e94a1cf872a78bfe5141b4cdc3f1c64a2e42d914e4b05b01cabc9eb5a62"` [INFO] [stdout] aa884e94a1cf872a78bfe5141b4cdc3f1c64a2e42d914e4b05b01cabc9eb5a62