[INFO] updating cached repository darshanparajuli/calc [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/darshanparajuli/calc [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/darshanparajuli/calc" "work/ex/clippy-test-run/sources/stable/gh/darshanparajuli/calc"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/darshanparajuli/calc'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/darshanparajuli/calc" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/darshanparajuli/calc"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/darshanparajuli/calc'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] bcd07b75ecfdb38881060daba91d50aacdf3f4d3 [INFO] sha for GitHub repo darshanparajuli/calc: bcd07b75ecfdb38881060daba91d50aacdf3f4d3 [INFO] validating manifest of darshanparajuli/calc 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 darshanparajuli/calc 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 darshanparajuli/calc [INFO] finished frobbing darshanparajuli/calc [INFO] frobbed toml for darshanparajuli/calc written to work/ex/clippy-test-run/sources/stable/gh/darshanparajuli/calc/Cargo.toml [INFO] started frobbing darshanparajuli/calc [INFO] finished frobbing darshanparajuli/calc [INFO] frobbed toml for darshanparajuli/calc written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/darshanparajuli/calc/Cargo.toml [INFO] crate darshanparajuli/calc 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 darshanparajuli/calc 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/darshanparajuli/calc:/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] 1e853b1e59ed98c5eba417cf21c07e118edd0c9d94efb815098afa7d78873325 [INFO] running `"docker" "start" "-a" "1e853b1e59ed98c5eba417cf21c07e118edd0c9d94efb815098afa7d78873325"` [INFO] [stderr] Blocking waiting for file lock on the registry index [INFO] [stderr] Checking calc v0.1.1 (/opt/crater/workdir) [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/calc/mod.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | mod calc; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/calc/calc.rs:341:9 [INFO] [stderr] | [INFO] [stderr] 341 | return v; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `v` [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: unneeded return statement [INFO] [stderr] --> src/calc/calc.rs:350:9 [INFO] [stderr] | [INFO] [stderr] 350 | return v; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `v` [INFO] [stderr] | [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 `else { if .. }` block can be collapsed [INFO] [stderr] --> src/calc/parser.rs:318:28 [INFO] [stderr] | [INFO] [stderr] 318 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 319 | | if function.param_count < 0 { [INFO] [stderr] 320 | | Err(format!( [INFO] [stderr] 321 | | "{} requires {} or more arguments", [INFO] [stderr] ... | [INFO] [stderr] 330 | | } [INFO] [stderr] 331 | | } [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] 318 | } else if function.param_count < 0 { [INFO] [stderr] 319 | Err(format!( [INFO] [stderr] 320 | "{} requires {} or more arguments", [INFO] [stderr] 321 | lexeme, [INFO] [stderr] 322 | function.param_count.abs() [INFO] [stderr] 323 | )) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/calc/scanner.rs:310:9 [INFO] [stderr] | [INFO] [stderr] 310 | return token; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `token` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/calc/mod.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | mod calc; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/calc/calc.rs:341:9 [INFO] [stderr] | [INFO] [stderr] 341 | return v; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `v` [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: unneeded return statement [INFO] [stderr] --> src/calc/calc.rs:350:9 [INFO] [stderr] | [INFO] [stderr] 350 | return v; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `v` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unary minus has lower precedence than method call [INFO] [stderr] --> src/calc/calc.rs:487:45 [INFO] [stderr] | [INFO] [stderr] 487 | run_test!("sign(-1)", format!("{}", -1_f64.signum())); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider adding parentheses to clarify your intent: `-(1_f64.signum())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::precedence)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/calc/parser.rs:318:28 [INFO] [stderr] | [INFO] [stderr] 318 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 319 | | if function.param_count < 0 { [INFO] [stderr] 320 | | Err(format!( [INFO] [stderr] 321 | | "{} requires {} or more arguments", [INFO] [stderr] ... | [INFO] [stderr] 330 | | } [INFO] [stderr] 331 | | } [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] 318 | } else if function.param_count < 0 { [INFO] [stderr] 319 | Err(format!( [INFO] [stderr] 320 | "{} requires {} or more arguments", [INFO] [stderr] 321 | lexeme, [INFO] [stderr] 322 | function.param_count.abs() [INFO] [stderr] 323 | )) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/calc/scanner.rs:310:9 [INFO] [stderr] | [INFO] [stderr] 310 | return token; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `token` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/calc/calc.rs:324:31 [INFO] [stderr] | [INFO] [stderr] 324 | Some(f) => Ok(format!("{}", f.desc)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `f.desc.to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/calc/calc.rs:338:20 [INFO] [stderr] | [INFO] [stderr] 338 | v.push(n.clone()); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 338 | v.push(&(*n).clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 338 | v.push(&str::clone(n)); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/calc/calc.rs:347:20 [INFO] [stderr] | [INFO] [stderr] 347 | v.push(c.clone()); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 347 | v.push(&(*c).clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 347 | v.push(&str::clone(c)); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:84:18 [INFO] [stderr] | [INFO] [stderr] 84 | for i in first_sets.get(&NonTerminal::Literal).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Literal]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:87:18 [INFO] [stderr] | [INFO] [stderr] 87 | for i in first_sets.get(&NonTerminal::Call).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Call]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:91:18 [INFO] [stderr] | [INFO] [stderr] 91 | for i in first_sets.get(&NonTerminal::Op0).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Op0]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:97:18 [INFO] [stderr] | [INFO] [stderr] 97 | for i in first_sets.get(&NonTerminal::Power).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Power]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:103:18 [INFO] [stderr] | [INFO] [stderr] 103 | for i in first_sets.get(&NonTerminal::Factor).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Factor]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:109:18 [INFO] [stderr] | [INFO] [stderr] 109 | for i in first_sets.get(&NonTerminal::Addend).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Addend]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:115:18 [INFO] [stderr] | [INFO] [stderr] 115 | for i in first_sets.get(&NonTerminal::Exp).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Exp]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:121:18 [INFO] [stderr] | [INFO] [stderr] 121 | for i in first_sets.get(&NonTerminal::Exp).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Exp]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:141:9 [INFO] [stderr] | [INFO] [stderr] 141 | / self.first_sets [INFO] [stderr] 142 | | .get(nt) [INFO] [stderr] 143 | | .unwrap() [INFO] [stderr] | |_____________________^ help: try this: `&self.first_sets[nt]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/calc/parser.rs:147:36 [INFO] [stderr] | [INFO] [stderr] 147 | fn have(&mut self, token_type: &TokenType) -> bool { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `TokenType` [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/calc/parser.rs:151:41 [INFO] [stderr] | [INFO] [stderr] 151 | fn have_next(&mut self, token_type: &TokenType) -> bool { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `TokenType` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/calc/parser.rs:155:38 [INFO] [stderr] | [INFO] [stderr] 155 | fn accept(&mut self, token_type: &TokenType) -> bool { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `TokenType` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/calc/parser.rs:173:38 [INFO] [stderr] | [INFO] [stderr] 173 | fn expect(&mut self, token_type: &TokenType) -> Result<(), String> { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `TokenType` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/calc/parser.rs:181:47 [INFO] [stderr] | [INFO] [stderr] 181 | fn expect_retrieve(&mut self, token_type: &TokenType) -> Result { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `TokenType` [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: manual implementation of an assign operation [INFO] [stderr] --> src/calc/parser.rs:264:24 [INFO] [stderr] | [INFO] [stderr] 264 | "*" => a = a * b, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `a *= b` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/calc/parser.rs:265:24 [INFO] [stderr] | [INFO] [stderr] 265 | "/" => a = a / b, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `a /= b` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/calc/parser.rs:266:24 [INFO] [stderr] | [INFO] [stderr] 266 | "%" => a = a % b, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `a %= b` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/calc/parser.rs:282:24 [INFO] [stderr] | [INFO] [stderr] 282 | "-" => a = a - b, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `a -= b` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/calc/parser.rs:283:24 [INFO] [stderr] | [INFO] [stderr] 283 | "+" => a = a + b, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `a += b` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/calc/parser.rs:387:9 [INFO] [stderr] | [INFO] [stderr] 387 | / let mut result: Option = None; [INFO] [stderr] 388 | | [INFO] [stderr] 389 | | if self.have_nt(&NonTerminal::Line) { [INFO] [stderr] 390 | | result = Some(self.input()?); [INFO] [stderr] 391 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let result = if self.have_nt(&NonTerminal::Line) { Some(self.input()?) } else { None };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/calc/scanner.rs:40:25 [INFO] [stderr] | [INFO] [stderr] 40 | token_type: self.token_type.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.token_type` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/calc/scanner.rs:302:26 [INFO] [stderr] | [INFO] [stderr] 302 | let next_state = self.next_state.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.next_state` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `calc`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/calc/calc.rs:324:31 [INFO] [stderr] | [INFO] [stderr] 324 | Some(f) => Ok(format!("{}", f.desc)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `f.desc.to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/calc/calc.rs:338:20 [INFO] [stderr] | [INFO] [stderr] 338 | v.push(n.clone()); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 338 | v.push(&(*n).clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 338 | v.push(&str::clone(n)); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/calc/calc.rs:347:20 [INFO] [stderr] | [INFO] [stderr] 347 | v.push(c.clone()); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 347 | v.push(&(*c).clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 347 | v.push(&str::clone(c)); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 40 [INFO] [stderr] --> src/calc/calc.rs:452:5 [INFO] [stderr] | [INFO] [stderr] 452 | / fn builtins() { [INFO] [stderr] 453 | | run_test!("sin(PI)", format!("{}", ::std::f64::consts::PI.sin_cos().0)); [INFO] [stderr] 454 | | run_test!( [INFO] [stderr] 455 | | "sin(PI/2)", [INFO] [stderr] ... | [INFO] [stderr] 509 | | run_test!("grad2deg(16)", format!("{}", 16_f64 * 9_f64 / 10_f64)); [INFO] [stderr] 510 | | } [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:84:18 [INFO] [stderr] | [INFO] [stderr] 84 | for i in first_sets.get(&NonTerminal::Literal).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Literal]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:87:18 [INFO] [stderr] | [INFO] [stderr] 87 | for i in first_sets.get(&NonTerminal::Call).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Call]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:91:18 [INFO] [stderr] | [INFO] [stderr] 91 | for i in first_sets.get(&NonTerminal::Op0).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Op0]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:97:18 [INFO] [stderr] | [INFO] [stderr] 97 | for i in first_sets.get(&NonTerminal::Power).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Power]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:103:18 [INFO] [stderr] | [INFO] [stderr] 103 | for i in first_sets.get(&NonTerminal::Factor).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Factor]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:109:18 [INFO] [stderr] | [INFO] [stderr] 109 | for i in first_sets.get(&NonTerminal::Addend).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Addend]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:115:18 [INFO] [stderr] | [INFO] [stderr] 115 | for i in first_sets.get(&NonTerminal::Exp).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Exp]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:121:18 [INFO] [stderr] | [INFO] [stderr] 121 | for i in first_sets.get(&NonTerminal::Exp).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&first_sets[&NonTerminal::Exp]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/calc/parser.rs:141:9 [INFO] [stderr] | [INFO] [stderr] 141 | / self.first_sets [INFO] [stderr] 142 | | .get(nt) [INFO] [stderr] 143 | | .unwrap() [INFO] [stderr] | |_____________________^ help: try this: `&self.first_sets[nt]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/calc/parser.rs:147:36 [INFO] [stderr] | [INFO] [stderr] 147 | fn have(&mut self, token_type: &TokenType) -> bool { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `TokenType` [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/calc/parser.rs:151:41 [INFO] [stderr] | [INFO] [stderr] 151 | fn have_next(&mut self, token_type: &TokenType) -> bool { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `TokenType` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/calc/parser.rs:155:38 [INFO] [stderr] | [INFO] [stderr] 155 | fn accept(&mut self, token_type: &TokenType) -> bool { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `TokenType` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/calc/parser.rs:173:38 [INFO] [stderr] | [INFO] [stderr] 173 | fn expect(&mut self, token_type: &TokenType) -> Result<(), String> { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `TokenType` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/calc/parser.rs:181:47 [INFO] [stderr] | [INFO] [stderr] 181 | fn expect_retrieve(&mut self, token_type: &TokenType) -> Result { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `TokenType` [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: manual implementation of an assign operation [INFO] [stderr] --> src/calc/parser.rs:264:24 [INFO] [stderr] | [INFO] [stderr] 264 | "*" => a = a * b, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `a *= b` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/calc/parser.rs:265:24 [INFO] [stderr] | [INFO] [stderr] 265 | "/" => a = a / b, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `a /= b` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/calc/parser.rs:266:24 [INFO] [stderr] | [INFO] [stderr] 266 | "%" => a = a % b, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `a %= b` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/calc/parser.rs:282:24 [INFO] [stderr] | [INFO] [stderr] 282 | "-" => a = a - b, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `a -= b` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/calc/parser.rs:283:24 [INFO] [stderr] | [INFO] [stderr] 283 | "+" => a = a + b, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `a += b` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/calc/parser.rs:387:9 [INFO] [stderr] | [INFO] [stderr] 387 | / let mut result: Option = None; [INFO] [stderr] 388 | | [INFO] [stderr] 389 | | if self.have_nt(&NonTerminal::Line) { [INFO] [stderr] 390 | | result = Some(self.input()?); [INFO] [stderr] 391 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let result = if self.have_nt(&NonTerminal::Line) { Some(self.input()?) } else { None };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/calc/scanner.rs:40:25 [INFO] [stderr] | [INFO] [stderr] 40 | token_type: self.token_type.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.token_type` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/calc/scanner.rs:302:26 [INFO] [stderr] | [INFO] [stderr] 302 | let next_state = self.next_state.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.next_state` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `calc`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "1e853b1e59ed98c5eba417cf21c07e118edd0c9d94efb815098afa7d78873325"` [INFO] running `"docker" "rm" "-f" "1e853b1e59ed98c5eba417cf21c07e118edd0c9d94efb815098afa7d78873325"` [INFO] [stdout] 1e853b1e59ed98c5eba417cf21c07e118edd0c9d94efb815098afa7d78873325