[INFO] updating cached repository jstnlef/rlox [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/jstnlef/rlox [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/jstnlef/rlox" "work/ex/clippy-test-run/sources/stable/gh/jstnlef/rlox"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/jstnlef/rlox'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/jstnlef/rlox" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/jstnlef/rlox"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/jstnlef/rlox'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 5b2539933766d572a8c9398610d36cf33d64e0bf [INFO] sha for GitHub repo jstnlef/rlox: 5b2539933766d572a8c9398610d36cf33d64e0bf [INFO] validating manifest of jstnlef/rlox on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of jstnlef/rlox on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing jstnlef/rlox [INFO] finished frobbing jstnlef/rlox [INFO] frobbed toml for jstnlef/rlox written to work/ex/clippy-test-run/sources/stable/gh/jstnlef/rlox/Cargo.toml [INFO] started frobbing jstnlef/rlox [INFO] finished frobbing jstnlef/rlox [INFO] frobbed toml for jstnlef/rlox written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/jstnlef/rlox/Cargo.toml [INFO] crate jstnlef/rlox has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting jstnlef/rlox against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/jstnlef/rlox:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] f908eba1bb980d75b47bb4ffb39498e7c3298cf305e7eba55207f839f4015304 [INFO] running `"docker" "start" "-a" "f908eba1bb980d75b47bb4ffb39498e7c3298cf305e7eba55207f839f4015304"` [INFO] [stderr] Checking rlox v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/parser/mod.rs:3:1 [INFO] [stderr] | [INFO] [stderr] 3 | pub mod parser; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/environment.rs:39:16 [INFO] [stderr] | [INFO] [stderr] 39 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 40 | | if let Some(ref enclosing_env) = self.enclosing { [INFO] [stderr] 41 | | enclosing_env.assign(name, value) [INFO] [stderr] 42 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 47 | | } [INFO] [stderr] 48 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 39 | } else if let Some(ref enclosing_env) = self.enclosing { [INFO] [stderr] 40 | enclosing_env.assign(name, value) [INFO] [stderr] 41 | } else { [INFO] [stderr] 42 | Err(RuntimeError::new( [INFO] [stderr] 43 | name, [INFO] [stderr] 44 | &format!("Undefined variable '{}'.", name.lexeme), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/interpreter.rs:109:24 [INFO] [stderr] | [INFO] [stderr] 109 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 110 | | if !left.is_truthy() { [INFO] [stderr] 111 | | return Ok(left); [INFO] [stderr] 112 | | } [INFO] [stderr] 113 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 109 | } else if !left.is_truthy() { [INFO] [stderr] 110 | return Ok(left); [INFO] [stderr] 111 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/parser/mod.rs:3:1 [INFO] [stderr] | [INFO] [stderr] 3 | pub mod parser; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/environment.rs:39:16 [INFO] [stderr] | [INFO] [stderr] 39 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 40 | | if let Some(ref enclosing_env) = self.enclosing { [INFO] [stderr] 41 | | enclosing_env.assign(name, value) [INFO] [stderr] 42 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 47 | | } [INFO] [stderr] 48 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 39 | } else if let Some(ref enclosing_env) = self.enclosing { [INFO] [stderr] 40 | enclosing_env.assign(name, value) [INFO] [stderr] 41 | } else { [INFO] [stderr] 42 | Err(RuntimeError::new( [INFO] [stderr] 43 | name, [INFO] [stderr] 44 | &format!("Undefined variable '{}'.", name.lexeme), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/interpreter.rs:109:24 [INFO] [stderr] | [INFO] [stderr] 109 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 110 | | if !left.is_truthy() { [INFO] [stderr] 111 | | return Ok(left); [INFO] [stderr] 112 | | } [INFO] [stderr] 113 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 109 | } else if !left.is_truthy() { [INFO] [stderr] 110 | return Ok(left); [INFO] [stderr] 111 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused import: `Callable` [INFO] [stderr] --> src/interpreter.rs:5:29 [INFO] [stderr] | [INFO] [stderr] 5 | use lox_object::{LoxObject, Callable}; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `interpreter` [INFO] [stderr] --> src/native_functions.rs:13:20 [INFO] [stderr] | [INFO] [stderr] 13 | fn call(&self, interpreter: &mut Interpreter, arguments: &[LoxObject]) -> RuntimeResult { [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_interpreter` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `Callable` [INFO] [stderr] --> src/interpreter.rs:5:29 [INFO] [stderr] | [INFO] [stderr] 5 | use lox_object::{LoxObject, Callable}; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] warning: unused variable: `arguments` [INFO] [stderr] --> src/native_functions.rs:13:51 [INFO] [stderr] | [INFO] [stderr] 13 | fn call(&self, interpreter: &mut Interpreter, arguments: &[LoxObject]) -> RuntimeResult { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_arguments` instead [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `interpreter` [INFO] [stderr] --> src/native_functions.rs:13:20 [INFO] [stderr] | [INFO] [stderr] 13 | fn call(&self, interpreter: &mut Interpreter, arguments: &[LoxObject]) -> RuntimeResult { [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_interpreter` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `arguments` [INFO] [stderr] --> src/native_functions.rs:13:51 [INFO] [stderr] | [INFO] [stderr] 13 | fn call(&self, interpreter: &mut Interpreter, arguments: &[LoxObject]) -> RuntimeResult { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_arguments` instead [INFO] [stderr] [INFO] [stderr] warning: method is never used: `line_error` [INFO] [stderr] --> src/lox.rs:78:5 [INFO] [stderr] | [INFO] [stderr] 78 | fn line_error(&mut self, line: i32, message: &str) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: field is never used: `line` [INFO] [stderr] --> src/scanner.rs:325:5 [INFO] [stderr] | [INFO] [stderr] 325 | line: i32, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `message` [INFO] [stderr] --> src/scanner.rs:326:5 [INFO] [stderr] | [INFO] [stderr] 326 | message: String, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `globals` [INFO] [stderr] --> src/interpreter.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | globals: Rc, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/scanner.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | / match self.scan_token() { [INFO] [stderr] 29 | | Ok(token) => { [INFO] [stderr] 30 | | if !token.token_type.is_ignored() { [INFO] [stderr] 31 | | self.tokens.push(token); [INFO] [stderr] ... | [INFO] [stderr] 34 | | Err(_) => {} [INFO] [stderr] 35 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 28 | if let Ok(token) = self.scan_token() { [INFO] [stderr] 29 | if !token.token_type.is_ignored() { [INFO] [stderr] 30 | self.tokens.push(token); [INFO] [stderr] 31 | } [INFO] [stderr] 32 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/scanner.rs:291:19 [INFO] [stderr] | [INFO] [stderr] 291 | fn is_ignored(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/scanner.rs:306:26 [INFO] [stderr] | [INFO] [stderr] 306 | pub fn to_lox_object(self) -> LoxObject { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/parser/ast.rs:19:36 [INFO] [stderr] | [INFO] [stderr] 19 | fn visit_expr(&mut self, expr: &Box) -> E; [INFO] [stderr] | ^^^^^^^^^^ help: try: `&Expr` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/parser/ast.rs:32:36 [INFO] [stderr] | [INFO] [stderr] 32 | fn visit_stmt(&mut self, stmt: &Box) -> E; [INFO] [stderr] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/parser/parser.rs:56:9 [INFO] [stderr] | [INFO] [stderr] 56 | / let mut initializer = Box::new(Expr::Literal(Literal::Nil)); [INFO] [stderr] 57 | | if self.match_token(&[TokenType::EQUAL]) { [INFO] [stderr] 58 | | initializer = self.expression()?; [INFO] [stderr] 59 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let initializer = if self.match_token(&[TokenType::EQUAL]) { self.expression()? } else { Box::new(Expr::Literal(Literal::Nil)) };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: method is never used: `line_error` [INFO] [stderr] --> src/lox.rs:78:5 [INFO] [stderr] | [INFO] [stderr] 78 | fn line_error(&mut self, line: i32, message: &str) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: field is never used: `line` [INFO] [stderr] --> src/scanner.rs:325:5 [INFO] [stderr] | [INFO] [stderr] 325 | line: i32, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `message` [INFO] [stderr] --> src/scanner.rs:326:5 [INFO] [stderr] | [INFO] [stderr] 326 | message: String, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `globals` [INFO] [stderr] --> src/interpreter.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | globals: Rc, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/scanner.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | / match self.scan_token() { [INFO] [stderr] 29 | | Ok(token) => { [INFO] [stderr] 30 | | if !token.token_type.is_ignored() { [INFO] [stderr] 31 | | self.tokens.push(token); [INFO] [stderr] ... | [INFO] [stderr] 34 | | Err(_) => {} [INFO] [stderr] 35 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 28 | if let Ok(token) = self.scan_token() { [INFO] [stderr] 29 | if !token.token_type.is_ignored() { [INFO] [stderr] 30 | self.tokens.push(token); [INFO] [stderr] 31 | } [INFO] [stderr] 32 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/parser/parser.rs:347:37 [INFO] [stderr] | [INFO] [stderr] 347 | fn check(&mut self, token_type: &TokenType) -> bool { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `TokenType` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/parser/parser.rs:366:9 [INFO] [stderr] | [INFO] [stderr] 366 | self.tokens.get(self.current).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.tokens[self.current]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/parser/parser.rs:370:9 [INFO] [stderr] | [INFO] [stderr] 370 | self.tokens.get(self.current - 1).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.tokens[self.current - 1]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/interpreter.rs:33:33 [INFO] [stderr] | [INFO] [stderr] 33 | fn execute(&mut self, stmt: &Box) -> RuntimeResult<()> { [INFO] [stderr] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/interpreter.rs:37:34 [INFO] [stderr] | [INFO] [stderr] 37 | fn evaluate(&mut self, expr: &Box) -> RuntimeResult { [INFO] [stderr] | ^^^^^^^^^^ help: try: `&Expr` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/scanner.rs:291:19 [INFO] [stderr] | [INFO] [stderr] 291 | fn is_ignored(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/scanner.rs:306:26 [INFO] [stderr] | [INFO] [stderr] 306 | pub fn to_lox_object(self) -> LoxObject { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lox_object.rs:16:9 [INFO] [stderr] | [INFO] [stderr] 16 | / match self { [INFO] [stderr] 17 | | &LoxObject::Literal(ref literal) => match *literal { [INFO] [stderr] 18 | | Literal::Nil => false, [INFO] [stderr] 19 | | Literal::Boolean(b) => b, [INFO] [stderr] ... | [INFO] [stderr] 22 | | _ => false [INFO] [stderr] 23 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 16 | match *self { [INFO] [stderr] 17 | LoxObject::Literal(ref literal) => match *literal { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lox_object.rs:38:9 [INFO] [stderr] | [INFO] [stderr] 38 | / match self { [INFO] [stderr] 39 | | &LoxObject::Literal(ref literal) => write!(f, "{}", literal), [INFO] [stderr] 40 | | &LoxObject::Function(_) => write!(f, "") [INFO] [stderr] 41 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 38 | match *self { [INFO] [stderr] 39 | LoxObject::Literal(ref literal) => write!(f, "{}", literal), [INFO] [stderr] 40 | LoxObject::Function(_) => write!(f, "") [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/native_functions.rs:16:52 [INFO] [stderr] | [INFO] [stderr] 16 | let ms: f64 = dur.as_secs() as f64 * 1e3 + dur.subsec_nanos() as f64 / 1e6; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(dur.subsec_nanos())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/main.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | let ref program_name = args[0]; [INFO] [stderr] | ----^^^^^^^^^^^^^^^^----------- help: try: `let program_name = &args[0];` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/parser/ast.rs:19:36 [INFO] [stderr] | [INFO] [stderr] 19 | fn visit_expr(&mut self, expr: &Box) -> E; [INFO] [stderr] | ^^^^^^^^^^ help: try: `&Expr` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/parser/ast.rs:32:36 [INFO] [stderr] | [INFO] [stderr] 32 | fn visit_stmt(&mut self, stmt: &Box) -> E; [INFO] [stderr] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/parser/parser.rs:56:9 [INFO] [stderr] | [INFO] [stderr] 56 | / let mut initializer = Box::new(Expr::Literal(Literal::Nil)); [INFO] [stderr] 57 | | if self.match_token(&[TokenType::EQUAL]) { [INFO] [stderr] 58 | | initializer = self.expression()?; [INFO] [stderr] 59 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let initializer = if self.match_token(&[TokenType::EQUAL]) { self.expression()? } else { Box::new(Expr::Literal(Literal::Nil)) };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/parser/parser.rs:347:37 [INFO] [stderr] | [INFO] [stderr] 347 | fn check(&mut self, token_type: &TokenType) -> bool { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `TokenType` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/parser/parser.rs:366:9 [INFO] [stderr] | [INFO] [stderr] 366 | self.tokens.get(self.current).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.tokens[self.current]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/parser/parser.rs:370:9 [INFO] [stderr] | [INFO] [stderr] 370 | self.tokens.get(self.current - 1).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.tokens[self.current - 1]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/interpreter.rs:33:33 [INFO] [stderr] | [INFO] [stderr] 33 | fn execute(&mut self, stmt: &Box) -> RuntimeResult<()> { [INFO] [stderr] | ^^^^^^^^^^ help: try: `&Stmt` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/interpreter.rs:37:34 [INFO] [stderr] | [INFO] [stderr] 37 | fn evaluate(&mut self, expr: &Box) -> RuntimeResult { [INFO] [stderr] | ^^^^^^^^^^ help: try: `&Expr` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lox_object.rs:16:9 [INFO] [stderr] | [INFO] [stderr] 16 | / match self { [INFO] [stderr] 17 | | &LoxObject::Literal(ref literal) => match *literal { [INFO] [stderr] 18 | | Literal::Nil => false, [INFO] [stderr] 19 | | Literal::Boolean(b) => b, [INFO] [stderr] ... | [INFO] [stderr] 22 | | _ => false [INFO] [stderr] 23 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 16 | match *self { [INFO] [stderr] 17 | LoxObject::Literal(ref literal) => match *literal { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lox_object.rs:38:9 [INFO] [stderr] | [INFO] [stderr] 38 | / match self { [INFO] [stderr] 39 | | &LoxObject::Literal(ref literal) => write!(f, "{}", literal), [INFO] [stderr] 40 | | &LoxObject::Function(_) => write!(f, "") [INFO] [stderr] 41 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 38 | match *self { [INFO] [stderr] 39 | LoxObject::Literal(ref literal) => write!(f, "{}", literal), [INFO] [stderr] 40 | LoxObject::Function(_) => write!(f, "") [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/native_functions.rs:16:52 [INFO] [stderr] | [INFO] [stderr] 16 | let ms: f64 = dur.as_secs() as f64 * 1e3 + dur.subsec_nanos() as f64 / 1e6; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(dur.subsec_nanos())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/main.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | let ref program_name = args[0]; [INFO] [stderr] | ----^^^^^^^^^^^^^^^^----------- help: try: `let program_name = &args[0];` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1.49s [INFO] running `"docker" "inspect" "f908eba1bb980d75b47bb4ffb39498e7c3298cf305e7eba55207f839f4015304"` [INFO] running `"docker" "rm" "-f" "f908eba1bb980d75b47bb4ffb39498e7c3298cf305e7eba55207f839f4015304"` [INFO] [stdout] f908eba1bb980d75b47bb4ffb39498e7c3298cf305e7eba55207f839f4015304