[INFO] updating cached repository sndnv/rowe [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/sndnv/rowe [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/sndnv/rowe" "work/ex/clippy-test-run/sources/stable/gh/sndnv/rowe"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/sndnv/rowe'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/sndnv/rowe" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/sndnv/rowe"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/sndnv/rowe'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] d440e4defd69db839c226419c006705b9decc247 [INFO] sha for GitHub repo sndnv/rowe: d440e4defd69db839c226419c006705b9decc247 [INFO] validating manifest of sndnv/rowe 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 sndnv/rowe 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 sndnv/rowe [INFO] finished frobbing sndnv/rowe [INFO] frobbed toml for sndnv/rowe written to work/ex/clippy-test-run/sources/stable/gh/sndnv/rowe/Cargo.toml [INFO] started frobbing sndnv/rowe [INFO] finished frobbing sndnv/rowe [INFO] frobbed toml for sndnv/rowe written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/sndnv/rowe/Cargo.toml [INFO] crate sndnv/rowe 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 sndnv/rowe against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/sndnv/rowe:/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] 8b84786a8cdfe9765c5373c12070aaab772d696a23622749a8742d63b347ac10 [INFO] running `"docker" "start" "-a" "8b84786a8cdfe9765c5373c12070aaab772d696a23622749a8742d63b347ac10"` [INFO] [stderr] Compiling matrixmultiply v0.1.13 [INFO] [stderr] Checking either v1.2.0 [INFO] [stderr] Compiling ndarray v0.10.10 [INFO] [stderr] Checking fixedbitset v0.1.8 [INFO] [stderr] Checking num-complex v0.1.40 [INFO] [stderr] Checking uuid v0.5.1 [INFO] [stderr] Checking itertools v0.6.5 [INFO] [stderr] Checking pathfinding v0.2.2 [INFO] [stderr] Checking owe v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/map/grid.rs:219:44 [INFO] [stderr] | [INFO] [stderr] 219 | pub fn clear_global_effects(&mut self) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/map/grid.rs:219:44 [INFO] [stderr] | [INFO] [stderr] 219 | pub fn clear_global_effects(&mut self) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unused variable: `walker` [INFO] [stderr] --> src/map/cursor.rs:235:77 [INFO] [stderr] | [INFO] [stderr] 235 | p.produce_walker(&*grid_entity.entity).map(|walker| { [INFO] [stderr] | ^^^^^^ help: consider using `_walker` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `state` [INFO] [stderr] --> src/map/cursor.rs:246:46 [INFO] [stderr] | [INFO] [stderr] 246 | Entity::Walker { ref mut state, .. } => { [INFO] [stderr] | ^^^^^ help: try ignoring the field: `state: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `walker` [INFO] [stderr] --> src/map/cursor.rs:235:77 [INFO] [stderr] | [INFO] [stderr] 235 | p.produce_walker(&*grid_entity.entity).map(|walker| { [INFO] [stderr] | ^^^^^^ help: consider using `_walker` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `state` [INFO] [stderr] --> src/map/cursor.rs:246:46 [INFO] [stderr] | [INFO] [stderr] 246 | Entity::Walker { ref mut state, .. } => { [INFO] [stderr] | ^^^^^ help: try ignoring the field: `state: _` [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map/cursor.rs:20:42 [INFO] [stderr] | [INFO] [stderr] 20 | let (next_cell_x, next_cell_y) = match direction { [INFO] [stderr] | __________________________________________^ [INFO] [stderr] 21 | | //cursor moves up and left [INFO] [stderr] 22 | | &Direction::Up => { [INFO] [stderr] 23 | | if cell_y == 0 { [INFO] [stderr] ... | [INFO] [stderr] 115 | | } [INFO] [stderr] 116 | | }; [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] 20 | let (next_cell_x, next_cell_y) = match *direction { [INFO] [stderr] 21 | //cursor moves up and left [INFO] [stderr] 22 | Direction::Up => { [INFO] [stderr] 23 | if cell_y == 0 { [INFO] [stderr] 24 | //reached top row [INFO] [stderr] 25 | ( [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `new` [INFO] [stderr] --> src/map/cursor.rs:185:40 [INFO] [stderr] | [INFO] [stderr] 185 | let exchange_updates = match updated_entity { [INFO] [stderr] | ________________________________________^ [INFO] [stderr] 186 | | Entity::Resource { ref props, ref mut producer, ref mut state, .. } => { [INFO] [stderr] 187 | | producer.as_mut() [INFO] [stderr] 188 | | .and_then(|p| { [INFO] [stderr] ... | [INFO] [stderr] 253 | | _ => None //do nothing [INFO] [stderr] 254 | | }.unwrap_or(Vec::new()); [INFO] [stderr] | |_______________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 185 | let exchange_updates = match updated_entity { [INFO] [stderr] 186 | Entity::Resource { ref props, ref mut producer, ref mut state, .. } => { [INFO] [stderr] 187 | producer.as_mut() [INFO] [stderr] 188 | .and_then(|p| { [INFO] [stderr] 189 | let exchange_update = p.produce_commodity(&*grid_entity.entity) [INFO] [stderr] 190 | .map(|stage| { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/map/cursor.rs:200:33 [INFO] [stderr] | [INFO] [stderr] 200 | props.replenish_amount [INFO] [stderr] | _________________________________^ [INFO] [stderr] | |_________________________________| [INFO] [stderr] | || [INFO] [stderr] 201 | || .map(|amount| { [INFO] [stderr] 202 | || if state.current_amount + amount < props.max_amount { [INFO] [stderr] 203 | || state.current_amount += amount; [INFO] [stderr] ... || [INFO] [stderr] 206 | || } [INFO] [stderr] 207 | || }); [INFO] [stderr] | ||______________________________________^- help: try this: `if let Some(amount) = props.replenish_amount { ... }` [INFO] [stderr] | |_______________________________________| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/map/cursor.rs:235:33 [INFO] [stderr] | [INFO] [stderr] 235 | p.produce_walker(&*grid_entity.entity).map(|walker| { [INFO] [stderr] | _________________________________^ [INFO] [stderr] | |_________________________________| [INFO] [stderr] | || [INFO] [stderr] 236 | || //TODO - add walker to grid [INFO] [stderr] 237 | || //TODO - add walker effects to grid [INFO] [stderr] 238 | || }); [INFO] [stderr] | ||__________________________________^- help: try this: `if let Some(walker) = p.produce_walker(&*grid_entity.entity) { ... }` [INFO] [stderr] | |___________________________________| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/map/grid.rs:81:49 [INFO] [stderr] | [INFO] [stderr] 81 | if cells.iter().all(|c| { [INFO] [stderr] | _________________________________________________^ [INFO] [stderr] 82 | | let current_cell_state = self.cell_state(*c); [INFO] [stderr] 83 | | current_cell_state == CellState::AvailableEmpty || current_cell_state == CellState::AvailableOccupied [INFO] [stderr] 84 | | }) { [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/map/grid.rs:265:17 [INFO] [stderr] | [INFO] [stderr] 265 | / neighbours.iter() [INFO] [stderr] 266 | | .find(|&&neighbour| { [INFO] [stderr] 267 | | self.cells.get(neighbour) [INFO] [stderr] 268 | | .and_then(|cell: &Cell| { [INFO] [stderr] ... | [INFO] [stderr] 277 | | }) [INFO] [stderr] 278 | | .map(|&neighbour| neighbour) [INFO] [stderr] | |________________________________________________^ [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] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 265 | neighbours.iter() [INFO] [stderr] 266 | .find(|&&neighbour| { [INFO] [stderr] 267 | self.cells.get(neighbour) [INFO] [stderr] 268 | .and_then(|cell: &Cell| { [INFO] [stderr] 269 | cell.entities.values().find(|grid_entity| { [INFO] [stderr] 270 | match *grid_entity.entity { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/map/grid.rs:300:9 [INFO] [stderr] | [INFO] [stderr] 300 | / self.cells.indexed_iter() [INFO] [stderr] 301 | | .fold( [INFO] [stderr] 302 | | HashMap::new(), [INFO] [stderr] 303 | | |mut acc: HashMap, (index, cell)| { [INFO] [stderr] ... | [INFO] [stderr] 327 | | .values() [INFO] [stderr] 328 | | .map(|v| *v) [INFO] [stderr] | |________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 300 | self.cells.indexed_iter() [INFO] [stderr] 301 | .fold( [INFO] [stderr] 302 | HashMap::new(), [INFO] [stderr] 303 | |mut acc: HashMap, (index, cell)| { [INFO] [stderr] 304 | cell.entities.iter().for_each(|(id, grid_entity)| { [INFO] [stderr] 305 | match *grid_entity.entity { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/map/grid.rs:376:17 [INFO] [stderr] | [INFO] [stderr] 376 | / match self.cells[cell].active_effects.iter() [INFO] [stderr] 377 | | .position(|e| { [INFO] [stderr] 378 | | Rc::ptr_eq(e, &effect) [INFO] [stderr] 379 | | }) { [INFO] [stderr] 380 | | Some(_) => true, [INFO] [stderr] 381 | | None => false [INFO] [stderr] 382 | | } [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] help: try this [INFO] [stderr] | [INFO] [stderr] 376 | self.cells[cell].active_effects.iter() [INFO] [stderr] 377 | .position(|e| { [INFO] [stderr] 378 | Rc::ptr_eq(e, &effect) [INFO] [stderr] 379 | }).is_some() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/map/grid.rs:388:9 [INFO] [stderr] | [INFO] [stderr] 388 | / match self.active_effects.iter() [INFO] [stderr] 389 | | .position(|e| { [INFO] [stderr] 390 | | Rc::ptr_eq(e, effect) [INFO] [stderr] 391 | | }) { [INFO] [stderr] 392 | | Some(_) => true, [INFO] [stderr] 393 | | None => false [INFO] [stderr] 394 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 388 | self.active_effects.iter() [INFO] [stderr] 389 | .position(|e| { [INFO] [stderr] 390 | Rc::ptr_eq(e, effect) [INFO] [stderr] 391 | }).is_some() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map/cursor.rs:20:42 [INFO] [stderr] | [INFO] [stderr] 20 | let (next_cell_x, next_cell_y) = match direction { [INFO] [stderr] | __________________________________________^ [INFO] [stderr] 21 | | //cursor moves up and left [INFO] [stderr] 22 | | &Direction::Up => { [INFO] [stderr] 23 | | if cell_y == 0 { [INFO] [stderr] ... | [INFO] [stderr] 115 | | } [INFO] [stderr] 116 | | }; [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] 20 | let (next_cell_x, next_cell_y) = match *direction { [INFO] [stderr] 21 | //cursor moves up and left [INFO] [stderr] 22 | Direction::Up => { [INFO] [stderr] 23 | if cell_y == 0 { [INFO] [stderr] 24 | //reached top row [INFO] [stderr] 25 | ( [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `new` [INFO] [stderr] --> src/map/cursor.rs:185:40 [INFO] [stderr] | [INFO] [stderr] 185 | let exchange_updates = match updated_entity { [INFO] [stderr] | ________________________________________^ [INFO] [stderr] 186 | | Entity::Resource { ref props, ref mut producer, ref mut state, .. } => { [INFO] [stderr] 187 | | producer.as_mut() [INFO] [stderr] 188 | | .and_then(|p| { [INFO] [stderr] ... | [INFO] [stderr] 253 | | _ => None //do nothing [INFO] [stderr] 254 | | }.unwrap_or(Vec::new()); [INFO] [stderr] | |_______________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 185 | let exchange_updates = match updated_entity { [INFO] [stderr] 186 | Entity::Resource { ref props, ref mut producer, ref mut state, .. } => { [INFO] [stderr] 187 | producer.as_mut() [INFO] [stderr] 188 | .and_then(|p| { [INFO] [stderr] 189 | let exchange_update = p.produce_commodity(&*grid_entity.entity) [INFO] [stderr] 190 | .map(|stage| { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/map/cursor.rs:200:33 [INFO] [stderr] | [INFO] [stderr] 200 | props.replenish_amount [INFO] [stderr] | _________________________________^ [INFO] [stderr] | |_________________________________| [INFO] [stderr] | || [INFO] [stderr] 201 | || .map(|amount| { [INFO] [stderr] 202 | || if state.current_amount + amount < props.max_amount { [INFO] [stderr] 203 | || state.current_amount += amount; [INFO] [stderr] ... || [INFO] [stderr] 206 | || } [INFO] [stderr] 207 | || }); [INFO] [stderr] | ||______________________________________^- help: try this: `if let Some(amount) = props.replenish_amount { ... }` [INFO] [stderr] | |_______________________________________| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/map/cursor.rs:235:33 [INFO] [stderr] | [INFO] [stderr] 235 | p.produce_walker(&*grid_entity.entity).map(|walker| { [INFO] [stderr] | _________________________________^ [INFO] [stderr] | |_________________________________| [INFO] [stderr] | || [INFO] [stderr] 236 | || //TODO - add walker to grid [INFO] [stderr] 237 | || //TODO - add walker effects to grid [INFO] [stderr] 238 | || }); [INFO] [stderr] | ||__________________________________^- help: try this: `if let Some(walker) = p.produce_walker(&*grid_entity.entity) { ... }` [INFO] [stderr] | |___________________________________| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `production::exchange::CommodityExchange` [INFO] [stderr] --> src/production/exchange.rs:39:5 [INFO] [stderr] | [INFO] [stderr] 39 | / pub fn new() -> CommodityExchange { [INFO] [stderr] 40 | | CommodityExchange { [INFO] [stderr] 41 | | required: HashMap::new(), [INFO] [stderr] 42 | | available: HashMap::new(), [INFO] [stderr] ... | [INFO] [stderr] 48 | | } [INFO] [stderr] 49 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 26 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/map/grid.rs:81:49 [INFO] [stderr] | [INFO] [stderr] 81 | if cells.iter().all(|c| { [INFO] [stderr] | _________________________________________________^ [INFO] [stderr] 82 | | let current_cell_state = self.cell_state(*c); [INFO] [stderr] 83 | | current_cell_state == CellState::AvailableEmpty || current_cell_state == CellState::AvailableOccupied [INFO] [stderr] 84 | | }) { [INFO] [stderr] | |_________________________^ [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/production/exchange.rs:62:67 [INFO] [stderr] | [INFO] [stderr] 62 | .entry(commodity.name.clone()).or_insert_with(|| HashMap::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `HashMap::new` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/production/exchange.rs:92:17 [INFO] [stderr] | [INFO] [stderr] 92 | || Vec::new(), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove closure as shown: `Vec::new` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the HashMap [INFO] [stderr] --> src/production/exchange.rs:95:26 [INFO] [stderr] | [INFO] [stderr] 95 | .into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/production/exchange.rs:121:26 [INFO] [stderr] | [INFO] [stderr] 121 | ) [INFO] [stderr] | __________________________^ [INFO] [stderr] 122 | | .fold(0usize, |acc, current| acc + current) [INFO] [stderr] | |___________________________________________________________________^ help: try: `.sum()` [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 .into_iter() call is equivalent to .iter() and will not move the HashMap [INFO] [stderr] --> src/production/exchange.rs:116:26 [INFO] [stderr] | [INFO] [stderr] 116 | .into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/map/grid.rs:265:17 [INFO] [stderr] | [INFO] [stderr] 265 | / neighbours.iter() [INFO] [stderr] 266 | | .find(|&&neighbour| { [INFO] [stderr] 267 | | self.cells.get(neighbour) [INFO] [stderr] 268 | | .and_then(|cell: &Cell| { [INFO] [stderr] ... | [INFO] [stderr] 277 | | }) [INFO] [stderr] 278 | | .map(|&neighbour| neighbour) [INFO] [stderr] | |________________________________________________^ [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] warning: redundant closure found [INFO] [stderr] --> src/production/exchange.rs:265:17 [INFO] [stderr] | [INFO] [stderr] 265 | || Vec::new(), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove closure as shown: `Vec::new` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the HashMap [INFO] [stderr] --> src/production/exchange.rs:267:23 [INFO] [stderr] | [INFO] [stderr] 267 | v.into_iter().filter_map(|(_, entity)| entity.upgrade()).collect() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/production/exchange.rs:276:17 [INFO] [stderr] | [INFO] [stderr] 276 | || Vec::new(), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove closure as shown: `Vec::new` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the HashMap [INFO] [stderr] --> src/production/exchange.rs:278:23 [INFO] [stderr] | [INFO] [stderr] 278 | v.into_iter().filter_map(|(_, entity)| entity.upgrade()).collect() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 265 | neighbours.iter() [INFO] [stderr] 266 | .find(|&&neighbour| { [INFO] [stderr] 267 | self.cells.get(neighbour) [INFO] [stderr] 268 | .and_then(|cell: &Cell| { [INFO] [stderr] 269 | cell.entities.values().find(|grid_entity| { [INFO] [stderr] 270 | match *grid_entity.entity { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/map/grid.rs:300:9 [INFO] [stderr] | [INFO] [stderr] 300 | / self.cells.indexed_iter() [INFO] [stderr] 301 | | .fold( [INFO] [stderr] 302 | | HashMap::new(), [INFO] [stderr] 303 | | |mut acc: HashMap, (index, cell)| { [INFO] [stderr] ... | [INFO] [stderr] 327 | | .values() [INFO] [stderr] 328 | | .map(|v| *v) [INFO] [stderr] | |________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 300 | self.cells.indexed_iter() [INFO] [stderr] 301 | .fold( [INFO] [stderr] 302 | HashMap::new(), [INFO] [stderr] 303 | |mut acc: HashMap, (index, cell)| { [INFO] [stderr] 304 | cell.entities.iter().for_each(|(id, grid_entity)| { [INFO] [stderr] 305 | match *grid_entity.entity { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/map/grid.rs:376:17 [INFO] [stderr] | [INFO] [stderr] 376 | / match self.cells[cell].active_effects.iter() [INFO] [stderr] 377 | | .position(|e| { [INFO] [stderr] 378 | | Rc::ptr_eq(e, &effect) [INFO] [stderr] 379 | | }) { [INFO] [stderr] 380 | | Some(_) => true, [INFO] [stderr] 381 | | None => false [INFO] [stderr] 382 | | } [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] help: try this [INFO] [stderr] | [INFO] [stderr] 376 | self.cells[cell].active_effects.iter() [INFO] [stderr] 377 | .position(|e| { [INFO] [stderr] 378 | Rc::ptr_eq(e, &effect) [INFO] [stderr] 379 | }).is_some() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/map/grid.rs:388:9 [INFO] [stderr] | [INFO] [stderr] 388 | / match self.active_effects.iter() [INFO] [stderr] 389 | | .position(|e| { [INFO] [stderr] 390 | | Rc::ptr_eq(e, effect) [INFO] [stderr] 391 | | }) { [INFO] [stderr] 392 | | Some(_) => true, [INFO] [stderr] 393 | | None => false [INFO] [stderr] 394 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 388 | self.active_effects.iter() [INFO] [stderr] 389 | .position(|e| { [INFO] [stderr] 390 | Rc::ptr_eq(e, effect) [INFO] [stderr] 391 | }).is_some() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `production::exchange::CommodityExchange` [INFO] [stderr] --> src/production/exchange.rs:39:5 [INFO] [stderr] | [INFO] [stderr] 39 | / pub fn new() -> CommodityExchange { [INFO] [stderr] 40 | | CommodityExchange { [INFO] [stderr] 41 | | required: HashMap::new(), [INFO] [stderr] 42 | | available: HashMap::new(), [INFO] [stderr] ... | [INFO] [stderr] 48 | | } [INFO] [stderr] 49 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 26 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/production/exchange.rs:62:67 [INFO] [stderr] | [INFO] [stderr] 62 | .entry(commodity.name.clone()).or_insert_with(|| HashMap::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `HashMap::new` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/production/exchange.rs:92:17 [INFO] [stderr] | [INFO] [stderr] 92 | || Vec::new(), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove closure as shown: `Vec::new` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the HashMap [INFO] [stderr] --> src/production/exchange.rs:95:26 [INFO] [stderr] | [INFO] [stderr] 95 | .into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/production/exchange.rs:121:26 [INFO] [stderr] | [INFO] [stderr] 121 | ) [INFO] [stderr] | __________________________^ [INFO] [stderr] 122 | | .fold(0usize, |acc, current| acc + current) [INFO] [stderr] | |___________________________________________________________________^ help: try: `.sum()` [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 .into_iter() call is equivalent to .iter() and will not move the HashMap [INFO] [stderr] --> src/production/exchange.rs:116:26 [INFO] [stderr] | [INFO] [stderr] 116 | .into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/production/exchange.rs:265:17 [INFO] [stderr] | [INFO] [stderr] 265 | || Vec::new(), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove closure as shown: `Vec::new` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the HashMap [INFO] [stderr] --> src/production/exchange.rs:267:23 [INFO] [stderr] | [INFO] [stderr] 267 | v.into_iter().filter_map(|(_, entity)| entity.upgrade()).collect() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/production/exchange.rs:276:17 [INFO] [stderr] | [INFO] [stderr] 276 | || Vec::new(), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove closure as shown: `Vec::new` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the HashMap [INFO] [stderr] --> src/production/exchange.rs:278:23 [INFO] [stderr] | [INFO] [stderr] 278 | v.into_iter().filter_map(|(_, entity)| entity.upgrade()).collect() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> tests/setup/effects/mod.rs:12:42 [INFO] [stderr] | [INFO] [stderr] 12 | fn apply(&self, entity: &mut Entity) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> tests/setup/effects/mod.rs:30:42 [INFO] [stderr] | [INFO] [stderr] 30 | fn apply(&self, entity: &mut Entity) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> tests/setup/effects/mod.rs:45:42 [INFO] [stderr] | [INFO] [stderr] 45 | fn apply(&self, entity: &mut Entity) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> tests/setup/effects/mod.rs:12:42 [INFO] [stderr] | [INFO] [stderr] 12 | fn apply(&self, entity: &mut Entity) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> tests/setup/effects/mod.rs:30:42 [INFO] [stderr] | [INFO] [stderr] 30 | fn apply(&self, entity: &mut Entity) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> tests/setup/effects/mod.rs:45:42 [INFO] [stderr] | [INFO] [stderr] 45 | fn apply(&self, entity: &mut Entity) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> tests/setup/grid/mod.rs:306:31 [INFO] [stderr] | [INFO] [stderr] 306 | pub fn grid_with_effects() -> (map::Grid, map::Cursor, exchange::CommodityExchange, Vec>, HashMap<(usize, usize), Uuid>) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/setup/grid/mod.rs:450:9 [INFO] [stderr] | [INFO] [stderr] 450 | / match entity { [INFO] [stderr] 451 | | &Entity::Structure { ref state, ref props, .. } => { [INFO] [stderr] 452 | | if props.max_employees == state.current_employees { [INFO] [stderr] 453 | | Some(ProductionStage { [INFO] [stderr] ... | [INFO] [stderr] 463 | | _ => None //does nothing [INFO] [stderr] 464 | | } [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] 450 | match *entity { [INFO] [stderr] 451 | Entity::Structure { ref state, ref props, .. } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/setup/grid/mod.rs:484:9 [INFO] [stderr] | [INFO] [stderr] 484 | / match entity { [INFO] [stderr] 485 | | &Entity::Structure { .. } => { [INFO] [stderr] 486 | | if self.max_progress < self.current_progress { [INFO] [stderr] 487 | | self.current_progress += 1; [INFO] [stderr] ... | [INFO] [stderr] 499 | | _ => None //does nothing [INFO] [stderr] 500 | | } [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] 484 | match *entity { [INFO] [stderr] 485 | Entity::Structure { .. } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/setup/grid/mod.rs:517:9 [INFO] [stderr] | [INFO] [stderr] 517 | / match entity { [INFO] [stderr] 518 | | &Entity::Resource { .. } => { [INFO] [stderr] 519 | | Some(ProductionStage { [INFO] [stderr] 520 | | commodity: Commodity { name: "c2".to_owned(), amount: 1 }, [INFO] [stderr] ... | [INFO] [stderr] 526 | | _ => None //does nothing [INFO] [stderr] 527 | | } [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] 517 | match *entity { [INFO] [stderr] 518 | Entity::Resource { .. } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/setup/effects/mod.rs:13:9 [INFO] [stderr] | [INFO] [stderr] 13 | / match entity { [INFO] [stderr] 14 | | &mut Entity::Structure { ref mut state, ref props, .. } => { [INFO] [stderr] 15 | | if state.current_employees < props.max_employees { [INFO] [stderr] 16 | | state.current_employees += 1; [INFO] [stderr] ... | [INFO] [stderr] 24 | | _ => () //does nothing [INFO] [stderr] 25 | | } [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] 13 | match *entity { [INFO] [stderr] 14 | Entity::Structure { ref mut state, ref props, .. } => { [INFO] [stderr] 15 | if state.current_employees < props.max_employees { [INFO] [stderr] 16 | state.current_employees += 1; [INFO] [stderr] 17 | } [INFO] [stderr] 18 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> tests/setup/effects/mod.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match entity { [INFO] [stderr] 32 | | &mut Entity::Structure { ref mut state, .. } => { [INFO] [stderr] 33 | | state.risk.fire += 5; [INFO] [stderr] 34 | | if state.risk.damage < 3 { [INFO] [stderr] ... | [INFO] [stderr] 39 | | _ => () //does nothing [INFO] [stderr] 40 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 31 | if let &mut Entity::Structure { ref mut state, .. } = entity { [INFO] [stderr] 32 | state.risk.fire += 5; [INFO] [stderr] 33 | if state.risk.damage < 3 { [INFO] [stderr] 34 | state.risk.damage += 1; [INFO] [stderr] 35 | } [INFO] [stderr] 36 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/setup/effects/mod.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match entity { [INFO] [stderr] 32 | | &mut Entity::Structure { ref mut state, .. } => { [INFO] [stderr] 33 | | state.risk.fire += 5; [INFO] [stderr] 34 | | if state.risk.damage < 3 { [INFO] [stderr] ... | [INFO] [stderr] 39 | | _ => () //does nothing [INFO] [stderr] 40 | | } [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] 31 | match *entity { [INFO] [stderr] 32 | Entity::Structure { ref mut state, .. } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/setup/effects/mod.rs:46:9 [INFO] [stderr] | [INFO] [stderr] 46 | / match entity { [INFO] [stderr] 47 | | &mut Entity::Resource { ref mut state, .. } => { [INFO] [stderr] 48 | | if state.current_amount > 1 { [INFO] [stderr] 49 | | state.current_amount -= 2; [INFO] [stderr] ... | [INFO] [stderr] 60 | | _ => () //does nothing [INFO] [stderr] 61 | | } [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] 46 | match *entity { [INFO] [stderr] 47 | Entity::Resource { ref mut state, .. } => { [INFO] [stderr] 48 | if state.current_amount > 1 { [INFO] [stderr] 49 | state.current_amount -= 2; [INFO] [stderr] 50 | } [INFO] [stderr] 51 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> tests/grid.rs:657:57 [INFO] [stderr] | [INFO] [stderr] 657 | assert_eq!(g.remove_global_effect(&effects[1]), Err((GridError::EffectMissing))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_parens)] on by default [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> tests/grid.rs:657:57 [INFO] [stderr] | [INFO] [stderr] 657 | assert_eq!(g.remove_global_effect(&effects[1]), Err((GridError::EffectMissing))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::double_parens)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> tests/production.rs:11:28 [INFO] [stderr] | [INFO] [stderr] 11 | fn sort_entities(entities: &Vec>) -> Vec> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [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] help: change this to [INFO] [stderr] | [INFO] [stderr] 11 | fn sort_entities(entities: &[Rc]) -> Vec> { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] help: change `entities.clone()` to [INFO] [stderr] | [INFO] [stderr] 12 | let mut result = entities.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this pattern takes a reference on something that is being de-referenced [INFO] [stderr] --> tests/production.rs:14:25 [INFO] [stderr] | [INFO] [stderr] 14 | result.sort_by_key(|&ref e| -> String { [INFO] [stderr] | ^^^^^^ help: try removing the `&ref` part and just keep: `e` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_borrowed_reference)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 72 [INFO] [stderr] --> tests/production.rs:179:1 [INFO] [stderr] | [INFO] [stderr] 179 | / fn exchange_should_update_structures_state() { [INFO] [stderr] 180 | | let mut exchange = setup::production::exchange_default(); [INFO] [stderr] 181 | | let commodities = setup::production::commodities_default(); [INFO] [stderr] 182 | | let mut entities = setup::production::entities_default(); [INFO] [stderr] ... | [INFO] [stderr] 277 | | assert_eq!(exchange.amount_used_of(&commodities[2].name), commodities[2].amount as usize); [INFO] [stderr] 278 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 42 [INFO] [stderr] --> tests/production.rs:281:1 [INFO] [stderr] | [INFO] [stderr] 281 | / fn exchange_should_update_walkers_state() { [INFO] [stderr] 282 | | let mut exchange = setup::production::exchange_default(); [INFO] [stderr] 283 | | let commodities = setup::production::commodities_default(); [INFO] [stderr] 284 | | let mut entities = setup::production::entities_default(); [INFO] [stderr] ... | [INFO] [stderr] 341 | | assert_eq!(exchange.amount_lost_of(&commodities[2].name), 0); [INFO] [stderr] 342 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> tests/setup/grid/mod.rs:306:31 [INFO] [stderr] | [INFO] [stderr] 306 | pub fn grid_with_effects() -> (map::Grid, map::Cursor, exchange::CommodityExchange, Vec>, HashMap<(usize, usize), Uuid>) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/setup/grid/mod.rs:450:9 [INFO] [stderr] | [INFO] [stderr] 450 | / match entity { [INFO] [stderr] 451 | | &Entity::Structure { ref state, ref props, .. } => { [INFO] [stderr] 452 | | if props.max_employees == state.current_employees { [INFO] [stderr] 453 | | Some(ProductionStage { [INFO] [stderr] ... | [INFO] [stderr] 463 | | _ => None //does nothing [INFO] [stderr] 464 | | } [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] 450 | match *entity { [INFO] [stderr] 451 | Entity::Structure { ref state, ref props, .. } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/setup/grid/mod.rs:484:9 [INFO] [stderr] | [INFO] [stderr] 484 | / match entity { [INFO] [stderr] 485 | | &Entity::Structure { .. } => { [INFO] [stderr] 486 | | if self.max_progress < self.current_progress { [INFO] [stderr] 487 | | self.current_progress += 1; [INFO] [stderr] ... | [INFO] [stderr] 499 | | _ => None //does nothing [INFO] [stderr] 500 | | } [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] 484 | match *entity { [INFO] [stderr] 485 | Entity::Structure { .. } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/setup/grid/mod.rs:517:9 [INFO] [stderr] | [INFO] [stderr] 517 | / match entity { [INFO] [stderr] 518 | | &Entity::Resource { .. } => { [INFO] [stderr] 519 | | Some(ProductionStage { [INFO] [stderr] 520 | | commodity: Commodity { name: "c2".to_owned(), amount: 1 }, [INFO] [stderr] ... | [INFO] [stderr] 526 | | _ => None //does nothing [INFO] [stderr] 527 | | } [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] 517 | match *entity { [INFO] [stderr] 518 | Entity::Resource { .. } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/setup/effects/mod.rs:13:9 [INFO] [stderr] | [INFO] [stderr] 13 | / match entity { [INFO] [stderr] 14 | | &mut Entity::Structure { ref mut state, ref props, .. } => { [INFO] [stderr] 15 | | if state.current_employees < props.max_employees { [INFO] [stderr] 16 | | state.current_employees += 1; [INFO] [stderr] ... | [INFO] [stderr] 24 | | _ => () //does nothing [INFO] [stderr] 25 | | } [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] 13 | match *entity { [INFO] [stderr] 14 | Entity::Structure { ref mut state, ref props, .. } => { [INFO] [stderr] 15 | if state.current_employees < props.max_employees { [INFO] [stderr] 16 | state.current_employees += 1; [INFO] [stderr] 17 | } [INFO] [stderr] 18 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> tests/setup/effects/mod.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match entity { [INFO] [stderr] 32 | | &mut Entity::Structure { ref mut state, .. } => { [INFO] [stderr] 33 | | state.risk.fire += 5; [INFO] [stderr] 34 | | if state.risk.damage < 3 { [INFO] [stderr] ... | [INFO] [stderr] 39 | | _ => () //does nothing [INFO] [stderr] 40 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 31 | if let &mut Entity::Structure { ref mut state, .. } = entity { [INFO] [stderr] 32 | state.risk.fire += 5; [INFO] [stderr] 33 | if state.risk.damage < 3 { [INFO] [stderr] 34 | state.risk.damage += 1; [INFO] [stderr] 35 | } [INFO] [stderr] 36 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/setup/effects/mod.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match entity { [INFO] [stderr] 32 | | &mut Entity::Structure { ref mut state, .. } => { [INFO] [stderr] 33 | | state.risk.fire += 5; [INFO] [stderr] 34 | | if state.risk.damage < 3 { [INFO] [stderr] ... | [INFO] [stderr] 39 | | _ => () //does nothing [INFO] [stderr] 40 | | } [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] 31 | match *entity { [INFO] [stderr] 32 | Entity::Structure { ref mut state, .. } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/setup/effects/mod.rs:46:9 [INFO] [stderr] | [INFO] [stderr] 46 | / match entity { [INFO] [stderr] 47 | | &mut Entity::Resource { ref mut state, .. } => { [INFO] [stderr] 48 | | if state.current_amount > 1 { [INFO] [stderr] 49 | | state.current_amount -= 2; [INFO] [stderr] ... | [INFO] [stderr] 60 | | _ => () //does nothing [INFO] [stderr] 61 | | } [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] 46 | match *entity { [INFO] [stderr] 47 | Entity::Resource { ref mut state, .. } => { [INFO] [stderr] 48 | if state.current_amount > 1 { [INFO] [stderr] 49 | state.current_amount -= 2; [INFO] [stderr] 50 | } [INFO] [stderr] 51 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: consider using `Option` instead of `Option>` or a custom enum if you need to distinguish all 3 cases [INFO] [stderr] --> tests/utils/extract/mod.rs:65:48 [INFO] [stderr] | [INFO] [stderr] 65 | pub fn life(entity: Option>) -> Option> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_option)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_option [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> tests/grid.rs:14:22 [INFO] [stderr] | [INFO] [stderr] 14 | fn sort_cells(cells: &Vec<(usize, usize)>) -> Vec<(usize, usize)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [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] help: change this to [INFO] [stderr] | [INFO] [stderr] 14 | fn sort_cells(cells: &[(usize, usize)]) -> Vec<(usize, usize)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: change `cells.clone()` to [INFO] [stderr] | [INFO] [stderr] 15 | let mut result = cells.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 32 [INFO] [stderr] --> tests/grid.rs:141:1 [INFO] [stderr] | [INFO] [stderr] 141 | / fn grid_should_remove_entities_from_all_cells_they_use() { [INFO] [stderr] 142 | | let mut g = setup::grid::grid_empty(); [INFO] [stderr] 143 | | [INFO] [stderr] 144 | | let s0 = structure::StructureProperties { [INFO] [stderr] ... | [INFO] [stderr] 245 | | assert_eq!(g.cell_state((2, 2)), CellState::UnavailableOccupied); [INFO] [stderr] 246 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 138 [INFO] [stderr] --> tests/grid.rs:761:1 [INFO] [stderr] | [INFO] [stderr] 761 | / fn cursor_should_process_effects() { [INFO] [stderr] 762 | | let (mut g, mut gc, mut e, effects, id_map) = setup::grid::grid_with_effects(); [INFO] [stderr] 763 | | [INFO] [stderr] 764 | | assert_eq!(g.add_global_effect(effects[1].clone()), Ok(())); [INFO] [stderr] ... | [INFO] [stderr] 923 | | assert_eq!(extract::walker::life(g.entity((2, 2), &id_map[&(2, 2)])), Some(Some(0))); [INFO] [stderr] 924 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 134 [INFO] [stderr] --> tests/grid.rs:932:1 [INFO] [stderr] | [INFO] [stderr] 932 | / fn cursor_should_process_resource_production() { [INFO] [stderr] 933 | | let (mut g, mut gc, mut e, _) = setup::grid::grid_with_production(); [INFO] [stderr] 934 | | [INFO] [stderr] 935 | | assert_eq!(e.producers_of("c0").len(), 1); //at (2, 1) [INFO] [stderr] ... | [INFO] [stderr] 1092 | | assert_eq!(e.amount_used_of("c2"), 0); [INFO] [stderr] 1093 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 59 [INFO] [stderr] --> tests/grid.rs:1101:1 [INFO] [stderr] | [INFO] [stderr] 1101 | / fn grid_should_find_named_entities() { [INFO] [stderr] 1102 | | let (mut g, id_map) = setup::grid::grid_default(); [INFO] [stderr] 1103 | | [INFO] [stderr] 1104 | | assert_eq!(g.find_named_entities(EntityType::Doodad, "d0".to_owned()).len(), 1); [INFO] [stderr] ... | [INFO] [stderr] 1225 | | assert_eq!(g.find_named_entities(EntityType::Walker, "w3".to_owned()).len(), 0); [INFO] [stderr] 1226 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 74 [INFO] [stderr] --> tests/grid.rs:1290:1 [INFO] [stderr] | [INFO] [stderr] 1290 | / fn grid_should_find_first_adjacent_road() { [INFO] [stderr] 1291 | | let d0 = Entity::Doodad { props: doodad::Doodad { name: "d0".to_owned(), is_removable: false } }; [INFO] [stderr] 1292 | | [INFO] [stderr] 1293 | | let r0 = Entity::Resource { [INFO] [stderr] ... | [INFO] [stderr] 1651 | | assert_eq!(g.find_first_adjacent_road((2, 1), &id_map[&(1, 1)]), Some((1, 2))); [INFO] [stderr] 1652 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 21.48s [INFO] running `"docker" "inspect" "8b84786a8cdfe9765c5373c12070aaab772d696a23622749a8742d63b347ac10"` [INFO] running `"docker" "rm" "-f" "8b84786a8cdfe9765c5373c12070aaab772d696a23622749a8742d63b347ac10"` [INFO] [stdout] 8b84786a8cdfe9765c5373c12070aaab772d696a23622749a8742d63b347ac10