[INFO] cloning repository https://github.com/voidwyrm-2/opaca [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/voidwyrm-2/opaca" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvoidwyrm-2%2Fopaca", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvoidwyrm-2%2Fopaca'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] bf9352cce368729acb221c5a03eabae2359be697 [INFO] linting voidwyrm-2/opaca against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvoidwyrm-2%2Fopaca" "/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/voidwyrm-2/opaca [INFO] finished tweaking git repo https://github.com/voidwyrm-2/opaca [INFO] tweaked toml for git repo https://github.com/voidwyrm-2/opaca written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/voidwyrm-2/opaca 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/voidwyrm-2/opaca 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] 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] 3aa013e19dad83a285ee435e39d5a561de92d478300d65d794c7c1eba53a9127 [INFO] running `Command { std: "docker" "start" "-a" "3aa013e19dad83a285ee435e39d5a561de92d478300d65d794c7c1eba53a9127", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "3aa013e19dad83a285ee435e39d5a561de92d478300d65d794c7c1eba53a9127", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3aa013e19dad83a285ee435e39d5a561de92d478300d65d794c7c1eba53a9127", kill_on_drop: false }` [INFO] [stdout] 3aa013e19dad83a285ee435e39d5a561de92d478300d65d794c7c1eba53a9127 [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] 6789e10981e8185a7b5409c24a17fdcad7b3694e919330f8bb79625dbcb370cc [INFO] running `Command { std: "docker" "start" "-a" "6789e10981e8185a7b5409c24a17fdcad7b3694e919330f8bb79625dbcb370cc", kill_on_drop: false }` [INFO] [stderr] Checking clap_builder v4.5.41 [INFO] [stderr] Compiling clap_derive v4.5.41 [INFO] [stderr] Checking clap v4.5.41 [INFO] [stderr] Checking opaca v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/lexer.rs:153:13 [INFO] [stdout] | [INFO] [stdout] 153 | typ: typ, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `typ` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/lexer.rs:154:13 [INFO] [stdout] | [INFO] [stdout] 154 | col: col, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `col` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/lexer.rs:155:13 [INFO] [stdout] | [INFO] [stdout] 155 | ln: ln, [INFO] [stdout] | ^^^^^^ help: replace it with: `ln` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/lexer.rs:156:13 [INFO] [stdout] | [INFO] [stdout] 156 | file: file, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `file` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `crate` references the macro call's crate [INFO] [stdout] --> src/grammar/lexer.rs:205:26 [INFO] [stdout] | [INFO] [stdout] 205 | OpacaError::from(crate::token_err!($tok, $fmt, $($msg)*)) [INFO] [stdout] | ^^^^^ help: to reference the macro definition's crate, use: `$crate` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#crate_in_macro_def [INFO] [stdout] = note: `#[warn(clippy::crate_in_macro_def)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/lexer.rs:255:13 [INFO] [stdout] | [INFO] [stdout] 255 | file: file, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `file` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/lexer.rs:153:13 [INFO] [stdout] | [INFO] [stdout] 153 | typ: typ, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `typ` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/lexer.rs:154:13 [INFO] [stdout] | [INFO] [stdout] 154 | col: col, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `col` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/lexer.rs:155:13 [INFO] [stdout] | [INFO] [stdout] 155 | ln: ln, [INFO] [stdout] | ^^^^^^ help: replace it with: `ln` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/lexer.rs:156:13 [INFO] [stdout] | [INFO] [stdout] 156 | file: file, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `file` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `crate` references the macro call's crate [INFO] [stdout] --> src/grammar/lexer.rs:205:26 [INFO] [stdout] | [INFO] [stdout] 205 | OpacaError::from(crate::token_err!($tok, $fmt, $($msg)*)) [INFO] [stdout] | ^^^^^ help: to reference the macro definition's crate, use: `$crate` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#crate_in_macro_def [INFO] [stdout] = note: `#[warn(clippy::crate_in_macro_def)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/lexer.rs:255:13 [INFO] [stdout] | [INFO] [stdout] 255 | file: file, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `file` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:244:13 [INFO] [stdout] | [INFO] [stdout] 244 | tokens: tokens, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `tokens` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:244:13 [INFO] [stdout] | [INFO] [stdout] 244 | tokens: tokens, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `tokens` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:402:13 [INFO] [stdout] | [INFO] [stdout] 402 | path: path, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:441:13 [INFO] [stdout] | [INFO] [stdout] 441 | symbols: symbols, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `symbols` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:478:21 [INFO] [stdout] | [INFO] [stdout] 478 | name: name, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:479:21 [INFO] [stdout] | [INFO] [stdout] 479 | params: params, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `params` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:496:21 [INFO] [stdout] | [INFO] [stdout] 496 | name: name, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:497:21 [INFO] [stdout] | [INFO] [stdout] 497 | params: params, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `params` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:619:13 [INFO] [stdout] | [INFO] [stdout] 619 | name: name, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:725:21 [INFO] [stdout] | [INFO] [stdout] 725 | op: op, [INFO] [stdout] | ^^^^^^ help: replace it with: `op` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:402:13 [INFO] [stdout] | [INFO] [stdout] 402 | path: path, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:441:13 [INFO] [stdout] | [INFO] [stdout] 441 | symbols: symbols, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `symbols` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:478:21 [INFO] [stdout] | [INFO] [stdout] 478 | name: name, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:479:21 [INFO] [stdout] | [INFO] [stdout] 479 | params: params, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `params` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:496:21 [INFO] [stdout] | [INFO] [stdout] 496 | name: name, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:497:21 [INFO] [stdout] | [INFO] [stdout] 497 | params: params, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `params` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:619:13 [INFO] [stdout] | [INFO] [stdout] 619 | name: name, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/grammar/parser.rs:725:21 [INFO] [stdout] | [INFO] [stdout] 725 | op: op, [INFO] [stdout] | ^^^^^^ help: replace it with: `op` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PATH_SEP` is never used [INFO] [stdout] --> src/common.rs:7:11 [INFO] [stdout] | [INFO] [stdout] 7 | pub const PATH_SEP: char = if std::cfg!(windows) { '\\' } else { '/' }; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Pair` is never used [INFO] [stdout] --> src/common.rs:57:10 [INFO] [stdout] | [INFO] [stdout] 57 | pub enum Pair { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_string` and `is_pair_of` are never used [INFO] [stdout] --> src/grammar/lexer.rs:60:12 [INFO] [stdout] | [INFO] [stdout] 55 | impl TokenType { [INFO] [stdout] | -------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 60 | pub fn get_string(&self) -> &String { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 68 | pub fn is_pair_of(&self, other: &TokenType) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/common.rs:62:26 [INFO] [stdout] | [INFO] [stdout] 62 | pub fn try_index(vec: &Vec, index: usize) -> Option<&T> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 62 - pub fn try_index(vec: &Vec, index: usize) -> Option<&T> { [INFO] [stdout] 62 + pub fn try_index(vec: &[T], index: usize) -> Option<&T> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true [INFO] [stdout] --> src/grammar/lexer.rs:75:1 [INFO] [stdout] | [INFO] [stdout] 75 | impl Into for TokenType { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: `impl From for Foreign` is allowed by the orphan rules, for more information see [INFO] [stdout] https://doc.rust-lang.org/reference/items/implementations.html#trait-implementation-coherence [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into [INFO] [stdout] = note: `#[warn(clippy::from_over_into)]` on by default [INFO] [stdout] help: replace the `Into` implementation with `From` [INFO] [stdout] | [INFO] [stdout] 75 ~ impl From for String { [INFO] [stdout] 76 ~ fn from(val: TokenType) -> Self { [INFO] [stdout] 77 ~ let str = match val { [INFO] [stdout] 78 ~ TokenType::Bool(v) => v.to_string(), [INFO] [stdout] 79 ~ TokenType::Int(v) => v.to_string(), [INFO] [stdout] 80 ~ TokenType::Float(v) => v.to_string(), [INFO] [stdout] 81 ~ TokenType::String(v) => format!("\"{}\"", v), [INFO] [stdout] 82 ~ TokenType::Ident(v) => v, [INFO] [stdout] 83 ~ _ => match val { [INFO] [stdout] 84 ~ TokenType::Bool(_) => unreachable!(), [INFO] [stdout] 85 ~ TokenType::Int(_) => unreachable!(), [INFO] [stdout] 86 ~ TokenType::Float(_) => unreachable!(), [INFO] [stdout] 87 ~ TokenType::String(_) => unreachable!(), [INFO] [stdout] 88 ~ TokenType::Ident(_) => unreachable!(), [INFO] [stdout] 89 ~ TokenType::Eof => "Eof", [INFO] [stdout] 90 ~ TokenType::StatementEnding => ";", [INFO] [stdout] 91 ~ TokenType::Colon => ":", [INFO] [stdout] 92 ~ TokenType::ArrowLeft => "<-", [INFO] [stdout] 93 ~ TokenType::ArrowRight => "->", [INFO] [stdout] 94 ~ TokenType::Assign => "=", [INFO] [stdout] 95 ~ TokenType::Add => "+", [INFO] [stdout] 96 ~ TokenType::Concat => "++", [INFO] [stdout] 97 ~ TokenType::Subtract => "-", [INFO] [stdout] 98 ~ TokenType::Multiply => "*", [INFO] [stdout] 99 ~ TokenType::Divide => "/", [INFO] [stdout] 100 ~ TokenType::Modulus => "%", [INFO] [stdout] 101 ~ TokenType::Equals => "==", [INFO] [stdout] 102 ~ TokenType::NotEquals => "!=", [INFO] [stdout] 103 ~ TokenType::LessThan => "<", [INFO] [stdout] 104 ~ TokenType::GreaterThan => ">", [INFO] [stdout] 105 ~ TokenType::And => "and", [INFO] [stdout] 106 ~ TokenType::Or => "or", [INFO] [stdout] 107 ~ TokenType::Dot => ".", [INFO] [stdout] 108 ~ TokenType::Module => "module", [INFO] [stdout] 109 ~ TokenType::Use => "use", [INFO] [stdout] 110 ~ TokenType::Exports => "exports", [INFO] [stdout] 111 ~ TokenType::Fun => "fun", [INFO] [stdout] 112 ~ TokenType::Is => "is", [INFO] [stdout] 113 ~ TokenType::Do => "do", [INFO] [stdout] 114 ~ TokenType::End => "end", [INFO] [stdout] 115 ~ TokenType::Return => "return", [INFO] [stdout] 116 ~ TokenType::Let => "let", [INFO] [stdout] 117 ~ TokenType::If => "if", [INFO] [stdout] 118 ~ TokenType::Elsif => "elsif", [INFO] [stdout] 119 ~ TokenType::Else => "else", [INFO] [stdout] 120 ~ TokenType::Comma => ",", [INFO] [stdout] 121 ~ TokenType::ParenLeft => "(", [INFO] [stdout] 122 ~ TokenType::ParenRight => ")", [INFO] [stdout] 123 ~ TokenType::BracketLeft => "[", [INFO] [stdout] 124 ~ TokenType::BracketRight => "]", [INFO] [stdout] 125 ~ TokenType::BraceLeft => "{", [INFO] [stdout] 126 ~ TokenType::BraceRight => "}", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/grammar/lexer.rs:131:9 [INFO] [stdout] | [INFO] [stdout] 77 | / let str = match self { [INFO] [stdout] 78 | | Self::Bool(v) => v.to_string(), [INFO] [stdout] 79 | | Self::Int(v) => v.to_string(), [INFO] [stdout] 80 | | Self::Float(v) => v.to_string(), [INFO] [stdout] ... | [INFO] [stdout] 128 | | .to_string(), [INFO] [stdout] 129 | | }; [INFO] [stdout] | |__________- unnecessary `let` binding [INFO] [stdout] 130 | [INFO] [stdout] 131 | str [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 77 ~ [INFO] [stdout] 78 | [INFO] [stdout] 79 ~ match self { [INFO] [stdout] 80 + Self::Bool(v) => v.to_string(), [INFO] [stdout] 81 + Self::Int(v) => v.to_string(), [INFO] [stdout] 82 + Self::Float(v) => v.to_string(), [INFO] [stdout] 83 + Self::String(v) => format!("\"{}\"", v), [INFO] [stdout] 84 + Self::Ident(v) => v, [INFO] [stdout] 85 + _ => match self { [INFO] [stdout] 86 + Self::Bool(_) => unreachable!(), [INFO] [stdout] 87 + Self::Int(_) => unreachable!(), [INFO] [stdout] 88 + Self::Float(_) => unreachable!(), [INFO] [stdout] 89 + Self::String(_) => unreachable!(), [INFO] [stdout] 90 + Self::Ident(_) => unreachable!(), [INFO] [stdout] 91 + Self::Eof => "Eof", [INFO] [stdout] 92 + Self::StatementEnding => ";", [INFO] [stdout] 93 + Self::Colon => ":", [INFO] [stdout] 94 + Self::ArrowLeft => "<-", [INFO] [stdout] 95 + Self::ArrowRight => "->", [INFO] [stdout] 96 + Self::Assign => "=", [INFO] [stdout] 97 + Self::Add => "+", [INFO] [stdout] 98 + Self::Concat => "++", [INFO] [stdout] 99 + Self::Subtract => "-", [INFO] [stdout] 100 + Self::Multiply => "*", [INFO] [stdout] 101 + Self::Divide => "/", [INFO] [stdout] 102 + Self::Modulus => "%", [INFO] [stdout] 103 + Self::Equals => "==", [INFO] [stdout] 104 + Self::NotEquals => "!=", [INFO] [stdout] 105 + Self::LessThan => "<", [INFO] [stdout] 106 + Self::GreaterThan => ">", [INFO] [stdout] 107 + Self::And => "and", [INFO] [stdout] 108 + Self::Or => "or", [INFO] [stdout] 109 + Self::Dot => ".", [INFO] [stdout] 110 + Self::Module => "module", [INFO] [stdout] 111 + Self::Use => "use", [INFO] [stdout] 112 + Self::Exports => "exports", [INFO] [stdout] 113 + Self::Fun => "fun", [INFO] [stdout] 114 + Self::Is => "is", [INFO] [stdout] 115 + Self::Do => "do", [INFO] [stdout] 116 + Self::End => "end", [INFO] [stdout] 117 + Self::Return => "return", [INFO] [stdout] 118 + Self::Let => "let", [INFO] [stdout] 119 + Self::If => "if", [INFO] [stdout] 120 + Self::Elsif => "elsif", [INFO] [stdout] 121 + Self::Else => "else", [INFO] [stdout] 122 + Self::Comma => ",", [INFO] [stdout] 123 + Self::ParenLeft => "(", [INFO] [stdout] 124 + Self::ParenRight => ")", [INFO] [stdout] 125 + Self::BracketLeft => "[", [INFO] [stdout] 126 + Self::BracketRight => "]", [INFO] [stdout] 127 + Self::BraceLeft => "{", [INFO] [stdout] 128 + Self::BraceRight => "}", [INFO] [stdout] 129 + } [INFO] [stdout] 130 + .to_string(), [INFO] [stdout] 131 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stdout] --> src/grammar/lexer.rs:190:5 [INFO] [stdout] | [INFO] [stdout] 190 | fn ne(&self, other: &TokenType) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stdout] = note: `#[warn(clippy::partialeq_ne_impl)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/grammar/lexer.rs:253:36 [INFO] [stdout] | [INFO] [stdout] 253 | pub fn new(file: String, text: &String) -> Lexer { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 253 - pub fn new(file: String, text: &String) -> Lexer { [INFO] [stdout] 253 + pub fn new(file: String, text: &str) -> Lexer { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/grammar/lexer.rs:330:9 [INFO] [stdout] | [INFO] [stdout] 330 | / if let Some(ch) = try_index(&self.text, self.idx) { [INFO] [stdout] 331 | | if *ch == '\'' || *ch == '"' { [INFO] [stdout] 332 | | str.push(*ch); [INFO] [stdout] 333 | | self.adv(); [INFO] [stdout] 334 | | } [INFO] [stdout] 335 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 330 ~ if let Some(ch) = try_index(&self.text, self.idx) [INFO] [stdout] 331 ~ && (*ch == '\'' || *ch == '"') { [INFO] [stdout] 332 | str.push(*ch); [INFO] [stdout] 333 | self.adv(); [INFO] [stdout] 334 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/grammar/lexer.rs:398:12 [INFO] [stdout] | [INFO] [stdout] 398 | if !try_index(&self.text, self.idx).is_some_and(|ch| *ch == '"') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `try_index(&self.text, self.idx).is_none_or(|ch| *ch != '"')` [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] [INFO] [stdout] [INFO] [stdout] warning: constant `PATH_SEP` is never used [INFO] [stdout] --> src/common.rs:7:11 [INFO] [stdout] | [INFO] [stdout] 7 | pub const PATH_SEP: char = if std::cfg!(windows) { '\\' } else { '/' }; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Pair` is never used [INFO] [stdout] --> src/common.rs:57:10 [INFO] [stdout] | [INFO] [stdout] 57 | pub enum Pair { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_string` and `is_pair_of` are never used [INFO] [stdout] --> src/grammar/lexer.rs:60:12 [INFO] [stdout] | [INFO] [stdout] 55 | impl TokenType { [INFO] [stdout] | -------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 60 | pub fn get_string(&self) -> &String { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 68 | pub fn is_pair_of(&self, other: &TokenType) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/common.rs:62:26 [INFO] [stdout] | [INFO] [stdout] 62 | pub fn try_index(vec: &Vec, index: usize) -> Option<&T> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 62 - pub fn try_index(vec: &Vec, index: usize) -> Option<&T> { [INFO] [stdout] 62 + pub fn try_index(vec: &[T], index: usize) -> Option<&T> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true [INFO] [stdout] --> src/grammar/lexer.rs:75:1 [INFO] [stdout] | [INFO] [stdout] 75 | impl Into for TokenType { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: `impl From for Foreign` is allowed by the orphan rules, for more information see [INFO] [stdout] https://doc.rust-lang.org/reference/items/implementations.html#trait-implementation-coherence [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into [INFO] [stdout] = note: `#[warn(clippy::from_over_into)]` on by default [INFO] [stdout] help: replace the `Into` implementation with `From` [INFO] [stdout] | [INFO] [stdout] 75 ~ impl From for String { [INFO] [stdout] 76 ~ fn from(val: TokenType) -> Self { [INFO] [stdout] 77 ~ let str = match val { [INFO] [stdout] 78 ~ TokenType::Bool(v) => v.to_string(), [INFO] [stdout] 79 ~ TokenType::Int(v) => v.to_string(), [INFO] [stdout] 80 ~ TokenType::Float(v) => v.to_string(), [INFO] [stdout] 81 ~ TokenType::String(v) => format!("\"{}\"", v), [INFO] [stdout] 82 ~ TokenType::Ident(v) => v, [INFO] [stdout] 83 ~ _ => match val { [INFO] [stdout] 84 ~ TokenType::Bool(_) => unreachable!(), [INFO] [stdout] 85 ~ TokenType::Int(_) => unreachable!(), [INFO] [stdout] 86 ~ TokenType::Float(_) => unreachable!(), [INFO] [stdout] 87 ~ TokenType::String(_) => unreachable!(), [INFO] [stdout] 88 ~ TokenType::Ident(_) => unreachable!(), [INFO] [stdout] 89 ~ TokenType::Eof => "Eof", [INFO] [stdout] 90 ~ TokenType::StatementEnding => ";", [INFO] [stdout] 91 ~ TokenType::Colon => ":", [INFO] [stdout] 92 ~ TokenType::ArrowLeft => "<-", [INFO] [stdout] 93 ~ TokenType::ArrowRight => "->", [INFO] [stdout] 94 ~ TokenType::Assign => "=", [INFO] [stdout] 95 ~ TokenType::Add => "+", [INFO] [stdout] 96 ~ TokenType::Concat => "++", [INFO] [stdout] 97 ~ TokenType::Subtract => "-", [INFO] [stdout] 98 ~ TokenType::Multiply => "*", [INFO] [stdout] 99 ~ TokenType::Divide => "/", [INFO] [stdout] 100 ~ TokenType::Modulus => "%", [INFO] [stdout] 101 ~ TokenType::Equals => "==", [INFO] [stdout] 102 ~ TokenType::NotEquals => "!=", [INFO] [stdout] 103 ~ TokenType::LessThan => "<", [INFO] [stdout] 104 ~ TokenType::GreaterThan => ">", [INFO] [stdout] 105 ~ TokenType::And => "and", [INFO] [stdout] 106 ~ TokenType::Or => "or", [INFO] [stdout] 107 ~ TokenType::Dot => ".", [INFO] [stdout] 108 ~ TokenType::Module => "module", [INFO] [stdout] 109 ~ TokenType::Use => "use", [INFO] [stdout] 110 ~ TokenType::Exports => "exports", [INFO] [stdout] 111 ~ TokenType::Fun => "fun", [INFO] [stdout] 112 ~ TokenType::Is => "is", [INFO] [stdout] 113 ~ TokenType::Do => "do", [INFO] [stdout] 114 ~ TokenType::End => "end", [INFO] [stdout] 115 ~ TokenType::Return => "return", [INFO] [stdout] 116 ~ TokenType::Let => "let", [INFO] [stdout] 117 ~ TokenType::If => "if", [INFO] [stdout] 118 ~ TokenType::Elsif => "elsif", [INFO] [stdout] 119 ~ TokenType::Else => "else", [INFO] [stdout] 120 ~ TokenType::Comma => ",", [INFO] [stdout] 121 ~ TokenType::ParenLeft => "(", [INFO] [stdout] 122 ~ TokenType::ParenRight => ")", [INFO] [stdout] 123 ~ TokenType::BracketLeft => "[", [INFO] [stdout] 124 ~ TokenType::BracketRight => "]", [INFO] [stdout] 125 ~ TokenType::BraceLeft => "{", [INFO] [stdout] 126 ~ TokenType::BraceRight => "}", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/grammar/lexer.rs:131:9 [INFO] [stdout] | [INFO] [stdout] 77 | / let str = match self { [INFO] [stdout] 78 | | Self::Bool(v) => v.to_string(), [INFO] [stdout] 79 | | Self::Int(v) => v.to_string(), [INFO] [stdout] 80 | | Self::Float(v) => v.to_string(), [INFO] [stdout] ... | [INFO] [stdout] 128 | | .to_string(), [INFO] [stdout] 129 | | }; [INFO] [stdout] | |__________- unnecessary `let` binding [INFO] [stdout] 130 | [INFO] [stdout] 131 | str [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 77 ~ [INFO] [stdout] 78 | [INFO] [stdout] 79 ~ match self { [INFO] [stdout] 80 + Self::Bool(v) => v.to_string(), [INFO] [stdout] 81 + Self::Int(v) => v.to_string(), [INFO] [stdout] 82 + Self::Float(v) => v.to_string(), [INFO] [stdout] 83 + Self::String(v) => format!("\"{}\"", v), [INFO] [stdout] 84 + Self::Ident(v) => v, [INFO] [stdout] 85 + _ => match self { [INFO] [stdout] 86 + Self::Bool(_) => unreachable!(), [INFO] [stdout] 87 + Self::Int(_) => unreachable!(), [INFO] [stdout] 88 + Self::Float(_) => unreachable!(), [INFO] [stdout] 89 + Self::String(_) => unreachable!(), [INFO] [stdout] 90 + Self::Ident(_) => unreachable!(), [INFO] [stdout] 91 + Self::Eof => "Eof", [INFO] [stdout] 92 + Self::StatementEnding => ";", [INFO] [stdout] 93 + Self::Colon => ":", [INFO] [stdout] 94 + Self::ArrowLeft => "<-", [INFO] [stdout] 95 + Self::ArrowRight => "->", [INFO] [stdout] 96 + Self::Assign => "=", [INFO] [stdout] 97 + Self::Add => "+", [INFO] [stdout] 98 + Self::Concat => "++", [INFO] [stdout] 99 + Self::Subtract => "-", [INFO] [stdout] 100 + Self::Multiply => "*", [INFO] [stdout] 101 + Self::Divide => "/", [INFO] [stdout] 102 + Self::Modulus => "%", [INFO] [stdout] 103 + Self::Equals => "==", [INFO] [stdout] 104 + Self::NotEquals => "!=", [INFO] [stdout] 105 + Self::LessThan => "<", [INFO] [stdout] 106 + Self::GreaterThan => ">", [INFO] [stdout] 107 + Self::And => "and", [INFO] [stdout] 108 + Self::Or => "or", [INFO] [stdout] 109 + Self::Dot => ".", [INFO] [stdout] 110 + Self::Module => "module", [INFO] [stdout] 111 + Self::Use => "use", [INFO] [stdout] 112 + Self::Exports => "exports", [INFO] [stdout] 113 + Self::Fun => "fun", [INFO] [stdout] 114 + Self::Is => "is", [INFO] [stdout] 115 + Self::Do => "do", [INFO] [stdout] 116 + Self::End => "end", [INFO] [stdout] 117 + Self::Return => "return", [INFO] [stdout] 118 + Self::Let => "let", [INFO] [stdout] 119 + Self::If => "if", [INFO] [stdout] 120 + Self::Elsif => "elsif", [INFO] [stdout] 121 + Self::Else => "else", [INFO] [stdout] 122 + Self::Comma => ",", [INFO] [stdout] 123 + Self::ParenLeft => "(", [INFO] [stdout] 124 + Self::ParenRight => ")", [INFO] [stdout] 125 + Self::BracketLeft => "[", [INFO] [stdout] 126 + Self::BracketRight => "]", [INFO] [stdout] 127 + Self::BraceLeft => "{", [INFO] [stdout] 128 + Self::BraceRight => "}", [INFO] [stdout] 129 + } [INFO] [stdout] 130 + .to_string(), [INFO] [stdout] 131 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stdout] --> src/grammar/lexer.rs:190:5 [INFO] [stdout] | [INFO] [stdout] 190 | fn ne(&self, other: &TokenType) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stdout] = note: `#[warn(clippy::partialeq_ne_impl)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/grammar/lexer.rs:253:36 [INFO] [stdout] | [INFO] [stdout] 253 | pub fn new(file: String, text: &String) -> Lexer { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 253 - pub fn new(file: String, text: &String) -> Lexer { [INFO] [stdout] 253 + pub fn new(file: String, text: &str) -> Lexer { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/grammar/parser.rs:250:9 [INFO] [stdout] | [INFO] [stdout] 250 | return &self.tokens[self.idx]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 250 - return &self.tokens[self.idx]; [INFO] [stdout] 250 + &self.tokens[self.idx] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/grammar/parser.rs:256:9 [INFO] [stdout] | [INFO] [stdout] 256 | return t; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 256 - return t; [INFO] [stdout] 256 + t [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/grammar/lexer.rs:330:9 [INFO] [stdout] | [INFO] [stdout] 330 | / if let Some(ch) = try_index(&self.text, self.idx) { [INFO] [stdout] 331 | | if *ch == '\'' || *ch == '"' { [INFO] [stdout] 332 | | str.push(*ch); [INFO] [stdout] 333 | | self.adv(); [INFO] [stdout] 334 | | } [INFO] [stdout] 335 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 330 ~ if let Some(ch) = try_index(&self.text, self.idx) [INFO] [stdout] 331 ~ && (*ch == '\'' || *ch == '"') { [INFO] [stdout] 332 | str.push(*ch); [INFO] [stdout] 333 | self.adv(); [INFO] [stdout] 334 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/grammar/lexer.rs:398:12 [INFO] [stdout] | [INFO] [stdout] 398 | if !try_index(&self.text, self.idx).is_some_and(|ch| *ch == '"') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `try_index(&self.text, self.idx).is_none_or(|ch| *ch != '"')` [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] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/grammar/parser.rs:250:9 [INFO] [stdout] | [INFO] [stdout] 250 | return &self.tokens[self.idx]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 250 - return &self.tokens[self.idx]; [INFO] [stdout] 250 + &self.tokens[self.idx] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/grammar/parser.rs:256:9 [INFO] [stdout] | [INFO] [stdout] 256 | return t; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 256 - return t; [INFO] [stdout] 256 + t [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:45:8 [INFO] [stdout] | [INFO] [stdout] 45 | if args.rem.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `args.rem.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:45:8 [INFO] [stdout] | [INFO] [stdout] 45 | if args.rem.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `args.rem.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 2.56s [INFO] running `Command { std: "docker" "inspect" "6789e10981e8185a7b5409c24a17fdcad7b3694e919330f8bb79625dbcb370cc", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "6789e10981e8185a7b5409c24a17fdcad7b3694e919330f8bb79625dbcb370cc", kill_on_drop: false }` [INFO] [stdout] 6789e10981e8185a7b5409c24a17fdcad7b3694e919330f8bb79625dbcb370cc