[INFO] updating cached repository Grissess/RANKS [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/Grissess/RANKS [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/Grissess/RANKS" "work/ex/clippy-test-run/sources/stable/gh/Grissess/RANKS"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/Grissess/RANKS'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/Grissess/RANKS" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Grissess/RANKS"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Grissess/RANKS'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] e48ccf1fdd45751800f4e6e03e06319e6b956b89 [INFO] sha for GitHub repo Grissess/RANKS: e48ccf1fdd45751800f4e6e03e06319e6b956b89 [INFO] validating manifest of Grissess/RANKS 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 Grissess/RANKS 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 Grissess/RANKS [INFO] finished frobbing Grissess/RANKS [INFO] frobbed toml for Grissess/RANKS written to work/ex/clippy-test-run/sources/stable/gh/Grissess/RANKS/Cargo.toml [INFO] started frobbing Grissess/RANKS [INFO] finished frobbing Grissess/RANKS [INFO] frobbed toml for Grissess/RANKS written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Grissess/RANKS/Cargo.toml [INFO] crate Grissess/RANKS 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 Grissess/RANKS 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/Grissess/RANKS:/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] c2bd600b74e5b004578bbd4ca13ac5a77655d04e1a573a10fe88799cdfcf4c07 [INFO] running `"docker" "start" "-a" "c2bd600b74e5b004578bbd4ca13ac5a77655d04e1a573a10fe88799cdfcf4c07"` [INFO] [stderr] Checking RANKS v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/vm.rs:373:24 [INFO] [stderr] | [INFO] [stderr] 373 | StateBuilder { regs: regs, ..self } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `regs` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/vm.rs:400:13 [INFO] [stderr] | [INFO] [stderr] 400 | instrs: instrs, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `instrs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/space.rs:94:16 [INFO] [stderr] | [INFO] [stderr] 94 | AABB { org: org, dim: dim } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `org` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/space.rs:94:26 [INFO] [stderr] | [INFO] [stderr] 94 | AABB { org: org, dim: dim } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `dim` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/space.rs:189:27 [INFO] [stderr] | [INFO] [stderr] 189 | QuadTreeBuilder { bound: bound, max_data: DEFAULT_QUAD_SIZE, p: PhantomData } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `bound` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/space.rs:193:27 [INFO] [stderr] | [INFO] [stderr] 193 | QuadTreeBuilder { max_data: max_data, ..self } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `max_data` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/space.rs:209:13 [INFO] [stderr] | [INFO] [stderr] 209 | bound: bound, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `bound` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/vm.rs:373:24 [INFO] [stderr] | [INFO] [stderr] 373 | StateBuilder { regs: regs, ..self } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `regs` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/vm.rs:400:13 [INFO] [stderr] | [INFO] [stderr] 400 | instrs: instrs, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `instrs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/space.rs:94:16 [INFO] [stderr] | [INFO] [stderr] 94 | AABB { org: org, dim: dim } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `org` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/space.rs:94:26 [INFO] [stderr] | [INFO] [stderr] 94 | AABB { org: org, dim: dim } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `dim` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/space.rs:189:27 [INFO] [stderr] | [INFO] [stderr] 189 | QuadTreeBuilder { bound: bound, max_data: DEFAULT_QUAD_SIZE, p: PhantomData } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `bound` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/space.rs:193:27 [INFO] [stderr] | [INFO] [stderr] 193 | QuadTreeBuilder { max_data: max_data, ..self } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `max_data` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/space.rs:209:13 [INFO] [stderr] | [INFO] [stderr] 209 | bound: bound, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `bound` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unused variable: `world` [INFO] [stderr] --> src/sim.rs:89:24 [INFO] [stderr] | [INFO] [stderr] 89 | fn step(&mut self, world: &World) { [INFO] [stderr] | ^^^^^ help: consider using `_world` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `a` [INFO] [stderr] --> src/sim.rs:202:54 [INFO] [stderr] | [INFO] [stderr] 202 | .fold((0usize, 0usize), |(us, them), (t, a)| if t.borrow().team == tm { (us + 1, them) } else { (us, them + 1) }) [INFO] [stderr] | ^ help: consider using `_a` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `world` [INFO] [stderr] --> src/sim.rs:89:24 [INFO] [stderr] | [INFO] [stderr] 89 | fn step(&mut self, world: &World) { [INFO] [stderr] | ^^^^^ help: consider using `_world` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `a` [INFO] [stderr] --> src/sim.rs:202:54 [INFO] [stderr] | [INFO] [stderr] 202 | .fold((0usize, 0usize), |(us, them), (t, a)| if t.borrow().team == tm { (us + 1, them) } else { (us, them + 1) }) [INFO] [stderr] | ^ help: consider using `_a` instead [INFO] [stderr] [INFO] [stderr] warning: method is never used: `iter` [INFO] [stderr] --> src/space.rs:302:5 [INFO] [stderr] | [INFO] [stderr] 302 | fn iter(&self) -> QuadTreeChildrenIter { self.into_iter() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: crate `RANKS` should have a snake case name such as `ranks` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm.rs:23:24 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn to_integral(&self) -> isize { [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: single-character string constant used as pattern [INFO] [stderr] --> src/vm.rs:73:26 [INFO] [stderr] | [INFO] [stderr] 73 | if s.starts_with("(") { [INFO] [stderr] | ^^^ help: try using a char instead: `'('` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm.rs:106:18 [INFO] [stderr] | [INFO] [stderr] 106 | pub fn apply(&self, left: isize, right: isize) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:107:9 [INFO] [stderr] | [INFO] [stderr] 107 | / match self { [INFO] [stderr] 108 | | &BinOp::Add => Some(left + right), [INFO] [stderr] 109 | | &BinOp::Sub => Some(left - right), [INFO] [stderr] 110 | | &BinOp::Mul => Some(left * right), [INFO] [stderr] 111 | | &BinOp::Div => if right == 0 { None } else { Some(left / right) }, [INFO] [stderr] 112 | | &BinOp::Mod => if right == 0 { None } else { Some(left % right) }, [INFO] [stderr] 113 | | } [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] 107 | match *self { [INFO] [stderr] 108 | BinOp::Add => Some(left + right), [INFO] [stderr] 109 | BinOp::Sub => Some(left - right), [INFO] [stderr] 110 | BinOp::Mul => Some(left * right), [INFO] [stderr] 111 | BinOp::Div => if right == 0 { None } else { Some(left / right) }, [INFO] [stderr] 112 | BinOp::Mod => if right == 0 { None } else { Some(left % right) }, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:158:9 [INFO] [stderr] | [INFO] [stderr] 158 | / match self { [INFO] [stderr] 159 | | &UpCallInstr::None => Some(UpCall::None), [INFO] [stderr] 160 | | &UpCallInstr::Scan => Some(UpCall::Scan), [INFO] [stderr] 161 | | &UpCallInstr::Fire => Some(UpCall::Fire), [INFO] [stderr] ... | [INFO] [stderr] 166 | | _ => None, [INFO] [stderr] 167 | | } [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] 158 | match *self { [INFO] [stderr] 159 | UpCallInstr::None => Some(UpCall::None), [INFO] [stderr] 160 | UpCallInstr::Scan => Some(UpCall::Scan), [INFO] [stderr] 161 | UpCallInstr::Fire => Some(UpCall::Fire), [INFO] [stderr] 162 | UpCallInstr::GPS => Some(UpCall::GPS), [INFO] [stderr] 163 | UpCallInstr::Move => Some(UpCall::Move), [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/vm.rs:192:20 [INFO] [stderr] | [INFO] [stderr] 192 | pub fn compare(&self, left: isize, right: isize) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:193:9 [INFO] [stderr] | [INFO] [stderr] 193 | / match self { [INFO] [stderr] 194 | | &Comparison::Less => left < right, [INFO] [stderr] 195 | | &Comparison::Equal => left == right, [INFO] [stderr] 196 | | } [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] 193 | match *self { [INFO] [stderr] 194 | Comparison::Less => left < right, [INFO] [stderr] 195 | Comparison::Equal => left == right, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/vm.rs:228:66 [INFO] [stderr] | [INFO] [stderr] 228 | pub fn get_using Result>(words: &Vec<&str>, idx: usize, f: &F) -> Result { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[&str]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/vm.rs:229:5 [INFO] [stderr] | [INFO] [stderr] 229 | words.get(idx).map(|&x| x).ok_or_else(|| ParseError::MissingOperand((*words.first().unwrap()).into(), idx)).and_then(f) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `words.get(idx).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/vm.rs:272:62 [INFO] [stderr] | [INFO] [stderr] 272 | isize::from_str_radix(o, 10).map_err(|e| ParseError::BadInt(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ParseError::BadInt` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/vm.rs:277:62 [INFO] [stderr] | [INFO] [stderr] 277 | isize::from_str_radix(o, 10).map_err(|e| ParseError::BadInt(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ParseError::BadInt` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:295:9 [INFO] [stderr] | [INFO] [stderr] 295 | / match v { [INFO] [stderr] 296 | | &Valuant::Target(Target::Reg(reg)) => match reg { [INFO] [stderr] 297 | | Register::A => self.regs.a, [INFO] [stderr] 298 | | Register::B => self.regs.b, [INFO] [stderr] ... | [INFO] [stderr] 303 | | &Valuant::Const(c) => c, [INFO] [stderr] 304 | | } [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] 295 | match *v { [INFO] [stderr] 296 | Valuant::Target(Target::Reg(reg)) => match reg { [INFO] [stderr] 297 | Register::A => self.regs.a, [INFO] [stderr] 298 | Register::B => self.regs.b, [INFO] [stderr] 299 | Register::X => self.evaluate(&Valuant::Target(Target::Mem(self.regs.t as usize))), [INFO] [stderr] 300 | Register::T => if self.regs.t { 1 } else { 0 }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/vm.rs:302:52 [INFO] [stderr] | [INFO] [stderr] 302 | &Valuant::Target(Target::Mem(addr)) => self.mem.get(addr).map(|&x| x).unwrap_or_else(Default::default), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.mem.get(addr).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:308:9 [INFO] [stderr] | [INFO] [stderr] 308 | / match t { [INFO] [stderr] 309 | | &Target::Reg(ref r) => match r { [INFO] [stderr] 310 | | &Register::A => self.regs.a = v, [INFO] [stderr] 311 | | &Register::B => self.regs.b = v, [INFO] [stderr] ... | [INFO] [stderr] 315 | | &Target::Mem(addr) => { self.mem.get_mut(addr).map(|x| *x = v); }, [INFO] [stderr] 316 | | } [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] 308 | match *t { [INFO] [stderr] 309 | Target::Reg(ref r) => match r { [INFO] [stderr] 310 | &Register::A => self.regs.a = v, [INFO] [stderr] 311 | &Register::B => self.regs.b = v, [INFO] [stderr] 312 | &Register::X => self.regs.x = v as usize, [INFO] [stderr] 313 | &Register::T => self.regs.t = v != 0, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:309:36 [INFO] [stderr] | [INFO] [stderr] 309 | &Target::Reg(ref r) => match r { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 310 | | &Register::A => self.regs.a = v, [INFO] [stderr] 311 | | &Register::B => self.regs.b = v, [INFO] [stderr] 312 | | &Register::X => self.regs.x = v as usize, [INFO] [stderr] 313 | | &Register::T => self.regs.t = v != 0, [INFO] [stderr] 314 | | }, [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] 309 | &Target::Reg(ref r) => match *r { [INFO] [stderr] 310 | Register::A => self.regs.a = v, [INFO] [stderr] 311 | Register::B => self.regs.b = v, [INFO] [stderr] 312 | Register::X => self.regs.x = v as usize, [INFO] [stderr] 313 | Register::T => self.regs.t = v != 0, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/vm.rs:315:37 [INFO] [stderr] | [INFO] [stderr] 315 | &Target::Mem(addr) => { self.mem.get_mut(addr).map(|x| *x = v); }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(x) = self.mem.get_mut(addr) { ... }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:320:9 [INFO] [stderr] | [INFO] [stderr] 320 | / match inst { [INFO] [stderr] 321 | | &Instruction::BinOp { ref binop, ref left, ref right, ref dest } => { [INFO] [stderr] 322 | | let lval = self.evaluate(left); [INFO] [stderr] 323 | | let rval = self.evaluate(right); [INFO] [stderr] ... | [INFO] [stderr] 347 | | &Instruction::JumpIfT(d) => (UpCall::None, if self.regs.t { Some(d) } else { None }), [INFO] [stderr] 348 | | } [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] 320 | match *inst { [INFO] [stderr] 321 | Instruction::BinOp { ref binop, ref left, ref right, ref dest } => { [INFO] [stderr] 322 | let lval = self.evaluate(left); [INFO] [stderr] 323 | let rval = self.evaluate(right); [INFO] [stderr] 324 | match binop.apply(lval, rval) { [INFO] [stderr] 325 | None => (UpCall::Explode, None), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:340:25 [INFO] [stderr] | [INFO] [stderr] 340 | None => match uci { [INFO] [stderr] | _________________________^ [INFO] [stderr] 341 | | &UpCallInstr::Aim(ref v) => (UpCall::Aim(self.evaluate(v).into()), None), [INFO] [stderr] 342 | | &UpCallInstr::Turn(ref v) => (UpCall::Turn(self.evaluate(v).into()), None), [INFO] [stderr] 343 | | _ => unreachable!(), [INFO] [stderr] 344 | | }, [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] 340 | None => match *uci { [INFO] [stderr] 341 | UpCallInstr::Aim(ref v) => (UpCall::Aim(self.evaluate(v).into()), None), [INFO] [stderr] 342 | UpCallInstr::Turn(ref v) => (UpCall::Turn(self.evaluate(v).into()), None), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sim.rs:176:36 [INFO] [stderr] | [INFO] [stderr] 176 | if v.iter().filter(|r| match r { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 177 | | &EntityRef::Tank(ref t) => !t.borrow().dead, [INFO] [stderr] 178 | | &EntityRef::Bullet(ref b) => !b.borrow().dead, [INFO] [stderr] 179 | | }).any(|_| true) { [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] 176 | if v.iter().filter(|r| match *r { [INFO] [stderr] 177 | EntityRef::Tank(ref t) => !t.borrow().dead, [INFO] [stderr] 178 | EntityRef::Bullet(ref b) => !b.borrow().dead, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sim.rs:181:21 [INFO] [stderr] | [INFO] [stderr] 181 | / match r { [INFO] [stderr] 182 | | &EntityRef::Tank(ref t) => t.borrow_mut().dead = true, [INFO] [stderr] 183 | | &EntityRef::Bullet(ref b) => b.borrow_mut().dead = true, [INFO] [stderr] 184 | | } [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] 181 | match *r { [INFO] [stderr] 182 | EntityRef::Tank(ref t) => t.borrow_mut().dead = true, [INFO] [stderr] 183 | EntityRef::Bullet(ref b) => b.borrow_mut().dead = true, [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/space.rs:20:16 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn ang(&self) -> f32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/space.rs:29:18 [INFO] [stderr] | [INFO] [stderr] 29 | pub fn limag(&self) -> f32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/space.rs:37:17 [INFO] [stderr] | [INFO] [stderr] 37 | pub fn mins(&self, other: &Pair) -> Pair { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/space.rs:37:31 [INFO] [stderr] | [INFO] [stderr] 37 | pub fn mins(&self, other: &Pair) -> Pair { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Pair` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/space.rs:41:17 [INFO] [stderr] | [INFO] [stderr] 41 | pub fn maxs(&self, other: &Pair) -> Pair { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/space.rs:41:31 [INFO] [stderr] | [INFO] [stderr] 41 | pub fn maxs(&self, other: &Pair) -> Pair { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Pair` [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: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:257:32 [INFO] [stderr] | [INFO] [stderr] 257 | 1 => Some(unsafe { std::intrinsics::transmute(self.val.pp.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*self.val.pp.get()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_ptr_to_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:258:32 [INFO] [stderr] | [INFO] [stderr] 258 | 2 => Some(unsafe { std::intrinsics::transmute(self.val.pn.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*self.val.pn.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:259:32 [INFO] [stderr] | [INFO] [stderr] 259 | 3 => Some(unsafe { std::intrinsics::transmute(self.val.np.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*self.val.np.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:260:32 [INFO] [stderr] | [INFO] [stderr] 260 | 4 => Some(unsafe { std::intrinsics::transmute(self.val.nn.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*self.val.nn.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a mut space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:284:32 [INFO] [stderr] | [INFO] [stderr] 284 | 1 => Some(unsafe { std::intrinsics::transmute(self.val.pp.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&mut *self.val.pp.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a mut space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:285:32 [INFO] [stderr] | [INFO] [stderr] 285 | 2 => Some(unsafe { std::intrinsics::transmute(self.val.pn.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&mut *self.val.pn.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a mut space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:286:32 [INFO] [stderr] | [INFO] [stderr] 286 | 3 => Some(unsafe { std::intrinsics::transmute(self.val.np.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&mut *self.val.np.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a mut space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:287:32 [INFO] [stderr] | [INFO] [stderr] 287 | 4 => Some(unsafe { std::intrinsics::transmute(self.val.nn.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&mut *self.val.nn.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: method is never used: `iter` [INFO] [stderr] --> src/space.rs:302:5 [INFO] [stderr] | [INFO] [stderr] 302 | fn iter(&self) -> QuadTreeChildrenIter { self.into_iter() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: crate `RANKS` should have a snake case name such as `ranks` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm.rs:23:24 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn to_integral(&self) -> isize { [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: single-character string constant used as pattern [INFO] [stderr] --> src/vm.rs:73:26 [INFO] [stderr] | [INFO] [stderr] 73 | if s.starts_with("(") { [INFO] [stderr] | ^^^ help: try using a char instead: `'('` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm.rs:106:18 [INFO] [stderr] | [INFO] [stderr] 106 | pub fn apply(&self, left: isize, right: isize) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:107:9 [INFO] [stderr] | [INFO] [stderr] 107 | / match self { [INFO] [stderr] 108 | | &BinOp::Add => Some(left + right), [INFO] [stderr] 109 | | &BinOp::Sub => Some(left - right), [INFO] [stderr] 110 | | &BinOp::Mul => Some(left * right), [INFO] [stderr] 111 | | &BinOp::Div => if right == 0 { None } else { Some(left / right) }, [INFO] [stderr] 112 | | &BinOp::Mod => if right == 0 { None } else { Some(left % right) }, [INFO] [stderr] 113 | | } [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] 107 | match *self { [INFO] [stderr] 108 | BinOp::Add => Some(left + right), [INFO] [stderr] 109 | BinOp::Sub => Some(left - right), [INFO] [stderr] 110 | BinOp::Mul => Some(left * right), [INFO] [stderr] 111 | BinOp::Div => if right == 0 { None } else { Some(left / right) }, [INFO] [stderr] 112 | BinOp::Mod => if right == 0 { None } else { Some(left % right) }, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:158:9 [INFO] [stderr] | [INFO] [stderr] 158 | / match self { [INFO] [stderr] 159 | | &UpCallInstr::None => Some(UpCall::None), [INFO] [stderr] 160 | | &UpCallInstr::Scan => Some(UpCall::Scan), [INFO] [stderr] 161 | | &UpCallInstr::Fire => Some(UpCall::Fire), [INFO] [stderr] ... | [INFO] [stderr] 166 | | _ => None, [INFO] [stderr] 167 | | } [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] 158 | match *self { [INFO] [stderr] 159 | UpCallInstr::None => Some(UpCall::None), [INFO] [stderr] 160 | UpCallInstr::Scan => Some(UpCall::Scan), [INFO] [stderr] 161 | UpCallInstr::Fire => Some(UpCall::Fire), [INFO] [stderr] 162 | UpCallInstr::GPS => Some(UpCall::GPS), [INFO] [stderr] 163 | UpCallInstr::Move => Some(UpCall::Move), [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/vm.rs:192:20 [INFO] [stderr] | [INFO] [stderr] 192 | pub fn compare(&self, left: isize, right: isize) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:193:9 [INFO] [stderr] | [INFO] [stderr] 193 | / match self { [INFO] [stderr] 194 | | &Comparison::Less => left < right, [INFO] [stderr] 195 | | &Comparison::Equal => left == right, [INFO] [stderr] 196 | | } [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] 193 | match *self { [INFO] [stderr] 194 | Comparison::Less => left < right, [INFO] [stderr] 195 | Comparison::Equal => left == right, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/vm.rs:228:66 [INFO] [stderr] | [INFO] [stderr] 228 | pub fn get_using Result>(words: &Vec<&str>, idx: usize, f: &F) -> Result { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[&str]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/vm.rs:229:5 [INFO] [stderr] | [INFO] [stderr] 229 | words.get(idx).map(|&x| x).ok_or_else(|| ParseError::MissingOperand((*words.first().unwrap()).into(), idx)).and_then(f) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `words.get(idx).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/vm.rs:272:62 [INFO] [stderr] | [INFO] [stderr] 272 | isize::from_str_radix(o, 10).map_err(|e| ParseError::BadInt(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ParseError::BadInt` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/vm.rs:277:62 [INFO] [stderr] | [INFO] [stderr] 277 | isize::from_str_radix(o, 10).map_err(|e| ParseError::BadInt(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ParseError::BadInt` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:295:9 [INFO] [stderr] | [INFO] [stderr] 295 | / match v { [INFO] [stderr] 296 | | &Valuant::Target(Target::Reg(reg)) => match reg { [INFO] [stderr] 297 | | Register::A => self.regs.a, [INFO] [stderr] 298 | | Register::B => self.regs.b, [INFO] [stderr] ... | [INFO] [stderr] 303 | | &Valuant::Const(c) => c, [INFO] [stderr] 304 | | } [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] 295 | match *v { [INFO] [stderr] 296 | Valuant::Target(Target::Reg(reg)) => match reg { [INFO] [stderr] 297 | Register::A => self.regs.a, [INFO] [stderr] 298 | Register::B => self.regs.b, [INFO] [stderr] 299 | Register::X => self.evaluate(&Valuant::Target(Target::Mem(self.regs.t as usize))), [INFO] [stderr] 300 | Register::T => if self.regs.t { 1 } else { 0 }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/vm.rs:302:52 [INFO] [stderr] | [INFO] [stderr] 302 | &Valuant::Target(Target::Mem(addr)) => self.mem.get(addr).map(|&x| x).unwrap_or_else(Default::default), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.mem.get(addr).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:308:9 [INFO] [stderr] | [INFO] [stderr] 308 | / match t { [INFO] [stderr] 309 | | &Target::Reg(ref r) => match r { [INFO] [stderr] 310 | | &Register::A => self.regs.a = v, [INFO] [stderr] 311 | | &Register::B => self.regs.b = v, [INFO] [stderr] ... | [INFO] [stderr] 315 | | &Target::Mem(addr) => { self.mem.get_mut(addr).map(|x| *x = v); }, [INFO] [stderr] 316 | | } [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] 308 | match *t { [INFO] [stderr] 309 | Target::Reg(ref r) => match r { [INFO] [stderr] 310 | &Register::A => self.regs.a = v, [INFO] [stderr] 311 | &Register::B => self.regs.b = v, [INFO] [stderr] 312 | &Register::X => self.regs.x = v as usize, [INFO] [stderr] 313 | &Register::T => self.regs.t = v != 0, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:309:36 [INFO] [stderr] | [INFO] [stderr] 309 | &Target::Reg(ref r) => match r { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 310 | | &Register::A => self.regs.a = v, [INFO] [stderr] 311 | | &Register::B => self.regs.b = v, [INFO] [stderr] 312 | | &Register::X => self.regs.x = v as usize, [INFO] [stderr] 313 | | &Register::T => self.regs.t = v != 0, [INFO] [stderr] 314 | | }, [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] 309 | &Target::Reg(ref r) => match *r { [INFO] [stderr] 310 | Register::A => self.regs.a = v, [INFO] [stderr] 311 | Register::B => self.regs.b = v, [INFO] [stderr] 312 | Register::X => self.regs.x = v as usize, [INFO] [stderr] 313 | Register::T => self.regs.t = v != 0, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/vm.rs:315:37 [INFO] [stderr] | [INFO] [stderr] 315 | &Target::Mem(addr) => { self.mem.get_mut(addr).map(|x| *x = v); }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(x) = self.mem.get_mut(addr) { ... }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:320:9 [INFO] [stderr] | [INFO] [stderr] 320 | / match inst { [INFO] [stderr] 321 | | &Instruction::BinOp { ref binop, ref left, ref right, ref dest } => { [INFO] [stderr] 322 | | let lval = self.evaluate(left); [INFO] [stderr] 323 | | let rval = self.evaluate(right); [INFO] [stderr] ... | [INFO] [stderr] 347 | | &Instruction::JumpIfT(d) => (UpCall::None, if self.regs.t { Some(d) } else { None }), [INFO] [stderr] 348 | | } [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] 320 | match *inst { [INFO] [stderr] 321 | Instruction::BinOp { ref binop, ref left, ref right, ref dest } => { [INFO] [stderr] 322 | let lval = self.evaluate(left); [INFO] [stderr] 323 | let rval = self.evaluate(right); [INFO] [stderr] 324 | match binop.apply(lval, rval) { [INFO] [stderr] 325 | None => (UpCall::Explode, None), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm.rs:340:25 [INFO] [stderr] | [INFO] [stderr] 340 | None => match uci { [INFO] [stderr] | _________________________^ [INFO] [stderr] 341 | | &UpCallInstr::Aim(ref v) => (UpCall::Aim(self.evaluate(v).into()), None), [INFO] [stderr] 342 | | &UpCallInstr::Turn(ref v) => (UpCall::Turn(self.evaluate(v).into()), None), [INFO] [stderr] 343 | | _ => unreachable!(), [INFO] [stderr] 344 | | }, [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] 340 | None => match *uci { [INFO] [stderr] 341 | UpCallInstr::Aim(ref v) => (UpCall::Aim(self.evaluate(v).into()), None), [INFO] [stderr] 342 | UpCallInstr::Turn(ref v) => (UpCall::Turn(self.evaluate(v).into()), None), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sim.rs:176:36 [INFO] [stderr] | [INFO] [stderr] 176 | if v.iter().filter(|r| match r { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 177 | | &EntityRef::Tank(ref t) => !t.borrow().dead, [INFO] [stderr] 178 | | &EntityRef::Bullet(ref b) => !b.borrow().dead, [INFO] [stderr] 179 | | }).any(|_| true) { [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] 176 | if v.iter().filter(|r| match *r { [INFO] [stderr] 177 | EntityRef::Tank(ref t) => !t.borrow().dead, [INFO] [stderr] 178 | EntityRef::Bullet(ref b) => !b.borrow().dead, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sim.rs:181:21 [INFO] [stderr] | [INFO] [stderr] 181 | / match r { [INFO] [stderr] 182 | | &EntityRef::Tank(ref t) => t.borrow_mut().dead = true, [INFO] [stderr] 183 | | &EntityRef::Bullet(ref b) => b.borrow_mut().dead = true, [INFO] [stderr] 184 | | } [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] 181 | match *r { [INFO] [stderr] 182 | EntityRef::Tank(ref t) => t.borrow_mut().dead = true, [INFO] [stderr] 183 | EntityRef::Bullet(ref b) => b.borrow_mut().dead = true, [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/space.rs:20:16 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn ang(&self) -> f32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/space.rs:29:18 [INFO] [stderr] | [INFO] [stderr] 29 | pub fn limag(&self) -> f32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/space.rs:37:17 [INFO] [stderr] | [INFO] [stderr] 37 | pub fn mins(&self, other: &Pair) -> Pair { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/space.rs:37:31 [INFO] [stderr] | [INFO] [stderr] 37 | pub fn mins(&self, other: &Pair) -> Pair { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Pair` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/space.rs:41:17 [INFO] [stderr] | [INFO] [stderr] 41 | pub fn maxs(&self, other: &Pair) -> Pair { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/space.rs:41:31 [INFO] [stderr] | [INFO] [stderr] 41 | pub fn maxs(&self, other: &Pair) -> Pair { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Pair` [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: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:257:32 [INFO] [stderr] | [INFO] [stderr] 257 | 1 => Some(unsafe { std::intrinsics::transmute(self.val.pp.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*self.val.pp.get()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_ptr_to_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:258:32 [INFO] [stderr] | [INFO] [stderr] 258 | 2 => Some(unsafe { std::intrinsics::transmute(self.val.pn.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*self.val.pn.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:259:32 [INFO] [stderr] | [INFO] [stderr] 259 | 3 => Some(unsafe { std::intrinsics::transmute(self.val.np.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*self.val.np.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:260:32 [INFO] [stderr] | [INFO] [stderr] 260 | 4 => Some(unsafe { std::intrinsics::transmute(self.val.nn.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*self.val.nn.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a mut space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:284:32 [INFO] [stderr] | [INFO] [stderr] 284 | 1 => Some(unsafe { std::intrinsics::transmute(self.val.pp.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&mut *self.val.pp.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a mut space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:285:32 [INFO] [stderr] | [INFO] [stderr] 285 | 2 => Some(unsafe { std::intrinsics::transmute(self.val.pn.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&mut *self.val.pn.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a mut space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:286:32 [INFO] [stderr] | [INFO] [stderr] 286 | 3 => Some(unsafe { std::intrinsics::transmute(self.val.np.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&mut *self.val.np.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer type (`*mut space::QuadTreeNode`) to a reference type (`&'a mut space::QuadTreeNode`) [INFO] [stderr] --> src/space.rs:287:32 [INFO] [stderr] | [INFO] [stderr] 287 | 4 => Some(unsafe { std::intrinsics::transmute(self.val.nn.get()) }), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&mut *self.val.nn.get()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ref [INFO] [stderr] [INFO] [stderr] warning: unused import: `World` [INFO] [stderr] --> src/main.rs:7:18 [INFO] [stderr] | [INFO] [stderr] 7 | use RANKS::sim::{World, Configuration, Tank, Team}; [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/main.rs:35:9 [INFO] [stderr] | [INFO] [stderr] 35 | for i in 0..10 { [INFO] [stderr] | ^ help: consider using `_i` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: crate `RANKS` should have a snake case name such as `ranks` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant `world_size` should have an upper case name such as `WORLD_SIZE` [INFO] [stderr] --> src/main.rs:10:1 [INFO] [stderr] | [INFO] [stderr] 10 | const world_size: usize = 500; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_upper_case_globals)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `World` [INFO] [stderr] --> src/main.rs:7:18 [INFO] [stderr] | [INFO] [stderr] 7 | use RANKS::sim::{World, Configuration, Tank, Team}; [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/main.rs:35:9 [INFO] [stderr] | [INFO] [stderr] 35 | for i in 0..10 { [INFO] [stderr] | ^ help: consider using `_i` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: crate `RANKS` should have a snake case name such as `ranks` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant `world_size` should have an upper case name such as `WORLD_SIZE` [INFO] [stderr] --> src/main.rs:10:1 [INFO] [stderr] | [INFO] [stderr] 10 | const world_size: usize = 500; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_upper_case_globals)] on by default [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 2.60s [INFO] running `"docker" "inspect" "c2bd600b74e5b004578bbd4ca13ac5a77655d04e1a573a10fe88799cdfcf4c07"` [INFO] running `"docker" "rm" "-f" "c2bd600b74e5b004578bbd4ca13ac5a77655d04e1a573a10fe88799cdfcf4c07"` [INFO] [stdout] c2bd600b74e5b004578bbd4ca13ac5a77655d04e1a573a10fe88799cdfcf4c07