[INFO] updating cached repository sirkibsirkib/spellcraft [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/sirkibsirkib/spellcraft [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/sirkibsirkib/spellcraft" "work/ex/clippy-test-run/sources/stable/gh/sirkibsirkib/spellcraft"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/sirkibsirkib/spellcraft'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/sirkibsirkib/spellcraft" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/sirkibsirkib/spellcraft"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/sirkibsirkib/spellcraft'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 39a266c75c9737d8e59e445ee390b8c1377e07d1 [INFO] sha for GitHub repo sirkibsirkib/spellcraft: 39a266c75c9737d8e59e445ee390b8c1377e07d1 [INFO] validating manifest of sirkibsirkib/spellcraft 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 sirkibsirkib/spellcraft 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 sirkibsirkib/spellcraft [INFO] finished frobbing sirkibsirkib/spellcraft [INFO] frobbed toml for sirkibsirkib/spellcraft written to work/ex/clippy-test-run/sources/stable/gh/sirkibsirkib/spellcraft/Cargo.toml [INFO] started frobbing sirkibsirkib/spellcraft [INFO] finished frobbing sirkibsirkib/spellcraft [INFO] frobbed toml for sirkibsirkib/spellcraft written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/sirkibsirkib/spellcraft/Cargo.toml [INFO] crate sirkibsirkib/spellcraft 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 sirkibsirkib/spellcraft against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/sirkibsirkib/spellcraft:/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] 4025beb865f66d7141d145c7339689ce0923bd763e7807f0ecf1626de182399b [INFO] running `"docker" "start" "-a" "4025beb865f66d7141d145c7339689ce0923bd763e7807f0ecf1626de182399b"` [INFO] [stderr] Compiling num-traits v0.1.42 [INFO] [stderr] Checking shader_version v0.2.2 [INFO] [stderr] Compiling rand v0.3.20 [INFO] [stderr] Checking stb_truetype v0.2.1 [INFO] [stderr] Checking rayon-core v1.3.0 [INFO] [stderr] Checking tempfile v2.2.0 [INFO] [stderr] Checking piston2d-graphics v0.21.1 [INFO] [stderr] Compiling gl_generator v0.7.0 [INFO] [stderr] Compiling gl_generator v0.5.5 [INFO] [stderr] Compiling gl_generator v0.6.1 [INFO] [stderr] Checking gfx_core v0.7.2 [INFO] [stderr] Checking png v0.9.0 [INFO] [stderr] Checking fs2 v0.2.5 [INFO] [stderr] Checking rusttype v0.2.3 [INFO] [stderr] Checking rayon v0.8.2 [INFO] [stderr] Checking memmap v0.4.0 [INFO] [stderr] Compiling serde_json v0.9.10 [INFO] [stderr] Checking pistoncore-input v0.19.0 [INFO] [stderr] Compiling phf_generator v0.7.21 [INFO] [stderr] Compiling glutin v0.9.2 [INFO] [stderr] Compiling gl v0.6.5 [INFO] [stderr] Compiling gfx_gl v0.4.0 [INFO] [stderr] Compiling phf_codegen v0.7.21 [INFO] [stderr] Compiling target_build_utils v0.3.1 [INFO] [stderr] Checking jpeg-decoder v0.1.13 [INFO] [stderr] Checking image v0.15.0 [INFO] [stderr] Checking pistoncore-window v0.28.0 [INFO] [stderr] Checking pistoncore-event_loop v0.33.0 [INFO] [stderr] Checking piston v0.33.0 [INFO] [stderr] Compiling libloading v0.3.4 [INFO] [stderr] Checking dlib v0.3.1 [INFO] [stderr] Checking wayland-sys v0.9.10 [INFO] [stderr] Checking wayland-client v0.9.10 [INFO] [stderr] Checking wayland-protocols v0.9.10 [INFO] [stderr] Checking wayland-kbd v0.9.1 [INFO] [stderr] Checking wayland-window v0.7.0 [INFO] [stderr] Checking winit v0.7.6 [INFO] [stderr] Checking gfx v0.16.3 [INFO] [stderr] Checking gfx_device_gl v0.14.6 [INFO] [stderr] Checking pistoncore-glutin_window v0.39.1 [INFO] [stderr] Checking piston-gfx_texture v0.26.0 [INFO] [stderr] Checking piston2d-gfx_graphics v0.43.0 [INFO] [stderr] Checking piston_window v0.70.0 [INFO] [stderr] Checking spellcraft v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/play.rs:139:13 [INFO] [stderr] | [INFO] [stderr] 139 | caster: caster, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `caster` [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/play.rs:750:13 [INFO] [stderr] | [INFO] [stderr] 750 | health_max: health_max, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `health_max` [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/play.rs:752:13 [INFO] [stderr] | [INFO] [stderr] 752 | mana_max: mana_max, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `mana_max` [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/movement_2d.rs:31:18 [INFO] [stderr] | [INFO] [stderr] 31 | Vector { x:x, y:y } [INFO] [stderr] | ^^^ help: replace it with: `x` [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/movement_2d.rs:31:23 [INFO] [stderr] | [INFO] [stderr] 31 | Vector { x:x, y:y } [INFO] [stderr] | ^^^ help: replace it with: `y` [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/wasd_set.rs:39:61 [INFO] [stderr] | [INFO] [stderr] 39 | w:Released, a:Released, s:Released, d:Released, antagonistic: antagonistic, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `antagonistic` [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/play.rs:139:13 [INFO] [stderr] | [INFO] [stderr] 139 | caster: caster, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `caster` [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/play.rs:750:13 [INFO] [stderr] | [INFO] [stderr] 750 | health_max: health_max, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `health_max` [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/play.rs:752:13 [INFO] [stderr] | [INFO] [stderr] 752 | mana_max: mana_max, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `mana_max` [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/movement_2d.rs:31:18 [INFO] [stderr] | [INFO] [stderr] 31 | Vector { x:x, y:y } [INFO] [stderr] | ^^^ help: replace it with: `x` [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/movement_2d.rs:31:23 [INFO] [stderr] | [INFO] [stderr] 31 | Vector { x:x, y:y } [INFO] [stderr] | ^^^ help: replace it with: `y` [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/wasd_set.rs:39:61 [INFO] [stderr] | [INFO] [stderr] 39 | w:Released, a:Released, s:Released, d:Released, antagonistic: antagonistic, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `antagonistic` [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 import: `HashSet` [INFO] [stderr] --> src/play.rs:1:34 [INFO] [stderr] | [INFO] [stderr] 1 | use ::std::collections::{HashMap,HashSet}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `SeedableRng` [INFO] [stderr] --> src/play.rs:5:27 [INFO] [stderr] | [INFO] [stderr] 5 | use rand::{Rng,Isaac64Rng,SeedableRng}; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: Creating a reference that is immediately dereferenced. [INFO] [stderr] --> src/play.rs:136:73 [INFO] [stderr] | [INFO] [stderr] 136 | let lifetime = self.eval_discrete(&mut self.rng.clone(), &ctx, &(&bp).lifetime) as f32; [INFO] [stderr] | ^^^^^ help: try this: `bp.lifetime` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ref_in_deref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ref_in_deref [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/generate.rs:392:12 [INFO] [stderr] | [INFO] [stderr] 392 | } else { [INFO] [stderr] | ____________^ [INFO] [stderr] 393 | | if rng.gen() { [INFO] [stderr] 394 | | Choose(vec_direction(rng, counter, depth_left-1, slots)) [INFO] [stderr] 395 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 400 | | } [INFO] [stderr] 401 | | } [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] 392 | } else if rng.gen() { [INFO] [stderr] 393 | Choose(vec_direction(rng, counter, depth_left-1, slots)) [INFO] [stderr] 394 | } else { [INFO] [stderr] 395 | ChooseWithinRadOf( [INFO] [stderr] 396 | Box::new(direction(rng, counter, depth_left-1, slots)), [INFO] [stderr] 397 | F32(rng.gen::() * 3.0 - 1.5), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/generate.rs:559:30 [INFO] [stderr] | [INFO] [stderr] 559 | if z == 0.0 {0.000001} else {z} [INFO] [stderr] | ^^^^^^^^ help: consider: `0.000_001` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused import: `self::Setting::*` [INFO] [stderr] --> src/wasd_set.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | use self::Setting::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `HashSet` [INFO] [stderr] --> src/play.rs:1:34 [INFO] [stderr] | [INFO] [stderr] 1 | use ::std::collections::{HashMap,HashSet}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `SeedableRng` [INFO] [stderr] --> src/play.rs:5:27 [INFO] [stderr] | [INFO] [stderr] 5 | use rand::{Rng,Isaac64Rng,SeedableRng}; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: Creating a reference that is immediately dereferenced. [INFO] [stderr] --> src/play.rs:136:73 [INFO] [stderr] | [INFO] [stderr] 136 | let lifetime = self.eval_discrete(&mut self.rng.clone(), &ctx, &(&bp).lifetime) as f32; [INFO] [stderr] | ^^^^^ help: try this: `bp.lifetime` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ref_in_deref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ref_in_deref [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/generate.rs:392:12 [INFO] [stderr] | [INFO] [stderr] 392 | } else { [INFO] [stderr] | ____________^ [INFO] [stderr] 393 | | if rng.gen() { [INFO] [stderr] 394 | | Choose(vec_direction(rng, counter, depth_left-1, slots)) [INFO] [stderr] 395 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 400 | | } [INFO] [stderr] 401 | | } [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] 392 | } else if rng.gen() { [INFO] [stderr] 393 | Choose(vec_direction(rng, counter, depth_left-1, slots)) [INFO] [stderr] 394 | } else { [INFO] [stderr] 395 | ChooseWithinRadOf( [INFO] [stderr] 396 | Box::new(direction(rng, counter, depth_left-1, slots)), [INFO] [stderr] 397 | F32(rng.gen::() * 3.0 - 1.5), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/generate.rs:559:30 [INFO] [stderr] | [INFO] [stderr] 559 | if z == 0.0 {0.000001} else {z} [INFO] [stderr] | ^^^^^^^^ help: consider: `0.000_001` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused import: `self::Setting::*` [INFO] [stderr] --> src/wasd_set.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | use self::Setting::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: private type `play::ConcreteResource` in public interface (error E0446) [INFO] [stderr] --> src/play.rs:765:5 [INFO] [stderr] | [INFO] [stderr] 765 | / pub fn try_remove_resources(&mut self, r_left: &[ConcreteResource]) -> bool { [INFO] [stderr] 766 | | let mut total_mana = 0; [INFO] [stderr] 767 | | let mut total_health = 0; [INFO] [stderr] 768 | | let mut total_buffs = HashMap::new(); [INFO] [stderr] ... | [INFO] [stderr] 802 | | } else { false } [INFO] [stderr] 803 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(private_in_public)] on by default [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #34537 [INFO] [stderr] [INFO] [stderr] warning: value assigned to `screen_pt` is never read [INFO] [stderr] --> src/play.rs:887:13 [INFO] [stderr] | [INFO] [stderr] 887 | let mut screen_pt: [f64;2] = [0., 0.]; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `x` [INFO] [stderr] --> src/play.rs:963:17 [INFO] [stderr] | [INFO] [stderr] 963 | x => (),//TODO [INFO] [stderr] | ^ help: consider using `_x` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `x` [INFO] [stderr] --> src/play.rs:973:17 [INFO] [stderr] | [INFO] [stderr] 973 | x => (),//TODO [INFO] [stderr] | ^ help: consider using `_x` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `tok` [INFO] [stderr] --> src/play.rs:1021:15 [INFO] [stderr] | [INFO] [stderr] 1021 | for (&tok, &(ref pt, ref player)) in space.players.iter() { [INFO] [stderr] | ^^^ help: consider using `_tok` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `player` [INFO] [stderr] --> src/play.rs:1021:34 [INFO] [stderr] | [INFO] [stderr] 1021 | for (&tok, &(ref pt, ref player)) in space.players.iter() { [INFO] [stderr] | ^^^^^^ help: consider using `_player` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `tok` [INFO] [stderr] --> src/play.rs:1028:15 [INFO] [stderr] | [INFO] [stderr] 1028 | for (&tok, &(ref pt, ref player)) in space.projectiles.iter() { [INFO] [stderr] | ^^^ help: consider using `_tok` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `player` [INFO] [stderr] --> src/play.rs:1028:34 [INFO] [stderr] | [INFO] [stderr] 1028 | for (&tok, &(ref pt, ref player)) in space.projectiles.iter() { [INFO] [stderr] | ^^^^^^ help: consider using `_player` instead [INFO] [stderr] [INFO] [stderr] warning: value assigned to `z` is never read [INFO] [stderr] --> src/generate.rs:132:33 [INFO] [stderr] | [INFO] [stderr] 132 | let mut z = discrete(rng, counter, depth_left-1, slots, DiscreteContext::Threeish); [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `est` is never read [INFO] [stderr] --> src/generate.rs:133:33 [INFO] [stderr] | [INFO] [stderr] 133 | let mut est = 0.; [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `tok` [INFO] [stderr] --> src/play.rs:71:15 [INFO] [stderr] | [INFO] [stderr] 71 | for (&tok, &mut (ref mut pt, ref mut player)) in self.players.iter_mut() { [INFO] [stderr] | ^^^ help: consider using `_tok` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `stacks` [INFO] [stderr] --> src/play.rs:72:39 [INFO] [stderr] | [INFO] [stderr] 72 | for (&buff, &mut (ref mut stacks, ref mut left)) in player.buffs.iter_mut() { [INFO] [stderr] | ^^^^^^ help: consider using `_stacks` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `rsrc` [INFO] [stderr] --> src/play.rs:311:39 [INFO] [stderr] | [INFO] [stderr] 311 | &AddResource(ref ent, ref rsrc) => { [INFO] [stderr] | ^^^^ help: consider using `_rsrc` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `token` [INFO] [stderr] --> src/play.rs:312:21 [INFO] [stderr] | [INFO] [stderr] 312 | let token = self.eval_entity(rng, ctx, ent); [INFO] [stderr] | ^^^^^ help: consider using `_token` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `trigger_event` [INFO] [stderr] --> src/play.rs:332:41 [INFO] [stderr] | [INFO] [stderr] 332 | fn destroy(&mut self, token: Token, trigger_event: bool) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider using `_trigger_event` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `projectile` [INFO] [stderr] --> src/play.rs:429:36 [INFO] [stderr] | [INFO] [stderr] 429 | } else if let Some(projectile) = self.projectiles.get(&tok) { [INFO] [stderr] | ^^^^^^^^^^ help: consider using `_projectile` instead [INFO] [stderr] [INFO] [stderr] warning: private type `play::ConcreteResource` in public interface (error E0446) [INFO] [stderr] --> src/play.rs:765:5 [INFO] [stderr] | [INFO] [stderr] 765 | / pub fn try_remove_resources(&mut self, r_left: &[ConcreteResource]) -> bool { [INFO] [stderr] 766 | | let mut total_mana = 0; [INFO] [stderr] 767 | | let mut total_health = 0; [INFO] [stderr] 768 | | let mut total_buffs = HashMap::new(); [INFO] [stderr] ... | [INFO] [stderr] 802 | | } else { false } [INFO] [stderr] 803 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(private_in_public)] on by default [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #34537 [INFO] [stderr] [INFO] [stderr] warning: value assigned to `screen_pt` is never read [INFO] [stderr] --> src/play.rs:887:13 [INFO] [stderr] | [INFO] [stderr] 887 | let mut screen_pt: [f64;2] = [0., 0.]; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `x` [INFO] [stderr] --> src/play.rs:963:17 [INFO] [stderr] | [INFO] [stderr] 963 | x => (),//TODO [INFO] [stderr] | ^ help: consider using `_x` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `x` [INFO] [stderr] --> src/play.rs:973:17 [INFO] [stderr] | [INFO] [stderr] 973 | x => (),//TODO [INFO] [stderr] | ^ help: consider using `_x` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `tok` [INFO] [stderr] --> src/play.rs:1021:15 [INFO] [stderr] | [INFO] [stderr] 1021 | for (&tok, &(ref pt, ref player)) in space.players.iter() { [INFO] [stderr] | ^^^ help: consider using `_tok` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `player` [INFO] [stderr] --> src/play.rs:1021:34 [INFO] [stderr] | [INFO] [stderr] 1021 | for (&tok, &(ref pt, ref player)) in space.players.iter() { [INFO] [stderr] | ^^^^^^ help: consider using `_player` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `tok` [INFO] [stderr] --> src/play.rs:1028:15 [INFO] [stderr] | [INFO] [stderr] 1028 | for (&tok, &(ref pt, ref player)) in space.projectiles.iter() { [INFO] [stderr] | ^^^ help: consider using `_tok` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `player` [INFO] [stderr] --> src/play.rs:1028:34 [INFO] [stderr] | [INFO] [stderr] 1028 | for (&tok, &(ref pt, ref player)) in space.projectiles.iter() { [INFO] [stderr] | ^^^^^^ help: consider using `_player` instead [INFO] [stderr] [INFO] [stderr] warning: value assigned to `z` is never read [INFO] [stderr] --> src/generate.rs:132:33 [INFO] [stderr] | [INFO] [stderr] 132 | let mut z = discrete(rng, counter, depth_left-1, slots, DiscreteContext::Threeish); [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `est` is never read [INFO] [stderr] --> src/generate.rs:133:33 [INFO] [stderr] | [INFO] [stderr] 133 | let mut est = 0.; [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `tok` [INFO] [stderr] --> src/play.rs:71:15 [INFO] [stderr] | [INFO] [stderr] 71 | for (&tok, &mut (ref mut pt, ref mut player)) in self.players.iter_mut() { [INFO] [stderr] | ^^^ help: consider using `_tok` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `stacks` [INFO] [stderr] --> src/play.rs:72:39 [INFO] [stderr] | [INFO] [stderr] 72 | for (&buff, &mut (ref mut stacks, ref mut left)) in player.buffs.iter_mut() { [INFO] [stderr] | ^^^^^^ help: consider using `_stacks` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `rsrc` [INFO] [stderr] --> src/play.rs:311:39 [INFO] [stderr] | [INFO] [stderr] 311 | &AddResource(ref ent, ref rsrc) => { [INFO] [stderr] | ^^^^ help: consider using `_rsrc` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `token` [INFO] [stderr] --> src/play.rs:312:21 [INFO] [stderr] | [INFO] [stderr] 312 | let token = self.eval_entity(rng, ctx, ent); [INFO] [stderr] | ^^^^^ help: consider using `_token` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `trigger_event` [INFO] [stderr] --> src/play.rs:332:41 [INFO] [stderr] | [INFO] [stderr] 332 | fn destroy(&mut self, token: Token, trigger_event: bool) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider using `_trigger_event` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `projectile` [INFO] [stderr] --> src/play.rs:429:36 [INFO] [stderr] | [INFO] [stderr] 429 | } else if let Some(projectile) = self.projectiles.get(&tok) { [INFO] [stderr] | ^^^^^^^^^^ help: consider using `_projectile` instead [INFO] [stderr] [INFO] [stderr] warning: field is never used: `bp` [INFO] [stderr] --> src/play.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | bp: Rc, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: field is never used: `caster` [INFO] [stderr] --> src/play.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | caster: Token, [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `pos` [INFO] [stderr] --> src/play.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | pos: Point, [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `pt_of_player` [INFO] [stderr] --> src/play.rs:129:5 [INFO] [stderr] | [INFO] [stderr] 129 | pub fn pt_of_player(&self, token: Token) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `player_leave` [INFO] [stderr] --> src/play.rs:241:5 [INFO] [stderr] | [INFO] [stderr] 241 | pub fn player_leave(&mut self, token: Token) -> Option<(Point, Player)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `is_player` [INFO] [stderr] --> src/play.rs:247:5 [INFO] [stderr] | [INFO] [stderr] 247 | pub fn is_player(&self, token: Token) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `is_projectile` [INFO] [stderr] --> src/play.rs:251:5 [INFO] [stderr] | [INFO] [stderr] 251 | pub fn is_projectile(&self, token: Token) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `apply_stacks` [INFO] [stderr] --> src/play.rs:829:5 [INFO] [stderr] | [INFO] [stderr] 829 | pub fn apply_stacks(&mut self, buff: Buff, stacks: u8, duration: f32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `TowardLocation` [INFO] [stderr] --> src/magic.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | TowardLocation(Location, Location), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Mute` [INFO] [stderr] --> src/buffs.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | Mute, // can't cast spells [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Wet` [INFO] [stderr] --> src/buffs.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | Wet, // electric damage taken increased [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Stealth` [INFO] [stderr] --> src/buffs.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | Stealth, // [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Wary` [INFO] [stderr] --> src/buffs.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | Wary, // applies `Tired` when removed. reduces projectile damage [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Wise` [INFO] [stderr] --> src/buffs.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | Wise, // increased max mana [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Unpredictable` [INFO] [stderr] --> src/buffs.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | Unpredictable, // Cancels stacks with any other buff [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Resolute` [INFO] [stderr] --> src/buffs.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | Resolute, // forces applied dampened. `Tired` has no effect. [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Calm` [INFO] [stderr] --> src/buffs.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | Calm, // Panic will not apply tired. Movement increased if below 100% [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Steady` [INFO] [stderr] --> src/buffs.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | Steady, // removes Panicked if it has < stacks [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Panicked` [INFO] [stderr] --> src/buffs.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | Panicked, // movement speed increased. applies `Tired` when removed [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Dizzy` [INFO] [stderr] --> src/buffs.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | Dizzy, // spell positions randomized slightly [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Tired` [INFO] [stderr] --> src/buffs.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | Tired, // movement slowed. ticks down ONLY when not moving [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Confused` [INFO] [stderr] --> src/buffs.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | Confused, // spell cast effects INSTEAD remove one stack of confused [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Drained` [INFO] [stderr] --> src/buffs.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | Drained, // Max mana reduced by 30 [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Weary` [INFO] [stderr] --> src/buffs.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | Weary, // spell casts take 20% more time [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Bleeding` [INFO] [stderr] --> src/buffs.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | Bleeding, // takes DoT. every 5 stacks of Bleeding are replaced with 1 stack of hemorrhage. [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Hemorrhage` [INFO] [stderr] --> src/buffs.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | Hemorrhage, // take DoT. maintains equivalent Bleed stacks. Cap is 3. [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Bruised` [INFO] [stderr] --> src/buffs.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | Bruised, // Tough.S + Bruised.S <= 5. [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Limping` [INFO] [stderr] --> src/buffs.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | Limping, // movement controls become intermittently slowed [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Delicate` [INFO] [stderr] --> src/buffs.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | Delicate, // increased DoT taken [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Tough` [INFO] [stderr] --> src/buffs.rs:33:5 [INFO] [stderr] | [INFO] [stderr] 33 | Tough, // damage taken > 20% of health is reduced by 10% [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Hot` [INFO] [stderr] --> src/buffs.rs:35:5 [INFO] [stderr] | [INFO] [stderr] 35 | Hot, [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Burning` [INFO] [stderr] --> src/buffs.rs:36:5 [INFO] [stderr] | [INFO] [stderr] 36 | Burning, // DoT [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Warm` [INFO] [stderr] --> src/buffs.rs:38:5 [INFO] [stderr] | [INFO] [stderr] 38 | Warm, // cancels COLD buffs [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Shivering` [INFO] [stderr] --> src/buffs.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | Shivering, // Periodically interrupts spellcasting [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Cool` [INFO] [stderr] --> src/buffs.rs:43:5 [INFO] [stderr] | [INFO] [stderr] 43 | Cool, // Cancels HOT buffs [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Poisoned` [INFO] [stderr] --> src/buffs.rs:48:5 [INFO] [stderr] | [INFO] [stderr] 48 | Poisoned, [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Refreshed` [INFO] [stderr] --> src/buffs.rs:52:5 [INFO] [stderr] | [INFO] [stderr] 52 | Refreshed, // cancels drained [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Energized` [INFO] [stderr] --> src/buffs.rs:53:5 [INFO] [stderr] | [INFO] [stderr] 53 | Energized, // cancels tired. [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum is never used: `StackingBehaviour` [INFO] [stderr] --> src/buffs.rs:59:1 [INFO] [stderr] | [INFO] [stderr] 59 | pub enum StackingBehaviour { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `stacking_method` [INFO] [stderr] --> src/buffs.rs:67:1 [INFO] [stderr] | [INFO] [stderr] 67 | pub fn stacking_method(buff: Buff) -> StackingBehaviour { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `xy_to_directional` [INFO] [stderr] --> src/movement_2d.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn xy_to_directional(x: f32, y: f32) -> (f32, f32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `rotated` [INFO] [stderr] --> src/movement_2d.rs:34:5 [INFO] [stderr] | [INFO] [stderr] 34 | pub fn rotated(&self, rotation: f32) -> Vector { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `try_set_speed` [INFO] [stderr] --> src/movement_2d.rs:48:5 [INFO] [stderr] | [INFO] [stderr] 48 | pub fn try_set_speed(&mut self, speed: f32, startup_direction: Option) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `accelerate_xy` [INFO] [stderr] --> src/movement_2d.rs:77:5 [INFO] [stderr] | [INFO] [stderr] 77 | pub fn accelerate_xy(&mut self, x: f32, y:f32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `accelerate_dirspe` [INFO] [stderr] --> src/movement_2d.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | pub fn accelerate_dirspe(&mut self, direction: f32, speed: f32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `act_on` [INFO] [stderr] --> src/movement_2d.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | pub fn act_on(&self, pt: &mut Point) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `vector_to` [INFO] [stderr] --> src/movement_2d.rs:186:5 [INFO] [stderr] | [INFO] [stderr] 186 | pub fn vector_to(&self, other: &Point) -> Vector { [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/play.rs:43:20 [INFO] [stderr] | [INFO] [stderr] 43 | pub fn is_null(&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: using `clone` on a `Copy` type [INFO] [stderr] --> src/play.rs:136:48 [INFO] [stderr] | [INFO] [stderr] 136 | let lifetime = self.eval_discrete(&mut self.rng.clone(), &ctx, &(&bp).lifetime) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.rng` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/play.rs:156:24 [INFO] [stderr] | [INFO] [stderr] 156 | let mut rng2 = self.rng.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.rng` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/play.rs:194:24 [INFO] [stderr] | [INFO] [stderr] 194 | let mut rng2 = self.rng.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.rng` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:268:9 [INFO] [stderr] | [INFO] [stderr] 268 | / match ins { [INFO] [stderr] 269 | | &Define(ref def) => self.execute_defintion(rng, ctx, def), [INFO] [stderr] 270 | | &ITE(ref cond, ref then, ref els) => { [INFO] [stderr] 271 | | if self.eval_condition(rng, ctx, cond) { [INFO] [stderr] ... | [INFO] [stderr] 328 | | &Nothing => (), [INFO] [stderr] 329 | | } [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] 268 | match *ins { [INFO] [stderr] 269 | Define(ref def) => self.execute_defintion(rng, ctx, def), [INFO] [stderr] 270 | ITE(ref cond, ref then, ref els) => { [INFO] [stderr] 271 | if self.eval_condition(rng, ctx, cond) { [INFO] [stderr] 272 | for i in then { [INFO] [stderr] 273 | self.execute_instruction(rng, ctx, i); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:340:9 [INFO] [stderr] | [INFO] [stderr] 340 | / match def { [INFO] [stderr] 341 | | &ESet(s, ref eset) => { [INFO] [stderr] 342 | | let x = self.eval_entity_set(rng, ctx, eset); [INFO] [stderr] 343 | | ctx.define(s, x) [INFO] [stderr] ... | [INFO] [stderr] 356 | | }, [INFO] [stderr] 357 | | } [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 | match *def { [INFO] [stderr] 341 | ESet(s, ref eset) => { [INFO] [stderr] 342 | let x = self.eval_entity_set(rng, ctx, eset); [INFO] [stderr] 343 | ctx.define(s, x) [INFO] [stderr] 344 | }, [INFO] [stderr] 345 | E(s, ref e) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:364:9 [INFO] [stderr] | [INFO] [stderr] 364 | / match resource { [INFO] [stderr] 365 | | &Mana(ref x) => ConcreteResource::Mana( [INFO] [stderr] 366 | | self.eval_discrete(rng, &ctx, x) [INFO] [stderr] 367 | | ), [INFO] [stderr] ... | [INFO] [stderr] 374 | | ), [INFO] [stderr] 375 | | } [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] 364 | match *resource { [INFO] [stderr] 365 | Mana(ref x) => ConcreteResource::Mana( [INFO] [stderr] 366 | self.eval_discrete(rng, &ctx, x) [INFO] [stderr] 367 | ), [INFO] [stderr] 368 | Health(ref x) => ConcreteResource::Health( [INFO] [stderr] 369 | self.eval_discrete(rng, &ctx, x) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:380:9 [INFO] [stderr] | [INFO] [stderr] 380 | / match direction { [INFO] [stderr] 381 | | &TowardLocation(ref from, ref to) => { [INFO] [stderr] 382 | | let from = self.eval_location(rng, ctx, from); [INFO] [stderr] 383 | | let to = self.eval_location(rng, ctx, to); [INFO] [stderr] ... | [INFO] [stderr] 399 | | }, [INFO] [stderr] 400 | | } [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] 380 | match *direction { [INFO] [stderr] 381 | TowardLocation(ref from, ref to) => { [INFO] [stderr] 382 | let from = self.eval_location(rng, ctx, from); [INFO] [stderr] 383 | let to = self.eval_location(rng, ctx, to); [INFO] [stderr] 384 | if from != Point::NULL && to != Point::NULL { [INFO] [stderr] 385 | from.direction_to(&to) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:405:9 [INFO] [stderr] | [INFO] [stderr] 405 | / match discrete { [INFO] [stderr] 406 | | &Const(x) => x, [INFO] [stderr] 407 | | &Range(x, y) => (rng.gen::().abs() % (y-x)) + x, [INFO] [stderr] 408 | | &WithinPercent(ref x, ref y) => ((rng.gen::() * (*y).0) * (*x as f32)) as i32, [INFO] [stderr] ... | [INFO] [stderr] 457 | | &LoadFrom(dslot) => *ctx.load(&dslot).unwrap_or(&0), [INFO] [stderr] 458 | | } [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] 405 | match *discrete { [INFO] [stderr] 406 | Const(x) => x, [INFO] [stderr] 407 | Range(x, y) => (rng.gen::().abs() % (y-x)) + x, [INFO] [stderr] 408 | WithinPercent(ref x, ref y) => ((rng.gen::() * (*y).0) * (*x as f32)) as i32, [INFO] [stderr] 409 | Div(ref x, ref y) => self.eval_discrete(rng, ctx, x) / self.eval_discrete(rng, ctx, y), [INFO] [stderr] 410 | Sum(ref x) => x.iter().map(|q| self.eval_discrete(rng, ctx, q)).sum(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:425:25 [INFO] [stderr] | [INFO] [stderr] 425 | stacks as i32 [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i32::from(stacks)` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:463:9 [INFO] [stderr] | [INFO] [stderr] 463 | / match entity { [INFO] [stderr] 464 | | &LoadEntity(eslot) => *ctx.load(&eslot).unwrap_or(&Token::NULL), [INFO] [stderr] 465 | | &FirstOf(ref eset) => self.eval_entity_set(rng, ctx, eset).first(), [INFO] [stderr] 466 | | &Choose(ref eset) => self.eval_entity_set(rng, ctx, eset).choose(rng), [INFO] [stderr] ... | [INFO] [stderr] 480 | | }, [INFO] [stderr] 481 | | } [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] 463 | match *entity { [INFO] [stderr] 464 | LoadEntity(eslot) => *ctx.load(&eslot).unwrap_or(&Token::NULL), [INFO] [stderr] 465 | FirstOf(ref eset) => self.eval_entity_set(rng, ctx, eset).first(), [INFO] [stderr] 466 | Choose(ref eset) => self.eval_entity_set(rng, ctx, eset).choose(rng), [INFO] [stderr] 467 | ClosestFrom(ref eset, ref loc) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:486:9 [INFO] [stderr] | [INFO] [stderr] 486 | / match entity_set { [INFO] [stderr] 487 | | &None(ref sets) => { [INFO] [stderr] 488 | | let tokens = self.token_universe.0.iter().map(|x| *x).collect::>(); [INFO] [stderr] 489 | | let sets = sets.iter().map(|s| self.eval_entity_set(rng, ctx, s)).collect::>(); [INFO] [stderr] ... | [INFO] [stderr] 603 | | &Universe => self.token_universe.clone(), [INFO] [stderr] 604 | | } [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] 486 | match *entity_set { [INFO] [stderr] 487 | None(ref sets) => { [INFO] [stderr] 488 | let tokens = self.token_universe.0.iter().map(|x| *x).collect::>(); [INFO] [stderr] 489 | let sets = sets.iter().map(|s| self.eval_entity_set(rng, ctx, s)).collect::>(); [INFO] [stderr] 490 | let mut ret = TokenSet::new(); [INFO] [stderr] 491 | for tok in tokens { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/play.rs:488:30 [INFO] [stderr] | [INFO] [stderr] 488 | let tokens = self.token_universe.0.iter().map(|x| *x).collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.token_universe.0.iter().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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/play.rs:556:28 [INFO] [stderr] | [INFO] [stderr] 556 | for tok in self.token_players.0.iter().map(|x| *x).collect::>() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.token_players.0.iter().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/play.rs:558:21 [INFO] [stderr] | [INFO] [stderr] 558 | / match res { [INFO] [stderr] 559 | | &Mana(ref x) => { [INFO] [stderr] 560 | | let need = self.eval_discrete(rng, ctx, x); [INFO] [stderr] 561 | | if let Some(&(_, ref player)) = self.players.get(&tok) { [INFO] [stderr] ... | [INFO] [stderr] 585 | | }, [INFO] [stderr] 586 | | } [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] 558 | match *res { [INFO] [stderr] 559 | Mana(ref x) => { [INFO] [stderr] 560 | let need = self.eval_discrete(rng, ctx, x); [INFO] [stderr] 561 | if let Some(&(_, ref player)) = self.players.get(&tok) { [INFO] [stderr] 562 | if player.mana as i32 >= need { [INFO] [stderr] 563 | ret.insert(tok); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:579:37 [INFO] [stderr] | [INFO] [stderr] 579 | stacks as i32 >= need [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i32::from(stacks)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:609:9 [INFO] [stderr] | [INFO] [stderr] 609 | / match condition { [INFO] [stderr] 610 | | &Nand(ref conds) => !conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 611 | | &And(ref conds) => conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 612 | | &Or(ref conds) => conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a||b), [INFO] [stderr] ... | [INFO] [stderr] 618 | | &EntitySetCmp(ref esetcmp) => self.eval_entity_set_cmp(rng, ctx, esetcmp), [INFO] [stderr] 619 | | } [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] 609 | match *condition { [INFO] [stderr] 610 | Nand(ref conds) => !conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 611 | And(ref conds) => conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 612 | Or(ref conds) => conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a||b), [INFO] [stderr] 613 | Top => true, [INFO] [stderr] 614 | Bottom => false, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/play.rs:610:88 [INFO] [stderr] | [INFO] [stderr] 610 | &Nand(ref conds) => !conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.all(|b| b)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_fold)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/play.rs:611:86 [INFO] [stderr] | [INFO] [stderr] 611 | &And(ref conds) => conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.all(|b| b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:624:9 [INFO] [stderr] | [INFO] [stderr] 624 | / match ent_set_cmp { [INFO] [stderr] 625 | | &Nand(ref v) => !v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 626 | | &And(ref v) => v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 627 | | &Or(ref v) => v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a||b), [INFO] [stderr] ... | [INFO] [stderr] 659 | | }, [INFO] [stderr] 660 | | } [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] 624 | match *ent_set_cmp { [INFO] [stderr] 625 | Nand(ref v) => !v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 626 | And(ref v) => v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 627 | Or(ref v) => v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a||b), [INFO] [stderr] 628 | Subset(ref a, ref b) => { [INFO] [stderr] 629 | let a = self.eval_entity_set(rng, ctx, a); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/play.rs:625:85 [INFO] [stderr] | [INFO] [stderr] 625 | &Nand(ref v) => !v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.all(|b| b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/play.rs:626:83 [INFO] [stderr] | [INFO] [stderr] 626 | &And(ref v) => v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.all(|b| b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: field is never used: `bp` [INFO] [stderr] --> src/play.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | bp: Rc, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: field is never used: `caster` [INFO] [stderr] --> src/play.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | caster: Token, [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `pos` [INFO] [stderr] --> src/play.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | pos: Point, [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `pt_of_player` [INFO] [stderr] --> src/play.rs:129:5 [INFO] [stderr] | [INFO] [stderr] 129 | pub fn pt_of_player(&self, token: Token) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `player_leave` [INFO] [stderr] --> src/play.rs:241:5 [INFO] [stderr] | [INFO] [stderr] 241 | pub fn player_leave(&mut self, token: Token) -> Option<(Point, Player)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `is_player` [INFO] [stderr] --> src/play.rs:247:5 [INFO] [stderr] | [INFO] [stderr] 247 | pub fn is_player(&self, token: Token) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `is_projectile` [INFO] [stderr] --> src/play.rs:251:5 [INFO] [stderr] | [INFO] [stderr] 251 | pub fn is_projectile(&self, token: Token) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `apply_stacks` [INFO] [stderr] --> src/play.rs:829:5 [INFO] [stderr] | [INFO] [stderr] 829 | pub fn apply_stacks(&mut self, buff: Buff, stacks: u8, duration: f32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `TowardLocation` [INFO] [stderr] --> src/magic.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | TowardLocation(Location, Location), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Mute` [INFO] [stderr] --> src/buffs.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | Mute, // can't cast spells [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Wet` [INFO] [stderr] --> src/buffs.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | Wet, // electric damage taken increased [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Stealth` [INFO] [stderr] --> src/buffs.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | Stealth, // [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Wary` [INFO] [stderr] --> src/buffs.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | Wary, // applies `Tired` when removed. reduces projectile damage [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Wise` [INFO] [stderr] --> src/buffs.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | Wise, // increased max mana [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Unpredictable` [INFO] [stderr] --> src/buffs.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | Unpredictable, // Cancels stacks with any other buff [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Resolute` [INFO] [stderr] --> src/buffs.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | Resolute, // forces applied dampened. `Tired` has no effect. [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Calm` [INFO] [stderr] --> src/buffs.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | Calm, // Panic will not apply tired. Movement increased if below 100% [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Steady` [INFO] [stderr] --> src/buffs.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | Steady, // removes Panicked if it has < stacks [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Panicked` [INFO] [stderr] --> src/buffs.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | Panicked, // movement speed increased. applies `Tired` when removed [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Dizzy` [INFO] [stderr] --> src/buffs.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | Dizzy, // spell positions randomized slightly [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Tired` [INFO] [stderr] --> src/buffs.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | Tired, // movement slowed. ticks down ONLY when not moving [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:665:9 [INFO] [stderr] | [INFO] [stderr] 665 | / match location { [INFO] [stderr] 666 | | &AtEntity(ref ent) => { [INFO] [stderr] 667 | | let e = self.eval_entity(rng, ctx, ent); [INFO] [stderr] 668 | | self.point_of(e).expect("UH OH") [INFO] [stderr] ... | [INFO] [stderr] 688 | | }, [INFO] [stderr] 689 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] warning: variant is never constructed: `Confused` [INFO] [stderr] --> src/buffs.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | Confused, // spell cast effects INSTEAD remove one stack of confused [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Drained` [INFO] [stderr] --> src/buffs.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | Drained, // Max mana reduced by 30 [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] warning: variant is never constructed: `Weary` [INFO] [stderr] --> src/buffs.rs:23:5 [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] 23 | Weary, // spell casts take 20% more time [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Bleeding` [INFO] [stderr] --> src/buffs.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | Bleeding, // takes DoT. every 5 stacks of Bleeding are replaced with 1 stack of hemorrhage. [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Hemorrhage` [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 665 | match *location { [INFO] [stderr] --> src/buffs.rs:27:5 [INFO] [stderr] 666 | AtEntity(ref ent) => { [INFO] [stderr] | [INFO] [stderr] 667 | let e = self.eval_entity(rng, ctx, ent); [INFO] [stderr] 668 | self.point_of(e).expect("UH OH") [INFO] [stderr] 27 | Hemorrhage, // take DoT. maintains equivalent Bleed stacks. Cap is 3. [INFO] [stderr] 669 | }, [INFO] [stderr] 670 | Midpoint(ref locs) => { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Bruised` [INFO] [stderr] --> src/buffs.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | Bruised, // Tough.S + Bruised.S <= 5. [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Limping` [INFO] [stderr] --> src/buffs.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | Limping, // movement controls become intermittently slowed [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Delicate` [INFO] [stderr] --> src/buffs.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | Delicate, // increased DoT taken [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Tough` [INFO] [stderr] --> src/buffs.rs:33:5 [INFO] [stderr] | [INFO] [stderr] 33 | Tough, // damage taken > 20% of health is reduced by 10% [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Hot` [INFO] [stderr] --> src/buffs.rs:35:5 [INFO] [stderr] | [INFO] [stderr] 35 | Hot, [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Burning` [INFO] [stderr] --> src/buffs.rs:36:5 [INFO] [stderr] | [INFO] [stderr] 36 | Burning, // DoT [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Warm` [INFO] [stderr] --> src/buffs.rs:38:5 [INFO] [stderr] | [INFO] [stderr] 38 | Warm, // cancels COLD buffs [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Shivering` [INFO] [stderr] --> src/buffs.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | Shivering, // Periodically interrupts spellcasting [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Cool` [INFO] [stderr] --> src/buffs.rs:43:5 [INFO] [stderr] | [INFO] [stderr] 43 | Cool, // Cancels HOT buffs [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Poisoned` [INFO] [stderr] --> src/buffs.rs:48:5 [INFO] [stderr] | [INFO] [stderr] 48 | Poisoned, [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Refreshed` [INFO] [stderr] --> src/buffs.rs:52:5 [INFO] [stderr] | [INFO] [stderr] 52 | Refreshed, // cancels drained [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Energized` [INFO] [stderr] --> src/buffs.rs:53:5 [INFO] [stderr] | [INFO] [stderr] 53 | Energized, // cancels tired. [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum is never used: `StackingBehaviour` [INFO] [stderr] --> src/buffs.rs:59:1 [INFO] [stderr] | [INFO] [stderr] 59 | pub enum StackingBehaviour { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `stacking_method` [INFO] [stderr] --> src/buffs.rs:67:1 [INFO] [stderr] | [INFO] [stderr] 67 | pub fn stacking_method(buff: Buff) -> StackingBehaviour { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `xy_to_directional` [INFO] [stderr] --> src/movement_2d.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn xy_to_directional(x: f32, y: f32) -> (f32, f32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `rotated` [INFO] [stderr] --> src/movement_2d.rs:34:5 [INFO] [stderr] | [INFO] [stderr] 34 | pub fn rotated(&self, rotation: f32) -> Vector { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `try_set_speed` [INFO] [stderr] --> src/movement_2d.rs:48:5 [INFO] [stderr] | [INFO] [stderr] 48 | pub fn try_set_speed(&mut self, speed: f32, startup_direction: Option) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `accelerate_xy` [INFO] [stderr] --> src/movement_2d.rs:77:5 [INFO] [stderr] | [INFO] [stderr] 77 | pub fn accelerate_xy(&mut self, x: f32, y:f32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `accelerate_dirspe` [INFO] [stderr] --> src/movement_2d.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | pub fn accelerate_dirspe(&mut self, direction: f32, speed: f32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `act_on` [INFO] [stderr] --> src/movement_2d.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | pub fn act_on(&self, pt: &mut Point) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `vector_to` [INFO] [stderr] --> src/movement_2d.rs:186:5 [INFO] [stderr] | [INFO] [stderr] 186 | pub fn vector_to(&self, other: &Point) -> Vector { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.iter().nth()` on a Vec. Calling `.get()` is both faster and more readable [INFO] [stderr] --> src/play.rs:704:10 [INFO] [stderr] | [INFO] [stderr] 704 | *self.0.iter().nth(0) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_nth)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:772:13 [INFO] [stderr] | [INFO] [stderr] 772 | / match r { [INFO] [stderr] 773 | | &Mana(x) => total_mana += x, [INFO] [stderr] 774 | | &Health(x) => total_health += x, [INFO] [stderr] 775 | | &BuffStacks(buff, x) => { [INFO] [stderr] ... | [INFO] [stderr] 782 | | }, [INFO] [stderr] 783 | | }; [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] 772 | match *r { [INFO] [stderr] 773 | Mana(x) => total_mana += x, [INFO] [stderr] 774 | Health(x) => total_health += x, [INFO] [stderr] 775 | BuffStacks(buff, x) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/play.rs:776:21 [INFO] [stderr] | [INFO] [stderr] 776 | / if !total_buffs.contains_key(&buff) { [INFO] [stderr] 777 | | total_buffs.insert(buff, x); [INFO] [stderr] 778 | | } else { [INFO] [stderr] 779 | | let val = total_buffs.get_mut(&buff).unwrap(); [INFO] [stderr] 780 | | *val += x; [INFO] [stderr] 781 | | }; [INFO] [stderr] | |_____________________^ help: consider using: `total_buffs.entry(buff)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/play.rs:43:20 [INFO] [stderr] | [INFO] [stderr] 43 | pub fn is_null(&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: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/play.rs:914:16 [INFO] [stderr] | [INFO] [stderr] 914 | if let Some(_) = e.update_args() { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 915 | | use self::WasdDirection::*; [INFO] [stderr] 916 | | use ::std::f32::consts::PI; [INFO] [stderr] 917 | | let mut flag = false; [INFO] [stderr] ... | [INFO] [stderr] 936 | | space.tick(); [INFO] [stderr] 937 | | } [INFO] [stderr] | |_________- help: try this: `if e.update_args().is_some()` [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/play.rs:136:48 [INFO] [stderr] | [INFO] [stderr] 136 | let lifetime = self.eval_discrete(&mut self.rng.clone(), &ctx, &(&bp).lifetime) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.rng` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/play.rs:156:24 [INFO] [stderr] | [INFO] [stderr] 156 | let mut rng2 = self.rng.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.rng` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/play.rs:938:16 [INFO] [stderr] | [INFO] [stderr] 938 | if let Some(_) = e.render_args() { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 939 | | window.draw_2d(&e, | _ , graphics| clear([0.0; 4], graphics)); [INFO] [stderr] 940 | | render_space(&e, &mut window, &space, &sprites); [INFO] [stderr] 941 | | } [INFO] [stderr] | |_________- help: try this: `if e.render_args().is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/play.rs:194:24 [INFO] [stderr] | [INFO] [stderr] 194 | let mut rng2 = self.rng.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.rng` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1024:21 [INFO] [stderr] | [INFO] [stderr] 1024 | pt.0 as f64 - (wiz_sprite.center.0 as f64), [INFO] [stderr] | ^^^^^^^^^^^ help: try: `f64::from(pt.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1024:35 [INFO] [stderr] | [INFO] [stderr] 1024 | pt.0 as f64 - (wiz_sprite.center.0 as f64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(wiz_sprite.center.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1025:21 [INFO] [stderr] | [INFO] [stderr] 1025 | pt.1 as f64 - (wiz_sprite.center.1 as f64), [INFO] [stderr] | ^^^^^^^^^^^ help: try: `f64::from(pt.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1025:35 [INFO] [stderr] | [INFO] [stderr] 1025 | pt.1 as f64 - (wiz_sprite.center.1 as f64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(wiz_sprite.center.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1031:21 [INFO] [stderr] | [INFO] [stderr] 1031 | pt.0 as f64 - (fireball.center.0 as f64), [INFO] [stderr] | ^^^^^^^^^^^ help: try: `f64::from(pt.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1031:35 [INFO] [stderr] | [INFO] [stderr] 1031 | pt.0 as f64 - (fireball.center.0 as f64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(fireball.center.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1032:21 [INFO] [stderr] | [INFO] [stderr] 1032 | pt.1 as f64 - (fireball.center.1 as f64), [INFO] [stderr] | ^^^^^^^^^^^ help: try: `f64::from(pt.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1032:35 [INFO] [stderr] | [INFO] [stderr] 1032 | pt.1 as f64 - (fireball.center.1 as f64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(fireball.center.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:268:9 [INFO] [stderr] | [INFO] [stderr] 268 | / match ins { [INFO] [stderr] 269 | | &Define(ref def) => self.execute_defintion(rng, ctx, def), [INFO] [stderr] 270 | | &ITE(ref cond, ref then, ref els) => { [INFO] [stderr] 271 | | if self.eval_condition(rng, ctx, cond) { [INFO] [stderr] ... | [INFO] [stderr] 328 | | &Nothing => (), [INFO] [stderr] 329 | | } [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] 268 | match *ins { [INFO] [stderr] 269 | Define(ref def) => self.execute_defintion(rng, ctx, def), [INFO] [stderr] 270 | ITE(ref cond, ref then, ref els) => { [INFO] [stderr] 271 | if self.eval_condition(rng, ctx, cond) { [INFO] [stderr] 272 | for i in then { [INFO] [stderr] 273 | self.execute_instruction(rng, ctx, i); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:340:9 [INFO] [stderr] | [INFO] [stderr] 340 | / match def { [INFO] [stderr] 341 | | &ESet(s, ref eset) => { [INFO] [stderr] 342 | | let x = self.eval_entity_set(rng, ctx, eset); [INFO] [stderr] 343 | | ctx.define(s, x) [INFO] [stderr] ... | [INFO] [stderr] 356 | | }, [INFO] [stderr] 357 | | } [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 | match *def { [INFO] [stderr] 341 | ESet(s, ref eset) => { [INFO] [stderr] 342 | let x = self.eval_entity_set(rng, ctx, eset); [INFO] [stderr] 343 | ctx.define(s, x) [INFO] [stderr] 344 | }, [INFO] [stderr] 345 | E(s, ref e) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:364:9 [INFO] [stderr] | [INFO] [stderr] 364 | / match resource { [INFO] [stderr] 365 | | &Mana(ref x) => ConcreteResource::Mana( [INFO] [stderr] 366 | | self.eval_discrete(rng, &ctx, x) [INFO] [stderr] 367 | | ), [INFO] [stderr] ... | [INFO] [stderr] 374 | | ), [INFO] [stderr] 375 | | } [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] 364 | match *resource { [INFO] [stderr] 365 | Mana(ref x) => ConcreteResource::Mana( [INFO] [stderr] 366 | self.eval_discrete(rng, &ctx, x) [INFO] [stderr] 367 | ), [INFO] [stderr] 368 | Health(ref x) => ConcreteResource::Health( [INFO] [stderr] 369 | self.eval_discrete(rng, &ctx, x) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:380:9 [INFO] [stderr] | [INFO] [stderr] 380 | / match direction { [INFO] [stderr] 381 | | &TowardLocation(ref from, ref to) => { [INFO] [stderr] 382 | | let from = self.eval_location(rng, ctx, from); [INFO] [stderr] 383 | | let to = self.eval_location(rng, ctx, to); [INFO] [stderr] ... | [INFO] [stderr] 399 | | }, [INFO] [stderr] 400 | | } [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] 380 | match *direction { [INFO] [stderr] 381 | TowardLocation(ref from, ref to) => { [INFO] [stderr] 382 | let from = self.eval_location(rng, ctx, from); [INFO] [stderr] 383 | let to = self.eval_location(rng, ctx, to); [INFO] [stderr] 384 | if from != Point::NULL && to != Point::NULL { [INFO] [stderr] 385 | from.direction_to(&to) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:405:9 [INFO] [stderr] | [INFO] [stderr] 405 | / match discrete { [INFO] [stderr] 406 | | &Const(x) => x, [INFO] [stderr] 407 | | &Range(x, y) => (rng.gen::().abs() % (y-x)) + x, [INFO] [stderr] 408 | | &WithinPercent(ref x, ref y) => ((rng.gen::() * (*y).0) * (*x as f32)) as i32, [INFO] [stderr] ... | [INFO] [stderr] 457 | | &LoadFrom(dslot) => *ctx.load(&dslot).unwrap_or(&0), [INFO] [stderr] 458 | | } [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] 405 | match *discrete { [INFO] [stderr] 406 | Const(x) => x, [INFO] [stderr] 407 | Range(x, y) => (rng.gen::().abs() % (y-x)) + x, [INFO] [stderr] 408 | WithinPercent(ref x, ref y) => ((rng.gen::() * (*y).0) * (*x as f32)) as i32, [INFO] [stderr] 409 | Div(ref x, ref y) => self.eval_discrete(rng, ctx, x) / self.eval_discrete(rng, ctx, y), [INFO] [stderr] 410 | Sum(ref x) => x.iter().map(|q| self.eval_discrete(rng, ctx, q)).sum(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:425:25 [INFO] [stderr] | [INFO] [stderr] 425 | stacks as i32 [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i32::from(stacks)` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:463:9 [INFO] [stderr] | [INFO] [stderr] 463 | / match entity { [INFO] [stderr] 464 | | &LoadEntity(eslot) => *ctx.load(&eslot).unwrap_or(&Token::NULL), [INFO] [stderr] 465 | | &FirstOf(ref eset) => self.eval_entity_set(rng, ctx, eset).first(), [INFO] [stderr] 466 | | &Choose(ref eset) => self.eval_entity_set(rng, ctx, eset).choose(rng), [INFO] [stderr] ... | [INFO] [stderr] 480 | | }, [INFO] [stderr] 481 | | } [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] 463 | match *entity { [INFO] [stderr] 464 | LoadEntity(eslot) => *ctx.load(&eslot).unwrap_or(&Token::NULL), [INFO] [stderr] 465 | FirstOf(ref eset) => self.eval_entity_set(rng, ctx, eset).first(), [INFO] [stderr] 466 | Choose(ref eset) => self.eval_entity_set(rng, ctx, eset).choose(rng), [INFO] [stderr] 467 | ClosestFrom(ref eset, ref loc) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:486:9 [INFO] [stderr] | [INFO] [stderr] 486 | / match entity_set { [INFO] [stderr] 487 | | &None(ref sets) => { [INFO] [stderr] 488 | | let tokens = self.token_universe.0.iter().map(|x| *x).collect::>(); [INFO] [stderr] 489 | | let sets = sets.iter().map(|s| self.eval_entity_set(rng, ctx, s)).collect::>(); [INFO] [stderr] ... | [INFO] [stderr] 603 | | &Universe => self.token_universe.clone(), [INFO] [stderr] 604 | | } [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] 486 | match *entity_set { [INFO] [stderr] 487 | None(ref sets) => { [INFO] [stderr] 488 | let tokens = self.token_universe.0.iter().map(|x| *x).collect::>(); [INFO] [stderr] 489 | let sets = sets.iter().map(|s| self.eval_entity_set(rng, ctx, s)).collect::>(); [INFO] [stderr] 490 | let mut ret = TokenSet::new(); [INFO] [stderr] 491 | for tok in tokens { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/play.rs:488:30 [INFO] [stderr] | [INFO] [stderr] 488 | let tokens = self.token_universe.0.iter().map(|x| *x).collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.token_universe.0.iter().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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/play.rs:556:28 [INFO] [stderr] | [INFO] [stderr] 556 | for tok in self.token_players.0.iter().map(|x| *x).collect::>() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.token_players.0.iter().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/play.rs:558:21 [INFO] [stderr] | [INFO] [stderr] 558 | / match res { [INFO] [stderr] 559 | | &Mana(ref x) => { [INFO] [stderr] 560 | | let need = self.eval_discrete(rng, ctx, x); [INFO] [stderr] 561 | | if let Some(&(_, ref player)) = self.players.get(&tok) { [INFO] [stderr] ... | [INFO] [stderr] 585 | | }, [INFO] [stderr] 586 | | } [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] 558 | match *res { [INFO] [stderr] 559 | Mana(ref x) => { [INFO] [stderr] 560 | let need = self.eval_discrete(rng, ctx, x); [INFO] [stderr] 561 | if let Some(&(_, ref player)) = self.players.get(&tok) { [INFO] [stderr] 562 | if player.mana as i32 >= need { [INFO] [stderr] 563 | ret.insert(tok); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:579:37 [INFO] [stderr] | [INFO] [stderr] 579 | stacks as i32 >= need [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i32::from(stacks)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:609:9 [INFO] [stderr] | [INFO] [stderr] 609 | / match condition { [INFO] [stderr] 610 | | &Nand(ref conds) => !conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 611 | | &And(ref conds) => conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 612 | | &Or(ref conds) => conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a||b), [INFO] [stderr] ... | [INFO] [stderr] 618 | | &EntitySetCmp(ref esetcmp) => self.eval_entity_set_cmp(rng, ctx, esetcmp), [INFO] [stderr] 619 | | } [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] 609 | match *condition { [INFO] [stderr] 610 | Nand(ref conds) => !conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 611 | And(ref conds) => conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 612 | Or(ref conds) => conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a||b), [INFO] [stderr] 613 | Top => true, [INFO] [stderr] 614 | Bottom => false, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/play.rs:610:88 [INFO] [stderr] | [INFO] [stderr] 610 | &Nand(ref conds) => !conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.all(|b| b)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_fold)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/play.rs:611:86 [INFO] [stderr] | [INFO] [stderr] 611 | &And(ref conds) => conds.iter().map(|x| self.eval_condition(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.all(|b| b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:624:9 [INFO] [stderr] | [INFO] [stderr] 624 | / match ent_set_cmp { [INFO] [stderr] 625 | | &Nand(ref v) => !v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 626 | | &And(ref v) => v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 627 | | &Or(ref v) => v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a||b), [INFO] [stderr] ... | [INFO] [stderr] 659 | | }, [INFO] [stderr] 660 | | } [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] 624 | match *ent_set_cmp { [INFO] [stderr] 625 | Nand(ref v) => !v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 626 | And(ref v) => v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] 627 | Or(ref v) => v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a||b), [INFO] [stderr] 628 | Subset(ref a, ref b) => { [INFO] [stderr] 629 | let a = self.eval_entity_set(rng, ctx, a); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/play.rs:625:85 [INFO] [stderr] | [INFO] [stderr] 625 | &Nand(ref v) => !v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.all(|b| b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/play.rs:626:83 [INFO] [stderr] | [INFO] [stderr] 626 | &And(ref v) => v.iter().map(|x| self.eval_entity_set_cmp(rng, ctx, x)).fold(true, |a,b| a&&b), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.all(|b| b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:665:9 [INFO] [stderr] | [INFO] [stderr] 665 | / match location { [INFO] [stderr] 666 | | &AtEntity(ref ent) => { [INFO] [stderr] 667 | | let e = self.eval_entity(rng, ctx, ent); [INFO] [stderr] 668 | | self.point_of(e).expect("UH OH") [INFO] [stderr] ... | [INFO] [stderr] 688 | | }, [INFO] [stderr] 689 | | } [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] 665 | match *location { [INFO] [stderr] 666 | AtEntity(ref ent) => { [INFO] [stderr] 667 | let e = self.eval_entity(rng, ctx, ent); [INFO] [stderr] 668 | self.point_of(e).expect("UH OH") [INFO] [stderr] 669 | }, [INFO] [stderr] 670 | Midpoint(ref locs) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: called `.iter().nth()` on a Vec. Calling `.get()` is both faster and more readable [INFO] [stderr] --> src/play.rs:704:10 [INFO] [stderr] | [INFO] [stderr] 704 | *self.0.iter().nth(0) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_nth)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/play.rs:772:13 [INFO] [stderr] | [INFO] [stderr] 772 | / match r { [INFO] [stderr] 773 | | &Mana(x) => total_mana += x, [INFO] [stderr] 774 | | &Health(x) => total_health += x, [INFO] [stderr] 775 | | &BuffStacks(buff, x) => { [INFO] [stderr] ... | [INFO] [stderr] 782 | | }, [INFO] [stderr] 783 | | }; [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] 772 | match *r { [INFO] [stderr] 773 | Mana(x) => total_mana += x, [INFO] [stderr] 774 | Health(x) => total_health += x, [INFO] [stderr] 775 | BuffStacks(buff, x) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/play.rs:776:21 [INFO] [stderr] | [INFO] [stderr] 776 | / if !total_buffs.contains_key(&buff) { [INFO] [stderr] 777 | | total_buffs.insert(buff, x); [INFO] [stderr] 778 | | } else { [INFO] [stderr] 779 | | let val = total_buffs.get_mut(&buff).unwrap(); [INFO] [stderr] 780 | | *val += x; [INFO] [stderr] 781 | | }; [INFO] [stderr] | |_____________________^ help: consider using: `total_buffs.entry(buff)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/play.rs:914:16 [INFO] [stderr] | [INFO] [stderr] 914 | if let Some(_) = e.update_args() { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 915 | | use self::WasdDirection::*; [INFO] [stderr] 916 | | use ::std::f32::consts::PI; [INFO] [stderr] 917 | | let mut flag = false; [INFO] [stderr] ... | [INFO] [stderr] 936 | | space.tick(); [INFO] [stderr] 937 | | } [INFO] [stderr] | |_________- help: try this: `if e.update_args().is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/play.rs:938:16 [INFO] [stderr] | [INFO] [stderr] 938 | if let Some(_) = e.render_args() { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 939 | | window.draw_2d(&e, | _ , graphics| clear([0.0; 4], graphics)); [INFO] [stderr] 940 | | render_space(&e, &mut window, &space, &sprites); [INFO] [stderr] 941 | | } [INFO] [stderr] | |_________- help: try this: `if e.render_args().is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1024:21 [INFO] [stderr] | [INFO] [stderr] 1024 | pt.0 as f64 - (wiz_sprite.center.0 as f64), [INFO] [stderr] | ^^^^^^^^^^^ help: try: `f64::from(pt.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1024:35 [INFO] [stderr] | [INFO] [stderr] 1024 | pt.0 as f64 - (wiz_sprite.center.0 as f64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(wiz_sprite.center.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1025:21 [INFO] [stderr] | [INFO] [stderr] 1025 | pt.1 as f64 - (wiz_sprite.center.1 as f64), [INFO] [stderr] | ^^^^^^^^^^^ help: try: `f64::from(pt.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1025:35 [INFO] [stderr] | [INFO] [stderr] 1025 | pt.1 as f64 - (wiz_sprite.center.1 as f64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(wiz_sprite.center.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1031:21 [INFO] [stderr] | [INFO] [stderr] 1031 | pt.0 as f64 - (fireball.center.0 as f64), [INFO] [stderr] | ^^^^^^^^^^^ help: try: `f64::from(pt.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1031:35 [INFO] [stderr] | [INFO] [stderr] 1031 | pt.0 as f64 - (fireball.center.0 as f64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(fireball.center.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1032:21 [INFO] [stderr] | [INFO] [stderr] 1032 | pt.1 as f64 - (fireball.center.1 as f64), [INFO] [stderr] | ^^^^^^^^^^^ help: try: `f64::from(pt.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/play.rs:1032:35 [INFO] [stderr] | [INFO] [stderr] 1032 | pt.1 as f64 - (fireball.center.1 as f64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(fireball.center.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:12:79 [INFO] [stderr] | [INFO] [stderr] 12 | on_cast: vec_instruction(rng, &mut counter, max_depth as i16-1, &mut slots.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `slots` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:14:83 [INFO] [stderr] | [INFO] [stderr] 14 | requires: Box::new(condition(rng, &mut counter, max_depth as i16-1, &mut slots.clone())), [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `slots` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:41:18 [INFO] [stderr] | [INFO] [stderr] 41 | let stored = slots.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try dereferencing it: `*slots` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/generate.rs:46:40 [INFO] [stderr] | [INFO] [stderr] 46 | while rng.gen_weighted_bool(2) || (v.len() > 0 && non_defs == 0) { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/generate.rs:160:78 [INFO] [stderr] | [INFO] [stderr] 160 | else if -3. <= est && est <= 10. && rng.gen_weighted_bool(3) {return ret} [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/generate.rs:159:43 [INFO] [stderr] | [INFO] [stderr] 159 | if 0. <= est && est <= 5. {return ret} [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/generate.rs:165:79 [INFO] [stderr] | [INFO] [stderr] 165 | else if -30. <= est && est <= 57. && rng.gen_weighted_bool(3) {return ret} [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: same as this [INFO] [stderr] --> src/generate.rs:164:44 [INFO] [stderr] | [INFO] [stderr] 164 | if 3. <= est && est <= 33. {return ret} [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/generate.rs:185:39 [INFO] [stderr] | [INFO] [stderr] 185 | while rng.gen_weighted_bool(2) || v.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/generate.rs:279:11 [INFO] [stderr] | [INFO] [stderr] 279 | while v.len() == 0 || rng.gen_weighted_bool(3) { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/generate.rs:295:11 [INFO] [stderr] | [INFO] [stderr] 295 | while v.len() == 0 || rng.gen_weighted_bool(4) { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:447:70 [INFO] [stderr] | [INFO] [stderr] 447 | on_create: vec_instruction(rng, counter, depth_left-1, &mut just_me.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `just_me` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:449:69 [INFO] [stderr] | [INFO] [stderr] 449 | collides_with: entity_set(rng, counter, depth_left-1, &mut just_me.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `just_me` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:450:71 [INFO] [stderr] | [INFO] [stderr] 450 | on_destroy: vec_instruction(rng, counter, depth_left-1, &mut just_me.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `just_me` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:451:62 [INFO] [stderr] | [INFO] [stderr] 451 | lifetime: discrete(rng, counter, depth_left-1, &mut just_me.clone(), DiscreteContext::Threeish), [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `just_me` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generate.rs:507:5 [INFO] [stderr] | [INFO] [stderr] 507 | / match disc { [INFO] [stderr] 508 | | &mut Discrete::Sum(ref vec) if vec.len() == 1 => { [INFO] [stderr] 509 | | repl = Some(vec[0].clone()); [INFO] [stderr] 510 | | }, [INFO] [stderr] 511 | | _ => (), [INFO] [stderr] 512 | | }; [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] 507 | match *disc { [INFO] [stderr] 508 | Discrete::Sum(ref vec) if vec.len() == 1 => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generate.rs:521:5 [INFO] [stderr] | [INFO] [stderr] 521 | / match ins { [INFO] [stderr] 522 | | &mut Instruction::MoveEntity( [INFO] [stderr] 523 | | ref x, [INFO] [stderr] 524 | | Location::AtEntity(ref y) [INFO] [stderr] ... | [INFO] [stderr] 528 | | _ => (), [INFO] [stderr] 529 | | }; [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] 521 | match *ins { [INFO] [stderr] 522 | Instruction::MoveEntity( [INFO] [stderr] 523 | ref x, [INFO] [stderr] 524 | Location::AtEntity(ref y) [INFO] [stderr] 525 | ) if x == y => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generate.rs:536:5 [INFO] [stderr] | [INFO] [stderr] 536 | / match cond { [INFO] [stderr] 537 | | &mut Condition::And(ref vec) if vec.len() == 1 => { [INFO] [stderr] 538 | | repl = Some(vec[0].clone()); [INFO] [stderr] 539 | | }, [INFO] [stderr] ... | [INFO] [stderr] 543 | | _ => (), [INFO] [stderr] 544 | | }; [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] 536 | match *cond { [INFO] [stderr] 537 | Condition::And(ref vec) if vec.len() == 1 => { [INFO] [stderr] 538 | repl = Some(vec[0].clone()); [INFO] [stderr] 539 | }, [INFO] [stderr] 540 | Condition::Or(ref vec) if vec.len() == 1 => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generate.rs:553:9 [INFO] [stderr] | [INFO] [stderr] 553 | / match self { [INFO] [stderr] 554 | | &Const(x) => x as f32, [INFO] [stderr] 555 | | &Range(x, y) => (x + y) as f32 * 0.5, [INFO] [stderr] 556 | | &WithinPercent(x, _) => x as f32, [INFO] [stderr] ... | [INFO] [stderr] 588 | | &LoadFrom(_) => 10.0, [INFO] [stderr] 589 | | } [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] 553 | match *self { [INFO] [stderr] 554 | Const(x) => x as f32, [INFO] [stderr] 555 | Range(x, y) => (x + y) as f32 * 0.5, [INFO] [stderr] 556 | WithinPercent(x, _) => x as f32, [INFO] [stderr] 557 | Div(ref a, ref b) => a.estimate() / { [INFO] [stderr] 558 | let z = b.estimate(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:12:79 [INFO] [stderr] | [INFO] [stderr] 12 | on_cast: vec_instruction(rng, &mut counter, max_depth as i16-1, &mut slots.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `slots` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:14:83 [INFO] [stderr] | [INFO] [stderr] 14 | requires: Box::new(condition(rng, &mut counter, max_depth as i16-1, &mut slots.clone())), [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `slots` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:41:18 [INFO] [stderr] | [INFO] [stderr] 41 | let stored = slots.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try dereferencing it: `*slots` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/printing.rs:40:9 [INFO] [stderr] | [INFO] [stderr] 40 | / match self { [INFO] [stderr] 41 | | &LoadEntity(ref x) => write!(fmt, "LoadEntity({:?})", x), [INFO] [stderr] 42 | | &FirstOf(ref a) => { [INFO] [stderr] 43 | | fmt.debug_tuple("FirstOf") [INFO] [stderr] ... | [INFO] [stderr] 57 | | // }, [INFO] [stderr] 58 | | } [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] 40 | match *self { [INFO] [stderr] 41 | LoadEntity(ref x) => write!(fmt, "LoadEntity({:?})", x), [INFO] [stderr] 42 | FirstOf(ref a) => { [INFO] [stderr] 43 | fmt.debug_tuple("FirstOf") [INFO] [stderr] 44 | .field(&a).finish() [INFO] [stderr] 45 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/generate.rs:46:40 [INFO] [stderr] | [INFO] [stderr] 46 | while rng.gen_weighted_bool(2) || (v.len() > 0 && non_defs == 0) { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/printing.rs:65:9 [INFO] [stderr] | [INFO] [stderr] 65 | / match self { [INFO] [stderr] 66 | | &Const(ref x) => write!(fmt, "Const({:?})", x), [INFO] [stderr] 67 | | &Range(ref x, ref y) => write!(fmt, "Range({:?},{:?})", x, y), [INFO] [stderr] 68 | | &WithinPercent(ref x, ref y) => write!(fmt, "WithinPercent({:?},{:?})", x, y), [INFO] [stderr] ... | [INFO] [stderr] 79 | | &LoadFrom(ref x) => write!(fmt, "LoadFrom({:?})", x), [INFO] [stderr] 80 | | } [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] 65 | match *self { [INFO] [stderr] 66 | Const(ref x) => write!(fmt, "Const({:?})", x), [INFO] [stderr] 67 | Range(ref x, ref y) => write!(fmt, "Range({:?},{:?})", x, y), [INFO] [stderr] 68 | WithinPercent(ref x, ref y) => write!(fmt, "WithinPercent({:?},{:?})", x, y), [INFO] [stderr] 69 | Div(ref a, ref b) => fmt.debug_tuple("Div").field(a).field(b).finish(), [INFO] [stderr] 70 | Sum(ref a) => fmt.debug_tuple("Sum") .field(a).finish(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/printing.rs:87:9 [INFO] [stderr] | [INFO] [stderr] 87 | / match self { [INFO] [stderr] 88 | | &ESet(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 89 | | &E(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 90 | | &D(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 91 | | &L(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 92 | | } [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] 87 | match *self { [INFO] [stderr] 88 | ESet(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 89 | E(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 90 | D(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 91 | L(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/generate.rs:160:78 [INFO] [stderr] | [INFO] [stderr] 160 | else if -3. <= est && est <= 10. && rng.gen_weighted_bool(3) {return ret} [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/generate.rs:159:43 [INFO] [stderr] | [INFO] [stderr] 159 | if 0. <= est && est <= 5. {return ret} [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/generate.rs:165:79 [INFO] [stderr] | [INFO] [stderr] 165 | else if -30. <= est && est <= 57. && rng.gen_weighted_bool(3) {return ret} [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: same as this [INFO] [stderr] --> src/generate.rs:164:44 [INFO] [stderr] | [INFO] [stderr] 164 | if 3. <= est && est <= 33. {return ret} [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/generate.rs:185:39 [INFO] [stderr] | [INFO] [stderr] 185 | while rng.gen_weighted_bool(2) || v.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/movement_2d.rs:34:20 [INFO] [stderr] | [INFO] [stderr] 34 | pub fn rotated(&self, rotation: f32) -> Vector { [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/movement_2d.rs:44:18 [INFO] [stderr] | [INFO] [stderr] 44 | pub fn speed(&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: length comparison to zero [INFO] [stderr] --> src/generate.rs:279:11 [INFO] [stderr] | [INFO] [stderr] 279 | while v.len() == 0 || rng.gen_weighted_bool(3) { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/movement_2d.rs:58:13 [INFO] [stderr] | [INFO] [stderr] 58 | *self = *self * (speed / old_speed); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `*self *= (speed / old_speed)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/movement_2d.rs:88:19 [INFO] [stderr] | [INFO] [stderr] 88 | pub fn act_on(&self, pt: &mut Point) { [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: length comparison to zero [INFO] [stderr] --> src/generate.rs:295:11 [INFO] [stderr] | [INFO] [stderr] 295 | while v.len() == 0 || rng.gen_weighted_bool(4) { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/movement_2d.rs:160:20 [INFO] [stderr] | [INFO] [stderr] 160 | pub fn dist_to(&self, other: &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/movement_2d.rs:160:34 [INFO] [stderr] | [INFO] [stderr] 160 | pub fn dist_to(&self, other: &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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/movement_2d.rs:164:26 [INFO] [stderr] | [INFO] [stderr] 164 | pub fn midpoint(pts: &Vec) -> Option { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Point]` [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: length comparison to zero [INFO] [stderr] --> src/movement_2d.rs:165:12 [INFO] [stderr] | [INFO] [stderr] 165 | if pts.len() == 0 { return None } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `pts.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/movement_2d.rs:176:25 [INFO] [stderr] | [INFO] [stderr] 176 | pub fn direction_to(&self, other: &Point) -> 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/movement_2d.rs:176:39 [INFO] [stderr] | [INFO] [stderr] 176 | pub fn direction_to(&self, other: &Point) -> f32 { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Point` [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/movement_2d.rs:181:44 [INFO] [stderr] | [INFO] [stderr] 181 | pub fn apply_vector(&mut self, vector: &Vector) { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Vector` [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/movement_2d.rs:186:22 [INFO] [stderr] | [INFO] [stderr] 186 | pub fn vector_to(&self, other: &Point) -> Vector { [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/movement_2d.rs:186:36 [INFO] [stderr] | [INFO] [stderr] 186 | pub fn vector_to(&self, other: &Point) -> Vector { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Point` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:447:70 [INFO] [stderr] | [INFO] [stderr] 447 | on_create: vec_instruction(rng, counter, depth_left-1, &mut just_me.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `just_me` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:449:69 [INFO] [stderr] | [INFO] [stderr] 449 | collides_with: entity_set(rng, counter, depth_left-1, &mut just_me.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `just_me` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:450:71 [INFO] [stderr] | [INFO] [stderr] 450 | on_destroy: vec_instruction(rng, counter, depth_left-1, &mut just_me.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `just_me` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/generate.rs:451:62 [INFO] [stderr] | [INFO] [stderr] 451 | lifetime: discrete(rng, counter, depth_left-1, &mut just_me.clone(), DiscreteContext::Threeish), [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `just_me` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generate.rs:507:5 [INFO] [stderr] | [INFO] [stderr] 507 | / match disc { [INFO] [stderr] 508 | | &mut Discrete::Sum(ref vec) if vec.len() == 1 => { [INFO] [stderr] 509 | | repl = Some(vec[0].clone()); [INFO] [stderr] 510 | | }, [INFO] [stderr] 511 | | _ => (), [INFO] [stderr] 512 | | }; [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] 507 | match *disc { [INFO] [stderr] 508 | Discrete::Sum(ref vec) if vec.len() == 1 => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generate.rs:521:5 [INFO] [stderr] | [INFO] [stderr] 521 | / match ins { [INFO] [stderr] 522 | | &mut Instruction::MoveEntity( [INFO] [stderr] 523 | | ref x, [INFO] [stderr] 524 | | Location::AtEntity(ref y) [INFO] [stderr] ... | [INFO] [stderr] 528 | | _ => (), [INFO] [stderr] 529 | | }; [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] 521 | match *ins { [INFO] [stderr] 522 | Instruction::MoveEntity( [INFO] [stderr] 523 | ref x, [INFO] [stderr] 524 | Location::AtEntity(ref y) [INFO] [stderr] 525 | ) if x == y => { [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/wasd_set.rs:52:25 [INFO] [stderr] | [INFO] [stderr] 52 | pub fn is_pressed_w(&self) -> 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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/wasd_set.rs:56:25 [INFO] [stderr] | [INFO] [stderr] 56 | pub fn is_pressed_a(&self) -> 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/generate.rs:536:5 [INFO] [stderr] | [INFO] [stderr] 536 | / match cond { [INFO] [stderr] 537 | | &mut Condition::And(ref vec) if vec.len() == 1 => { [INFO] [stderr] 538 | | repl = Some(vec[0].clone()); [INFO] [stderr] 539 | | }, [INFO] [stderr] ... | [INFO] [stderr] 543 | | _ => (), [INFO] [stderr] 544 | | }; [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] 536 | match *cond { [INFO] [stderr] 537 | Condition::And(ref vec) if vec.len() == 1 => { [INFO] [stderr] 538 | repl = Some(vec[0].clone()); [INFO] [stderr] 539 | }, [INFO] [stderr] 540 | Condition::Or(ref vec) if vec.len() == 1 => { [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/wasd_set.rs:60:25 [INFO] [stderr] | [INFO] [stderr] 60 | pub fn is_pressed_s(&self) -> 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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/wasd_set.rs:64:25 [INFO] [stderr] | [INFO] [stderr] 64 | pub fn is_pressed_d(&self) -> 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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/wasd_set.rs:69:22 [INFO] [stderr] | [INFO] [stderr] 69 | pub fn direction(&self) -> WasdDirection { [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/generate.rs:553:9 [INFO] [stderr] | [INFO] [stderr] 553 | / match self { [INFO] [stderr] 554 | | &Const(x) => x as f32, [INFO] [stderr] 555 | | &Range(x, y) => (x + y) as f32 * 0.5, [INFO] [stderr] 556 | | &WithinPercent(x, _) => x as f32, [INFO] [stderr] ... | [INFO] [stderr] 588 | | &LoadFrom(_) => 10.0, [INFO] [stderr] 589 | | } [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] 553 | match *self { [INFO] [stderr] 554 | Const(x) => x as f32, [INFO] [stderr] 555 | Range(x, y) => (x + y) as f32 * 0.5, [INFO] [stderr] 556 | WithinPercent(x, _) => x as f32, [INFO] [stderr] 557 | Div(ref a, ref b) => a.estimate() / { [INFO] [stderr] 558 | let z = b.estimate(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/printing.rs:40:9 [INFO] [stderr] | [INFO] [stderr] 40 | / match self { [INFO] [stderr] 41 | | &LoadEntity(ref x) => write!(fmt, "LoadEntity({:?})", x), [INFO] [stderr] 42 | | &FirstOf(ref a) => { [INFO] [stderr] 43 | | fmt.debug_tuple("FirstOf") [INFO] [stderr] ... | [INFO] [stderr] 57 | | // }, [INFO] [stderr] 58 | | } [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] 40 | match *self { [INFO] [stderr] 41 | LoadEntity(ref x) => write!(fmt, "LoadEntity({:?})", x), [INFO] [stderr] 42 | FirstOf(ref a) => { [INFO] [stderr] 43 | fmt.debug_tuple("FirstOf") [INFO] [stderr] 44 | .field(&a).finish() [INFO] [stderr] 45 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/printing.rs:65:9 [INFO] [stderr] | [INFO] [stderr] 65 | / match self { [INFO] [stderr] 66 | | &Const(ref x) => write!(fmt, "Const({:?})", x), [INFO] [stderr] 67 | | &Range(ref x, ref y) => write!(fmt, "Range({:?},{:?})", x, y), [INFO] [stderr] 68 | | &WithinPercent(ref x, ref y) => write!(fmt, "WithinPercent({:?},{:?})", x, y), [INFO] [stderr] ... | [INFO] [stderr] 79 | | &LoadFrom(ref x) => write!(fmt, "LoadFrom({:?})", x), [INFO] [stderr] 80 | | } [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] 65 | match *self { [INFO] [stderr] 66 | Const(ref x) => write!(fmt, "Const({:?})", x), [INFO] [stderr] 67 | Range(ref x, ref y) => write!(fmt, "Range({:?},{:?})", x, y), [INFO] [stderr] 68 | WithinPercent(ref x, ref y) => write!(fmt, "WithinPercent({:?},{:?})", x, y), [INFO] [stderr] 69 | Div(ref a, ref b) => fmt.debug_tuple("Div").field(a).field(b).finish(), [INFO] [stderr] 70 | Sum(ref a) => fmt.debug_tuple("Sum") .field(a).finish(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/printing.rs:87:9 [INFO] [stderr] | [INFO] [stderr] 87 | / match self { [INFO] [stderr] 88 | | &ESet(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 89 | | &E(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 90 | | &D(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 91 | | &L(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 92 | | } [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] 87 | match *self { [INFO] [stderr] 88 | ESet(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 89 | E(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 90 | D(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] 91 | L(ref a, ref b) => fmt.debug_tuple(&format!("{:?}", a)).field(b).finish(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/movement_2d.rs:34:20 [INFO] [stderr] | [INFO] [stderr] 34 | pub fn rotated(&self, rotation: f32) -> Vector { [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/movement_2d.rs:44:18 [INFO] [stderr] | [INFO] [stderr] 44 | pub fn speed(&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: manual implementation of an assign operation [INFO] [stderr] --> src/movement_2d.rs:58:13 [INFO] [stderr] | [INFO] [stderr] 58 | *self = *self * (speed / old_speed); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `*self *= (speed / old_speed)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/movement_2d.rs:88:19 [INFO] [stderr] | [INFO] [stderr] 88 | pub fn act_on(&self, pt: &mut Point) { [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/movement_2d.rs:160:20 [INFO] [stderr] | [INFO] [stderr] 160 | pub fn dist_to(&self, other: &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/movement_2d.rs:160:34 [INFO] [stderr] | [INFO] [stderr] 160 | pub fn dist_to(&self, other: &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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/movement_2d.rs:164:26 [INFO] [stderr] | [INFO] [stderr] 164 | pub fn midpoint(pts: &Vec) -> Option { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Point]` [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: length comparison to zero [INFO] [stderr] --> src/movement_2d.rs:165:12 [INFO] [stderr] | [INFO] [stderr] 165 | if pts.len() == 0 { return None } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `pts.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/movement_2d.rs:176:25 [INFO] [stderr] | [INFO] [stderr] 176 | pub fn direction_to(&self, other: &Point) -> 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/movement_2d.rs:176:39 [INFO] [stderr] | [INFO] [stderr] 176 | pub fn direction_to(&self, other: &Point) -> f32 { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Point` [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/movement_2d.rs:181:44 [INFO] [stderr] | [INFO] [stderr] 181 | pub fn apply_vector(&mut self, vector: &Vector) { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Vector` [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/movement_2d.rs:186:22 [INFO] [stderr] | [INFO] [stderr] 186 | pub fn vector_to(&self, other: &Point) -> Vector { [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/movement_2d.rs:186:36 [INFO] [stderr] | [INFO] [stderr] 186 | pub fn vector_to(&self, other: &Point) -> Vector { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Point` [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] error: Could not compile `spellcraft`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/wasd_set.rs:52:25 [INFO] [stderr] | [INFO] [stderr] 52 | pub fn is_pressed_w(&self) -> 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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/wasd_set.rs:56:25 [INFO] [stderr] | [INFO] [stderr] 56 | pub fn is_pressed_a(&self) -> 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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/wasd_set.rs:60:25 [INFO] [stderr] | [INFO] [stderr] 60 | pub fn is_pressed_s(&self) -> 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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/wasd_set.rs:64:25 [INFO] [stderr] | [INFO] [stderr] 64 | pub fn is_pressed_d(&self) -> 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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/wasd_set.rs:69:22 [INFO] [stderr] | [INFO] [stderr] 69 | pub fn direction(&self) -> WasdDirection { [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] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `spellcraft`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "4025beb865f66d7141d145c7339689ce0923bd763e7807f0ecf1626de182399b"` [INFO] running `"docker" "rm" "-f" "4025beb865f66d7141d145c7339689ce0923bd763e7807f0ecf1626de182399b"` [INFO] [stdout] 4025beb865f66d7141d145c7339689ce0923bd763e7807f0ecf1626de182399b