[INFO] crate tcalc 1.6.13 is already in cache [INFO] extracting crate tcalc 1.6.13 into work/ex/clippy-test-run/sources/stable/reg/tcalc/1.6.13 [INFO] extracting crate tcalc 1.6.13 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/tcalc/1.6.13 [INFO] validating manifest of tcalc-1.6.13 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 tcalc-1.6.13 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 tcalc-1.6.13 [INFO] finished frobbing tcalc-1.6.13 [INFO] frobbed toml for tcalc-1.6.13 written to work/ex/clippy-test-run/sources/stable/reg/tcalc/1.6.13/Cargo.toml [INFO] started frobbing tcalc-1.6.13 [INFO] finished frobbing tcalc-1.6.13 [INFO] frobbed toml for tcalc-1.6.13 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/tcalc/1.6.13/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 tcalc-1.6.13 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/tcalc/1.6.13:/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] a1d69102f22d40bca113a6a9537a25b17cad6cc058d308f7cb6cf919369b4b67 [INFO] running `"docker" "start" "-a" "a1d69102f22d40bca113a6a9537a25b17cad6cc058d308f7cb6cf919369b4b67"` [INFO] [stderr] Checking tcalc-rustyline v1.0.1 [INFO] [stderr] Checking tcalc v1.6.13 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/buffered_iterator.rs:12:4 [INFO] [stderr] | [INFO] [stderr] 12 | itr: itr, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `itr` [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/scanning.rs:110:4 [INFO] [stderr] | [INFO] [stderr] 110 | token_type: token_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `token_type` [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/scanning.rs:113:4 [INFO] [stderr] | [INFO] [stderr] 113 | length: length [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `length` [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/scanning.rs:258:5 [INFO] [stderr] | [INFO] [stderr] 258 | prefix: prefix [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `prefix` [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/scanning.rs:282:27 [INFO] [stderr] | [INFO] [stderr] 282 | TokenType::Identifier{ str: str }, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `str` [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/parsing.rs:132:4 [INFO] [stderr] | [INFO] [stderr] 132 | var: var, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `var` [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/parsing.rs:156:5 [INFO] [stderr] | [INFO] [stderr] 156 | op: op, [INFO] [stderr] | ^^^^^^ help: replace it with: `op` [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/parsing.rs:285:5 [INFO] [stderr] | [INFO] [stderr] 285 | op: op, [INFO] [stderr] | ^^^^^^ help: replace it with: `op` [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/running.rs:17:4 [INFO] [stderr] | [INFO] [stderr] 17 | scope: scope [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `scope` [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: using `println!("")` [INFO] [stderr] --> src/main.rs:129:7 [INFO] [stderr] | [INFO] [stderr] 129 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/buffered_iterator.rs:12:4 [INFO] [stderr] | [INFO] [stderr] 12 | itr: itr, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `itr` [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/scanning.rs:110:4 [INFO] [stderr] | [INFO] [stderr] 110 | token_type: token_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `token_type` [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/scanning.rs:113:4 [INFO] [stderr] | [INFO] [stderr] 113 | length: length [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `length` [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/scanning.rs:258:5 [INFO] [stderr] | [INFO] [stderr] 258 | prefix: prefix [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `prefix` [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/scanning.rs:282:27 [INFO] [stderr] | [INFO] [stderr] 282 | TokenType::Identifier{ str: str }, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `str` [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/parsing.rs:132:4 [INFO] [stderr] | [INFO] [stderr] 132 | var: var, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `var` [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/parsing.rs:156:5 [INFO] [stderr] | [INFO] [stderr] 156 | op: op, [INFO] [stderr] | ^^^^^^ help: replace it with: `op` [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/parsing.rs:285:5 [INFO] [stderr] | [INFO] [stderr] 285 | op: op, [INFO] [stderr] | ^^^^^^ help: replace it with: `op` [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/running.rs:17:4 [INFO] [stderr] | [INFO] [stderr] 17 | scope: scope [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `scope` [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: using `println!("")` [INFO] [stderr] --> src/main.rs:129:7 [INFO] [stderr] | [INFO] [stderr] 129 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/buffered_iterator.rs:18:3 [INFO] [stderr] | [INFO] [stderr] 18 | return match self.buf.is_empty() { [INFO] [stderr] | _________^ [INFO] [stderr] 19 | | true => self.itr.next(), [INFO] [stderr] 20 | | false => self.buf.pop() [INFO] [stderr] 21 | | }; [INFO] [stderr] | |__________^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 18 | match self.buf.is_empty() { [INFO] [stderr] 19 | true => self.itr.next(), [INFO] [stderr] 20 | false => self.buf.pop() [INFO] [stderr] 21 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::env::home_dir': This function's behavior is unexpected and probably not what you want. Consider using the home_dir function from https://crates.io/crates/dirs instead. [INFO] [stderr] --> src/main.rs:65:27 [INFO] [stderr] | [INFO] [stderr] 65 | let history_path = match env::home_dir() { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/buffered_iterator.rs:18:3 [INFO] [stderr] | [INFO] [stderr] 18 | return match self.buf.is_empty() { [INFO] [stderr] | _________^ [INFO] [stderr] 19 | | true => self.itr.next(), [INFO] [stderr] 20 | | false => self.buf.pop() [INFO] [stderr] 21 | | }; [INFO] [stderr] | |__________^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 18 | match self.buf.is_empty() { [INFO] [stderr] 19 | true => self.itr.next(), [INFO] [stderr] 20 | false => self.buf.pop() [INFO] [stderr] 21 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/parsing.rs:371:79 [INFO] [stderr] | [INFO] [stderr] 371 | expect("0_123_456_789", Ast::Expression(Expression::Literal(Literal::Number(123456789f64)))); [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `123_456_789f64` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::env::home_dir': This function's behavior is unexpected and probably not what you want. Consider using the home_dir function from https://crates.io/crates/dirs instead. [INFO] [stderr] --> src/main.rs:65:27 [INFO] [stderr] | [INFO] [stderr] 65 | let history_path = match env::home_dir() { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/buffered_iterator.rs:18:10 [INFO] [stderr] | [INFO] [stderr] 18 | return match self.buf.is_empty() { [INFO] [stderr] | ________________^ [INFO] [stderr] 19 | | true => self.itr.next(), [INFO] [stderr] 20 | | false => self.buf.pop() [INFO] [stderr] 21 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.buf.is_empty() { self.itr.next() } else { self.buf.pop() }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:169:5 [INFO] [stderr] | [INFO] [stderr] 169 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 170 | | &TokenType::Pipe => Some(BinaryOp::BitOr), [INFO] [stderr] 171 | | _ => None [INFO] [stderr] 172 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 169 | match *tt { [INFO] [stderr] 170 | TokenType::Pipe => Some(BinaryOp::BitOr), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:183:5 [INFO] [stderr] | [INFO] [stderr] 183 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 184 | | &TokenType::Caret => Some(BinaryOp::BitXor), [INFO] [stderr] 185 | | _ => None [INFO] [stderr] 186 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 183 | match *tt { [INFO] [stderr] 184 | TokenType::Caret => Some(BinaryOp::BitXor), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:197:5 [INFO] [stderr] | [INFO] [stderr] 197 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 198 | | &TokenType::Ampersand => Some(BinaryOp::BitAnd), [INFO] [stderr] 199 | | _ => None [INFO] [stderr] 200 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 197 | match *tt { [INFO] [stderr] 198 | TokenType::Ampersand => Some(BinaryOp::BitAnd), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:211:5 [INFO] [stderr] | [INFO] [stderr] 211 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 212 | | &TokenType::LeftAngleBracketX2 => Some(BinaryOp::LeftShift), [INFO] [stderr] 213 | | &TokenType::RightAngleBracketX2 => Some(BinaryOp::RightShift), [INFO] [stderr] 214 | | _ => None [INFO] [stderr] 215 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 211 | match *tt { [INFO] [stderr] 212 | TokenType::LeftAngleBracketX2 => Some(BinaryOp::LeftShift), [INFO] [stderr] 213 | TokenType::RightAngleBracketX2 => Some(BinaryOp::RightShift), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:226:5 [INFO] [stderr] | [INFO] [stderr] 226 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 227 | | &TokenType::Plus => Some(BinaryOp::Plus), [INFO] [stderr] 228 | | &TokenType::Minus => Some(BinaryOp::Minus), [INFO] [stderr] 229 | | _ => None [INFO] [stderr] 230 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 226 | match *tt { [INFO] [stderr] 227 | TokenType::Plus => Some(BinaryOp::Plus), [INFO] [stderr] 228 | TokenType::Minus => Some(BinaryOp::Minus), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:241:5 [INFO] [stderr] | [INFO] [stderr] 241 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 242 | | &TokenType::Star => Some(BinaryOp::Multiply), [INFO] [stderr] 243 | | &TokenType::ForwardSlash => Some(BinaryOp::Divide), [INFO] [stderr] 244 | | &TokenType::Percent => Some(BinaryOp::Modulo), [INFO] [stderr] 245 | | _ => None [INFO] [stderr] 246 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 241 | match *tt { [INFO] [stderr] 242 | TokenType::Star => Some(BinaryOp::Multiply), [INFO] [stderr] 243 | TokenType::ForwardSlash => Some(BinaryOp::Divide), [INFO] [stderr] 244 | TokenType::Percent => Some(BinaryOp::Modulo), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:257:5 [INFO] [stderr] | [INFO] [stderr] 257 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 258 | | &TokenType::StarX2 => Some(BinaryOp::Exponent), [INFO] [stderr] 259 | | _ => None [INFO] [stderr] 260 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 257 | match *tt { [INFO] [stderr] 258 | TokenType::StarX2 => Some(BinaryOp::Exponent), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/parsing.rs:349:1 [INFO] [stderr] | [INFO] [stderr] 349 | / pub fn parse<'a>(input: &'a str) -> Option { [INFO] [stderr] 350 | | Parser::new(input).parse_ast() [INFO] [stderr] 351 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/main.rs:45:14 [INFO] [stderr] | [INFO] [stderr] 45 | fn run_exprs<'a, I>(inputs: I) where I: Iterator { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [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/main.rs:49:3 [INFO] [stderr] | [INFO] [stderr] 49 | match parsing::parse(&str) { [INFO] [stderr] | _________^ [INFO] [stderr] 50 | | Some(Ast::Expression(expr)) => { [INFO] [stderr] 51 | | match runner.run(expr) { [INFO] [stderr] 52 | | Ok(v) => println!("{}", v), [INFO] [stderr] ... | [INFO] [stderr] 56 | | _ => {} [INFO] [stderr] 57 | | } // match [INFO] [stderr] | |_________^ [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] help: try this [INFO] [stderr] | [INFO] [stderr] 49 | if let Some(Ast::Expression(expr)) = parsing::parse(&str) { [INFO] [stderr] 50 | match runner.run(expr) { [INFO] [stderr] 51 | Ok(v) => println!("{}", v), [INFO] [stderr] 52 | Err(msg) => println!("{}", msg), [INFO] [stderr] 53 | } [INFO] [stderr] 54 | } // match [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this loop never actually loops [INFO] [stderr] --> src/main.rs:115:2 [INFO] [stderr] | [INFO] [stderr] 115 | loop { [INFO] [stderr] | _____^ [INFO] [stderr] 116 | | match peekable.peek() { [INFO] [stderr] 117 | | Some(arg) => match arg.as_str() { [INFO] [stderr] 118 | | "--help" => { [INFO] [stderr] ... | [INFO] [stderr] 137 | | } // match [INFO] [stderr] 138 | | } // loop [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::never_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#never_loop [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/main.rs:115:2 [INFO] [stderr] | [INFO] [stderr] 115 | loop { [INFO] [stderr] | _____^ [INFO] [stderr] 116 | | match peekable.peek() { [INFO] [stderr] 117 | | Some(arg) => match arg.as_str() { [INFO] [stderr] 118 | | "--help" => { [INFO] [stderr] ... | [INFO] [stderr] 137 | | } // match [INFO] [stderr] 138 | | } // loop [INFO] [stderr] | |_____^ help: try: `while let Some(arg) = peekable.peek() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `tcalc`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/buffered_iterator.rs:18:10 [INFO] [stderr] | [INFO] [stderr] 18 | return match self.buf.is_empty() { [INFO] [stderr] | ________________^ [INFO] [stderr] 19 | | true => self.itr.next(), [INFO] [stderr] 20 | | false => self.buf.pop() [INFO] [stderr] 21 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.buf.is_empty() { self.itr.next() } else { self.buf.pop() }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:169:5 [INFO] [stderr] | [INFO] [stderr] 169 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 170 | | &TokenType::Pipe => Some(BinaryOp::BitOr), [INFO] [stderr] 171 | | _ => None [INFO] [stderr] 172 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 169 | match *tt { [INFO] [stderr] 170 | TokenType::Pipe => Some(BinaryOp::BitOr), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:183:5 [INFO] [stderr] | [INFO] [stderr] 183 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 184 | | &TokenType::Caret => Some(BinaryOp::BitXor), [INFO] [stderr] 185 | | _ => None [INFO] [stderr] 186 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 183 | match *tt { [INFO] [stderr] 184 | TokenType::Caret => Some(BinaryOp::BitXor), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:197:5 [INFO] [stderr] | [INFO] [stderr] 197 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 198 | | &TokenType::Ampersand => Some(BinaryOp::BitAnd), [INFO] [stderr] 199 | | _ => None [INFO] [stderr] 200 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 197 | match *tt { [INFO] [stderr] 198 | TokenType::Ampersand => Some(BinaryOp::BitAnd), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:211:5 [INFO] [stderr] | [INFO] [stderr] 211 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 212 | | &TokenType::LeftAngleBracketX2 => Some(BinaryOp::LeftShift), [INFO] [stderr] 213 | | &TokenType::RightAngleBracketX2 => Some(BinaryOp::RightShift), [INFO] [stderr] 214 | | _ => None [INFO] [stderr] 215 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 211 | match *tt { [INFO] [stderr] 212 | TokenType::LeftAngleBracketX2 => Some(BinaryOp::LeftShift), [INFO] [stderr] 213 | TokenType::RightAngleBracketX2 => Some(BinaryOp::RightShift), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:226:5 [INFO] [stderr] | [INFO] [stderr] 226 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 227 | | &TokenType::Plus => Some(BinaryOp::Plus), [INFO] [stderr] 228 | | &TokenType::Minus => Some(BinaryOp::Minus), [INFO] [stderr] 229 | | _ => None [INFO] [stderr] 230 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 226 | match *tt { [INFO] [stderr] 227 | TokenType::Plus => Some(BinaryOp::Plus), [INFO] [stderr] 228 | TokenType::Minus => Some(BinaryOp::Minus), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:241:5 [INFO] [stderr] | [INFO] [stderr] 241 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 242 | | &TokenType::Star => Some(BinaryOp::Multiply), [INFO] [stderr] 243 | | &TokenType::ForwardSlash => Some(BinaryOp::Divide), [INFO] [stderr] 244 | | &TokenType::Percent => Some(BinaryOp::Modulo), [INFO] [stderr] 245 | | _ => None [INFO] [stderr] 246 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 241 | match *tt { [INFO] [stderr] 242 | TokenType::Star => Some(BinaryOp::Multiply), [INFO] [stderr] 243 | TokenType::ForwardSlash => Some(BinaryOp::Divide), [INFO] [stderr] 244 | TokenType::Percent => Some(BinaryOp::Modulo), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parsing.rs:257:5 [INFO] [stderr] | [INFO] [stderr] 257 | match tt { [INFO] [stderr] | _________________^ [INFO] [stderr] 258 | | &TokenType::StarX2 => Some(BinaryOp::Exponent), [INFO] [stderr] 259 | | _ => None [INFO] [stderr] 260 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 257 | match *tt { [INFO] [stderr] 258 | TokenType::StarX2 => Some(BinaryOp::Exponent), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/parsing.rs:349:1 [INFO] [stderr] | [INFO] [stderr] 349 | / pub fn parse<'a>(input: &'a str) -> Option { [INFO] [stderr] 350 | | Parser::new(input).parse_ast() [INFO] [stderr] 351 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:124:3 [INFO] [stderr] | [INFO] [stderr] 124 | assert_eq!(solve("123"), 123f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:124:3 [INFO] [stderr] | [INFO] [stderr] 124 | assert_eq!(solve("123"), 123f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:125:3 [INFO] [stderr] | [INFO] [stderr] 125 | assert_eq!(solve("123.456"), 123.456f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:125:3 [INFO] [stderr] | [INFO] [stderr] 125 | assert_eq!(solve("123.456"), 123.456f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:126:3 [INFO] [stderr] | [INFO] [stderr] 126 | assert_eq!(solve("1_234.567"), 1_234.567f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:126:3 [INFO] [stderr] | [INFO] [stderr] 126 | assert_eq!(solve("1_234.567"), 1_234.567f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:131:3 [INFO] [stderr] | [INFO] [stderr] 131 | assert_eq!(solve("a=123"), 123f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:131:3 [INFO] [stderr] | [INFO] [stderr] 131 | assert_eq!(solve("a=123"), 123f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:136:3 [INFO] [stderr] | [INFO] [stderr] 136 | assert_eq!(solve("e"), E); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:136:3 [INFO] [stderr] | [INFO] [stderr] 136 | assert_eq!(solve("e"), E); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:141:3 [INFO] [stderr] | [INFO] [stderr] 141 | assert_eq!(solve("(123)"), 123f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:141:3 [INFO] [stderr] | [INFO] [stderr] 141 | assert_eq!(solve("(123)"), 123f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:142:3 [INFO] [stderr] | [INFO] [stderr] 142 | assert_eq!(solve("(pi)"), PI); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:142:3 [INFO] [stderr] | [INFO] [stderr] 142 | assert_eq!(solve("(pi)"), PI); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:147:3 [INFO] [stderr] | [INFO] [stderr] 147 | assert_eq!(solve("-123"), -123f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:147:3 [INFO] [stderr] | [INFO] [stderr] 147 | assert_eq!(solve("-123"), -123f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:148:3 [INFO] [stderr] | [INFO] [stderr] 148 | assert_eq!(solve("!e"), !(E as i64) as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:148:3 [INFO] [stderr] | [INFO] [stderr] 148 | assert_eq!(solve("!e"), !(E as i64) as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:153:3 [INFO] [stderr] | [INFO] [stderr] 153 | assert_eq!(solve("2&7"), 2f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:153:3 [INFO] [stderr] | [INFO] [stderr] 153 | assert_eq!(solve("2&7"), 2f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:154:3 [INFO] [stderr] | [INFO] [stderr] 154 | assert_eq!(solve("2|7"), 7f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:154:3 [INFO] [stderr] | [INFO] [stderr] 154 | assert_eq!(solve("2|7"), 7f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:155:3 [INFO] [stderr] | [INFO] [stderr] 155 | assert_eq!(solve("2^7"), 5f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:155:3 [INFO] [stderr] | [INFO] [stderr] 155 | assert_eq!(solve("2^7"), 5f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:156:3 [INFO] [stderr] | [INFO] [stderr] 156 | assert_eq!(solve("2/7"), 2f64/7f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:156:3 [INFO] [stderr] | [INFO] [stderr] 156 | assert_eq!(solve("2/7"), 2f64/7f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:157:3 [INFO] [stderr] | [INFO] [stderr] 157 | assert_eq!(solve("2**7"), 128f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:157:3 [INFO] [stderr] | [INFO] [stderr] 157 | assert_eq!(solve("2**7"), 128f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:158:3 [INFO] [stderr] | [INFO] [stderr] 158 | assert_eq!(solve("2<<7"), 256f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:158:3 [INFO] [stderr] | [INFO] [stderr] 158 | assert_eq!(solve("2<<7"), 256f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:159:3 [INFO] [stderr] | [INFO] [stderr] 159 | assert_eq!(solve("2-7"), -5f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:159:3 [INFO] [stderr] | [INFO] [stderr] 159 | assert_eq!(solve("2-7"), -5f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:160:3 [INFO] [stderr] | [INFO] [stderr] 160 | assert_eq!(solve("2%7"), 2f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:160:3 [INFO] [stderr] | [INFO] [stderr] 160 | assert_eq!(solve("2%7"), 2f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:161:3 [INFO] [stderr] | [INFO] [stderr] 161 | assert_eq!(solve("2*7"), 14f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:161:3 [INFO] [stderr] | [INFO] [stderr] 161 | assert_eq!(solve("2*7"), 14f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:162:3 [INFO] [stderr] | [INFO] [stderr] 162 | assert_eq!(solve("2+7"), 9f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:162:3 [INFO] [stderr] | [INFO] [stderr] 162 | assert_eq!(solve("2+7"), 9f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:163:3 [INFO] [stderr] | [INFO] [stderr] 163 | assert_eq!(solve("2>>7"), 0f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:163:3 [INFO] [stderr] | [INFO] [stderr] 163 | assert_eq!(solve("2>>7"), 0f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:168:3 [INFO] [stderr] | [INFO] [stderr] 168 | assert_eq!(solve("6/3-2"), 0f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:168:3 [INFO] [stderr] | [INFO] [stderr] 168 | assert_eq!(solve("6/3-2"), 0f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:169:3 [INFO] [stderr] | [INFO] [stderr] 169 | assert_eq!(solve("6/(3-2)"), 6f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:169:3 [INFO] [stderr] | [INFO] [stderr] 169 | assert_eq!(solve("6/(3-2)"), 6f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:170:3 [INFO] [stderr] | [INFO] [stderr] 170 | assert_eq!(solve("6*3**2"), 54f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:170:3 [INFO] [stderr] | [INFO] [stderr] 170 | assert_eq!(solve("6*3**2"), 54f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/running.rs:171:3 [INFO] [stderr] | [INFO] [stderr] 171 | assert_eq!(solve("(6*3)**2"), 324f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/running.rs:171:3 [INFO] [stderr] | [INFO] [stderr] 171 | assert_eq!(solve("(6*3)**2"), 324f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/main.rs:45:14 [INFO] [stderr] | [INFO] [stderr] 45 | fn run_exprs<'a, I>(inputs: I) where I: Iterator { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [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/main.rs:49:3 [INFO] [stderr] | [INFO] [stderr] 49 | match parsing::parse(&str) { [INFO] [stderr] | _________^ [INFO] [stderr] 50 | | Some(Ast::Expression(expr)) => { [INFO] [stderr] 51 | | match runner.run(expr) { [INFO] [stderr] 52 | | Ok(v) => println!("{}", v), [INFO] [stderr] ... | [INFO] [stderr] 56 | | _ => {} [INFO] [stderr] 57 | | } // match [INFO] [stderr] | |_________^ [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] help: try this [INFO] [stderr] | [INFO] [stderr] 49 | if let Some(Ast::Expression(expr)) = parsing::parse(&str) { [INFO] [stderr] 50 | match runner.run(expr) { [INFO] [stderr] 51 | Ok(v) => println!("{}", v), [INFO] [stderr] 52 | Err(msg) => println!("{}", msg), [INFO] [stderr] 53 | } [INFO] [stderr] 54 | } // match [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this loop never actually loops [INFO] [stderr] --> src/main.rs:115:2 [INFO] [stderr] | [INFO] [stderr] 115 | loop { [INFO] [stderr] | _____^ [INFO] [stderr] 116 | | match peekable.peek() { [INFO] [stderr] 117 | | Some(arg) => match arg.as_str() { [INFO] [stderr] 118 | | "--help" => { [INFO] [stderr] ... | [INFO] [stderr] 137 | | } // match [INFO] [stderr] 138 | | } // loop [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::never_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#never_loop [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/main.rs:115:2 [INFO] [stderr] | [INFO] [stderr] 115 | loop { [INFO] [stderr] | _____^ [INFO] [stderr] 116 | | match peekable.peek() { [INFO] [stderr] 117 | | Some(arg) => match arg.as_str() { [INFO] [stderr] 118 | | "--help" => { [INFO] [stderr] ... | [INFO] [stderr] 137 | | } // match [INFO] [stderr] 138 | | } // loop [INFO] [stderr] | |_____^ help: try: `while let Some(arg) = peekable.peek() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] error: aborting due to 25 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `tcalc`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "a1d69102f22d40bca113a6a9537a25b17cad6cc058d308f7cb6cf919369b4b67"` [INFO] running `"docker" "rm" "-f" "a1d69102f22d40bca113a6a9537a25b17cad6cc058d308f7cb6cf919369b4b67"` [INFO] [stdout] a1d69102f22d40bca113a6a9537a25b17cad6cc058d308f7cb6cf919369b4b67