[INFO] cloning repository https://github.com/losvedir/elixir_parser [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/losvedir/elixir_parser" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flosvedir%2Felixir_parser", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flosvedir%2Felixir_parser'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 5bdab4fb0d8bcc6de8c95a736db815796e4a3231 [INFO] linting losvedir/elixir_parser against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flosvedir%2Felixir_parser" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/losvedir/elixir_parser [INFO] finished tweaking git repo https://github.com/losvedir/elixir_parser [INFO] tweaked toml for git repo https://github.com/losvedir/elixir_parser written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/losvedir/elixir_parser on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/losvedir/elixir_parser already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] warning: `package.edition` is unspecified, defaulting to `2015` while the latest is `2024` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded term v0.4.6 [INFO] [stderr] Downloaded lalrpop-util v0.16.2 [INFO] [stderr] Downloaded aho-corasick v0.6.9 [INFO] [stderr] Downloaded rand_os v0.1.1 [INFO] [stderr] Downloaded ascii-canvas v1.0.0 [INFO] [stderr] Downloaded block-padding v0.1.2 [INFO] [stderr] Downloaded block-buffer v0.7.0 [INFO] [stderr] Downloaded memchr v2.1.2 [INFO] [stderr] Downloaded bit-vec v0.5.0 [INFO] [stderr] Downloaded docopt v1.0.2 [INFO] [stderr] Downloaded serde_derive v1.0.84 [INFO] [stderr] Downloaded rand v0.6.4 [INFO] [stderr] Downloaded num-bigint v0.2.2 [INFO] [stderr] Downloaded lalrpop v0.16.2 [INFO] [stderr] Downloaded ordermap v0.3.5 [INFO] [stderr] Downloaded serde v1.0.84 [INFO] [stderr] Downloaded libc v0.2.46 [INFO] [stderr] Downloaded ena v0.10.1 [INFO] [stderr] Downloaded generic-array v0.12.0 [INFO] [stderr] Downloaded syn v0.15.24 [INFO] [stderr] Downloaded sha2 v0.8.0 [INFO] [stderr] Downloaded redox_syscall v0.1.50 [INFO] [stderr] Downloaded bit-set v0.5.0 [INFO] [stderr] Downloaded diff v0.1.11 [INFO] [stderr] Downloaded regex v1.1.0 [INFO] [stderr] Downloaded byte-tools v0.3.0 [INFO] [stderr] Downloaded regex-syntax v0.6.4 [INFO] [stderr] Downloaded digest v0.8.0 [INFO] [stderr] Downloaded opaque-debug v0.2.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 95f774cad14dcefdcf35bfe019b22241778f0647c362606623707175b692ce25 [INFO] running `Command { std: "docker" "start" "-a" "95f774cad14dcefdcf35bfe019b22241778f0647c362606623707175b692ce25", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "95f774cad14dcefdcf35bfe019b22241778f0647c362606623707175b692ce25", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "95f774cad14dcefdcf35bfe019b22241778f0647c362606623707175b692ce25", kill_on_drop: false }` [INFO] [stdout] 95f774cad14dcefdcf35bfe019b22241778f0647c362606623707175b692ce25 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 56fa00bcf08b7b808f00285575e0e5e2982e1e37a5f81893aded822ff6f7c2a1 [INFO] running `Command { std: "docker" "start" "-a" "56fa00bcf08b7b808f00285575e0e5e2982e1e37a5f81893aded822ff6f7c2a1", kill_on_drop: false }` [INFO] [stderr] warning: `package.edition` is unspecified, defaulting to `2015` while the latest is `2024` [INFO] [stderr] Compiling libc v0.2.46 [INFO] [stderr] Compiling memchr v2.1.2 [INFO] [stderr] Compiling rand_chacha v0.1.1 [INFO] [stderr] Compiling rand v0.6.4 [INFO] [stderr] Compiling rand_xorshift v0.1.1 [INFO] [stderr] Compiling typenum v1.10.0 [INFO] [stderr] Compiling rand_pcg v0.1.1 [INFO] [stderr] Compiling phf_shared v0.7.24 [INFO] [stderr] Compiling serde v1.0.84 [INFO] [stderr] Compiling byte-tools v0.3.0 [INFO] [stderr] Compiling ucd-util v0.1.3 [INFO] [stderr] Compiling regex v1.1.0 [INFO] [stderr] Compiling block-padding v0.1.2 [INFO] [stderr] Compiling thread_local v0.3.6 [INFO] [stderr] Compiling syn v0.15.24 [INFO] [stderr] Compiling regex-syntax v0.6.4 [INFO] [stderr] Compiling utf8-ranges v1.0.2 [INFO] [stderr] Compiling byteorder v1.2.7 [INFO] [stderr] Compiling new_debug_unreachable v1.0.1 [INFO] [stderr] Compiling log v0.4.6 [INFO] [stderr] Compiling strsim v0.7.0 [INFO] [stderr] Compiling fake-simd v0.1.2 [INFO] [stderr] Compiling ordermap v0.3.5 [INFO] [stderr] Compiling term v0.4.6 [INFO] [stderr] Compiling opaque-debug v0.2.1 [INFO] [stderr] Compiling rand_os v0.1.1 [INFO] [stderr] Compiling generic-array v0.12.0 [INFO] [stderr] Compiling precomputed-hash v0.1.1 [INFO] [stderr] Compiling bit-vec v0.5.0 [INFO] [stderr] Compiling aho-corasick v0.6.9 [INFO] [stderr] Compiling num-traits v0.2.6 [INFO] [stderr] Compiling digest v0.8.0 [INFO] [stderr] Compiling block-buffer v0.7.0 [INFO] [stderr] Compiling petgraph v0.4.13 [INFO] [stderr] Compiling sha2 v0.8.0 [INFO] [stderr] Compiling bit-set v0.5.0 [INFO] [stderr] Compiling ascii-canvas v1.0.0 [INFO] [stderr] Compiling atty v0.2.11 [INFO] [stderr] Compiling ena v0.10.1 [INFO] [stderr] Compiling diff v0.1.11 [INFO] [stderr] Compiling num-integer v0.1.39 [INFO] [stderr] Compiling lalrpop-util v0.16.2 [INFO] [stderr] Compiling num-bigint v0.2.2 [INFO] [stderr] Compiling phf_generator v0.7.24 [INFO] [stderr] Compiling string_cache_codegen v0.4.2 [INFO] [stderr] Checking regex-syntax v0.5.6 [INFO] [stderr] Checking itertools v0.8.0 [INFO] [stderr] Compiling string_cache v0.7.3 [INFO] [stderr] Compiling serde_derive v1.0.84 [INFO] [stderr] Checking regex v0.2.11 [INFO] [stderr] Compiling docopt v1.0.2 [INFO] [stderr] Compiling lalrpop v0.16.2 [INFO] [stderr] Compiling elixir_parser v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `num_bigint::ToBigInt` [INFO] [stdout] --> src/lexer.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use num_bigint::ToBigInt; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/lexer.rs:487:5 [INFO] [stdout] | [INFO] [stdout] 487 | (t1 == &'&' && t2 == &'&') [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 487 - (t1 == &'&' && t2 == &'&') [INFO] [stdout] 487 + t1 == &'&' && t2 == &'&' [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/lexer.rs:491:5 [INFO] [stdout] | [INFO] [stdout] 491 | (t1 == &'|' && t2 == &'|') [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 491 - (t1 == &'|' && t2 == &'|') [INFO] [stdout] 491 + t1 == &'|' && t2 == &'|' [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/lexer.rs:511:5 [INFO] [stdout] | [INFO] [stdout] 511 | (t1 == &'-' && t2 == &'>') [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 511 - (t1 == &'-' && t2 == &'>') [INFO] [stdout] 511 + t1 == &'-' && t2 == &'>' [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/lexer.rs:515:5 [INFO] [stdout] | [INFO] [stdout] 515 | (t1 == &':' && t2 == &':') [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 515 - (t1 == &':' && t2 == &':') [INFO] [stdout] 515 + t1 == &':' && t2 == &':' [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/lexer.rs:446:32 [INFO] [stdout] | [INFO] [stdout] 446 | fn match_fn(&mut self, f: &Fn(&char) -> bool) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 446 | fn match_fn(&mut self, f: &dyn Fn(&char) -> bool) -> bool { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/lexer.rs:487:5 [INFO] [stdout] | [INFO] [stdout] 487 | (t1 == &'&' && t2 == &'&') [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 487 - (t1 == &'&' && t2 == &'&') [INFO] [stdout] 487 + t1 == &'&' && t2 == &'&' [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/lexer.rs:491:5 [INFO] [stdout] | [INFO] [stdout] 491 | (t1 == &'|' && t2 == &'|') [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 491 - (t1 == &'|' && t2 == &'|') [INFO] [stdout] 491 + t1 == &'|' && t2 == &'|' [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/lexer.rs:511:5 [INFO] [stdout] | [INFO] [stdout] 511 | (t1 == &'-' && t2 == &'>') [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 511 - (t1 == &'-' && t2 == &'>') [INFO] [stdout] 511 + t1 == &'-' && t2 == &'>' [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/lexer.rs:515:5 [INFO] [stdout] | [INFO] [stdout] 515 | (t1 == &':' && t2 == &':') [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 515 - (t1 == &':' && t2 == &':') [INFO] [stdout] 515 + t1 == &':' && t2 == &':' [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/lexer.rs:446:32 [INFO] [stdout] | [INFO] [stdout] 446 | fn match_fn(&mut self, f: &Fn(&char) -> bool) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 446 | fn match_fn(&mut self, f: &dyn Fn(&char) -> bool) -> bool { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `char::is_digit` with literal radix of 16 [INFO] [stdout] --> src/lexer.rs:63:84 [INFO] [stdout] | [INFO] [stdout] 63 | if self.match_char('0') && self.match_char('x') && self.match_fn(&|ch| ch.is_digit(16)) [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `ch.is_ascii_hexdigit()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#is_digit_ascii_radix [INFO] [stdout] = note: `#[warn(clippy::is_digit_ascii_radix)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `char::is_digit` with literal radix of 16 [INFO] [stdout] --> src/lexer.rs:67:68 [INFO] [stdout] | [INFO] [stdout] 67 | let digits: String = self.chars.take_while_ref(|c| c.is_digit(16)).collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `c.is_ascii_hexdigit()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#is_digit_ascii_radix [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `array` [INFO] [stdout] --> src/lexer.rs:333:60 [INFO] [stdout] | [INFO] [stdout] 333 | ... Tok::Atom([t1, t2, t3].into_iter().collect()), [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `array` [INFO] [stdout] --> src/lexer.rs:365:52 [INFO] [stdout] | [INFO] [stdout] 365 | ... Tok::Atom([t1, t2].into_iter().collect()), [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: needlessly taken reference of both operands [INFO] [stdout] --> src/lexer.rs:388:28 [INFO] [stdout] | [INFO] [stdout] 388 | || &t == &'.' [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stdout] = note: `#[warn(clippy::op_ref)]` on by default [INFO] [stdout] help: use the values directly [INFO] [stdout] | [INFO] [stdout] 388 - || &t == &'.' [INFO] [stdout] 388 + || t == '.' [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `array` [INFO] [stdout] --> src/lexer.rs:393:43 [INFO] [stdout] | [INFO] [stdout] 393 | ... Tok::Atom([t].into_iter().collect()), [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/lexer.rs:447:41 [INFO] [stdout] | [INFO] [stdout] 447 | self.chars.peek().map_or(false, |c| f(c)) [INFO] [stdout] | ^^^^^^^^ help: replace the closure with the function itself: `f` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/lexer.rs:447:9 [INFO] [stdout] | [INFO] [stdout] 447 | self.chars.peek().map_or(false, |c| f(c)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] = note: `#[warn(clippy::unnecessary_map_or)]` on by default [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 447 - self.chars.peek().map_or(false, |c| f(c)) [INFO] [stdout] 447 + self.chars.peek().is_some_and(|c| f(c)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/lexer.rs:479:5 [INFO] [stdout] | [INFO] [stdout] 479 | (t1 == &'=' && t2 == &'=') || (t1 == &'=' && t2 == &'~') || (t1 == &'!' && t2 == &'=') [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 479 - (t1 == &'=' && t2 == &'=') || (t1 == &'=' && t2 == &'~') || (t1 == &'!' && t2 == &'=') [INFO] [stdout] 479 + !(t1 != &'=' || t2 != &'=' && t2 != &'~') || (t1 == &'!' && t2 == &'=') [INFO] [stdout] | [INFO] [stdout] 479 - (t1 == &'=' && t2 == &'=') || (t1 == &'=' && t2 == &'~') || (t1 == &'!' && t2 == &'=') [INFO] [stdout] 479 + (t2 == &'~' || t2 == &'=') && t1 == &'=' || (t1 == &'!' && t2 == &'=') [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/lexer.rs:495:5 [INFO] [stdout] | [INFO] [stdout] 495 | (t1 == &'|' && t2 == &'>') || (t1 == &'~' && t2 == &'>') || (t1 == &'<' && t2 == &'~') [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 495 - (t1 == &'|' && t2 == &'>') || (t1 == &'~' && t2 == &'>') || (t1 == &'<' && t2 == &'~') [INFO] [stdout] 495 + !(t2 != &'>' || t1 != &'|' && t1 != &'~') || (t1 == &'<' && t2 == &'~') [INFO] [stdout] | [INFO] [stdout] 495 - (t1 == &'|' && t2 == &'>') || (t1 == &'~' && t2 == &'>') || (t1 == &'<' && t2 == &'~') [INFO] [stdout] 495 + (t1 == &'~' || t1 == &'|') && t2 == &'>' || (t1 == &'<' && t2 == &'~') [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/lexer.rs:523:5 [INFO] [stdout] | [INFO] [stdout] 523 | (t1 == &'=' && t2 == &'=' && t3 == &'=') || (t1 == &'!' && t2 == &'=' && t3 == &'=') [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 523 - (t1 == &'=' && t2 == &'=' && t3 == &'=') || (t1 == &'!' && t2 == &'=' && t3 == &'=') [INFO] [stdout] 523 + !(t2 != &'=' || t3 != &'=' || t1 != &'=' && t1 != &'!') [INFO] [stdout] | [INFO] [stdout] 523 - (t1 == &'=' && t2 == &'=' && t3 == &'=') || (t1 == &'!' && t2 == &'=' && t3 == &'=') [INFO] [stdout] 523 + (t1 == &'!' || t1 == &'=') && t3 == &'=' && t2 == &'=' [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this method call resolves to `<&[T; N] as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<[T; N] as IntoIterator>::into_iter` in Rust 2021 [INFO] [stdout] --> src/lexer.rs:333:60 [INFO] [stdout] | [INFO] [stdout] 333 | ... Tok::Atom([t1, t2, t3].into_iter().collect()), [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this changes meaning in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(array_into_iter)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: use `.iter()` instead of `.into_iter()` to avoid ambiguity [INFO] [stdout] | [INFO] [stdout] 333 - Tok::Atom([t1, t2, t3].into_iter().collect()), [INFO] [stdout] 333 + Tok::Atom([t1, t2, t3].iter().collect()), [INFO] [stdout] | [INFO] [stdout] help: or use `IntoIterator::into_iter(..)` instead of `.into_iter()` to explicitly iterate by value [INFO] [stdout] | [INFO] [stdout] 333 - Tok::Atom([t1, t2, t3].into_iter().collect()), [INFO] [stdout] 333 + Tok::Atom(IntoIterator::into_iter([t1, t2, t3]).collect()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this method call resolves to `<&[T; N] as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<[T; N] as IntoIterator>::into_iter` in Rust 2021 [INFO] [stdout] --> src/lexer.rs:365:52 [INFO] [stdout] | [INFO] [stdout] 365 | ... Tok::Atom([t1, t2].into_iter().collect()), [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this changes meaning in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: use `.iter()` instead of `.into_iter()` to avoid ambiguity [INFO] [stdout] | [INFO] [stdout] 365 - Tok::Atom([t1, t2].into_iter().collect()), [INFO] [stdout] 365 + Tok::Atom([t1, t2].iter().collect()), [INFO] [stdout] | [INFO] [stdout] help: or use `IntoIterator::into_iter(..)` instead of `.into_iter()` to explicitly iterate by value [INFO] [stdout] | [INFO] [stdout] 365 - Tok::Atom([t1, t2].into_iter().collect()), [INFO] [stdout] 365 + Tok::Atom(IntoIterator::into_iter([t1, t2]).collect()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this method call resolves to `<&[T; N] as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<[T; N] as IntoIterator>::into_iter` in Rust 2021 [INFO] [stdout] --> src/lexer.rs:393:43 [INFO] [stdout] | [INFO] [stdout] 393 | ... Tok::Atom([t].into_iter().collect()), [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this changes meaning in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: use `.iter()` instead of `.into_iter()` to avoid ambiguity [INFO] [stdout] | [INFO] [stdout] 393 - Tok::Atom([t].into_iter().collect()), [INFO] [stdout] 393 + Tok::Atom([t].iter().collect()), [INFO] [stdout] | [INFO] [stdout] help: or use `IntoIterator::into_iter(..)` instead of `.into_iter()` to explicitly iterate by value [INFO] [stdout] | [INFO] [stdout] 393 - Tok::Atom([t].into_iter().collect()), [INFO] [stdout] 393 + Tok::Atom(IntoIterator::into_iter([t]).collect()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `char::is_digit` with literal radix of 16 [INFO] [stdout] --> src/lexer.rs:63:84 [INFO] [stdout] | [INFO] [stdout] 63 | if self.match_char('0') && self.match_char('x') && self.match_fn(&|ch| ch.is_digit(16)) [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `ch.is_ascii_hexdigit()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#is_digit_ascii_radix [INFO] [stdout] = note: `#[warn(clippy::is_digit_ascii_radix)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `char::is_digit` with literal radix of 16 [INFO] [stdout] --> src/lexer.rs:67:68 [INFO] [stdout] | [INFO] [stdout] 67 | let digits: String = self.chars.take_while_ref(|c| c.is_digit(16)).collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `c.is_ascii_hexdigit()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#is_digit_ascii_radix [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `array` [INFO] [stdout] --> src/lexer.rs:333:60 [INFO] [stdout] | [INFO] [stdout] 333 | ... Tok::Atom([t1, t2, t3].into_iter().collect()), [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `array` [INFO] [stdout] --> src/lexer.rs:365:52 [INFO] [stdout] | [INFO] [stdout] 365 | ... Tok::Atom([t1, t2].into_iter().collect()), [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: needlessly taken reference of both operands [INFO] [stdout] --> src/lexer.rs:388:28 [INFO] [stdout] | [INFO] [stdout] 388 | || &t == &'.' [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stdout] = note: `#[warn(clippy::op_ref)]` on by default [INFO] [stdout] help: use the values directly [INFO] [stdout] | [INFO] [stdout] 388 - || &t == &'.' [INFO] [stdout] 388 + || t == '.' [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `array` [INFO] [stdout] --> src/lexer.rs:393:43 [INFO] [stdout] | [INFO] [stdout] 393 | ... Tok::Atom([t].into_iter().collect()), [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/lexer.rs:447:41 [INFO] [stdout] | [INFO] [stdout] 447 | self.chars.peek().map_or(false, |c| f(c)) [INFO] [stdout] | ^^^^^^^^ help: replace the closure with the function itself: `f` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/lexer.rs:447:9 [INFO] [stdout] | [INFO] [stdout] 447 | self.chars.peek().map_or(false, |c| f(c)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] = note: `#[warn(clippy::unnecessary_map_or)]` on by default [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 447 - self.chars.peek().map_or(false, |c| f(c)) [INFO] [stdout] 447 + self.chars.peek().is_some_and(|c| f(c)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/lexer.rs:479:5 [INFO] [stdout] | [INFO] [stdout] 479 | (t1 == &'=' && t2 == &'=') || (t1 == &'=' && t2 == &'~') || (t1 == &'!' && t2 == &'=') [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 479 - (t1 == &'=' && t2 == &'=') || (t1 == &'=' && t2 == &'~') || (t1 == &'!' && t2 == &'=') [INFO] [stdout] 479 + !(t1 != &'=' || t2 != &'=' && t2 != &'~') || (t1 == &'!' && t2 == &'=') [INFO] [stdout] | [INFO] [stdout] 479 - (t1 == &'=' && t2 == &'=') || (t1 == &'=' && t2 == &'~') || (t1 == &'!' && t2 == &'=') [INFO] [stdout] 479 + (t2 == &'~' || t2 == &'=') && t1 == &'=' || (t1 == &'!' && t2 == &'=') [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/lexer.rs:495:5 [INFO] [stdout] | [INFO] [stdout] 495 | (t1 == &'|' && t2 == &'>') || (t1 == &'~' && t2 == &'>') || (t1 == &'<' && t2 == &'~') [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 495 - (t1 == &'|' && t2 == &'>') || (t1 == &'~' && t2 == &'>') || (t1 == &'<' && t2 == &'~') [INFO] [stdout] 495 + !(t2 != &'>' || t1 != &'|' && t1 != &'~') || (t1 == &'<' && t2 == &'~') [INFO] [stdout] | [INFO] [stdout] 495 - (t1 == &'|' && t2 == &'>') || (t1 == &'~' && t2 == &'>') || (t1 == &'<' && t2 == &'~') [INFO] [stdout] 495 + (t1 == &'~' || t1 == &'|') && t2 == &'>' || (t1 == &'<' && t2 == &'~') [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/lexer.rs:523:5 [INFO] [stdout] | [INFO] [stdout] 523 | (t1 == &'=' && t2 == &'=' && t3 == &'=') || (t1 == &'!' && t2 == &'=' && t3 == &'=') [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 523 - (t1 == &'=' && t2 == &'=' && t3 == &'=') || (t1 == &'!' && t2 == &'=' && t3 == &'=') [INFO] [stdout] 523 + !(t2 != &'=' || t3 != &'=' || t1 != &'=' && t1 != &'!') [INFO] [stdout] | [INFO] [stdout] 523 - (t1 == &'=' && t2 == &'=' && t3 == &'=') || (t1 == &'!' && t2 == &'=' && t3 == &'=') [INFO] [stdout] 523 + (t1 == &'!' || t1 == &'=') && t3 == &'=' && t2 == &'=' [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/lexer.rs:584:13 [INFO] [stdout] | [INFO] [stdout] 584 | assert!(lexer.next() == None); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `lexer.next().is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this method call resolves to `<&[T; N] as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<[T; N] as IntoIterator>::into_iter` in Rust 2021 [INFO] [stdout] --> src/lexer.rs:333:60 [INFO] [stdout] | [INFO] [stdout] 333 | ... Tok::Atom([t1, t2, t3].into_iter().collect()), [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this changes meaning in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(array_into_iter)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: use `.iter()` instead of `.into_iter()` to avoid ambiguity [INFO] [stdout] | [INFO] [stdout] 333 - Tok::Atom([t1, t2, t3].into_iter().collect()), [INFO] [stdout] 333 + Tok::Atom([t1, t2, t3].iter().collect()), [INFO] [stdout] | [INFO] [stdout] help: or use `IntoIterator::into_iter(..)` instead of `.into_iter()` to explicitly iterate by value [INFO] [stdout] | [INFO] [stdout] 333 - Tok::Atom([t1, t2, t3].into_iter().collect()), [INFO] [stdout] 333 + Tok::Atom(IntoIterator::into_iter([t1, t2, t3]).collect()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this method call resolves to `<&[T; N] as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<[T; N] as IntoIterator>::into_iter` in Rust 2021 [INFO] [stdout] --> src/lexer.rs:365:52 [INFO] [stdout] | [INFO] [stdout] 365 | ... Tok::Atom([t1, t2].into_iter().collect()), [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this changes meaning in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: use `.iter()` instead of `.into_iter()` to avoid ambiguity [INFO] [stdout] | [INFO] [stdout] 365 - Tok::Atom([t1, t2].into_iter().collect()), [INFO] [stdout] 365 + Tok::Atom([t1, t2].iter().collect()), [INFO] [stdout] | [INFO] [stdout] help: or use `IntoIterator::into_iter(..)` instead of `.into_iter()` to explicitly iterate by value [INFO] [stdout] | [INFO] [stdout] 365 - Tok::Atom([t1, t2].into_iter().collect()), [INFO] [stdout] 365 + Tok::Atom(IntoIterator::into_iter([t1, t2]).collect()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this method call resolves to `<&[T; N] as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<[T; N] as IntoIterator>::into_iter` in Rust 2021 [INFO] [stdout] --> src/lexer.rs:393:43 [INFO] [stdout] | [INFO] [stdout] 393 | ... Tok::Atom([t].into_iter().collect()), [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this changes meaning in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: use `.iter()` instead of `.into_iter()` to avoid ambiguity [INFO] [stdout] | [INFO] [stdout] 393 - Tok::Atom([t].into_iter().collect()), [INFO] [stdout] 393 + Tok::Atom([t].iter().collect()), [INFO] [stdout] | [INFO] [stdout] help: or use `IntoIterator::into_iter(..)` instead of `.into_iter()` to explicitly iterate by value [INFO] [stdout] | [INFO] [stdout] 393 - Tok::Atom([t].into_iter().collect()), [INFO] [stdout] 393 + Tok::Atom(IntoIterator::into_iter([t]).collect()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 41.84s [INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: lalrpop v0.16.2 [INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 2` [INFO] running `Command { std: "docker" "inspect" "56fa00bcf08b7b808f00285575e0e5e2982e1e37a5f81893aded822ff6f7c2a1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "56fa00bcf08b7b808f00285575e0e5e2982e1e37a5f81893aded822ff6f7c2a1", kill_on_drop: false }` [INFO] [stdout] 56fa00bcf08b7b808f00285575e0e5e2982e1e37a5f81893aded822ff6f7c2a1