[INFO] cloning repository https://github.com/radu-matei/wal [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/radu-matei/wal" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fradu-matei%2Fwal", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fradu-matei%2Fwal'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 677c5243052109b5960fb27c3543467d3adfbf7c [INFO] linting radu-matei/wal against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fradu-matei%2Fwal" "/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/radu-matei/wal [INFO] finished tweaking git repo https://github.com/radu-matei/wal [INFO] tweaked toml for git repo https://github.com/radu-matei/wal written to /workspace/builds/worker-4-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/radu-matei/wal 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/radu-matei/wal already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-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] 3f1118c85f56d2f5096bbaf4630dbd9da1c3b358be8106d179c6ef3dd4479e3b [INFO] running `Command { std: "docker" "start" "-a" "3f1118c85f56d2f5096bbaf4630dbd9da1c3b358be8106d179c6ef3dd4479e3b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "3f1118c85f56d2f5096bbaf4630dbd9da1c3b358be8106d179c6ef3dd4479e3b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3f1118c85f56d2f5096bbaf4630dbd9da1c3b358be8106d179c6ef3dd4479e3b", kill_on_drop: false }` [INFO] [stdout] 3f1118c85f56d2f5096bbaf4630dbd9da1c3b358be8106d179c6ef3dd4479e3b [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] a616dcbe87ff7af0cff226e24e3b7e7e7f908d36fbb3342a7b78167e5389027a [INFO] running `Command { std: "docker" "start" "-a" "a616dcbe87ff7af0cff226e24e3b7e7e7f908d36fbb3342a7b78167e5389027a", kill_on_drop: false }` [INFO] [stderr] Compiling byteorder v1.3.2 [INFO] [stderr] Checking wal v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `ReadBytesExt` [INFO] [stdout] --> src/code.rs:1:28 [INFO] [stdout] | [INFO] [stdout] 1 | use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `error` and `result` [INFO] [stdout] --> src/code.rs:2:11 [INFO] [stdout] | [INFO] [stdout] 2 | use std::{error, fmt, io, result}; [INFO] [stdout] | ^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/lexer.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | input: input, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `input` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:94:13 [INFO] [stdout] | [INFO] [stdout] 94 | right: right, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `right` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `token` [INFO] [stdout] --> src/repl.rs:1:42 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::{eval, lexer, object, parser, token}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ReadBytesExt` [INFO] [stdout] --> src/code.rs:1:28 [INFO] [stdout] | [INFO] [stdout] 1 | use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `error` and `result` [INFO] [stdout] --> src/code.rs:2:11 [INFO] [stdout] | [INFO] [stdout] 2 | use std::{error, fmt, io, result}; [INFO] [stdout] | ^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `lexer::Lexer` and `parser::Parser` [INFO] [stdout] --> src/eval.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | lexer::Lexer, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 7 | object::{Environment, Function, Object}, [INFO] [stdout] 8 | parser::Parser, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/lexer.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | input: input, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `input` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:94:13 [INFO] [stdout] | [INFO] [stdout] 94 | right: right, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `right` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `token` [INFO] [stdout] --> src/repl.rs:1:42 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::{eval, lexer, object, parser, token}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/code.rs:63:13 [INFO] [stdout] | [INFO] [stdout] 59 | ControlOpCode::I32Const => Ok(Definition { [INFO] [stdout] | ----------------------- matches all the relevant values [INFO] [stdout] ... [INFO] [stdout] 63 | _ => Err(CodeError::UknownOpCode(format!( [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `buf` [INFO] [stdout] --> src/code.rs:77:18 [INFO] [stdout] | [INFO] [stdout] 77 | pub fn parse(buf: &[u8]) -> Result { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_buf` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `node` [INFO] [stdout] --> src/compiler.rs:20:31 [INFO] [stdout] | [INFO] [stdout] 20 | pub fn compile(&mut self, node: Node) -> Result<(), CompilerError> { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_node` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `One` is never constructed [INFO] [stdout] --> src/code.rs:46:5 [INFO] [stdout] | [INFO] [stdout] 45 | enum Width { [INFO] [stdout] | ----- variant in this enum [INFO] [stdout] 46 | One = 1, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Width` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `name` is never read [INFO] [stdout] --> src/code.rs:52:5 [INFO] [stdout] | [INFO] [stdout] 51 | struct Definition<'a> { [INFO] [stdout] | ---------- field in this struct [INFO] [stdout] 52 | name: &'a str, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Definition` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Program` [INFO] [stdout] --> src/ast.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 27 | / pub fn new() -> Self { [INFO] [stdout] 28 | | Program { statements: vec![] } [INFO] [stdout] 29 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 26 + impl Default for Program { [INFO] [stdout] 27 + fn default() -> Self { [INFO] [stdout] 28 + Self::new() [INFO] [stdout] 29 + } [INFO] [stdout] 30 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/code.rs:63:13 [INFO] [stdout] | [INFO] [stdout] 59 | ControlOpCode::I32Const => Ok(Definition { [INFO] [stdout] | ----------------------- matches all the relevant values [INFO] [stdout] ... [INFO] [stdout] 63 | _ => Err(CodeError::UknownOpCode(format!( [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `buf` [INFO] [stdout] --> src/code.rs:77:18 [INFO] [stdout] | [INFO] [stdout] 77 | pub fn parse(buf: &[u8]) -> Result { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_buf` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `node` [INFO] [stdout] --> src/compiler.rs:20:31 [INFO] [stdout] | [INFO] [stdout] 20 | pub fn compile(&mut self, node: Node) -> Result<(), CompilerError> { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_node` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/code.rs:98:31 [INFO] [stdout] | [INFO] [stdout] 98 | fn instr_size(operand_widths: &Vec) -> usize { [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] 98 - fn instr_size(operand_widths: &Vec) -> usize { [INFO] [stdout] 98 + fn instr_size(operand_widths: &[Width]) -> usize { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/eval.rs:57:69 [INFO] [stdout] | [INFO] [stdout] 57 | return Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] | _____________________________________________________________________^ [INFO] [stdout] 58 | | "cannot apply function call", [INFO] [stdout] 59 | | ))); [INFO] [stdout] | |_________________________^ help: consider using `.to_string()`: `"cannot apply function call".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:131:17 [INFO] [stdout] | [INFO] [stdout] 131 | return Ok(Object::Integer(eval_infix_op(expr.operator, *l, *r)?)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 131 - return Ok(Object::Integer(eval_infix_op(expr.operator, *l, *r)?)) [INFO] [stdout] 131 + Ok(Object::Integer(eval_infix_op(expr.operator, *l, *r)?)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:133:26 [INFO] [stdout] | [INFO] [stdout] 133 | Token::LT => return Ok(Object::Boolean(l < r)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 133 - Token::LT => return Ok(Object::Boolean(l < r)), [INFO] [stdout] 133 + Token::LT => Ok(Object::Boolean(l < r)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:134:26 [INFO] [stdout] | [INFO] [stdout] 134 | Token::GT => return Ok(Object::Boolean(l > r)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 134 - Token::GT => return Ok(Object::Boolean(l > r)), [INFO] [stdout] 134 + Token::GT => Ok(Object::Boolean(l > r)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:135:26 [INFO] [stdout] | [INFO] [stdout] 135 | Token::EQ => return Ok(Object::Boolean(l == r)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 135 - Token::EQ => return Ok(Object::Boolean(l == r)), [INFO] [stdout] 135 + Token::EQ => Ok(Object::Boolean(l == r)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:136:26 [INFO] [stdout] | [INFO] [stdout] 136 | Token::NE => return Ok(Object::Boolean(l != r)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 136 - Token::NE => return Ok(Object::Boolean(l != r)), [INFO] [stdout] 136 + Token::NE => Ok(Object::Boolean(l != r)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:138:17 [INFO] [stdout] | [INFO] [stdout] 138 | / return Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 139 | | "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 140 | | l, expr.operator, r [INFO] [stdout] 141 | | ))) [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 138 ~ Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 139 + "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 140 + l, expr.operator, r [INFO] [stdout] 141 + ))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:145:26 [INFO] [stdout] | [INFO] [stdout] 145 | Token::EQ => return Ok(Object::Boolean(l == r)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 145 - Token::EQ => return Ok(Object::Boolean(l == r)), [INFO] [stdout] 145 + Token::EQ => Ok(Object::Boolean(l == r)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:146:26 [INFO] [stdout] | [INFO] [stdout] 146 | Token::NE => return Ok(Object::Boolean(l != r)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 146 - Token::NE => return Ok(Object::Boolean(l != r)), [INFO] [stdout] 146 + Token::NE => Ok(Object::Boolean(l != r)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:148:17 [INFO] [stdout] | [INFO] [stdout] 148 | / return Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 149 | | "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 150 | | l, expr.operator, r [INFO] [stdout] 151 | | ))) [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 148 ~ Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 149 + "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 150 + l, expr.operator, r [INFO] [stdout] 151 + ))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:155:28 [INFO] [stdout] | [INFO] [stdout] 155 | Token::PLUS => return Ok(Object::String(String::from(format!("{}{}", l, r)))), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 155 - Token::PLUS => return Ok(Object::String(String::from(format!("{}{}", l, r)))), [INFO] [stdout] 155 + Token::PLUS => Ok(Object::String(String::from(format!("{}{}", l, r)))), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:157:17 [INFO] [stdout] | [INFO] [stdout] 157 | / return Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 158 | | "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 159 | | l, expr.operator, r [INFO] [stdout] 160 | | ))) [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 157 ~ Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 158 + "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 159 + l, expr.operator, r [INFO] [stdout] 160 + ))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:165:13 [INFO] [stdout] | [INFO] [stdout] 165 | / return Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 166 | | "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 167 | | left, expr.operator, right [INFO] [stdout] 168 | | ))) [INFO] [stdout] | |_______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 165 ~ Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 166 + "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 167 + left, expr.operator, right [INFO] [stdout] 168 + ))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/eval.rs:155:53 [INFO] [stdout] | [INFO] [stdout] 155 | Token::PLUS => return Ok(Object::String(String::from(format!("{}{}", l, r)))), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `format!("{}{}", l, r)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/eval.rs:174:8 [INFO] [stdout] | [INFO] [stdout] 174 | Ok(env [INFO] [stdout] | ________^ [INFO] [stdout] 175 | | .get(&id) [INFO] [stdout] 176 | | .ok_or_else(|| EvaluatorError::UnknownIdentifier(id))? [INFO] [stdout] | |_____________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 176 - .ok_or_else(|| EvaluatorError::UnknownIdentifier(id))? [INFO] [stdout] 176 + .ok_or(EvaluatorError::UnknownIdentifier(id))? [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/eval.rs:209:50 [INFO] [stdout] | [INFO] [stdout] 209 | let mut extended_env = extend_env(&function, &args)?; [INFO] [stdout] | ^^^^^ help: change this to: `args` [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: wildcard pattern covers any other pattern as it will match anyway [INFO] [stdout] --> src/eval.rs:242:9 [INFO] [stdout] | [INFO] [stdout] 242 | Object::Boolean(true) | _ => true, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider handling `_` separately [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wildcard_in_or_patterns [INFO] [stdout] = note: `#[warn(clippy::wildcard_in_or_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/eval.rs:316:48 [INFO] [stdout] | [INFO] [stdout] 316 | let tests = vec![("3==4", false), ("3==4", !true), ("3==3", true)]; [INFO] [stdout] | ^^^^^ help: try: `false` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lexer.rs:44:13 [INFO] [stdout] | [INFO] [stdout] 44 | return Ok(0 as char); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 44 - return Ok(0 as char); [INFO] [stdout] 44 + Ok(0 as char) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lexer.rs:48:21 [INFO] [stdout] | [INFO] [stdout] 48 | return Ok(ch); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 48 - return Ok(ch); [INFO] [stdout] 48 + Ok(ch) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lexer.rs:51:21 [INFO] [stdout] | [INFO] [stdout] 51 | return Err(LexerError::ReadIndexOutOfRange(self.read_position)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 51 - return Err(LexerError::ReadIndexOutOfRange(self.read_position)); [INFO] [stdout] 51 + Err(LexerError::ReadIndexOutOfRange(self.read_position)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `One` is never constructed [INFO] [stdout] --> src/code.rs:46:5 [INFO] [stdout] | [INFO] [stdout] 45 | enum Width { [INFO] [stdout] | ----- variant in this enum [INFO] [stdout] 46 | One = 1, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Width` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `name` is never read [INFO] [stdout] --> src/code.rs:52:5 [INFO] [stdout] | [INFO] [stdout] 51 | struct Definition<'a> { [INFO] [stdout] | ---------- field in this struct [INFO] [stdout] 52 | name: &'a str, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Definition` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Program` [INFO] [stdout] --> src/ast.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 27 | / pub fn new() -> Self { [INFO] [stdout] 28 | | Program { statements: vec![] } [INFO] [stdout] 29 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 26 + impl Default for Program { [INFO] [stdout] 27 + fn default() -> Self { [INFO] [stdout] 28 + Self::new() [INFO] [stdout] 29 + } [INFO] [stdout] 30 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/lexer.rs:175:5 [INFO] [stdout] | [INFO] [stdout] 175 | 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || c == '_' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: use: `('a'..='z').contains(&c)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/lexer.rs:175:29 [INFO] [stdout] | [INFO] [stdout] 175 | 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || c == '_' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: use: `('A'..='Z').contains(&c)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/lexer.rs:179:5 [INFO] [stdout] | [INFO] [stdout] 179 | '0' <= c && c <= '9' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: use: `('0'..='9').contains(&c)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 28 | return Ok(p); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 28 - return Ok(p); [INFO] [stdout] 28 + Ok(p) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:42:27 [INFO] [stdout] | [INFO] [stdout] 42 | Token::LET => return self.parse_let_statement(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 42 - Token::LET => return self.parse_let_statement(), [INFO] [stdout] 42 + Token::LET => self.parse_let_statement(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:43:30 [INFO] [stdout] | [INFO] [stdout] 43 | Token::RETURN => return self.parse_return_statement(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 43 - Token::RETURN => return self.parse_return_statement(), [INFO] [stdout] 43 + Token::RETURN => self.parse_return_statement(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:44:18 [INFO] [stdout] | [INFO] [stdout] 44 | _ => return self.parse_expression_statement(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 44 - _ => return self.parse_expression_statement(), [INFO] [stdout] 44 + _ => self.parse_expression_statement(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:109:9 [INFO] [stdout] | [INFO] [stdout] 109 | return Ok(exp); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 109 - return Ok(exp); [INFO] [stdout] 109 + Ok(exp) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:102:54 [INFO] [stdout] | [INFO] [stdout] 102 | return Err(ParserError::InvalidNextToken(String::from(format!( [INFO] [stdout] | ______________________________________________________^ [INFO] [stdout] 103 | | "expected next token to be {}, got {}", [INFO] [stdout] 104 | | Token::RPAREN, [INFO] [stdout] 105 | | self.current [INFO] [stdout] 106 | | )))); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 102 ~ return Err(ParserError::InvalidNextToken(format!( [INFO] [stdout] 103 + "expected next token to be {}, got {}", [INFO] [stdout] 104 + Token::RPAREN, [INFO] [stdout] 105 + self.current [INFO] [stdout] 106 ~ ))); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/code.rs:98:31 [INFO] [stdout] | [INFO] [stdout] 98 | fn instr_size(operand_widths: &Vec) -> usize { [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] 98 - fn instr_size(operand_widths: &Vec) -> usize { [INFO] [stdout] 98 + fn instr_size(operand_widths: &[Width]) -> usize { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:123:54 [INFO] [stdout] | [INFO] [stdout] 123 | return Err(ParserError::InvalidNextToken(String::from(format!( [INFO] [stdout] | ______________________________________________________^ [INFO] [stdout] 124 | | "expected {}, got {}", [INFO] [stdout] 125 | | "if block statement", self.current [INFO] [stdout] 126 | | )))); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 123 ~ return Err(ParserError::InvalidNextToken(format!( [INFO] [stdout] 124 + "expected {}, got {}", [INFO] [stdout] 125 + "if block statement", self.current [INFO] [stdout] 126 ~ ))); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:143:54 [INFO] [stdout] | [INFO] [stdout] 143 | return Err(ParserError::InvalidNextToken(String::from(format!( [INFO] [stdout] | ______________________________________________________^ [INFO] [stdout] 144 | | "expected {}, got {}", [INFO] [stdout] 145 | | "if block statement", self.current [INFO] [stdout] 146 | | )))); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 143 ~ return Err(ParserError::InvalidNextToken(format!( [INFO] [stdout] 144 + "expected {}, got {}", [INFO] [stdout] 145 + "if block statement", self.current [INFO] [stdout] 146 ~ ))); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/eval.rs:57:69 [INFO] [stdout] | [INFO] [stdout] 57 | return Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] | _____________________________________________________________________^ [INFO] [stdout] 58 | | "cannot apply function call", [INFO] [stdout] 59 | | ))); [INFO] [stdout] | |_________________________^ help: consider using `.to_string()`: `"cannot apply function call".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:177:54 [INFO] [stdout] | [INFO] [stdout] 177 | return Err(ParserError::InvalidNextToken(String::from(format!( [INFO] [stdout] | ______________________________________________________^ [INFO] [stdout] 178 | | "expected {}, got {}", [INFO] [stdout] 179 | | "if block statement", self.current [INFO] [stdout] 180 | | )))); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 177 ~ return Err(ParserError::InvalidNextToken(format!( [INFO] [stdout] 178 + "expected {}, got {}", [INFO] [stdout] 179 + "if block statement", self.current [INFO] [stdout] 180 ~ ))); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:131:17 [INFO] [stdout] | [INFO] [stdout] 131 | return Ok(Object::Integer(eval_infix_op(expr.operator, *l, *r)?)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 131 - return Ok(Object::Integer(eval_infix_op(expr.operator, *l, *r)?)) [INFO] [stdout] 131 + Ok(Object::Integer(eval_infix_op(expr.operator, *l, *r)?)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:133:26 [INFO] [stdout] | [INFO] [stdout] 133 | Token::LT => return Ok(Object::Boolean(l < r)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 133 - Token::LT => return Ok(Object::Boolean(l < r)), [INFO] [stdout] 133 + Token::LT => Ok(Object::Boolean(l < r)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:134:26 [INFO] [stdout] | [INFO] [stdout] 134 | Token::GT => return Ok(Object::Boolean(l > r)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 134 - Token::GT => return Ok(Object::Boolean(l > r)), [INFO] [stdout] 134 + Token::GT => Ok(Object::Boolean(l > r)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:135:26 [INFO] [stdout] | [INFO] [stdout] 135 | Token::EQ => return Ok(Object::Boolean(l == r)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 135 - Token::EQ => return Ok(Object::Boolean(l == r)), [INFO] [stdout] 135 + Token::EQ => Ok(Object::Boolean(l == r)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:136:26 [INFO] [stdout] | [INFO] [stdout] 136 | Token::NE => return Ok(Object::Boolean(l != r)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 136 - Token::NE => return Ok(Object::Boolean(l != r)), [INFO] [stdout] 136 + Token::NE => Ok(Object::Boolean(l != r)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:138:17 [INFO] [stdout] | [INFO] [stdout] 138 | / return Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 139 | | "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 140 | | l, expr.operator, r [INFO] [stdout] 141 | | ))) [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 138 ~ Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 139 + "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 140 + l, expr.operator, r [INFO] [stdout] 141 + ))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:145:26 [INFO] [stdout] | [INFO] [stdout] 145 | Token::EQ => return Ok(Object::Boolean(l == r)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 145 - Token::EQ => return Ok(Object::Boolean(l == r)), [INFO] [stdout] 145 + Token::EQ => Ok(Object::Boolean(l == r)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:146:26 [INFO] [stdout] | [INFO] [stdout] 146 | Token::NE => return Ok(Object::Boolean(l != r)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 146 - Token::NE => return Ok(Object::Boolean(l != r)), [INFO] [stdout] 146 + Token::NE => Ok(Object::Boolean(l != r)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:148:17 [INFO] [stdout] | [INFO] [stdout] 148 | / return Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 149 | | "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 150 | | l, expr.operator, r [INFO] [stdout] 151 | | ))) [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 148 ~ Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 149 + "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 150 + l, expr.operator, r [INFO] [stdout] 151 + ))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:155:28 [INFO] [stdout] | [INFO] [stdout] 155 | Token::PLUS => return Ok(Object::String(String::from(format!("{}{}", l, r)))), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 155 - Token::PLUS => return Ok(Object::String(String::from(format!("{}{}", l, r)))), [INFO] [stdout] 155 + Token::PLUS => Ok(Object::String(String::from(format!("{}{}", l, r)))), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:157:17 [INFO] [stdout] | [INFO] [stdout] 157 | / return Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 158 | | "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 159 | | l, expr.operator, r [INFO] [stdout] 160 | | ))) [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 157 ~ Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 158 + "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 159 + l, expr.operator, r [INFO] [stdout] 160 + ))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/eval.rs:165:13 [INFO] [stdout] | [INFO] [stdout] 165 | / return Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 166 | | "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 167 | | left, expr.operator, right [INFO] [stdout] 168 | | ))) [INFO] [stdout] | |_______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 165 ~ Err(EvaluatorError::InvalidOperation(format!( [INFO] [stdout] 166 + "cannot handle operation {:?} {:?} {:?}", [INFO] [stdout] 167 + left, expr.operator, right [INFO] [stdout] 168 + ))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:280:48 [INFO] [stdout] | [INFO] [stdout] 280 | Err(ParserError::InvalidIdentifier(String::from(format!( [INFO] [stdout] | ________________________________________________^ [INFO] [stdout] 281 | | "{:?} [INFO] [stdout] 282 | | ", [INFO] [stdout] 283 | | self.current [INFO] [stdout] 284 | | )))) [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 280 ~ Err(ParserError::InvalidIdentifier(format!( [INFO] [stdout] 281 + "{:?} [INFO] [stdout] 282 + ", [INFO] [stdout] 283 + self.current [INFO] [stdout] 284 ~ ))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:289:34 [INFO] [stdout] | [INFO] [stdout] 289 | match self.peek_token_is(&tok) { [INFO] [stdout] | ^^^^ help: change this to: `tok` [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: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:294:56 [INFO] [stdout] | [INFO] [stdout] 294 | false => Err(ParserError::InvalidNextToken(String::from(format!( [INFO] [stdout] | ________________________________________________________^ [INFO] [stdout] 295 | | "expected next token to be {:?}, got {:?}", [INFO] [stdout] 296 | | tok, self.peek [INFO] [stdout] 297 | | )))), [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 294 ~ false => Err(ParserError::InvalidNextToken(format!( [INFO] [stdout] 295 + "expected next token to be {:?}, got {:?}", [INFO] [stdout] 296 + tok, self.peek [INFO] [stdout] 297 ~ ))), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be replaced by its body itself [INFO] [stdout] --> src/parser.rs:302:9 [INFO] [stdout] | [INFO] [stdout] 302 | / match (&tok, &self.peek) { [INFO] [stdout] 303 | | _ => tok == &self.peek, [INFO] [stdout] 304 | | } [INFO] [stdout] | |_________^ help: consider using the match body instead: `tok == &self.peek` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] = note: `#[warn(clippy::match_single_binding)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:324:52 [INFO] [stdout] | [INFO] [stdout] 324 | _ => Err(ParserError::InvalidNextToken(String::from(format!( [INFO] [stdout] | ____________________________________________________^ [INFO] [stdout] 325 | | "{:?}", [INFO] [stdout] 326 | | self.current [INFO] [stdout] 327 | | )))), [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 324 ~ _ => Err(ParserError::InvalidNextToken(format!( [INFO] [stdout] 325 + "{:?}", [INFO] [stdout] 326 + self.current [INFO] [stdout] 327 ~ ))), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/eval.rs:155:53 [INFO] [stdout] | [INFO] [stdout] 155 | Token::PLUS => return Ok(Object::String(String::from(format!("{}{}", l, r)))), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `format!("{}{}", l, r)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/parser.rs:418:9 [INFO] [stdout] | [INFO] [stdout] 418 | / assert_eq!( [INFO] [stdout] 419 | | is_expected_let_ident( [INFO] [stdout] 420 | | pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] 421 | | st.iter().nth(i).unwrap() [INFO] [stdout] 422 | | ), [INFO] [stdout] 423 | | true [INFO] [stdout] 424 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_assert_comparison)]` on by default [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 418 ~ assert!( [INFO] [stdout] 419 | is_expected_let_ident( [INFO] [stdout] 420 | pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] 421 | st.iter().nth(i).unwrap() [INFO] [stdout] 422 ~ ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.iter().nth()` on a `Vec` [INFO] [stdout] --> src/parser.rs:420:17 [INFO] [stdout] | [INFO] [stdout] 420 | pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stdout] = note: `#[warn(clippy::iter_nth)]` on by default [INFO] [stdout] help: `get` is equivalent but more concise [INFO] [stdout] | [INFO] [stdout] 420 - pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] 420 + pr.statements.get(i).unwrap(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.iter().nth()` on a `Vec` [INFO] [stdout] --> src/parser.rs:421:17 [INFO] [stdout] | [INFO] [stdout] 421 | st.iter().nth(i).unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stdout] help: `get` is equivalent but more concise [INFO] [stdout] | [INFO] [stdout] 421 - st.iter().nth(i).unwrap() [INFO] [stdout] 421 + st.get(i).unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/eval.rs:174:8 [INFO] [stdout] | [INFO] [stdout] 174 | Ok(env [INFO] [stdout] | ________^ [INFO] [stdout] 175 | | .get(&id) [INFO] [stdout] 176 | | .ok_or_else(|| EvaluatorError::UnknownIdentifier(id))? [INFO] [stdout] | |_____________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 176 - .ok_or_else(|| EvaluatorError::UnknownIdentifier(id))? [INFO] [stdout] 176 + .ok_or(EvaluatorError::UnknownIdentifier(id))? [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:431:31 [INFO] [stdout] | [INFO] [stdout] 431 | Statement::Let(ls) => return ls.name == exp.name && ls.value == exp.value, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 431 ~ Statement::Let(ls) => ls.name == exp.name && ls.value == exp.value, [INFO] [stdout] 432 | _ => return false, [INFO] [stdout] 433 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:432:14 [INFO] [stdout] | [INFO] [stdout] 432 | _ => return false, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 432 ~ _ => false, [INFO] [stdout] 433 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/eval.rs:209:50 [INFO] [stdout] | [INFO] [stdout] 209 | let mut extended_env = extend_env(&function, &args)?; [INFO] [stdout] | ^^^^^ help: change this to: `args` [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: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/parser.rs:458:9 [INFO] [stdout] | [INFO] [stdout] 458 | / assert_eq!( [INFO] [stdout] 459 | | is_expected_return( [INFO] [stdout] 460 | | pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] 461 | | st.iter().nth(i).unwrap() [INFO] [stdout] 462 | | ), [INFO] [stdout] 463 | | true [INFO] [stdout] 464 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 458 ~ assert!( [INFO] [stdout] 459 | is_expected_return( [INFO] [stdout] 460 | pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] 461 | st.iter().nth(i).unwrap() [INFO] [stdout] 462 ~ ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.iter().nth()` on a `Vec` [INFO] [stdout] --> src/parser.rs:460:17 [INFO] [stdout] | [INFO] [stdout] 460 | pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stdout] help: `get` is equivalent but more concise [INFO] [stdout] | [INFO] [stdout] 460 - pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] 460 + pr.statements.get(i).unwrap(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.iter().nth()` on a `Vec` [INFO] [stdout] --> src/parser.rs:461:17 [INFO] [stdout] | [INFO] [stdout] 461 | st.iter().nth(i).unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stdout] help: `get` is equivalent but more concise [INFO] [stdout] | [INFO] [stdout] 461 - st.iter().nth(i).unwrap() [INFO] [stdout] 461 + st.get(i).unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:471:34 [INFO] [stdout] | [INFO] [stdout] 471 | Statement::Return(ls) => return ls.value == exp.value, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 471 ~ Statement::Return(ls) => ls.value == exp.value, [INFO] [stdout] 472 | _ => return false, [INFO] [stdout] 473 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:472:14 [INFO] [stdout] | [INFO] [stdout] 472 | _ => return false, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 472 ~ _ => false, [INFO] [stdout] 473 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: wildcard pattern covers any other pattern as it will match anyway [INFO] [stdout] --> src/eval.rs:242:9 [INFO] [stdout] | [INFO] [stdout] 242 | Object::Boolean(true) | _ => true, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider handling `_` separately [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wildcard_in_or_patterns [INFO] [stdout] = note: `#[warn(clippy::wildcard_in_or_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.iter().nth()` on a `Vec` [INFO] [stdout] --> src/parser.rs:487:15 [INFO] [stdout] | [INFO] [stdout] 487 | let exp = pr.statements.iter().nth(0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stdout] help: `get` is equivalent but more concise [INFO] [stdout] | [INFO] [stdout] 487 - let exp = pr.statements.iter().nth(0).unwrap(); [INFO] [stdout] 487 + let exp = pr.statements.get(0).unwrap(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lexer.rs:44:13 [INFO] [stdout] | [INFO] [stdout] 44 | return Ok(0 as char); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 44 - return Ok(0 as char); [INFO] [stdout] 44 + Ok(0 as char) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lexer.rs:48:21 [INFO] [stdout] | [INFO] [stdout] 48 | return Ok(ch); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 48 - return Ok(ch); [INFO] [stdout] 48 + Ok(ch) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lexer.rs:51:21 [INFO] [stdout] | [INFO] [stdout] 51 | return Err(LexerError::ReadIndexOutOfRange(self.read_position)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 51 - return Err(LexerError::ReadIndexOutOfRange(self.read_position)); [INFO] [stdout] 51 + Err(LexerError::ReadIndexOutOfRange(self.read_position)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/parser.rs:533:9 [INFO] [stdout] | [INFO] [stdout] 533 | / assert_eq!( [INFO] [stdout] 534 | | is_expected_prefix_expression( [INFO] [stdout] 535 | | pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] 536 | | exp.iter().nth(i).unwrap() [INFO] [stdout] 537 | | ), [INFO] [stdout] 538 | | true [INFO] [stdout] 539 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 533 ~ assert!( [INFO] [stdout] 534 | is_expected_prefix_expression( [INFO] [stdout] 535 | pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] 536 | exp.iter().nth(i).unwrap() [INFO] [stdout] 537 ~ ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.iter().nth()` on a `Vec` [INFO] [stdout] --> src/parser.rs:535:17 [INFO] [stdout] | [INFO] [stdout] 535 | pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stdout] help: `get` is equivalent but more concise [INFO] [stdout] | [INFO] [stdout] 535 - pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] 535 + pr.statements.get(i).unwrap(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.iter().nth()` on a `Vec` [INFO] [stdout] --> src/parser.rs:536:17 [INFO] [stdout] | [INFO] [stdout] 536 | exp.iter().nth(i).unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stdout] help: `get` is equivalent but more concise [INFO] [stdout] | [INFO] [stdout] 536 - exp.iter().nth(i).unwrap() [INFO] [stdout] 536 + exp.get(i).unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:548:13 [INFO] [stdout] | [INFO] [stdout] 548 | return es.operator == exp.operator && es.right == exp.right; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 548 ~ es.operator == exp.operator && es.right == exp.right [INFO] [stdout] 549 | } [INFO] [stdout] 550 | _ => return false, [INFO] [stdout] 551 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:550:14 [INFO] [stdout] | [INFO] [stdout] 550 | _ => return false, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 550 ~ _ => false, [INFO] [stdout] 551 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/lexer.rs:175:5 [INFO] [stdout] | [INFO] [stdout] 175 | 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || c == '_' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: use: `('a'..='z').contains(&c)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/lexer.rs:175:29 [INFO] [stdout] | [INFO] [stdout] 175 | 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || c == '_' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: use: `('A'..='Z').contains(&c)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/lexer.rs:179:5 [INFO] [stdout] | [INFO] [stdout] 179 | '0' <= c && c <= '9' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: use: `('0'..='9').contains(&c)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/parser.rs:615:9 [INFO] [stdout] | [INFO] [stdout] 615 | / assert_eq!( [INFO] [stdout] 616 | | is_expected_infix_expression( [INFO] [stdout] 617 | | pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] 618 | | exp.iter().nth(i).unwrap() [INFO] [stdout] 619 | | ), [INFO] [stdout] 620 | | true [INFO] [stdout] 621 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 615 ~ assert!( [INFO] [stdout] 616 | is_expected_infix_expression( [INFO] [stdout] 617 | pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] 618 | exp.iter().nth(i).unwrap() [INFO] [stdout] 619 ~ ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.iter().nth()` on a `Vec` [INFO] [stdout] --> src/parser.rs:617:17 [INFO] [stdout] | [INFO] [stdout] 617 | pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stdout] help: `get` is equivalent but more concise [INFO] [stdout] | [INFO] [stdout] 617 - pr.statements.iter().nth(i).unwrap(), [INFO] [stdout] 617 + pr.statements.get(i).unwrap(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.iter().nth()` on a `Vec` [INFO] [stdout] --> src/parser.rs:618:17 [INFO] [stdout] | [INFO] [stdout] 618 | exp.iter().nth(i).unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stdout] help: `get` is equivalent but more concise [INFO] [stdout] | [INFO] [stdout] 618 - exp.iter().nth(i).unwrap() [INFO] [stdout] 618 + exp.get(i).unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/parser.rs:630:20 [INFO] [stdout] | [INFO] [stdout] 630 | return ie.right == exp.right && ie.operator == exp.operator && ie.right == exp.right; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 630 - return ie.right == exp.right && ie.operator == exp.operator && ie.right == exp.right; [INFO] [stdout] 630 + return !(ie.right != exp.right || ie.operator != exp.operator); [INFO] [stdout] | [INFO] [stdout] 630 - return ie.right == exp.right && ie.operator == exp.operator && ie.right == exp.right; [INFO] [stdout] 630 + return ie.right == exp.right && ie.operator == exp.operator; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:630:13 [INFO] [stdout] | [INFO] [stdout] 630 | return ie.right == exp.right && ie.operator == exp.operator && ie.right == exp.right; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 630 ~ ie.right == exp.right && ie.operator == exp.operator && ie.right == exp.right [INFO] [stdout] 631 | } [INFO] [stdout] 632 | _ => return false, [INFO] [stdout] 633 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:632:14 [INFO] [stdout] | [INFO] [stdout] 632 | _ => return false, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 632 ~ _ => false, [INFO] [stdout] 633 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 28 | return Ok(p); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 28 - return Ok(p); [INFO] [stdout] 28 + Ok(p) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:42:27 [INFO] [stdout] | [INFO] [stdout] 42 | Token::LET => return self.parse_let_statement(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 42 - Token::LET => return self.parse_let_statement(), [INFO] [stdout] 42 + Token::LET => self.parse_let_statement(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:43:30 [INFO] [stdout] | [INFO] [stdout] 43 | Token::RETURN => return self.parse_return_statement(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 43 - Token::RETURN => return self.parse_return_statement(), [INFO] [stdout] 43 + Token::RETURN => self.parse_return_statement(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:44:18 [INFO] [stdout] | [INFO] [stdout] 44 | _ => return self.parse_expression_statement(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 44 - _ => return self.parse_expression_statement(), [INFO] [stdout] 44 + _ => self.parse_expression_statement(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:109:9 [INFO] [stdout] | [INFO] [stdout] 109 | return Ok(exp); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 109 - return Ok(exp); [INFO] [stdout] 109 + Ok(exp) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:102:54 [INFO] [stdout] | [INFO] [stdout] 102 | return Err(ParserError::InvalidNextToken(String::from(format!( [INFO] [stdout] | ______________________________________________________^ [INFO] [stdout] 103 | | "expected next token to be {}, got {}", [INFO] [stdout] 104 | | Token::RPAREN, [INFO] [stdout] 105 | | self.current [INFO] [stdout] 106 | | )))); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 102 ~ return Err(ParserError::InvalidNextToken(format!( [INFO] [stdout] 103 + "expected next token to be {}, got {}", [INFO] [stdout] 104 + Token::RPAREN, [INFO] [stdout] 105 + self.current [INFO] [stdout] 106 ~ ))); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:123:54 [INFO] [stdout] | [INFO] [stdout] 123 | return Err(ParserError::InvalidNextToken(String::from(format!( [INFO] [stdout] | ______________________________________________________^ [INFO] [stdout] 124 | | "expected {}, got {}", [INFO] [stdout] 125 | | "if block statement", self.current [INFO] [stdout] 126 | | )))); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 123 ~ return Err(ParserError::InvalidNextToken(format!( [INFO] [stdout] 124 + "expected {}, got {}", [INFO] [stdout] 125 + "if block statement", self.current [INFO] [stdout] 126 ~ ))); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/parser.rs:397:14 [INFO] [stdout] | [INFO] [stdout] 397 | let st = vec![ [INFO] [stdout] | ______________^ [INFO] [stdout] 398 | | LetStatement { [INFO] [stdout] 399 | | name: String::from("five"), [INFO] [stdout] 400 | | value: Expression::Integer(46), [INFO] [stdout] ... | [INFO] [stdout] 409 | | }, [INFO] [stdout] 410 | | ]; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] help: you can use an array directly [INFO] [stdout] | [INFO] [stdout] 397 ~ let st = [LetStatement { [INFO] [stdout] 398 + name: String::from("five"), [INFO] [stdout] 399 + value: Expression::Integer(46), [INFO] [stdout] 400 + }, [INFO] [stdout] 401 + LetStatement { [INFO] [stdout] 402 + name: String::from("ten"), [INFO] [stdout] 403 + value: Expression::Integer(10), [INFO] [stdout] 404 + }, [INFO] [stdout] 405 + LetStatement { [INFO] [stdout] 406 + name: String::from("foobar"), [INFO] [stdout] 407 + value: Expression::Integer(1234), [INFO] [stdout] 408 ~ }]; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:143:54 [INFO] [stdout] | [INFO] [stdout] 143 | return Err(ParserError::InvalidNextToken(String::from(format!( [INFO] [stdout] | ______________________________________________________^ [INFO] [stdout] 144 | | "expected {}, got {}", [INFO] [stdout] 145 | | "if block statement", self.current [INFO] [stdout] 146 | | )))); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 143 ~ return Err(ParserError::InvalidNextToken(format!( [INFO] [stdout] 144 + "expected {}, got {}", [INFO] [stdout] 145 + "if block statement", self.current [INFO] [stdout] 146 ~ ))); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/parser.rs:443:14 [INFO] [stdout] | [INFO] [stdout] 443 | let st = vec![ [INFO] [stdout] | ______________^ [INFO] [stdout] 444 | | ReturnStatement { [INFO] [stdout] 445 | | value: Expression::Integer(3), [INFO] [stdout] 446 | | }, [INFO] [stdout] ... | [INFO] [stdout] 449 | | }, [INFO] [stdout] 450 | | ]; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] help: you can use an array directly [INFO] [stdout] | [INFO] [stdout] 443 ~ let st = [ReturnStatement { [INFO] [stdout] 444 + value: Expression::Integer(3), [INFO] [stdout] 445 + }, [INFO] [stdout] 446 + ReturnStatement { [INFO] [stdout] 447 + value: Expression::Identifier(String::from("x")), [INFO] [stdout] 448 ~ }]; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/parser.rs:505:15 [INFO] [stdout] | [INFO] [stdout] 505 | let exp = vec![ [INFO] [stdout] | _______________^ [INFO] [stdout] 506 | | PrefixExpression { [INFO] [stdout] 507 | | operator: Token::BANG, [INFO] [stdout] 508 | | right: Box::new(Expression::Integer(5)), [INFO] [stdout] ... | [INFO] [stdout] 525 | | }, [INFO] [stdout] 526 | | ]; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] help: you can use an array directly [INFO] [stdout] | [INFO] [stdout] 505 ~ let exp = [PrefixExpression { [INFO] [stdout] 506 + operator: Token::BANG, [INFO] [stdout] 507 + right: Box::new(Expression::Integer(5)), [INFO] [stdout] 508 + }, [INFO] [stdout] 509 + PrefixExpression { [INFO] [stdout] 510 + operator: Token::MINUS, [INFO] [stdout] 511 + right: Box::new(Expression::Integer(15)), [INFO] [stdout] 512 + }, [INFO] [stdout] 513 + PrefixExpression { [INFO] [stdout] 514 + operator: Token::BANG, [INFO] [stdout] 515 + right: Box::new(Expression::Boolean(true)), [INFO] [stdout] 516 + }, [INFO] [stdout] 517 + PrefixExpression { [INFO] [stdout] 518 + operator: Token::BANG, [INFO] [stdout] 519 + right: Box::new(Expression::Boolean(false)), [INFO] [stdout] 520 + }, [INFO] [stdout] 521 + PrefixExpression { [INFO] [stdout] 522 + operator: Token::MINUS, [INFO] [stdout] 523 + right: Box::new(Expression::Identifier(String::from("x"))), [INFO] [stdout] 524 ~ }]; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/parser.rs:567:15 [INFO] [stdout] | [INFO] [stdout] 567 | let exp = vec![ [INFO] [stdout] | _______________^ [INFO] [stdout] 568 | | InfixExpression { [INFO] [stdout] 569 | | left: Box::new(Expression::Integer(5)), [INFO] [stdout] 570 | | operator: Token::PLUS, [INFO] [stdout] ... | [INFO] [stdout] 607 | | }, [INFO] [stdout] 608 | | ]; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] help: you can use an array directly [INFO] [stdout] | [INFO] [stdout] 567 ~ let exp = [InfixExpression { [INFO] [stdout] 568 + left: Box::new(Expression::Integer(5)), [INFO] [stdout] 569 + operator: Token::PLUS, [INFO] [stdout] 570 + right: Box::new(Expression::Integer(5)), [INFO] [stdout] 571 + }, [INFO] [stdout] 572 + InfixExpression { [INFO] [stdout] 573 + left: Box::new(Expression::Integer(5)), [INFO] [stdout] 574 + operator: Token::MINUS, [INFO] [stdout] 575 + right: Box::new(Expression::Integer(5)), [INFO] [stdout] 576 + }, [INFO] [stdout] 577 + InfixExpression { [INFO] [stdout] 578 + left: Box::new(Expression::Integer(5)), [INFO] [stdout] 579 + operator: Token::ASTERISK, [INFO] [stdout] 580 + right: Box::new(Expression::Integer(5)), [INFO] [stdout] 581 + }, [INFO] [stdout] 582 + InfixExpression { [INFO] [stdout] 583 + left: Box::new(Expression::Integer(5)), [INFO] [stdout] 584 + operator: Token::SLASH, [INFO] [stdout] 585 + right: Box::new(Expression::Integer(5)), [INFO] [stdout] 586 + }, [INFO] [stdout] 587 + InfixExpression { [INFO] [stdout] 588 + left: Box::new(Expression::Integer(5)), [INFO] [stdout] 589 + operator: Token::GT, [INFO] [stdout] 590 + right: Box::new(Expression::Integer(5)), [INFO] [stdout] 591 + }, [INFO] [stdout] 592 + InfixExpression { [INFO] [stdout] 593 + left: Box::new(Expression::Integer(5)), [INFO] [stdout] 594 + operator: Token::LT, [INFO] [stdout] 595 + right: Box::new(Expression::Integer(5)), [INFO] [stdout] 596 + }, [INFO] [stdout] 597 + InfixExpression { [INFO] [stdout] 598 + left: Box::new(Expression::Integer(5)), [INFO] [stdout] 599 + operator: Token::EQ, [INFO] [stdout] 600 + right: Box::new(Expression::Integer(5)), [INFO] [stdout] 601 + }, [INFO] [stdout] 602 + InfixExpression { [INFO] [stdout] 603 + left: Box::new(Expression::Integer(5)), [INFO] [stdout] 604 + operator: Token::NE, [INFO] [stdout] 605 + right: Box::new(Expression::Integer(5)), [INFO] [stdout] 606 ~ }]; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:177:54 [INFO] [stdout] | [INFO] [stdout] 177 | return Err(ParserError::InvalidNextToken(String::from(format!( [INFO] [stdout] | ______________________________________________________^ [INFO] [stdout] 178 | | "expected {}, got {}", [INFO] [stdout] 179 | | "if block statement", self.current [INFO] [stdout] 180 | | )))); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 177 ~ return Err(ParserError::InvalidNextToken(format!( [INFO] [stdout] 178 + "expected {}, got {}", [INFO] [stdout] 179 + "if block statement", self.current [INFO] [stdout] 180 ~ ))); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:280:48 [INFO] [stdout] | [INFO] [stdout] 280 | Err(ParserError::InvalidIdentifier(String::from(format!( [INFO] [stdout] | ________________________________________________^ [INFO] [stdout] 281 | | "{:?} [INFO] [stdout] 282 | | ", [INFO] [stdout] 283 | | self.current [INFO] [stdout] 284 | | )))) [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 280 ~ Err(ParserError::InvalidIdentifier(format!( [INFO] [stdout] 281 + "{:?} [INFO] [stdout] 282 + ", [INFO] [stdout] 283 + self.current [INFO] [stdout] 284 ~ ))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:289:34 [INFO] [stdout] | [INFO] [stdout] 289 | match self.peek_token_is(&tok) { [INFO] [stdout] | ^^^^ help: change this to: `tok` [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: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:294:56 [INFO] [stdout] | [INFO] [stdout] 294 | false => Err(ParserError::InvalidNextToken(String::from(format!( [INFO] [stdout] | ________________________________________________________^ [INFO] [stdout] 295 | | "expected next token to be {:?}, got {:?}", [INFO] [stdout] 296 | | tok, self.peek [INFO] [stdout] 297 | | )))), [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 294 ~ false => Err(ParserError::InvalidNextToken(format!( [INFO] [stdout] 295 + "expected next token to be {:?}, got {:?}", [INFO] [stdout] 296 + tok, self.peek [INFO] [stdout] 297 ~ ))), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be replaced by its body itself [INFO] [stdout] --> src/parser.rs:302:9 [INFO] [stdout] | [INFO] [stdout] 302 | / match (&tok, &self.peek) { [INFO] [stdout] 303 | | _ => tok == &self.peek, [INFO] [stdout] 304 | | } [INFO] [stdout] | |_________^ help: consider using the match body instead: `tok == &self.peek` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] = note: `#[warn(clippy::match_single_binding)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/parser.rs:324:52 [INFO] [stdout] | [INFO] [stdout] 324 | _ => Err(ParserError::InvalidNextToken(String::from(format!( [INFO] [stdout] | ____________________________________________________^ [INFO] [stdout] 325 | | "{:?}", [INFO] [stdout] 326 | | self.current [INFO] [stdout] 327 | | )))), [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `String::from()` [INFO] [stdout] | [INFO] [stdout] 324 ~ _ => Err(ParserError::InvalidNextToken(format!( [INFO] [stdout] 325 + "{:?}", [INFO] [stdout] 326 + self.current [INFO] [stdout] 327 ~ ))), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.92s [INFO] running `Command { std: "docker" "inspect" "a616dcbe87ff7af0cff226e24e3b7e7e7f908d36fbb3342a7b78167e5389027a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "a616dcbe87ff7af0cff226e24e3b7e7e7f908d36fbb3342a7b78167e5389027a", kill_on_drop: false }` [INFO] [stdout] a616dcbe87ff7af0cff226e24e3b7e7e7f908d36fbb3342a7b78167e5389027a