[INFO] cloning repository https://github.com/dchammond/rust_calculus [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/dchammond/rust_calculus" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdchammond%2Frust_calculus", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdchammond%2Frust_calculus'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] d7ca22e5bc076982e26425d0cbb1e9328b5d9483 [INFO] linting dchammond/rust_calculus against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdchammond%2Frust_calculus" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/dchammond/rust_calculus [INFO] finished tweaking git repo https://github.com/dchammond/rust_calculus [INFO] tweaked toml for git repo https://github.com/dchammond/rust_calculus written to /workspace/builds/worker-4-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/dchammond/rust_calculus 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/dchammond/rust_calculus already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] warning: `package.edition` is unspecified, defaulting to `2015` while the latest is `2024` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded thread_local v0.2.5 [INFO] [stderr] Downloaded regex-syntax v0.3.1 [INFO] [stderr] Downloaded regex v0.1.70 [INFO] [stderr] Downloaded aho-corasick v0.5.2 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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] 693b367c66c2f4e7366e342f10f6999a0cce46bd2a4802df11455f83d170ff6c [INFO] running `Command { std: "docker" "start" "-a" "693b367c66c2f4e7366e342f10f6999a0cce46bd2a4802df11455f83d170ff6c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "693b367c66c2f4e7366e342f10f6999a0cce46bd2a4802df11455f83d170ff6c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "693b367c66c2f4e7366e342f10f6999a0cce46bd2a4802df11455f83d170ff6c", kill_on_drop: false }` [INFO] [stdout] 693b367c66c2f4e7366e342f10f6999a0cce46bd2a4802df11455f83d170ff6c [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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] 6b6b82dbafa5753523ce4f5c774f30e065dc39551fa441a125595c01f634421d [INFO] running `Command { std: "docker" "start" "-a" "6b6b82dbafa5753523ce4f5c774f30e065dc39551fa441a125595c01f634421d", kill_on_drop: false }` [INFO] [stderr] warning: `package.edition` is unspecified, defaulting to `2015` while the latest is `2024` [INFO] [stderr] Checking libc v0.2.11 [INFO] [stderr] Checking winapi v0.2.7 [INFO] [stderr] Checking regex-syntax v0.3.1 [INFO] [stderr] Checking utf8-ranges v0.1.3 [INFO] [stderr] Checking memchr v0.1.11 [INFO] [stderr] Checking kernel32-sys v0.2.2 [INFO] [stderr] Checking aho-corasick v0.5.2 [INFO] [stderr] Checking thread-id v2.0.0 [INFO] [stderr] Checking thread_local v0.2.5 [INFO] [stderr] Checking regex v0.1.70 [INFO] [stderr] Checking rust-calculus v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/expression/mod.rs:26:22 [INFO] [stdout] | [INFO] [stdout] 26 | Expression { 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] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary trailing semicolon [INFO] [stdout] --> src/main.rs:42:34 [INFO] [stdout] | [INFO] [stdout] 42 | print!("Exiting...");; [INFO] [stdout] | ^ help: remove this semicolon [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/expression/mod.rs:26:22 [INFO] [stdout] | [INFO] [stdout] 26 | Expression { 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] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary trailing semicolon [INFO] [stdout] --> src/main.rs:42:34 [INFO] [stdout] | [INFO] [stdout] 42 | print!("Exiting...");; [INFO] [stdout] | ^ help: remove this semicolon [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) 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/expression/enums.rs:50:34 [INFO] [stdout] | [INFO] [stdout] 50 | pub fn map_string_to_func(input: &String) -> Token { [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] 50 ~ pub fn map_string_to_func(input: &str) -> Token { [INFO] [stdout] 51 | match &(input.to_lowercase())[..] { [INFO] [stdout] ... [INFO] [stdout] 83 | "recip" => Token::Func(Function::Recip), [INFO] [stdout] 84 ~ _ => Token::Var(input.to_owned()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `value` after checking its variant with `is_some` [INFO] [stdout] --> src/expression/eval.rs:91:33 [INFO] [stdout] | [INFO] [stdout] 90 | if value.is_some() { [INFO] [stdout] | ------------------ help: try: `if let Some() = value` [INFO] [stdout] 91 | stack.push(*value.unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` 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/expression/enums.rs:50:34 [INFO] [stdout] | [INFO] [stdout] 50 | pub fn map_string_to_func(input: &String) -> Token { [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] 50 ~ pub fn map_string_to_func(input: &str) -> Token { [INFO] [stdout] 51 | match &(input.to_lowercase())[..] { [INFO] [stdout] ... [INFO] [stdout] 83 | "recip" => Token::Func(Function::Recip), [INFO] [stdout] 84 ~ _ => Token::Var(input.to_owned()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to all patterns [INFO] [stdout] --> src/expression/eval.rs:12:9 [INFO] [stdout] | [INFO] [stdout] 12 | / match token { [INFO] [stdout] 13 | | &enums::Token::Literal(ref x) => stack.push(x.parse::().unwrap()), [INFO] [stdout] 14 | | &enums::Token::Const(ref x) => { [INFO] [stdout] 15 | | match x { [INFO] [stdout] ... | [INFO] [stdout] 96 | | _ => continue, [INFO] [stdout] 97 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] = note: `#[warn(clippy::match_ref_pats)]` on by default [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 12 ~ match *token { [INFO] [stdout] 13 ~ enums::Token::Literal(ref x) => stack.push(x.parse::().unwrap()), [INFO] [stdout] 14 ~ enums::Token::Const(ref x) => { [INFO] [stdout] 15 | match x { [INFO] [stdout] ... [INFO] [stdout] 19 | } [INFO] [stdout] 20 ~ enums::Token::Op(ref x) => { [INFO] [stdout] 21 | let arg: f64 = stack.pop().unwrap(); [INFO] [stdout] ... [INFO] [stdout] 38 | } [INFO] [stdout] 39 ~ enums::Token::Func(ref x) => { [INFO] [stdout] 40 | let arg: f64 = stack.pop().unwrap(); [INFO] [stdout] ... [INFO] [stdout] 83 | } [INFO] [stdout] 84 ~ enums::Token::Unknown(ref x) => { [INFO] [stdout] 85 | let _ = x; [INFO] [stdout] 86 | let _ = stack.pop().unwrap(); [INFO] [stdout] 87 | } [INFO] [stdout] 88 ~ enums::Token::Var(ref x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/eval.rs:13:13 [INFO] [stdout] | [INFO] [stdout] 13 | &enums::Token::Literal(ref x) => stack.push(x.parse::().unwrap()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] = note: `#[warn(clippy::needless_borrowed_reference)]` on by default [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 13 - &enums::Token::Literal(ref x) => stack.push(x.parse::().unwrap()), [INFO] [stdout] 13 + enums::Token::Literal(x) => stack.push(x.parse::().unwrap()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/eval.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | &enums::Token::Const(ref x) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 14 - &enums::Token::Const(ref x) => { [INFO] [stdout] 14 + enums::Token::Const(x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to all patterns [INFO] [stdout] --> src/expression/eval.rs:15:17 [INFO] [stdout] | [INFO] [stdout] 15 | / match x { [INFO] [stdout] 16 | | &enums::Constant::Pi => stack.push(f64::consts::PI), [INFO] [stdout] 17 | | &enums::Constant::E => stack.push(f64::consts::E), [INFO] [stdout] 18 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 15 ~ match *x { [INFO] [stdout] 16 ~ enums::Constant::Pi => stack.push(f64::consts::PI), [INFO] [stdout] 17 ~ enums::Constant::E => stack.push(f64::consts::E), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/eval.rs:20:13 [INFO] [stdout] | [INFO] [stdout] 20 | &enums::Token::Op(ref x) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 20 - &enums::Token::Op(ref x) => { [INFO] [stdout] 20 + enums::Token::Op(x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/expression/eval.rs:23:60 [INFO] [stdout] | [INFO] [stdout] 23 | &enums::Operator::Negate => stack.push(-1.0f64 * arg), [INFO] [stdout] | ^^^^^^^^^^^^^ help: consider using: `-arg` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] = note: `#[warn(clippy::neg_multiply)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to all patterns [INFO] [stdout] --> src/expression/eval.rs:27:25 [INFO] [stdout] | [INFO] [stdout] 27 | / match x { [INFO] [stdout] 28 | | &enums::Operator::Add => stack.push(arg1 + arg2), [INFO] [stdout] 29 | | &enums::Operator::Sub => stack.push(arg1 - arg2), [INFO] [stdout] 30 | | &enums::Operator::Div => stack.push(arg1 / arg2), [INFO] [stdout] ... | [INFO] [stdout] 34 | | _ => continue, // Should never hit here [INFO] [stdout] 35 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 27 ~ match *x { [INFO] [stdout] 28 ~ enums::Operator::Add => stack.push(arg1 + arg2), [INFO] [stdout] 29 ~ enums::Operator::Sub => stack.push(arg1 - arg2), [INFO] [stdout] 30 ~ enums::Operator::Div => stack.push(arg1 / arg2), [INFO] [stdout] 31 ~ enums::Operator::Mul => stack.push(arg1 * arg2), [INFO] [stdout] 32 ~ enums::Operator::Mod => stack.push(arg1 % arg2), [INFO] [stdout] 33 ~ enums::Operator::Pow => stack.push(arg1.powf(arg2)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/eval.rs:39:13 [INFO] [stdout] | [INFO] [stdout] 39 | &enums::Token::Func(ref x) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 39 - &enums::Token::Func(ref x) => { [INFO] [stdout] 39 + enums::Token::Func(x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `value` after checking its variant with `is_some` [INFO] [stdout] --> src/expression/eval.rs:91:33 [INFO] [stdout] | [INFO] [stdout] 90 | if value.is_some() { [INFO] [stdout] | ------------------ help: try: `if let Some() = value` [INFO] [stdout] 91 | stack.push(*value.unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to all patterns [INFO] [stdout] --> src/expression/eval.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | / match x { [INFO] [stdout] 42 | | &enums::Function::Abs => stack.push(f64::abs(arg)), [INFO] [stdout] 43 | | &enums::Function::Sqrt => stack.push(f64::sqrt(arg)), [INFO] [stdout] 44 | | &enums::Function::Ln => stack.push(f64::ln(arg)), [INFO] [stdout] ... | [INFO] [stdout] 82 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 41 ~ match *x { [INFO] [stdout] 42 ~ enums::Function::Abs => stack.push(f64::abs(arg)), [INFO] [stdout] 43 ~ enums::Function::Sqrt => stack.push(f64::sqrt(arg)), [INFO] [stdout] 44 ~ enums::Function::Ln => stack.push(f64::ln(arg)), [INFO] [stdout] 45 ~ enums::Function::Log => stack.push(f64::log10(arg)), [INFO] [stdout] 46 ~ enums::Function::Exp => stack.push(f64::exp(arg)), [INFO] [stdout] 47 ~ enums::Function::Sin => stack.push(f64::sin(arg)), [INFO] [stdout] 48 ~ enums::Function::Csc => stack.push(f64::recip(f64::sin(arg))), [INFO] [stdout] 49 ~ enums::Function::Cos => stack.push(f64::cos(arg)), [INFO] [stdout] 50 ~ enums::Function::Sec => stack.push(f64::recip(f64::cos(arg))), [INFO] [stdout] 51 ~ enums::Function::Tan => stack.push(f64::tan(arg)), [INFO] [stdout] 52 ~ enums::Function::Cot => stack.push(f64::recip(f64::tan(arg))), [INFO] [stdout] 53 ~ enums::Function::Asin => stack.push(f64::asin(arg)), [INFO] [stdout] 54 ~ enums::Function::Acsc => stack.push(f64::recip(f64::asin(arg))), [INFO] [stdout] 55 ~ enums::Function::Acos => stack.push(f64::acos(arg)), [INFO] [stdout] 56 ~ enums::Function::Asec => stack.push(f64::recip(f64::acos(arg))), [INFO] [stdout] 57 ~ enums::Function::Atan => stack.push(f64::atan(arg)), [INFO] [stdout] 58 ~ enums::Function::Acot => stack.push(f64::recip(f64::atan(arg))), [INFO] [stdout] 59 ~ enums::Function::Sinh => stack.push(f64::sinh(arg)), [INFO] [stdout] 60 ~ enums::Function::Csch => stack.push(f64::recip(f64::sinh(arg))), [INFO] [stdout] 61 ~ enums::Function::Cosh => stack.push(f64::cosh(arg)), [INFO] [stdout] 62 ~ enums::Function::Sech => stack.push(f64::recip(f64::cosh(arg))), [INFO] [stdout] 63 ~ enums::Function::Tanh => stack.push(f64::tanh(arg)), [INFO] [stdout] 64 ~ enums::Function::Coth => stack.push(f64::recip(f64::tanh(arg))), [INFO] [stdout] 65 ~ enums::Function::Asinh => stack.push(f64::asinh(arg)), [INFO] [stdout] 66 ~ enums::Function::Acsch => stack.push(f64::recip(f64::asinh(arg))), [INFO] [stdout] 67 ~ enums::Function::Acosh => stack.push(f64::acosh(arg)), [INFO] [stdout] 68 ~ enums::Function::Asech => stack.push(f64::recip(f64::acosh(arg))), [INFO] [stdout] 69 ~ enums::Function::Atanh => stack.push(f64::atanh(arg)), [INFO] [stdout] 70 ~ enums::Function::Acoth => stack.push(f64::recip(f64::atanh(arg))), [INFO] [stdout] 71 ~ enums::Function::Recip => stack.push(f64::recip(arg)), [INFO] [stdout] 72 ~ enums::Function::Max => { [INFO] [stdout] 73 | let arg2 = arg; [INFO] [stdout] ... [INFO] [stdout] 76 | } [INFO] [stdout] 77 ~ enums::Function::LogBase => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to all patterns [INFO] [stdout] --> src/expression/eval.rs:12:9 [INFO] [stdout] | [INFO] [stdout] 12 | / match token { [INFO] [stdout] 13 | | &enums::Token::Literal(ref x) => stack.push(x.parse::().unwrap()), [INFO] [stdout] 14 | | &enums::Token::Const(ref x) => { [INFO] [stdout] 15 | | match x { [INFO] [stdout] ... | [INFO] [stdout] 96 | | _ => continue, [INFO] [stdout] 97 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] = note: `#[warn(clippy::match_ref_pats)]` on by default [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 12 ~ match *token { [INFO] [stdout] 13 ~ enums::Token::Literal(ref x) => stack.push(x.parse::().unwrap()), [INFO] [stdout] 14 ~ enums::Token::Const(ref x) => { [INFO] [stdout] 15 | match x { [INFO] [stdout] ... [INFO] [stdout] 19 | } [INFO] [stdout] 20 ~ enums::Token::Op(ref x) => { [INFO] [stdout] 21 | let arg: f64 = stack.pop().unwrap(); [INFO] [stdout] ... [INFO] [stdout] 38 | } [INFO] [stdout] 39 ~ enums::Token::Func(ref x) => { [INFO] [stdout] 40 | let arg: f64 = stack.pop().unwrap(); [INFO] [stdout] ... [INFO] [stdout] 83 | } [INFO] [stdout] 84 ~ enums::Token::Unknown(ref x) => { [INFO] [stdout] 85 | let _ = x; [INFO] [stdout] 86 | let _ = stack.pop().unwrap(); [INFO] [stdout] 87 | } [INFO] [stdout] 88 ~ enums::Token::Var(ref x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/eval.rs:13:13 [INFO] [stdout] | [INFO] [stdout] 13 | &enums::Token::Literal(ref x) => stack.push(x.parse::().unwrap()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] = note: `#[warn(clippy::needless_borrowed_reference)]` on by default [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 13 - &enums::Token::Literal(ref x) => stack.push(x.parse::().unwrap()), [INFO] [stdout] 13 + enums::Token::Literal(x) => stack.push(x.parse::().unwrap()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/eval.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | &enums::Token::Const(ref x) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 14 - &enums::Token::Const(ref x) => { [INFO] [stdout] 14 + enums::Token::Const(x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to all patterns [INFO] [stdout] --> src/expression/eval.rs:15:17 [INFO] [stdout] | [INFO] [stdout] 15 | / match x { [INFO] [stdout] 16 | | &enums::Constant::Pi => stack.push(f64::consts::PI), [INFO] [stdout] 17 | | &enums::Constant::E => stack.push(f64::consts::E), [INFO] [stdout] 18 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 15 ~ match *x { [INFO] [stdout] 16 ~ enums::Constant::Pi => stack.push(f64::consts::PI), [INFO] [stdout] 17 ~ enums::Constant::E => stack.push(f64::consts::E), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/eval.rs:84:13 [INFO] [stdout] | [INFO] [stdout] 84 | &enums::Token::Unknown(ref x) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 84 - &enums::Token::Unknown(ref x) => { [INFO] [stdout] 84 + enums::Token::Unknown(x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/eval.rs:20:13 [INFO] [stdout] | [INFO] [stdout] 20 | &enums::Token::Op(ref x) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 20 - &enums::Token::Op(ref x) => { [INFO] [stdout] 20 + enums::Token::Op(x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/eval.rs:88:13 [INFO] [stdout] | [INFO] [stdout] 88 | &enums::Token::Var(ref x) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 88 - &enums::Token::Var(ref x) => { [INFO] [stdout] 88 + enums::Token::Var(x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/expression/eval.rs:23:60 [INFO] [stdout] | [INFO] [stdout] 23 | &enums::Operator::Negate => stack.push(-1.0f64 * arg), [INFO] [stdout] | ^^^^^^^^^^^^^ help: consider using: `-arg` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] = note: `#[warn(clippy::neg_multiply)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to all patterns [INFO] [stdout] --> src/expression/eval.rs:27:25 [INFO] [stdout] | [INFO] [stdout] 27 | / match x { [INFO] [stdout] 28 | | &enums::Operator::Add => stack.push(arg1 + arg2), [INFO] [stdout] 29 | | &enums::Operator::Sub => stack.push(arg1 - arg2), [INFO] [stdout] 30 | | &enums::Operator::Div => stack.push(arg1 / arg2), [INFO] [stdout] ... | [INFO] [stdout] 34 | | _ => continue, // Should never hit here [INFO] [stdout] 35 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 27 ~ match *x { [INFO] [stdout] 28 ~ enums::Operator::Add => stack.push(arg1 + arg2), [INFO] [stdout] 29 ~ enums::Operator::Sub => stack.push(arg1 - arg2), [INFO] [stdout] 30 ~ enums::Operator::Div => stack.push(arg1 / arg2), [INFO] [stdout] 31 ~ enums::Operator::Mul => stack.push(arg1 * arg2), [INFO] [stdout] 32 ~ enums::Operator::Mod => stack.push(arg1 % arg2), [INFO] [stdout] 33 ~ enums::Operator::Pow => stack.push(arg1.powf(arg2)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/eval.rs:39:13 [INFO] [stdout] | [INFO] [stdout] 39 | &enums::Token::Func(ref x) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 39 - &enums::Token::Func(ref x) => { [INFO] [stdout] 39 + enums::Token::Func(x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/expression/parse.rs:17:26 [INFO] [stdout] | [INFO] [stdout] 17 | fn string_to_expr(input: &String, [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] 17 - fn string_to_expr(input: &String, [INFO] [stdout] 17 + fn string_to_expr(input: &str, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/expression/parse.rs:52:27 [INFO] [stdout] | [INFO] [stdout] 52 | } else if builder.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `builder.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/expression/parse.rs:92:20 [INFO] [stdout] | [INFO] [stdout] 92 | if builder.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!builder.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: you don't need to add `&` to all patterns [INFO] [stdout] --> src/expression/eval.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | / match x { [INFO] [stdout] 42 | | &enums::Function::Abs => stack.push(f64::abs(arg)), [INFO] [stdout] 43 | | &enums::Function::Sqrt => stack.push(f64::sqrt(arg)), [INFO] [stdout] 44 | | &enums::Function::Ln => stack.push(f64::ln(arg)), [INFO] [stdout] ... | [INFO] [stdout] 82 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 41 ~ match *x { [INFO] [stdout] 42 ~ enums::Function::Abs => stack.push(f64::abs(arg)), [INFO] [stdout] 43 ~ enums::Function::Sqrt => stack.push(f64::sqrt(arg)), [INFO] [stdout] 44 ~ enums::Function::Ln => stack.push(f64::ln(arg)), [INFO] [stdout] 45 ~ enums::Function::Log => stack.push(f64::log10(arg)), [INFO] [stdout] 46 ~ enums::Function::Exp => stack.push(f64::exp(arg)), [INFO] [stdout] 47 ~ enums::Function::Sin => stack.push(f64::sin(arg)), [INFO] [stdout] 48 ~ enums::Function::Csc => stack.push(f64::recip(f64::sin(arg))), [INFO] [stdout] 49 ~ enums::Function::Cos => stack.push(f64::cos(arg)), [INFO] [stdout] 50 ~ enums::Function::Sec => stack.push(f64::recip(f64::cos(arg))), [INFO] [stdout] 51 ~ enums::Function::Tan => stack.push(f64::tan(arg)), [INFO] [stdout] 52 ~ enums::Function::Cot => stack.push(f64::recip(f64::tan(arg))), [INFO] [stdout] 53 ~ enums::Function::Asin => stack.push(f64::asin(arg)), [INFO] [stdout] 54 ~ enums::Function::Acsc => stack.push(f64::recip(f64::asin(arg))), [INFO] [stdout] 55 ~ enums::Function::Acos => stack.push(f64::acos(arg)), [INFO] [stdout] 56 ~ enums::Function::Asec => stack.push(f64::recip(f64::acos(arg))), [INFO] [stdout] 57 ~ enums::Function::Atan => stack.push(f64::atan(arg)), [INFO] [stdout] 58 ~ enums::Function::Acot => stack.push(f64::recip(f64::atan(arg))), [INFO] [stdout] 59 ~ enums::Function::Sinh => stack.push(f64::sinh(arg)), [INFO] [stdout] 60 ~ enums::Function::Csch => stack.push(f64::recip(f64::sinh(arg))), [INFO] [stdout] 61 ~ enums::Function::Cosh => stack.push(f64::cosh(arg)), [INFO] [stdout] 62 ~ enums::Function::Sech => stack.push(f64::recip(f64::cosh(arg))), [INFO] [stdout] 63 ~ enums::Function::Tanh => stack.push(f64::tanh(arg)), [INFO] [stdout] 64 ~ enums::Function::Coth => stack.push(f64::recip(f64::tanh(arg))), [INFO] [stdout] 65 ~ enums::Function::Asinh => stack.push(f64::asinh(arg)), [INFO] [stdout] 66 ~ enums::Function::Acsch => stack.push(f64::recip(f64::asinh(arg))), [INFO] [stdout] 67 ~ enums::Function::Acosh => stack.push(f64::acosh(arg)), [INFO] [stdout] 68 ~ enums::Function::Asech => stack.push(f64::recip(f64::acosh(arg))), [INFO] [stdout] 69 ~ enums::Function::Atanh => stack.push(f64::atanh(arg)), [INFO] [stdout] 70 ~ enums::Function::Acoth => stack.push(f64::recip(f64::atanh(arg))), [INFO] [stdout] 71 ~ enums::Function::Recip => stack.push(f64::recip(arg)), [INFO] [stdout] 72 ~ enums::Function::Max => { [INFO] [stdout] 73 | let arg2 = arg; [INFO] [stdout] ... [INFO] [stdout] 76 | } [INFO] [stdout] 77 ~ enums::Function::LogBase => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/expression/parse.rs:122:24 [INFO] [stdout] | [INFO] [stdout] 122 | if !stack_token.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `stack_token.is_none()` [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: this boolean expression can be simplified [INFO] [stdout] --> src/expression/parse.rs:195:24 [INFO] [stdout] | [INFO] [stdout] 195 | if !stack_token.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `stack_token.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/expression/parse.rs:108:30 [INFO] [stdout] | [INFO] [stdout] 108 | fn convert_to_postfix(input: &String, [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] 108 - fn convert_to_postfix(input: &String, [INFO] [stdout] 108 + fn convert_to_postfix(input: &str, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to all patterns [INFO] [stdout] --> src/expression/parse.rs:116:9 [INFO] [stdout] | [INFO] [stdout] 116 | / match current_token { [INFO] [stdout] 117 | | &enums::Token::Literal(ref x) => out_queue.push(enums::Token::Literal(x.clone())), [INFO] [stdout] 118 | | &enums::Token::Func(ref x) => op_stack.push(enums::Token::Func(x.clone())), [INFO] [stdout] 119 | | &enums::Token::Comma => { [INFO] [stdout] ... | [INFO] [stdout] 220 | | _ => break, [INFO] [stdout] 221 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 116 ~ match *current_token { [INFO] [stdout] 117 ~ enums::Token::Literal(ref x) => out_queue.push(enums::Token::Literal(x.clone())), [INFO] [stdout] 118 ~ enums::Token::Func(ref x) => op_stack.push(enums::Token::Func(x.clone())), [INFO] [stdout] 119 ~ enums::Token::Comma => { [INFO] [stdout] 120 | loop { [INFO] [stdout] ... [INFO] [stdout] 135 | } [INFO] [stdout] 136 ~ enums::Token::Op(ref o1) => { [INFO] [stdout] 137 | loop { [INFO] [stdout] ... [INFO] [stdout] 190 | } [INFO] [stdout] 191 ~ enums::Token::Open => op_stack.push(enums::Token::Open), [INFO] [stdout] 192 ~ enums::Token::Close => { [INFO] [stdout] 193 | loop { [INFO] [stdout] ... [INFO] [stdout] 212 | } [INFO] [stdout] 213 ~ enums::Token::Var(ref x) => out_queue.push(enums::Token::Var(x.clone())), [INFO] [stdout] 214 ~ enums::Token::Unknown(ref x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/parse.rs:117:13 [INFO] [stdout] | [INFO] [stdout] 117 | &enums::Token::Literal(ref x) => out_queue.push(enums::Token::Literal(x.clone())), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 117 - &enums::Token::Literal(ref x) => out_queue.push(enums::Token::Literal(x.clone())), [INFO] [stdout] 117 + enums::Token::Literal(x) => out_queue.push(enums::Token::Literal(x.clone())), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/parse.rs:118:13 [INFO] [stdout] | [INFO] [stdout] 118 | &enums::Token::Func(ref x) => op_stack.push(enums::Token::Func(x.clone())), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 118 - &enums::Token::Func(ref x) => op_stack.push(enums::Token::Func(x.clone())), [INFO] [stdout] 118 + enums::Token::Func(x) => op_stack.push(enums::Token::Func(x.clone())), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/parse.rs:136:13 [INFO] [stdout] | [INFO] [stdout] 136 | &enums::Token::Op(ref o1) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 136 - &enums::Token::Op(ref o1) => { [INFO] [stdout] 136 + enums::Token::Op(o1) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to one [INFO] [stdout] --> src/expression/parse.rs:138:24 [INFO] [stdout] | [INFO] [stdout] 138 | if op_stack.len() < 1 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `op_stack.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: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/eval.rs:84:13 [INFO] [stdout] | [INFO] [stdout] 84 | &enums::Token::Unknown(ref x) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 84 - &enums::Token::Unknown(ref x) => { [INFO] [stdout] 84 + enums::Token::Unknown(x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/eval.rs:88:13 [INFO] [stdout] | [INFO] [stdout] 88 | &enums::Token::Var(ref x) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 88 - &enums::Token::Var(ref x) => { [INFO] [stdout] 88 + enums::Token::Var(x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/expression/parse.rs:17:26 [INFO] [stdout] | [INFO] [stdout] 17 | fn string_to_expr(input: &String, [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] 17 - fn string_to_expr(input: &String, [INFO] [stdout] 17 + fn string_to_expr(input: &str, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/expression/parse.rs:52:27 [INFO] [stdout] | [INFO] [stdout] 52 | } else if builder.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `builder.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/expression/parse.rs:92:20 [INFO] [stdout] | [INFO] [stdout] 92 | if builder.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!builder.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: this boolean expression can be simplified [INFO] [stdout] --> src/expression/parse.rs:122:24 [INFO] [stdout] | [INFO] [stdout] 122 | if !stack_token.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `stack_token.is_none()` [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: this boolean expression can be simplified [INFO] [stdout] --> src/expression/parse.rs:195:24 [INFO] [stdout] | [INFO] [stdout] 195 | if !stack_token.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `stack_token.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/expression/parse.rs:108:30 [INFO] [stdout] | [INFO] [stdout] 108 | fn convert_to_postfix(input: &String, [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] 108 - fn convert_to_postfix(input: &String, [INFO] [stdout] 108 + fn convert_to_postfix(input: &str, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Operator` which implements the `Copy` trait [INFO] [stdout] --> src/expression/parse.rs:189:48 [INFO] [stdout] | [INFO] [stdout] 189 | op_stack.push(enums::Token::Op(o1.clone())); [INFO] [stdout] | ^^^^^^^^^^ help: try dereferencing it: `*o1` [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: you don't need to add `&` to all patterns [INFO] [stdout] --> src/expression/parse.rs:116:9 [INFO] [stdout] | [INFO] [stdout] 116 | / match current_token { [INFO] [stdout] 117 | | &enums::Token::Literal(ref x) => out_queue.push(enums::Token::Literal(x.clone())), [INFO] [stdout] 118 | | &enums::Token::Func(ref x) => op_stack.push(enums::Token::Func(x.clone())), [INFO] [stdout] 119 | | &enums::Token::Comma => { [INFO] [stdout] ... | [INFO] [stdout] 220 | | _ => break, [INFO] [stdout] 221 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 116 ~ match *current_token { [INFO] [stdout] 117 ~ enums::Token::Literal(ref x) => out_queue.push(enums::Token::Literal(x.clone())), [INFO] [stdout] 118 ~ enums::Token::Func(ref x) => op_stack.push(enums::Token::Func(x.clone())), [INFO] [stdout] 119 ~ enums::Token::Comma => { [INFO] [stdout] 120 | loop { [INFO] [stdout] ... [INFO] [stdout] 135 | } [INFO] [stdout] 136 ~ enums::Token::Op(ref o1) => { [INFO] [stdout] 137 | loop { [INFO] [stdout] ... [INFO] [stdout] 190 | } [INFO] [stdout] 191 ~ enums::Token::Open => op_stack.push(enums::Token::Open), [INFO] [stdout] 192 ~ enums::Token::Close => { [INFO] [stdout] 193 | loop { [INFO] [stdout] ... [INFO] [stdout] 212 | } [INFO] [stdout] 213 ~ enums::Token::Var(ref x) => out_queue.push(enums::Token::Var(x.clone())), [INFO] [stdout] 214 ~ enums::Token::Unknown(ref x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/expression/parse.rs:205:20 [INFO] [stdout] | [INFO] [stdout] 205 | if op_stack.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!op_stack.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: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/parse.rs:117:13 [INFO] [stdout] | [INFO] [stdout] 117 | &enums::Token::Literal(ref x) => out_queue.push(enums::Token::Literal(x.clone())), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 117 - &enums::Token::Literal(ref x) => out_queue.push(enums::Token::Literal(x.clone())), [INFO] [stdout] 117 + enums::Token::Literal(x) => out_queue.push(enums::Token::Literal(x.clone())), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/parse.rs:118:13 [INFO] [stdout] | [INFO] [stdout] 118 | &enums::Token::Func(ref x) => op_stack.push(enums::Token::Func(x.clone())), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 118 - &enums::Token::Func(ref x) => op_stack.push(enums::Token::Func(x.clone())), [INFO] [stdout] 118 + enums::Token::Func(x) => op_stack.push(enums::Token::Func(x.clone())), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/parse.rs:213:13 [INFO] [stdout] | [INFO] [stdout] 213 | &enums::Token::Var(ref x) => out_queue.push(enums::Token::Var(x.clone())), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 213 - &enums::Token::Var(ref x) => out_queue.push(enums::Token::Var(x.clone())), [INFO] [stdout] 213 + enums::Token::Var(x) => out_queue.push(enums::Token::Var(x.clone())), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/parse.rs:214:13 [INFO] [stdout] | [INFO] [stdout] 214 | &enums::Token::Unknown(ref x) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 214 - &enums::Token::Unknown(ref x) => { [INFO] [stdout] 214 + enums::Token::Unknown(x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/parse.rs:136:13 [INFO] [stdout] | [INFO] [stdout] 136 | &enums::Token::Op(ref o1) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 136 - &enums::Token::Op(ref o1) => { [INFO] [stdout] 136 + enums::Token::Op(o1) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to one [INFO] [stdout] --> src/expression/parse.rs:138:24 [INFO] [stdout] | [INFO] [stdout] 138 | if op_stack.len() < 1 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `op_stack.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/expression/parse.rs:223:11 [INFO] [stdout] | [INFO] [stdout] 223 | while op_stack.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!op_stack.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/expression/parse.rs:233:8 [INFO] [stdout] | [INFO] [stdout] 233 | if builder.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!builder.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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/expression/parse.rs:238:49 [INFO] [stdout] | [INFO] [stdout] 238 | to_push = enums::map_string_to_func(&builder); [INFO] [stdout] | ^^^^^^^^ help: change this to: `builder` [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: manual implementation of `Iterator::find` [INFO] [stdout] --> src/expression/mod.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 59 | / for i in 0..self.tokens.len() { [INFO] [stdout] 60 | | if self.tokens.get(i).unwrap() == token { [INFO] [stdout] 61 | | return Some(i); [INFO] [stdout] ... | [INFO] [stdout] 64 | | None [INFO] [stdout] | |____________^ help: replace with an iterator: `(0..self.tokens.len()).find(|&i| self.tokens.get(i).unwrap() == token)` [INFO] [stdout] | [INFO] [stdout] = note: you may need to dereference some variables [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_find [INFO] [stdout] = note: `#[warn(clippy::manual_find)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Iterator::find` [INFO] [stdout] --> src/expression/mod.rs:68:9 [INFO] [stdout] | [INFO] [stdout] 68 | / for i in (0..self.tokens.len()).rev() { [INFO] [stdout] 69 | | if self.tokens.get(i).unwrap() == token { [INFO] [stdout] 70 | | return Some(i); [INFO] [stdout] ... | [INFO] [stdout] 73 | | None [INFO] [stdout] | |____________^ help: replace with an iterator: `(0..self.tokens.len()).rev().find(|&i| self.tokens.get(i).unwrap() == token)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_find [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/expression/mod.rs:86:19 [INFO] [stdout] | [INFO] [stdout] 86 | expr: &self, [INFO] [stdout] | ^^^^^ help: change this to: `self` [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: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/main.rs:18:29 [INFO] [stdout] | [INFO] [stdout] 18 | fn strip_white_space(input: &String) -> String { [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] 18 - fn strip_white_space(input: &String) -> String { [INFO] [stdout] 18 + fn strip_white_space(input: &str) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `expr` after checking its variant with `is_ok` [INFO] [stdout] --> src/main.rs:60:33 [INFO] [stdout] | [INFO] [stdout] 59 | if expr.is_ok() { [INFO] [stdout] | --------------- help: try: `if let Ok() = expr` [INFO] [stdout] 60 | let my_expression = expr.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `expr` after checking its variant with `is_ok` [INFO] [stdout] --> src/main.rs:70:22 [INFO] [stdout] | [INFO] [stdout] 59 | if expr.is_ok() { [INFO] [stdout] | --------------- help: try: `if let Err() = expr` [INFO] [stdout] ... [INFO] [stdout] 70 | expr.unwrap_err()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Operator` which implements the `Copy` trait [INFO] [stdout] --> src/expression/parse.rs:189:48 [INFO] [stdout] | [INFO] [stdout] 189 | op_stack.push(enums::Token::Op(o1.clone())); [INFO] [stdout] | ^^^^^^^^^^ help: try dereferencing it: `*o1` [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: length comparison to zero [INFO] [stdout] --> src/expression/parse.rs:205:20 [INFO] [stdout] | [INFO] [stdout] 205 | if op_stack.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!op_stack.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/main.rs:51:12 [INFO] [stdout] | [INFO] [stdout] 51 | if var.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!var.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: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/parse.rs:213:13 [INFO] [stdout] | [INFO] [stdout] 213 | &enums::Token::Var(ref x) => out_queue.push(enums::Token::Var(x.clone())), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 213 - &enums::Token::Var(ref x) => out_queue.push(enums::Token::Var(x.clone())), [INFO] [stdout] 213 + enums::Token::Var(x) => out_queue.push(enums::Token::Var(x.clone())), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/expression/parse.rs:214:13 [INFO] [stdout] | [INFO] [stdout] 214 | &enums::Token::Unknown(ref x) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 214 - &enums::Token::Unknown(ref x) => { [INFO] [stdout] 214 + enums::Token::Unknown(x) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/expression/parse.rs:223:11 [INFO] [stdout] | [INFO] [stdout] 223 | while op_stack.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!op_stack.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: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/expression/mod.rs:84:17 [INFO] [stdout] | [INFO] [stdout] 84 | pub fn iter(&self) -> ExpressionIter { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 84 | pub fn iter(&self) -> ExpressionIter<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/expression/parse.rs:233:8 [INFO] [stdout] | [INFO] [stdout] 233 | if builder.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!builder.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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/expression/parse.rs:238:49 [INFO] [stdout] | [INFO] [stdout] 238 | to_push = enums::map_string_to_func(&builder); [INFO] [stdout] | ^^^^^^^^ help: change this to: `builder` [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: manual implementation of `Iterator::find` [INFO] [stdout] --> src/expression/mod.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 59 | / for i in 0..self.tokens.len() { [INFO] [stdout] 60 | | if self.tokens.get(i).unwrap() == token { [INFO] [stdout] 61 | | return Some(i); [INFO] [stdout] ... | [INFO] [stdout] 64 | | None [INFO] [stdout] | |____________^ help: replace with an iterator: `(0..self.tokens.len()).find(|&i| self.tokens.get(i).unwrap() == token)` [INFO] [stdout] | [INFO] [stdout] = note: you may need to dereference some variables [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_find [INFO] [stdout] = note: `#[warn(clippy::manual_find)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Iterator::find` [INFO] [stdout] --> src/expression/mod.rs:68:9 [INFO] [stdout] | [INFO] [stdout] 68 | / for i in (0..self.tokens.len()).rev() { [INFO] [stdout] 69 | | if self.tokens.get(i).unwrap() == token { [INFO] [stdout] 70 | | return Some(i); [INFO] [stdout] ... | [INFO] [stdout] 73 | | None [INFO] [stdout] | |____________^ help: replace with an iterator: `(0..self.tokens.len()).rev().find(|&i| self.tokens.get(i).unwrap() == token)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_find [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/expression/mod.rs:86:19 [INFO] [stdout] | [INFO] [stdout] 86 | expr: &self, [INFO] [stdout] | ^^^^^ help: change this to: `self` [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: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/main.rs:18:29 [INFO] [stdout] | [INFO] [stdout] 18 | fn strip_white_space(input: &String) -> String { [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] 18 - fn strip_white_space(input: &String) -> String { [INFO] [stdout] 18 + fn strip_white_space(input: &str) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `expr` after checking its variant with `is_ok` [INFO] [stdout] --> src/main.rs:60:33 [INFO] [stdout] | [INFO] [stdout] 59 | if expr.is_ok() { [INFO] [stdout] | --------------- help: try: `if let Ok() = expr` [INFO] [stdout] 60 | let my_expression = expr.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `expr` after checking its variant with `is_ok` [INFO] [stdout] --> src/main.rs:70:22 [INFO] [stdout] | [INFO] [stdout] 59 | if expr.is_ok() { [INFO] [stdout] | --------------- help: try: `if let Err() = expr` [INFO] [stdout] ... [INFO] [stdout] 70 | expr.unwrap_err()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:51:12 [INFO] [stdout] | [INFO] [stdout] 51 | if var.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!var.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: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/expression/mod.rs:84:17 [INFO] [stdout] | [INFO] [stdout] 84 | pub fn iter(&self) -> ExpressionIter { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 84 | pub fn iter(&self) -> ExpressionIter<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.85s [INFO] running `Command { std: "docker" "inspect" "6b6b82dbafa5753523ce4f5c774f30e065dc39551fa441a125595c01f634421d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "6b6b82dbafa5753523ce4f5c774f30e065dc39551fa441a125595c01f634421d", kill_on_drop: false }` [INFO] [stdout] 6b6b82dbafa5753523ce4f5c774f30e065dc39551fa441a125595c01f634421d