[INFO] updating cached repository sunjay/lion [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/sunjay/lion [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/sunjay/lion" "work/ex/clippy-test-run/sources/stable/gh/sunjay/lion"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/sunjay/lion'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/sunjay/lion" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/sunjay/lion"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/sunjay/lion'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 7502b95e4b4f2e655ba8966439c273a85fa3253e [INFO] sha for GitHub repo sunjay/lion: 7502b95e4b4f2e655ba8966439c273a85fa3253e [INFO] validating manifest of sunjay/lion 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 sunjay/lion 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 sunjay/lion [INFO] finished frobbing sunjay/lion [INFO] frobbed toml for sunjay/lion written to work/ex/clippy-test-run/sources/stable/gh/sunjay/lion/Cargo.toml [INFO] started frobbing sunjay/lion [INFO] finished frobbing sunjay/lion [INFO] frobbed toml for sunjay/lion written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/sunjay/lion/Cargo.toml [INFO] crate sunjay/lion 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 sunjay/lion 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/gh/sunjay/lion:/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] ca739a515ecc8a1df228810457fd88e26ad57c9e5967f173ba8751c56cc3aade [INFO] running `"docker" "start" "-a" "ca739a515ecc8a1df228810457fd88e26ad57c9e5967f173ba8751c56cc3aade"` [INFO] [stderr] Compiling num-bigint v0.2.1 [INFO] [stderr] Checking bytecount v0.3.2 [INFO] [stderr] Compiling phf_shared v0.7.23 [INFO] [stderr] Checking pretty_assertions v0.5.1 [INFO] [stderr] Compiling nix v0.7.0 [INFO] [stderr] Checking smallvec v0.6.7 [INFO] [stderr] Checking dirs v1.0.4 [INFO] [stderr] Checking nom v4.1.1 [INFO] [stderr] Compiling phf_generator v0.7.23 [INFO] [stderr] Checking smallstr v0.1.0 [INFO] [stderr] Compiling phf_codegen v0.7.23 [INFO] [stderr] Compiling terminfo v0.6.1 [INFO] [stderr] Checking nom_locate v0.3.1 [INFO] [stderr] Checking bigdecimal v0.0.14 [INFO] [stderr] Checking mortal v0.1.5 [INFO] [stderr] Checking linefeed v0.5.3 [INFO] [stderr] Checking lion v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/interpreter.rs:155:35 [INFO] [stderr] | [INFO] [stderr] 155 | UnsupportedConstExpr {expr: _, span} => { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: Try with `UnsupportedConstExpr { span, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/interpreter.rs:189:14 [INFO] [stderr] | [INFO] [stderr] 189 | } [INFO] [stderr] | ______________^ [INFO] [stderr] 190 | | // Must have at least one comma plus something else (i.e. no trailing comma allowed) [INFO] [stderr] 191 | | else if tokens.len() > 1 { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::suspicious_else_formatting)] on by default [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/interpreter.rs:497:54 [INFO] [stderr] | [INFO] [stderr] 497 | &Expr::Number(NumericLiteral {ref value, span: _}, ref unit) => { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `NumericLiteral { ref value, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/interpreter.rs:155:35 [INFO] [stderr] | [INFO] [stderr] 155 | UnsupportedConstExpr {expr: _, span} => { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: Try with `UnsupportedConstExpr { span, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/interpreter.rs:189:14 [INFO] [stderr] | [INFO] [stderr] 189 | } [INFO] [stderr] | ______________^ [INFO] [stderr] 190 | | // Must have at least one comma plus something else (i.e. no trailing comma allowed) [INFO] [stderr] 191 | | else if tokens.len() > 1 { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::suspicious_else_formatting)] on by default [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/interpreter.rs:497:54 [INFO] [stderr] | [INFO] [stderr] 497 | &Expr::Number(NumericLiteral {ref value, span: _}, ref unit) => { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `NumericLiteral { ref value, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/ast.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | Function(Function<'i>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 16 | Function(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/ast.rs:84:5 [INFO] [stderr] | [INFO] [stderr] 84 | Function(Function<'i>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 84 | Function(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/ast.rs:196:5 [INFO] [stderr] | [INFO] [stderr] 196 | Function(Function<'i>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 196 | Function(Box>), [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/parser.rs:26:1 [INFO] [stderr] | [INFO] [stderr] 26 | / pub fn parse_expr<'a>(input: &'a str) -> ParseResult<'a, Expr<'a>> { [INFO] [stderr] 27 | | let input = Span::new(CompleteStr(input)); [INFO] [stderr] 28 | | match expr(input) { [INFO] [stderr] 29 | | Ok((remaining, expr)) => { [INFO] [stderr] ... | [INFO] [stderr] 34 | | } [INFO] [stderr] 35 | | } [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/parser.rs:169:28 [INFO] [stderr] | [INFO] [stderr] 169 | (Block {body, ret: ret.unwrap_or(Expr::UnitValue(end_span)), span}) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Expr::UnitValue(end_span))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/parser.rs:370:6 [INFO] [stderr] | [INFO] [stderr] 370 | (BigDecimal::from(top / bottom)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `BigDecimal::from()`: `top / bottom` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/parser.rs:388:26 [INFO] [stderr] | [INFO] [stderr] 388 | if !lit.contains("e") { [INFO] [stderr] | ^^^ help: try using a char instead: `'e'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: calling `.extend(_.chars())` [INFO] [stderr] --> src/parser.rs:389:13 [INFO] [stderr] | [INFO] [stderr] 389 | lit.extend("e0".chars()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `lit.push_str("e0")` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_extend_chars)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_extend_chars [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/interpreter.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | EvalError(EvalError<'a>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 63 | EvalError(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/interpreter.rs:114:5 [INFO] [stderr] | [INFO] [stderr] 114 | ConversionFailed(ConversionFailed, Span<'a>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/interpreter.rs:114:5 [INFO] [stderr] | [INFO] [stderr] 114 | ConversionFailed(ConversionFailed, Span<'a>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/interpreter.rs:328:13 [INFO] [stderr] | [INFO] [stderr] 328 | / if let &Decl::UnitDecl(UnitDecl {ref attrs, ref unit_name, span, ..}) = decl { [INFO] [stderr] 329 | | // Must be inserted before prefix system attributes are computed [INFO] [stderr] 330 | | self.units.insert_unit(unit_name.clone(), span) [INFO] [stderr] 331 | | .map_err(|_| DeclError::DuplicateUnitDecl {name: unit_name.clone(), span})?; [INFO] [stderr] ... | [INFO] [stderr] 338 | | } [INFO] [stderr] 339 | | } [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] 328 | if let Decl::UnitDecl(UnitDecl {ref attrs, ref unit_name, span, ..}) = *decl { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/interpreter.rs:349:13 [INFO] [stderr] | [INFO] [stderr] 349 | / if let &Decl::Constant(Constant {name, unit: ref unit_expr, ref value, span}) = decl { [INFO] [stderr] 350 | | let target_unit = CanonicalUnit::from_unit_expr(unit_expr, &self.units)?; [INFO] [stderr] 351 | | let value = self.evaluate_expr(value, EvalMode::ConstOnly)?; [INFO] [stderr] 352 | | if value.unit != target_unit { [INFO] [stderr] ... | [INFO] [stderr] 362 | | })?; [INFO] [stderr] 363 | | } [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] 349 | if let Decl::Constant(Constant {name, unit: ref unit_expr, ref value, span}) = *decl { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/interpreter.rs:419:42 [INFO] [stderr] | [INFO] [stderr] 419 | Token::Parens(ref tokens) if tokens.len() >= 1 => match tokens[0] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/canonical.rs:81:23 [INFO] [stderr] | [INFO] [stderr] 81 | span: span.clone(), [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*span` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/canonical.rs:203:5 [INFO] [stderr] | [INFO] [stderr] 203 | / fn mul<'b>(self, other: &'b CanonicalUnit) -> Self::Output { [INFO] [stderr] 204 | | let mut terms = smallvec![]; [INFO] [stderr] 205 | | [INFO] [stderr] 206 | | let CanonicalUnit(lhs) = self; [INFO] [stderr] ... | [INFO] [stderr] 249 | | CanonicalUnit(terms) [INFO] [stderr] 250 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] error: Suspicious use of binary operator in `Mul` impl [INFO] [stderr] --> src/canonical.rs:228:34 [INFO] [stderr] | [INFO] [stderr] 228 | let exponent = x + y; [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::suspicious_arithmetic_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_arithmetic_impl [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/canonical.rs:272:5 [INFO] [stderr] | [INFO] [stderr] 272 | / fn div<'b>(self, other: &'b CanonicalUnit) -> Self::Output { [INFO] [stderr] 273 | | // self / other == self * other^-1 [INFO] [stderr] 274 | | self * (other ^ -1) [INFO] [stderr] 275 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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/ir.rs:38:16 [INFO] [stderr] | [INFO] [stderr] 38 | fn display<'a>(&self, units: &UnitGraph) -> String { [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] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `lion`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/ast.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | Function(Function<'i>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 16 | Function(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/ast.rs:84:5 [INFO] [stderr] | [INFO] [stderr] 84 | Function(Function<'i>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 84 | Function(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/ast.rs:196:5 [INFO] [stderr] | [INFO] [stderr] 196 | Function(Function<'i>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 196 | Function(Box>), [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/parser.rs:26:1 [INFO] [stderr] | [INFO] [stderr] 26 | / pub fn parse_expr<'a>(input: &'a str) -> ParseResult<'a, Expr<'a>> { [INFO] [stderr] 27 | | let input = Span::new(CompleteStr(input)); [INFO] [stderr] 28 | | match expr(input) { [INFO] [stderr] 29 | | Ok((remaining, expr)) => { [INFO] [stderr] ... | [INFO] [stderr] 34 | | } [INFO] [stderr] 35 | | } [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/parser.rs:169:28 [INFO] [stderr] | [INFO] [stderr] 169 | (Block {body, ret: ret.unwrap_or(Expr::UnitValue(end_span)), span}) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Expr::UnitValue(end_span))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/parser.rs:370:6 [INFO] [stderr] | [INFO] [stderr] 370 | (BigDecimal::from(top / bottom)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `BigDecimal::from()`: `top / bottom` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/parser.rs:388:26 [INFO] [stderr] | [INFO] [stderr] 388 | if !lit.contains("e") { [INFO] [stderr] | ^^^ help: try using a char instead: `'e'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: calling `.extend(_.chars())` [INFO] [stderr] --> src/parser.rs:389:13 [INFO] [stderr] | [INFO] [stderr] 389 | lit.extend("e0".chars()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `lit.push_str("e0")` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_extend_chars)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_extend_chars [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 34 [INFO] [stderr] --> src/parser.rs:595:5 [INFO] [stderr] | [INFO] [stderr] 595 | / fn compound_unit_parser() { [INFO] [stderr] 596 | | test_parser!(compound_unit("") -> err); [INFO] [stderr] 597 | | test_parser!(compound_unit("'a") -> ok); [INFO] [stderr] 598 | | test_parser!(compound_unit("'a'b") -> ok); [INFO] [stderr] ... | [INFO] [stderr] 774 | | ); [INFO] [stderr] 775 | | } [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: the function has a cyclomatic complexity of 83 [INFO] [stderr] --> src/parser.rs:778:5 [INFO] [stderr] | [INFO] [stderr] 778 | / fn unitterm_parser() { [INFO] [stderr] 779 | | test_parser!(unitterm("") -> err); [INFO] [stderr] 780 | | test_parser!(unitterm("'a") -> ok); [INFO] [stderr] 781 | | test_parser!(unitterm("'km") -> ok); [INFO] [stderr] ... | [INFO] [stderr] 914 | | ); [INFO] [stderr] 915 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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: the function has a cyclomatic complexity of 56 [INFO] [stderr] --> src/parser.rs:918:5 [INFO] [stderr] | [INFO] [stderr] 918 | / fn unitpow_parser() { [INFO] [stderr] 919 | | test_parser!(unitpow("") -> err); [INFO] [stderr] 920 | | test_parser!(unitpow("'a") -> ok); [INFO] [stderr] 921 | | test_parser!(unitpow("'km") -> ok); [INFO] [stderr] ... | [INFO] [stderr] 981 | | ); [INFO] [stderr] 982 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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: the function has a cyclomatic complexity of 65 [INFO] [stderr] --> src/parser.rs:985:5 [INFO] [stderr] | [INFO] [stderr] 985 | / fn unitfactor_parser() { [INFO] [stderr] 986 | | test_parser!(unitfactor("") -> err); [INFO] [stderr] 987 | | test_parser!(unitfactor("'a") -> ok); [INFO] [stderr] 988 | | test_parser!(unitfactor("'km") -> ok); [INFO] [stderr] ... | [INFO] [stderr] 1026 | | test_parser!(unitfactor("(( ( ('kph)) ) ) )") -> err); [INFO] [stderr] 1027 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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: the function has a cyclomatic complexity of 120 [INFO] [stderr] --> src/parser.rs:1030:5 [INFO] [stderr] | [INFO] [stderr] 1030 | / fn unit_parser() { [INFO] [stderr] 1031 | | let span = Span { offset: 0, line: 1, fragment: CompleteStr("") }; [INFO] [stderr] 1032 | | test_parser!(unit("") -> err); [INFO] [stderr] 1033 | | test_parser!(unit("'a") -> ok, (UnitName::from("a"), span)); [INFO] [stderr] ... | [INFO] [stderr] 1095 | | test_parser!(unit("'\u{03a9}") -> ok); [INFO] [stderr] 1096 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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: the function has a cyclomatic complexity of 156 [INFO] [stderr] --> src/parser.rs:1108:5 [INFO] [stderr] | [INFO] [stderr] 1108 | / fn ident_parser() { [INFO] [stderr] 1109 | | test_parser!(ident("") -> err); [INFO] [stderr] 1110 | | test_parser!(ident("a") -> ok, "a"); [INFO] [stderr] 1111 | | test_parser!(ident("km") -> ok, "km"); [INFO] [stderr] ... | [INFO] [stderr] 1201 | | test_parser!(ident("\u{03a9}") -> ok); [INFO] [stderr] 1202 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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: the function has a cyclomatic complexity of 94 [INFO] [stderr] --> src/parser.rs:1205:5 [INFO] [stderr] | [INFO] [stderr] 1205 | / fn numeric_literal_parser() { [INFO] [stderr] 1206 | | let span = Span { offset: 0, line: 1, fragment: CompleteStr("") }; [INFO] [stderr] 1207 | | test_parser!(numeric_literal("") -> err); [INFO] [stderr] 1208 | | test_parser!(numeric_literal("a") -> err); [INFO] [stderr] ... | [INFO] [stderr] 1239 | | test_parser!(numeric_literal("-1/-2") -> ok, NumericLiteral {value: BigDecimal::from_str("0.5").unwrap(), span}); [INFO] [stderr] 1240 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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: the function has a cyclomatic complexity of 38 [INFO] [stderr] --> src/parser.rs:1243:5 [INFO] [stderr] | [INFO] [stderr] 1243 | / fn integer_literal_parser() { [INFO] [stderr] 1244 | | test_parser!(integer_literal("") -> err); [INFO] [stderr] 1245 | | test_parser!(integer_literal("a") -> err); [INFO] [stderr] 1246 | | test_parser!(integer_literal("'km") -> err); [INFO] [stderr] ... | [INFO] [stderr] 1272 | | test_parser!(integer_literal("-123.456E-10") -> err); [INFO] [stderr] 1273 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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: the function has a cyclomatic complexity of 82 [INFO] [stderr] --> src/parser.rs:1276:5 [INFO] [stderr] | [INFO] [stderr] 1276 | / fn float_literal_parser() { [INFO] [stderr] 1277 | | test_parser!(float_literal("") -> err); [INFO] [stderr] 1278 | | test_parser!(float_literal("a") -> err); [INFO] [stderr] 1279 | | test_parser!(float_literal("'km") -> err); [INFO] [stderr] ... | [INFO] [stderr] 1305 | | test_parser!(float_literal("-123.456E-10") -> ok, BigDecimal::from_str("-123.456e-10").unwrap()); [INFO] [stderr] 1306 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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: large size difference between variants [INFO] [stderr] --> src/interpreter.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | EvalError(EvalError<'a>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 63 | EvalError(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/interpreter.rs:114:5 [INFO] [stderr] | [INFO] [stderr] 114 | ConversionFailed(ConversionFailed, Span<'a>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/interpreter.rs:114:5 [INFO] [stderr] | [INFO] [stderr] 114 | ConversionFailed(ConversionFailed, Span<'a>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/interpreter.rs:328:13 [INFO] [stderr] | [INFO] [stderr] 328 | / if let &Decl::UnitDecl(UnitDecl {ref attrs, ref unit_name, span, ..}) = decl { [INFO] [stderr] 329 | | // Must be inserted before prefix system attributes are computed [INFO] [stderr] 330 | | self.units.insert_unit(unit_name.clone(), span) [INFO] [stderr] 331 | | .map_err(|_| DeclError::DuplicateUnitDecl {name: unit_name.clone(), span})?; [INFO] [stderr] ... | [INFO] [stderr] 338 | | } [INFO] [stderr] 339 | | } [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] 328 | if let Decl::UnitDecl(UnitDecl {ref attrs, ref unit_name, span, ..}) = *decl { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/interpreter.rs:349:13 [INFO] [stderr] | [INFO] [stderr] 349 | / if let &Decl::Constant(Constant {name, unit: ref unit_expr, ref value, span}) = decl { [INFO] [stderr] 350 | | let target_unit = CanonicalUnit::from_unit_expr(unit_expr, &self.units)?; [INFO] [stderr] 351 | | let value = self.evaluate_expr(value, EvalMode::ConstOnly)?; [INFO] [stderr] 352 | | if value.unit != target_unit { [INFO] [stderr] ... | [INFO] [stderr] 362 | | })?; [INFO] [stderr] 363 | | } [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] 349 | if let Decl::Constant(Constant {name, unit: ref unit_expr, ref value, span}) = *decl { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/interpreter.rs:419:42 [INFO] [stderr] | [INFO] [stderr] 419 | Token::Parens(ref tokens) if tokens.len() >= 1 => match tokens[0] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/canonical.rs:81:23 [INFO] [stderr] | [INFO] [stderr] 81 | span: span.clone(), [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*span` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/canonical.rs:203:5 [INFO] [stderr] | [INFO] [stderr] 203 | / fn mul<'b>(self, other: &'b CanonicalUnit) -> Self::Output { [INFO] [stderr] 204 | | let mut terms = smallvec![]; [INFO] [stderr] 205 | | [INFO] [stderr] 206 | | let CanonicalUnit(lhs) = self; [INFO] [stderr] ... | [INFO] [stderr] 249 | | CanonicalUnit(terms) [INFO] [stderr] 250 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] error: Suspicious use of binary operator in `Mul` impl [INFO] [stderr] --> src/canonical.rs:228:34 [INFO] [stderr] | [INFO] [stderr] 228 | let exponent = x + y; [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::suspicious_arithmetic_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_arithmetic_impl [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/canonical.rs:272:5 [INFO] [stderr] | [INFO] [stderr] 272 | / fn div<'b>(self, other: &'b CanonicalUnit) -> Self::Output { [INFO] [stderr] 273 | | // self / other == self * other^-1 [INFO] [stderr] 274 | | self * (other ^ -1) [INFO] [stderr] 275 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `unit1` [INFO] [stderr] --> src/canonical.rs:331:20 [INFO] [stderr] | [INFO] [stderr] 331 | assert_eq!(unit1 ^ 0, CanonicalUnit::unitless()); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/ir.rs:38:16 [INFO] [stderr] | [INFO] [stderr] 38 | fn display<'a>(&self, units: &UnitGraph) -> String { [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] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `lion`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "ca739a515ecc8a1df228810457fd88e26ad57c9e5967f173ba8751c56cc3aade"` [INFO] running `"docker" "rm" "-f" "ca739a515ecc8a1df228810457fd88e26ad57c9e5967f173ba8751c56cc3aade"` [INFO] [stdout] ca739a515ecc8a1df228810457fd88e26ad57c9e5967f173ba8751c56cc3aade