[INFO] cloning repository https://github.com/ChristianSchefe/slang [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/ChristianSchefe/slang" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FChristianSchefe%2Fslang", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FChristianSchefe%2Fslang'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] a33a6d0b68fde61e9f50f78f8f7a48d0e3636495 [INFO] linting ChristianSchefe/slang against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FChristianSchefe%2Fslang" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/ChristianSchefe/slang [INFO] finished tweaking git repo https://github.com/ChristianSchefe/slang [INFO] tweaked toml for git repo https://github.com/ChristianSchefe/slang written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/ChristianSchefe/slang 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/ChristianSchefe/slang 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] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded unescaper v0.1.3 [INFO] [stderr] Downloaded errno v0.3.7 [INFO] [stderr] Downloaded rustix v0.38.25 [INFO] [stderr] Downloaded linux-raw-sys v0.4.11 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] 8917674bba3fb6503d47803ce191df13312cd17fbaff476f36a703691944d9c2 [INFO] running `Command { std: "docker" "start" "-a" "8917674bba3fb6503d47803ce191df13312cd17fbaff476f36a703691944d9c2", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "8917674bba3fb6503d47803ce191df13312cd17fbaff476f36a703691944d9c2", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "8917674bba3fb6503d47803ce191df13312cd17fbaff476f36a703691944d9c2", kill_on_drop: false }` [INFO] [stdout] 8917674bba3fb6503d47803ce191df13312cd17fbaff476f36a703691944d9c2 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] 68fee39d64c25a518164c7f6ff2631b837b6404387056cf04a5ea4f53d6c5545 [INFO] running `Command { std: "docker" "start" "-a" "68fee39d64c25a518164c7f6ff2631b837b6404387056cf04a5ea4f53d6c5545", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.150 [INFO] [stderr] Compiling rustix v0.38.25 [INFO] [stderr] Checking memchr v2.6.4 [INFO] [stderr] Checking bitflags v2.4.1 [INFO] [stderr] Checking regex-syntax v0.8.2 [INFO] [stderr] Compiling thiserror v1.0.50 [INFO] [stderr] Compiling syn v2.0.39 [INFO] [stderr] Checking linux-raw-sys v0.4.11 [INFO] [stderr] Checking termcolor v1.4.0 [INFO] [stderr] Checking aho-corasick v1.1.2 [INFO] [stderr] Checking getrandom v0.2.11 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking is-terminal v0.4.9 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking regex-automata v0.4.3 [INFO] [stderr] Compiling thiserror-impl v1.0.50 [INFO] [stderr] Checking unescaper v0.1.3 [INFO] [stderr] Checking regex v1.10.2 [INFO] [stderr] Checking env_logger v0.10.1 [INFO] [stderr] Checking slang v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/builtin_functions.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | params: &Vec, [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] 15 - params: &Vec, [INFO] [stdout] 15 + params: &[VariableValue], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:66:62 [INFO] [stdout] | [INFO] [stdout] 66 | } else if let Some(VariableValue::String(val)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:69:26 [INFO] [stdout] | [INFO] [stdout] 69 | .map(|v| VariableValue::Number(v)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::Number` [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: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:79:62 [INFO] [stdout] | [INFO] [stdout] 79 | } else if let Some(VariableValue::String(val)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:82:26 [INFO] [stdout] | [INFO] [stdout] 82 | .map(|v| VariableValue::String(v)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::String` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/builtin_functions.rs:88:16 [INFO] [stdout] | [INFO] [stdout] 88 | if params.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!params.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: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:96:26 [INFO] [stdout] | [INFO] [stdout] 96 | .map(|l| VariableValue::List(l)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::List` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:106:62 [INFO] [stdout] | [INFO] [stdout] 106 | } else if let Some(VariableValue::String(val)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:135:62 [INFO] [stdout] | [INFO] [stdout] 135 | } else if let Some(VariableValue::String(val)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:150:60 [INFO] [stdout] | [INFO] [stdout] 150 | } else if let Some(VariableValue::List(val)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `a.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:156:38 [INFO] [stdout] | [INFO] [stdout] 156 | ... (a.get(0), a.get(1)) [INFO] [stdout] | ^^^^^^^^ help: try: `a.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:176:26 [INFO] [stdout] | [INFO] [stdout] 176 | (target, params.get(0)) [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:189:58 [INFO] [stdout] | [INFO] [stdout] 189 | if let Some(VariableValue::Function(_, _)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:195:30 [INFO] [stdout] | [INFO] [stdout] 195 | .map(|v| VariableValue::List(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::List` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:207:30 [INFO] [stdout] | [INFO] [stdout] 207 | .map(|v| VariableValue::Object(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::Object` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:214:30 [INFO] [stdout] | [INFO] [stdout] 214 | .map(|v| VariableValue::List(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::List` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:228:58 [INFO] [stdout] | [INFO] [stdout] 228 | if let Some(VariableValue::Function(_, _)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:239:30 [INFO] [stdout] | [INFO] [stdout] 239 | .map(|v| VariableValue::List(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::List` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:256:30 [INFO] [stdout] | [INFO] [stdout] 256 | .map(|v| VariableValue::Object(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::Object` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:271:30 [INFO] [stdout] | [INFO] [stdout] 271 | .map(|v| VariableValue::List(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::List` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/executor.rs:57:40 [INFO] [stdout] | [INFO] [stdout] 57 | eval_expr(scope, expr).map(|return_val| Some(return_val)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Some` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/executor.rs:88:46 [INFO] [stdout] | [INFO] [stdout] 88 | define_var_by_val(scope, &var_name, VariableValue::Unit)?; [INFO] [stdout] | ^^^^^^^^^ help: change this to: `var_name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/executor.rs:91:51 [INFO] [stdout] | [INFO] [stdout] 91 | assign_var_by_name(scope, &var_name, val)?; [INFO] [stdout] | ^^^^^^^^^ help: change this to: `var_name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/executor.rs:108:46 [INFO] [stdout] | [INFO] [stdout] 108 | define_var_by_val(scope, &var_name, VariableValue::Unit)?; [INFO] [stdout] | ^^^^^^^^^ help: change this to: `var_name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/executor.rs:111:51 [INFO] [stdout] | [INFO] [stdout] 111 | assign_var_by_name(scope, &var_name, VariableValue::String(key))?; [INFO] [stdout] | ^^^^^^^^^ help: change this to: `var_name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/executor.rs:161:26 [INFO] [stdout] | [INFO] [stdout] 161 | .map_err(|v| Command::Error(v)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Command::Error` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/executor.rs:290:24 [INFO] [stdout] | [INFO] [stdout] 290 | is_builtin(&index_expr, Some(&object)).ok_or(Command::Error( [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `index_expr` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:142:71 [INFO] [stdout] | [INFO] [stdout] 142 | if let Some(PartialParsed::Token(Token::Keyword(Keyword::Let))) = t.get(0) { [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:155:74 [INFO] [stdout] | [INFO] [stdout] 155 | if let Some(PartialParsed::Token(Token::Keyword(Keyword::Return))) = t.get(0) { [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:164:73 [INFO] [stdout] | [INFO] [stdout] 164 | if let Some(PartialParsed::Token(Token::Keyword(Keyword::Break))) = t.get(0) { [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:173:76 [INFO] [stdout] | [INFO] [stdout] 173 | if let Some(PartialParsed::Token(Token::Keyword(Keyword::Continue))) = t.get(0) { [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Operator` which implements the `Copy` trait [INFO] [stdout] --> src/parser.rs:206:80 [INFO] [stdout] | [INFO] [stdout] 206 | Expression::BinaryOperator(Box::new(expr), Box::new(val_expr), op.clone()), [INFO] [stdout] | ^^^^^^^^^^ help: try dereferencing it: `*op` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/parser.rs:213:21 [INFO] [stdout] | [INFO] [stdout] 213 | get_expr(t).map(|e| Statement::Expr(e)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Statement::Expr` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/parser.rs:385:20 [INFO] [stdout] | [INFO] [stdout] 385 | if !lowest_precedence.is_some_and(|v| v < prec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `lowest_precedence.is_none_or(|v| v >= prec)` [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: length comparison to zero [INFO] [stdout] --> src/parser.rs:218:8 [INFO] [stdout] | [INFO] [stdout] 218 | if t.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `t.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] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:224:20 [INFO] [stdout] | [INFO] [stdout] 224 | if b.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `b.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] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/parser.rs:232:43 [INFO] [stdout] | [INFO] [stdout] 232 | get_statements(b).map(|v| Expression::Block(v)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Expression::Block` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:236:20 [INFO] [stdout] | [INFO] [stdout] 236 | if b.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `b.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] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/parser.rs:247:18 [INFO] [stdout] | [INFO] [stdout] 247 | .map(|v| Expression::List(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Expression::List` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:242:50 [INFO] [stdout] | [INFO] [stdout] 242 | PartialParsed::Brackets(ref b) => if b.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!b.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] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:261:53 [INFO] [stdout] | [INFO] [stdout] 261 | if let Some(PartialParsed::Closure(args)) = t.get(0) { [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:281:14 [INFO] [stdout] | [INFO] [stdout] 281 | ) = (t.get(0), t.get(1), t.get(2)) [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:294:66 [INFO] [stdout] | [INFO] [stdout] 294 | Expression::Value(VariableValue::Object(map)) if map.len() == 0 => { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `map.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] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:312:77 [INFO] [stdout] | [INFO] [stdout] 312 | if let Some(PartialParsed::Token(Token::Keyword(Keyword::While))) = t.get(0) { [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:323:66 [INFO] [stdout] | [INFO] [stdout] 323 | Expression::Value(VariableValue::Object(map)) if map.len() == 0 => { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `map.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] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `t` [INFO] [stdout] --> src/parser.rs:381:14 [INFO] [stdout] | [INFO] [stdout] 381 | for i in 0..t.len() { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 381 - for i in 0..t.len() { [INFO] [stdout] 381 + for (i, ) in t.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/parser.rs:382:9 [INFO] [stdout] | [INFO] [stdout] 382 | / match t[i] { [INFO] [stdout] 383 | | PartialParsed::Token(Token::Operator(ref op)) => { [INFO] [stdout] 384 | | let prec = op.precedence(); [INFO] [stdout] 385 | | if !lowest_precedence.is_some_and(|v| v < prec) { [INFO] [stdout] ... | [INFO] [stdout] 390 | | _ => (), [INFO] [stdout] 391 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 382 ~ if let PartialParsed::Token(Token::Operator(ref op)) = t[i] { [INFO] [stdout] 383 + let prec = op.precedence(); [INFO] [stdout] 384 + if !lowest_precedence.is_some_and(|v| v < prec) { [INFO] [stdout] 385 + lowest_precedence = Some(prec); [INFO] [stdout] 386 + lowest_op = Some((i, op.clone())); [INFO] [stdout] 387 + } [INFO] [stdout] 388 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Operator` which implements the `Copy` trait [INFO] [stdout] --> src/parser.rs:387:42 [INFO] [stdout] | [INFO] [stdout] 387 | lowest_op = Some((i, op.clone())); [INFO] [stdout] | ^^^^^^^^^^ help: try dereferencing it: `*op` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:414:23 [INFO] [stdout] | [INFO] [stdout] 414 | let args = if p.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!p.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] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/scope.rs:39:12 [INFO] [stdout] | [INFO] [stdout] 39 | if let Some(_) = scope [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 39 ~ if scope [INFO] [stdout] 40 + .last_mut() [INFO] [stdout] 41 + .expect("there should always be a layer") [INFO] [stdout] 42 + .insert(var_name.to_string(), val).is_some() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/tokenizer.rs:182:5 [INFO] [stdout] | [INFO] [stdout] 174 | / let tokens_without_whitespace = tokens_with_identifiers [INFO] [stdout] 175 | | .into_iter() [INFO] [stdout] 176 | | .filter(|tkn| match tkn { [INFO] [stdout] 177 | | CharToken::Char(c) => !c.is_whitespace(), [INFO] [stdout] 178 | | _ => true, [INFO] [stdout] 179 | | }) [INFO] [stdout] 180 | | .collect(); [INFO] [stdout] | |___________________- unnecessary `let` binding [INFO] [stdout] 181 | [INFO] [stdout] 182 | tokens_without_whitespace [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] 174 ~ [INFO] [stdout] 175 | [INFO] [stdout] 176 ~ tokens_with_identifiers [INFO] [stdout] 177 + .into_iter() [INFO] [stdout] 178 + .filter(|tkn| match tkn { [INFO] [stdout] 179 + CharToken::Char(c) => !c.is_whitespace(), [INFO] [stdout] 180 + _ => true, [INFO] [stdout] 181 + }) [INFO] [stdout] 182 + .collect() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `tokens` [INFO] [stdout] --> src/tokenizer.rs:117:14 [INFO] [stdout] | [INFO] [stdout] 117 | for i in 0..tokens.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 117 - for i in 0..tokens.len() { [INFO] [stdout] 117 + for in &tokens { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `tokens_with_strings` [INFO] [stdout] --> src/tokenizer.rs:141:14 [INFO] [stdout] | [INFO] [stdout] 141 | for i in 0..tokens_with_strings.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 141 - for i in 0..tokens_with_strings.len() { [INFO] [stdout] 141 + for in &tokens_with_strings { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `tokens_without_comments` [INFO] [stdout] --> src/tokenizer.rs:155:14 [INFO] [stdout] | [INFO] [stdout] 155 | for i in 0..tokens_without_comments.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 155 - for i in 0..tokens_without_comments.len() { [INFO] [stdout] 155 + for in &tokens_without_comments { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.filter_map(..)` can be written more simply using `.map(..)` [INFO] [stdout] --> src/tokenizer.rs:188:10 [INFO] [stdout] | [INFO] [stdout] 188 | .filter_map(|x| match x { [INFO] [stdout] | __________^ [INFO] [stdout] 189 | | CharToken::Char(c) => Some(map_char_token(c, x)), [INFO] [stdout] 190 | | CharToken::Identifier(s) => Some(map_string_token(s)), [INFO] [stdout] 191 | | CharToken::String(s) => { [INFO] [stdout] ... | [INFO] [stdout] 197 | | }) [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_filter_map [INFO] [stdout] = note: `#[warn(clippy::unnecessary_filter_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `list` [INFO] [stdout] --> src/variables.rs:84:26 [INFO] [stdout] | [INFO] [stdout] 84 | for i in 0..list.len() { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 84 - for i in 0..list.len() { [INFO] [stdout] 84 + for (i, ) in list.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: order comparisons between booleans can be simplified [INFO] [stdout] --> src/variables.rs:230:81 [INFO] [stdout] | [INFO] [stdout] 230 | (Self::Boolean(na), Self::Boolean(nb)) => Ok(VariableValue::Boolean(na < nb)), [INFO] [stdout] | ^^^^^^^ help: try: `!na & nb` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: order comparisons between booleans can be simplified [INFO] [stdout] --> src/variables.rs:242:81 [INFO] [stdout] | [INFO] [stdout] 242 | (Self::Boolean(na), Self::Boolean(nb)) => Ok(VariableValue::Boolean(na > nb)), [INFO] [stdout] | ^^^^^^^ help: try: `na & !nb` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/variables.rs:312:58 [INFO] [stdout] | [INFO] [stdout] 312 | Self::Number(na) => Ok(VariableValue::Number(0 + na)), [INFO] [stdout] | ^^^^^^ help: consider reducing it to: `na` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] = note: `#[warn(clippy::identity_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/variables.rs:346:56 [INFO] [stdout] | [INFO] [stdout] 346 | Operator::Not => VariableValue::not(a).map_err(|v| Command::Error(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Command::Error` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/variables.rs:347:62 [INFO] [stdout] | [INFO] [stdout] 347 | Operator::Negate => VariableValue::negate(a).map_err(|v| Command::Error(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Command::Error` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/variables.rs:348:69 [INFO] [stdout] | [INFO] [stdout] 348 | Operator::UnaryPlus => VariableValue::unary_plus(a).map_err(|v| Command::Error(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Command::Error` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/builtin_functions.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | params: &Vec, [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] 15 - params: &Vec, [INFO] [stdout] 15 + params: &[VariableValue], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:66:62 [INFO] [stdout] | [INFO] [stdout] 66 | } else if let Some(VariableValue::String(val)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:69:26 [INFO] [stdout] | [INFO] [stdout] 69 | .map(|v| VariableValue::Number(v)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::Number` [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: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:79:62 [INFO] [stdout] | [INFO] [stdout] 79 | } else if let Some(VariableValue::String(val)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:82:26 [INFO] [stdout] | [INFO] [stdout] 82 | .map(|v| VariableValue::String(v)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::String` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/builtin_functions.rs:88:16 [INFO] [stdout] | [INFO] [stdout] 88 | if params.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!params.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: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:96:26 [INFO] [stdout] | [INFO] [stdout] 96 | .map(|l| VariableValue::List(l)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::List` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:106:62 [INFO] [stdout] | [INFO] [stdout] 106 | } else if let Some(VariableValue::String(val)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:135:62 [INFO] [stdout] | [INFO] [stdout] 135 | } else if let Some(VariableValue::String(val)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:150:60 [INFO] [stdout] | [INFO] [stdout] 150 | } else if let Some(VariableValue::List(val)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `a.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:156:38 [INFO] [stdout] | [INFO] [stdout] 156 | ... (a.get(0), a.get(1)) [INFO] [stdout] | ^^^^^^^^ help: try: `a.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:176:26 [INFO] [stdout] | [INFO] [stdout] 176 | (target, params.get(0)) [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:189:58 [INFO] [stdout] | [INFO] [stdout] 189 | if let Some(VariableValue::Function(_, _)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:195:30 [INFO] [stdout] | [INFO] [stdout] 195 | .map(|v| VariableValue::List(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::List` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:207:30 [INFO] [stdout] | [INFO] [stdout] 207 | .map(|v| VariableValue::Object(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::Object` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:214:30 [INFO] [stdout] | [INFO] [stdout] 214 | .map(|v| VariableValue::List(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::List` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `params.get(0)` [INFO] [stdout] --> src/builtin_functions.rs:228:58 [INFO] [stdout] | [INFO] [stdout] 228 | if let Some(VariableValue::Function(_, _)) = params.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `params.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:239:30 [INFO] [stdout] | [INFO] [stdout] 239 | .map(|v| VariableValue::List(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::List` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:256:30 [INFO] [stdout] | [INFO] [stdout] 256 | .map(|v| VariableValue::Object(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::Object` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/builtin_functions.rs:271:30 [INFO] [stdout] | [INFO] [stdout] 271 | .map(|v| VariableValue::List(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `VariableValue::List` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/executor.rs:57:40 [INFO] [stdout] | [INFO] [stdout] 57 | eval_expr(scope, expr).map(|return_val| Some(return_val)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Some` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/executor.rs:88:46 [INFO] [stdout] | [INFO] [stdout] 88 | define_var_by_val(scope, &var_name, VariableValue::Unit)?; [INFO] [stdout] | ^^^^^^^^^ help: change this to: `var_name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/executor.rs:91:51 [INFO] [stdout] | [INFO] [stdout] 91 | assign_var_by_name(scope, &var_name, val)?; [INFO] [stdout] | ^^^^^^^^^ help: change this to: `var_name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/executor.rs:108:46 [INFO] [stdout] | [INFO] [stdout] 108 | define_var_by_val(scope, &var_name, VariableValue::Unit)?; [INFO] [stdout] | ^^^^^^^^^ help: change this to: `var_name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/executor.rs:111:51 [INFO] [stdout] | [INFO] [stdout] 111 | assign_var_by_name(scope, &var_name, VariableValue::String(key))?; [INFO] [stdout] | ^^^^^^^^^ help: change this to: `var_name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/executor.rs:161:26 [INFO] [stdout] | [INFO] [stdout] 161 | .map_err(|v| Command::Error(v)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Command::Error` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/executor.rs:290:24 [INFO] [stdout] | [INFO] [stdout] 290 | is_builtin(&index_expr, Some(&object)).ok_or(Command::Error( [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `index_expr` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:142:71 [INFO] [stdout] | [INFO] [stdout] 142 | if let Some(PartialParsed::Token(Token::Keyword(Keyword::Let))) = t.get(0) { [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:155:74 [INFO] [stdout] | [INFO] [stdout] 155 | if let Some(PartialParsed::Token(Token::Keyword(Keyword::Return))) = t.get(0) { [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:164:73 [INFO] [stdout] | [INFO] [stdout] 164 | if let Some(PartialParsed::Token(Token::Keyword(Keyword::Break))) = t.get(0) { [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:173:76 [INFO] [stdout] | [INFO] [stdout] 173 | if let Some(PartialParsed::Token(Token::Keyword(Keyword::Continue))) = t.get(0) { [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Operator` which implements the `Copy` trait [INFO] [stdout] --> src/parser.rs:206:80 [INFO] [stdout] | [INFO] [stdout] 206 | Expression::BinaryOperator(Box::new(expr), Box::new(val_expr), op.clone()), [INFO] [stdout] | ^^^^^^^^^^ help: try dereferencing it: `*op` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/parser.rs:213:21 [INFO] [stdout] | [INFO] [stdout] 213 | get_expr(t).map(|e| Statement::Expr(e)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Statement::Expr` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/parser.rs:385:20 [INFO] [stdout] | [INFO] [stdout] 385 | if !lowest_precedence.is_some_and(|v| v < prec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `lowest_precedence.is_none_or(|v| v >= prec)` [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: length comparison to zero [INFO] [stdout] --> src/parser.rs:218:8 [INFO] [stdout] | [INFO] [stdout] 218 | if t.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `t.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] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:224:20 [INFO] [stdout] | [INFO] [stdout] 224 | if b.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `b.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] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/parser.rs:232:43 [INFO] [stdout] | [INFO] [stdout] 232 | get_statements(b).map(|v| Expression::Block(v)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Expression::Block` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:236:20 [INFO] [stdout] | [INFO] [stdout] 236 | if b.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `b.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] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/parser.rs:247:18 [INFO] [stdout] | [INFO] [stdout] 247 | .map(|v| Expression::List(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Expression::List` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:242:50 [INFO] [stdout] | [INFO] [stdout] 242 | PartialParsed::Brackets(ref b) => if b.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!b.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] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:261:53 [INFO] [stdout] | [INFO] [stdout] 261 | if let Some(PartialParsed::Closure(args)) = t.get(0) { [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:281:14 [INFO] [stdout] | [INFO] [stdout] 281 | ) = (t.get(0), t.get(1), t.get(2)) [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:294:66 [INFO] [stdout] | [INFO] [stdout] 294 | Expression::Value(VariableValue::Object(map)) if map.len() == 0 => { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `map.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] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `t.get(0)` [INFO] [stdout] --> src/parser.rs:312:77 [INFO] [stdout] | [INFO] [stdout] 312 | if let Some(PartialParsed::Token(Token::Keyword(Keyword::While))) = t.get(0) { [INFO] [stdout] | ^^^^^^^^ help: try: `t.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:323:66 [INFO] [stdout] | [INFO] [stdout] 323 | Expression::Value(VariableValue::Object(map)) if map.len() == 0 => { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `map.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] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `t` [INFO] [stdout] --> src/parser.rs:381:14 [INFO] [stdout] | [INFO] [stdout] 381 | for i in 0..t.len() { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 381 - for i in 0..t.len() { [INFO] [stdout] 381 + for (i, ) in t.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/parser.rs:382:9 [INFO] [stdout] | [INFO] [stdout] 382 | / match t[i] { [INFO] [stdout] 383 | | PartialParsed::Token(Token::Operator(ref op)) => { [INFO] [stdout] 384 | | let prec = op.precedence(); [INFO] [stdout] 385 | | if !lowest_precedence.is_some_and(|v| v < prec) { [INFO] [stdout] ... | [INFO] [stdout] 390 | | _ => (), [INFO] [stdout] 391 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 382 ~ if let PartialParsed::Token(Token::Operator(ref op)) = t[i] { [INFO] [stdout] 383 + let prec = op.precedence(); [INFO] [stdout] 384 + if !lowest_precedence.is_some_and(|v| v < prec) { [INFO] [stdout] 385 + lowest_precedence = Some(prec); [INFO] [stdout] 386 + lowest_op = Some((i, op.clone())); [INFO] [stdout] 387 + } [INFO] [stdout] 388 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Operator` which implements the `Copy` trait [INFO] [stdout] --> src/parser.rs:387:42 [INFO] [stdout] | [INFO] [stdout] 387 | lowest_op = Some((i, op.clone())); [INFO] [stdout] | ^^^^^^^^^^ help: try dereferencing it: `*op` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:414:23 [INFO] [stdout] | [INFO] [stdout] 414 | let args = if p.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!p.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] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/scope.rs:39:12 [INFO] [stdout] | [INFO] [stdout] 39 | if let Some(_) = scope [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 39 ~ if scope [INFO] [stdout] 40 + .last_mut() [INFO] [stdout] 41 + .expect("there should always be a layer") [INFO] [stdout] 42 + .insert(var_name.to_string(), val).is_some() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/tokenizer.rs:182:5 [INFO] [stdout] | [INFO] [stdout] 174 | / let tokens_without_whitespace = tokens_with_identifiers [INFO] [stdout] 175 | | .into_iter() [INFO] [stdout] 176 | | .filter(|tkn| match tkn { [INFO] [stdout] 177 | | CharToken::Char(c) => !c.is_whitespace(), [INFO] [stdout] 178 | | _ => true, [INFO] [stdout] 179 | | }) [INFO] [stdout] 180 | | .collect(); [INFO] [stdout] | |___________________- unnecessary `let` binding [INFO] [stdout] 181 | [INFO] [stdout] 182 | tokens_without_whitespace [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] 174 ~ [INFO] [stdout] 175 | [INFO] [stdout] 176 ~ tokens_with_identifiers [INFO] [stdout] 177 + .into_iter() [INFO] [stdout] 178 + .filter(|tkn| match tkn { [INFO] [stdout] 179 + CharToken::Char(c) => !c.is_whitespace(), [INFO] [stdout] 180 + _ => true, [INFO] [stdout] 181 + }) [INFO] [stdout] 182 + .collect() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `tokens` [INFO] [stdout] --> src/tokenizer.rs:117:14 [INFO] [stdout] | [INFO] [stdout] 117 | for i in 0..tokens.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 117 - for i in 0..tokens.len() { [INFO] [stdout] 117 + for in &tokens { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `tokens_with_strings` [INFO] [stdout] --> src/tokenizer.rs:141:14 [INFO] [stdout] | [INFO] [stdout] 141 | for i in 0..tokens_with_strings.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 141 - for i in 0..tokens_with_strings.len() { [INFO] [stdout] 141 + for in &tokens_with_strings { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `tokens_without_comments` [INFO] [stdout] --> src/tokenizer.rs:155:14 [INFO] [stdout] | [INFO] [stdout] 155 | for i in 0..tokens_without_comments.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 155 - for i in 0..tokens_without_comments.len() { [INFO] [stdout] 155 + for in &tokens_without_comments { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.filter_map(..)` can be written more simply using `.map(..)` [INFO] [stdout] --> src/tokenizer.rs:188:10 [INFO] [stdout] | [INFO] [stdout] 188 | .filter_map(|x| match x { [INFO] [stdout] | __________^ [INFO] [stdout] 189 | | CharToken::Char(c) => Some(map_char_token(c, x)), [INFO] [stdout] 190 | | CharToken::Identifier(s) => Some(map_string_token(s)), [INFO] [stdout] 191 | | CharToken::String(s) => { [INFO] [stdout] ... | [INFO] [stdout] 197 | | }) [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_filter_map [INFO] [stdout] = note: `#[warn(clippy::unnecessary_filter_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `list` [INFO] [stdout] --> src/variables.rs:84:26 [INFO] [stdout] | [INFO] [stdout] 84 | for i in 0..list.len() { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 84 - for i in 0..list.len() { [INFO] [stdout] 84 + for (i, ) in list.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: order comparisons between booleans can be simplified [INFO] [stdout] --> src/variables.rs:230:81 [INFO] [stdout] | [INFO] [stdout] 230 | (Self::Boolean(na), Self::Boolean(nb)) => Ok(VariableValue::Boolean(na < nb)), [INFO] [stdout] | ^^^^^^^ help: try: `!na & nb` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: order comparisons between booleans can be simplified [INFO] [stdout] --> src/variables.rs:242:81 [INFO] [stdout] | [INFO] [stdout] 242 | (Self::Boolean(na), Self::Boolean(nb)) => Ok(VariableValue::Boolean(na > nb)), [INFO] [stdout] | ^^^^^^^ help: try: `na & !nb` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/variables.rs:312:58 [INFO] [stdout] | [INFO] [stdout] 312 | Self::Number(na) => Ok(VariableValue::Number(0 + na)), [INFO] [stdout] | ^^^^^^ help: consider reducing it to: `na` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] = note: `#[warn(clippy::identity_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/variables.rs:346:56 [INFO] [stdout] | [INFO] [stdout] 346 | Operator::Not => VariableValue::not(a).map_err(|v| Command::Error(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Command::Error` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/variables.rs:347:62 [INFO] [stdout] | [INFO] [stdout] 347 | Operator::Negate => VariableValue::negate(a).map_err(|v| Command::Error(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Command::Error` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/variables.rs:348:69 [INFO] [stdout] | [INFO] [stdout] 348 | Operator::UnaryPlus => VariableValue::unary_plus(a).map_err(|v| Command::Error(v)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Command::Error` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 12.00s [INFO] running `Command { std: "docker" "inspect" "68fee39d64c25a518164c7f6ff2631b837b6404387056cf04a5ea4f53d6c5545", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "68fee39d64c25a518164c7f6ff2631b837b6404387056cf04a5ea4f53d6c5545", kill_on_drop: false }` [INFO] [stdout] 68fee39d64c25a518164c7f6ff2631b837b6404387056cf04a5ea4f53d6c5545