[INFO] cloning repository https://github.com/sidsurakanti/brainrot [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/sidsurakanti/brainrot" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsidsurakanti%2Fbrainrot", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsidsurakanti%2Fbrainrot'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 660075c5d8e1a501bd86d0dff19e7cfb4f4413b9 [INFO] linting sidsurakanti/brainrot against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsidsurakanti%2Fbrainrot" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/sidsurakanti/brainrot [INFO] finished tweaking git repo https://github.com/sidsurakanti/brainrot [INFO] tweaked toml for git repo https://github.com/sidsurakanti/brainrot written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/sidsurakanti/brainrot 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/sidsurakanti/brainrot already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] d5027b2e586a4585200cae2ab52181c21fa10a5870ff618e43ef3e0eca2a48cf [INFO] running `Command { std: "docker" "start" "-a" "d5027b2e586a4585200cae2ab52181c21fa10a5870ff618e43ef3e0eca2a48cf", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "d5027b2e586a4585200cae2ab52181c21fa10a5870ff618e43ef3e0eca2a48cf", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "d5027b2e586a4585200cae2ab52181c21fa10a5870ff618e43ef3e0eca2a48cf", kill_on_drop: false }` [INFO] [stdout] d5027b2e586a4585200cae2ab52181c21fa10a5870ff618e43ef3e0eca2a48cf [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] e19c5f10c163f80798ff3c6adcb0409f247f4b6a0f52be625356e31b3ad310b3 [INFO] running `Command { std: "docker" "start" "-a" "e19c5f10c163f80798ff3c6adcb0409f247f4b6a0f52be625356e31b3ad310b3", kill_on_drop: false }` [INFO] [stderr] Checking maplit v1.0.2 [INFO] [stderr] Checking brainrot v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/env.rs:17:13 [INFO] [stdout] | [INFO] [stdout] 17 | parent: parent, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `parent` [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/env.rs:17:13 [INFO] [stdout] | [INFO] [stdout] 17 | parent: parent, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `parent` [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/lexer.rs:228:13 [INFO] [stdout] | [INFO] [stdout] 228 | lexeme: lexeme, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `lexeme` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/lexer.rs:228:13 [INFO] [stdout] | [INFO] [stdout] 228 | lexeme: lexeme, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `lexeme` [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: unneeded `return` statement [INFO] [stdout] --> src/env.rs:16:9 [INFO] [stdout] | [INFO] [stdout] 16 | / return Self { [INFO] [stdout] 17 | | parent: parent, [INFO] [stdout] 18 | | bucket: HashMap::new(), [INFO] [stdout] 19 | | }; [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] 16 ~ Self { [INFO] [stdout] 17 + parent: parent, [INFO] [stdout] 18 + bucket: HashMap::new(), [INFO] [stdout] 19 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/env.rs:62:24 [INFO] [stdout] | [INFO] [stdout] 62 | if let Some(_) = env.bucket.get(&key) { [INFO] [stdout] | -------^^^^^^^----------------------- help: try: `if env.bucket.get(&key).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Interpreter` [INFO] [stdout] --> src/interpreter.rs:60:5 [INFO] [stdout] | [INFO] [stdout] 60 | / pub fn new() -> Self { [INFO] [stdout] 61 | | let g = Rc::new(RefCell::new(Env::new(None))); [INFO] [stdout] 62 | | [INFO] [stdout] 63 | | Self { [INFO] [stdout] ... | [INFO] [stdout] 67 | | } [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] 59 + impl Default for Interpreter { [INFO] [stdout] 60 + fn default() -> Self { [INFO] [stdout] 61 + Self::new() [INFO] [stdout] 62 + } [INFO] [stdout] 63 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/env.rs:16:9 [INFO] [stdout] | [INFO] [stdout] 16 | / return Self { [INFO] [stdout] 17 | | parent: parent, [INFO] [stdout] 18 | | bucket: HashMap::new(), [INFO] [stdout] 19 | | }; [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] 16 ~ Self { [INFO] [stdout] 17 + parent: parent, [INFO] [stdout] 18 + bucket: HashMap::new(), [INFO] [stdout] 19 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/env.rs:62:24 [INFO] [stdout] | [INFO] [stdout] 62 | if let Some(_) = env.bucket.get(&key) { [INFO] [stdout] | -------^^^^^^^----------------------- help: try: `if env.bucket.get(&key).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/interpreter.rs:207:20 [INFO] [stdout] | [INFO] [stdout] 207 | if !(vals.len() == args.len()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(vals.len() != args.len())` [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/interpreter.rs:229:25 [INFO] [stdout] | [INFO] [stdout] 229 | / return { [INFO] [stdout] ... | [INFO] [stdout] 241 | | }; [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] 229 ~ { [INFO] [stdout] 230 + // cf::none => block success w no return [INFO] [stdout] 231 + // cf::ret => handle [INFO] [stdout] 232 + // cf::continue | break => loops should catch it [INFO] [stdout] 233 + // otherwise err [INFO] [stdout] 234 + match cf { [INFO] [stdout] 235 + ControlFlow::Return(val) => Ok(val), [INFO] [stdout] 236 + ControlFlow::None => Ok(Value::Null), [INFO] [stdout] 237 + _ => Err(RuntimeError::Message( [INFO] [stdout] 238 + "expected return or null after function body".to_string(), [INFO] [stdout] 239 + )), [INFO] [stdout] 240 + } [INFO] [stdout] 241 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Interpreter` [INFO] [stdout] --> src/interpreter.rs:60:5 [INFO] [stdout] | [INFO] [stdout] 60 | / pub fn new() -> Self { [INFO] [stdout] 61 | | let g = Rc::new(RefCell::new(Env::new(None))); [INFO] [stdout] 62 | | [INFO] [stdout] 63 | | Self { [INFO] [stdout] ... | [INFO] [stdout] 67 | | } [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] 59 + impl Default for Interpreter { [INFO] [stdout] 60 + fn default() -> Self { [INFO] [stdout] 61 + Self::new() [INFO] [stdout] 62 + } [INFO] [stdout] 63 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/interpreter.rs:243:31 [INFO] [stdout] | [INFO] [stdout] 243 | Err(e) => return Err(e), [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] 243 - Err(e) => return Err(e), [INFO] [stdout] 243 + Err(e) => Err(e), [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/interpreter.rs:170:50 [INFO] [stdout] | [INFO] [stdout] 170 | fn eval_call(&mut self, name: &String, args: &Vec) -> Result { [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] 170 - fn eval_call(&mut self, name: &String, args: &Vec) -> Result { [INFO] [stdout] 170 + fn eval_call(&mut self, name: &String, args: &[Expr]) -> Result { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/interpreter.rs:254:22 [INFO] [stdout] | [INFO] [stdout] 254 | then_branch: &Box, [INFO] [stdout] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] = note: `#[warn(clippy::borrowed_box)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/interpreter.rs:207:20 [INFO] [stdout] | [INFO] [stdout] 207 | if !(vals.len() == args.len()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(vals.len() != args.len())` [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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/interpreter.rs:269:50 [INFO] [stdout] | [INFO] [stdout] 269 | fn eval_while(&mut self, cond: &Expr, block: &Box) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/interpreter.rs:229:25 [INFO] [stdout] | [INFO] [stdout] 229 | / return { [INFO] [stdout] ... | [INFO] [stdout] 241 | | }; [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] 229 ~ { [INFO] [stdout] 230 + // cf::none => block success w no return [INFO] [stdout] 231 + // cf::ret => handle [INFO] [stdout] 232 + // cf::continue | break => loops should catch it [INFO] [stdout] 233 + // otherwise err [INFO] [stdout] 234 + match cf { [INFO] [stdout] 235 + ControlFlow::Return(val) => Ok(val), [INFO] [stdout] 236 + ControlFlow::None => Ok(Value::Null), [INFO] [stdout] 237 + _ => Err(RuntimeError::Message( [INFO] [stdout] 238 + "expected return or null after function body".to_string(), [INFO] [stdout] 239 + )), [INFO] [stdout] 240 + } [INFO] [stdout] 241 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/interpreter.rs:243:31 [INFO] [stdout] | [INFO] [stdout] 243 | Err(e) => return Err(e), [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] 243 - Err(e) => return Err(e), [INFO] [stdout] 243 + Err(e) => Err(e), [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/interpreter.rs:170:50 [INFO] [stdout] | [INFO] [stdout] 170 | fn eval_call(&mut self, name: &String, args: &Vec) -> Result { [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] 170 - fn eval_call(&mut self, name: &String, args: &Vec) -> Result { [INFO] [stdout] 170 + fn eval_call(&mut self, name: &String, args: &[Expr]) -> Result { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/interpreter.rs:284:15 [INFO] [stdout] | [INFO] [stdout] 284 | init: &Box, [INFO] [stdout] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/interpreter.rs:286:15 [INFO] [stdout] | [INFO] [stdout] 286 | step: &Box, [INFO] [stdout] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/interpreter.rs:287:16 [INFO] [stdout] | [INFO] [stdout] 287 | block: &Box, [INFO] [stdout] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/interpreter.rs:327:34 [INFO] [stdout] | [INFO] [stdout] 327 | fn eval_let(&mut self, name: &String, expr: &Expr) -> Result { [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] 327 ~ fn eval_let(&mut self, name: &str, expr: &Expr) -> Result { [INFO] [stdout] 328 | let val = self.eval_expr(expr)?; [INFO] [stdout] 329 | // println!("{}: {}", name, val); [INFO] [stdout] 330 ~ Env::define(Rc::clone(&self.curr_env), name.to_owned(), val); [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/interpreter.rs:334:37 [INFO] [stdout] | [INFO] [stdout] 334 | fn eval_assign(&mut self, name: &String, expr: &Expr) -> Result { [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] 334 ~ fn eval_assign(&mut self, name: &str, expr: &Expr) -> Result { [INFO] [stdout] 335 | let val = self.eval_expr(expr)?; [INFO] [stdout] 336 ~ Env::assign(Rc::clone(&self.curr_env), name.to_owned(), val)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/interpreter.rs:254:22 [INFO] [stdout] | [INFO] [stdout] 254 | then_branch: &Box, [INFO] [stdout] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] = note: `#[warn(clippy::borrowed_box)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/interpreter.rs:269:50 [INFO] [stdout] | [INFO] [stdout] 269 | fn eval_while(&mut self, cond: &Expr, block: &Box) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/interpreter.rs:284:15 [INFO] [stdout] | [INFO] [stdout] 284 | init: &Box, [INFO] [stdout] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/interpreter.rs:286:15 [INFO] [stdout] | [INFO] [stdout] 286 | step: &Box, [INFO] [stdout] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/interpreter.rs:287:16 [INFO] [stdout] | [INFO] [stdout] 287 | block: &Box, [INFO] [stdout] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `i32` which implements the `Copy` trait [INFO] [stdout] --> src/interpreter.rs:413:48 [INFO] [stdout] | [INFO] [stdout] 413 | Expr::Number(val) => Ok(Value::Int(val.clone())), [INFO] [stdout] | ^^^^^^^^^^^ help: try dereferencing it: `*val` [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: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/interpreter.rs:327:34 [INFO] [stdout] | [INFO] [stdout] 327 | fn eval_let(&mut self, name: &String, expr: &Expr) -> Result { [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] 327 ~ fn eval_let(&mut self, name: &str, expr: &Expr) -> Result { [INFO] [stdout] 328 | let val = self.eval_expr(expr)?; [INFO] [stdout] 329 | // println!("{}: {}", name, val); [INFO] [stdout] 330 ~ Env::define(Rc::clone(&self.curr_env), name.to_owned(), val); [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/interpreter.rs:334:37 [INFO] [stdout] | [INFO] [stdout] 334 | fn eval_assign(&mut self, name: &String, expr: &Expr) -> Result { [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] 334 ~ fn eval_assign(&mut self, name: &str, expr: &Expr) -> Result { [INFO] [stdout] 335 | let val = self.eval_expr(expr)?; [INFO] [stdout] 336 ~ Env::assign(Rc::clone(&self.curr_env), name.to_owned(), val)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `i32` which implements the `Copy` trait [INFO] [stdout] --> src/interpreter.rs:413:48 [INFO] [stdout] | [INFO] [stdout] 413 | Expr::Number(val) => Ok(Value::Int(val.clone())), [INFO] [stdout] | ^^^^^^^^^^^ help: try dereferencing it: `*val` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:478:25 [INFO] [stdout] | [INFO] [stdout] 478 | self.lookup.get(&op).copied().unwrap() [INFO] [stdout] | ^^^ help: change this to: `op` [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: length comparison to zero [INFO] [stdout] --> src/repl.rs:48:16 [INFO] [stdout] | [INFO] [stdout] 48 | if line.trim().len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `line.trim().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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/repl.rs:59:27 [INFO] [stdout] | [INFO] [stdout] 59 | buff.push_str(&line.trim()); [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `line.trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:478:25 [INFO] [stdout] | [INFO] [stdout] 478 | self.lookup.get(&op).copied().unwrap() [INFO] [stdout] | ^^^ help: change this to: `op` [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: length comparison to zero [INFO] [stdout] --> src/repl.rs:48:16 [INFO] [stdout] | [INFO] [stdout] 48 | if line.trim().len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `line.trim().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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/repl.rs:59:27 [INFO] [stdout] | [INFO] [stdout] 59 | buff.push_str(&line.trim()); [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `line.trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/value.rs:166:30 [INFO] [stdout] | [INFO] [stdout] 166 | Value::Int(n) => !(*n == 0), [INFO] [stdout] | ^^^^^^^^^^ help: try: `(*n != 0)` [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: this boolean expression can be simplified [INFO] [stdout] --> src/value.rs:166:30 [INFO] [stdout] | [INFO] [stdout] 166 | Value::Int(n) => !(*n == 0), [INFO] [stdout] | ^^^^^^^^^^ help: try: `(*n != 0)` [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] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.77s [INFO] running `Command { std: "docker" "inspect" "e19c5f10c163f80798ff3c6adcb0409f247f4b6a0f52be625356e31b3ad310b3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e19c5f10c163f80798ff3c6adcb0409f247f4b6a0f52be625356e31b3ad310b3", kill_on_drop: false }` [INFO] [stdout] e19c5f10c163f80798ff3c6adcb0409f247f4b6a0f52be625356e31b3ad310b3