[INFO] crate flo_ui 0.1.0 is already in cache [INFO] extracting crate flo_ui 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/flo_ui/0.1.0 [INFO] extracting crate flo_ui 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/flo_ui/0.1.0 [INFO] validating manifest of flo_ui-0.1.0 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 flo_ui-0.1.0 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 flo_ui-0.1.0 [INFO] finished frobbing flo_ui-0.1.0 [INFO] frobbed toml for flo_ui-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/flo_ui/0.1.0/Cargo.toml [INFO] started frobbing flo_ui-0.1.0 [INFO] finished frobbing flo_ui-0.1.0 [INFO] frobbed toml for flo_ui-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/flo_ui/0.1.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [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 flo_ui-0.1.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/flo_ui/0.1.0:/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] 2ef366a80cc70121d26e182cec31ddf923ebb6689ef96d843565ee44efd5998c [INFO] running `"docker" "start" "-a" "2ef366a80cc70121d26e182cec31ddf923ebb6689ef96d843565ee44efd5998c"` [INFO] [stderr] Checking rust-hsluv v0.1.3 [INFO] [stderr] Checking desync v0.1.2 [INFO] [stderr] Checking desync v0.2.4 [INFO] [stderr] Checking rulinalg v0.4.2 [INFO] [stderr] Checking flo_binding v0.1.1 [INFO] [stderr] Checking flo_curves v0.1.0 [INFO] [stderr] Checking flo_canvas v0.1.0 [INFO] [stderr] Checking flo_ui v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/layout.rs:23:53 [INFO] [stderr] | [INFO] [stderr] 23 | PositionLayout { last_pos: 0.0, start: 0.0, length: length } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `length` [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/controller.rs:185:17 [INFO] [stderr] | [INFO] [stderr] 185 | label_text: label_text, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `label_text` [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/diff_viewmodel.rs:127:13 [INFO] [stderr] | [INFO] [stderr] 127 | subcontrollers: subcontrollers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `subcontrollers` [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/diff_viewmodel.rs:128:13 [INFO] [stderr] | [INFO] [stderr] 128 | subcontroller_watchers: subcontroller_watchers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `subcontroller_watchers` [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/diff_viewmodel.rs:129:13 [INFO] [stderr] | [INFO] [stderr] 129 | changed_properties: changed_properties, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `changed_properties` [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/diff_viewmodel.rs:130:13 [INFO] [stderr] | [INFO] [stderr] 130 | watcher_lifetimes: watcher_lifetimes, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `watcher_lifetimes` [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/viewmodel_update.rs:21:13 [INFO] [stderr] | [INFO] [stderr] 21 | controller_path: controller_path, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `controller_path` [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/viewmodel_update.rs:22:13 [INFO] [stderr] | [INFO] [stderr] 22 | updates: updates [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `updates` [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/resource_manager.rs:249:25 [INFO] [stderr] | [INFO] [stderr] 249 | id: id, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `id` [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/resource_manager.rs:251:25 [INFO] [stderr] | [INFO] [stderr] 251 | name: name [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `name` [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/binding_canvas.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | canvas: canvas, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `canvas` [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/control/control.rs:28:39 [INFO] [stderr] | [INFO] [stderr] 28 | Control { attributes: vec![], control_type: control_type } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `control_type` [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/image/inmemory.rs:87:13 [INFO] [stderr] | [INFO] [stderr] 87 | bytes: bytes [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `bytes` [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/image/static_data.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | bytes: bytes [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `bytes` [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/controllers/popup_controller.rs:53:13 [INFO] [stderr] | [INFO] [stderr] 53 | content_controller: content_controller, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `content_controller` [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/controllers/popup_controller.rs:54:13 [INFO] [stderr] | [INFO] [stderr] 54 | open: open, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `open` [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/controllers/popup_controller.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | popup_size: popup_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `popup_size` [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/controllers/popup_controller.rs:56:13 [INFO] [stderr] | [INFO] [stderr] 56 | popup_direction: popup_direction, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `popup_direction` [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/controllers/popup_controller.rs:57:13 [INFO] [stderr] | [INFO] [stderr] 57 | offset: offset, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `offset` [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/controllers/popup_controller.rs:58:13 [INFO] [stderr] | [INFO] [stderr] 58 | ui: ui [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `ui` [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/controllers/virtual_canvas.rs:49:13 [INFO] [stderr] | [INFO] [stderr] 49 | canvas_resources: canvas_resources, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `canvas_resources` [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/controllers/virtual_canvas.rs:50:13 [INFO] [stderr] | [INFO] [stderr] 50 | tiles: tiles, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `tiles` [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/controllers/virtual_canvas.rs:51:13 [INFO] [stderr] | [INFO] [stderr] 51 | top_left: top_left, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `top_left` [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/controllers/virtual_canvas.rs:52:13 [INFO] [stderr] | [INFO] [stderr] 52 | grid_size: grid_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `grid_size` [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/controllers/virtual_canvas.rs:53:13 [INFO] [stderr] | [INFO] [stderr] 53 | tile_size: tile_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `tile_size` [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/controllers/virtual_canvas.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | control: control [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `control` [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/session/core.rs:34:13 [INFO] [stderr] | [INFO] [stderr] 34 | ui_tree: ui_tree, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `ui_tree` [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/session/event_sink.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | controller: controller, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `controller` [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/session/event_sink.rs:36:13 [INFO] [stderr] | [INFO] [stderr] 36 | core: core, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `core` [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/session/update_stream.rs:68:13 [INFO] [stderr] | [INFO] [stderr] 68 | session_core: session_core, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `session_core` [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/session/update_stream.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | stream_core: stream_core, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `stream_core` [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/session/update_stream.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | pending: pending [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `pending` [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/session/update_stream.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | controller: controller, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `controller` [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/session/canvas_state.rs:123:79 [INFO] [stderr] | [INFO] [stderr] 123 | let path = CanvasPath { controller_path: controller_path.clone(), canvas_name: canvas_name }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `canvas_name` [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/session/canvas_state.rs:216:13 [INFO] [stderr] | [INFO] [stderr] 216 | core: core, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `core` [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/session/canvas_state.rs:217:13 [INFO] [stderr] | [INFO] [stderr] 217 | control_watch_lifetime: control_watch_lifetime [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `control_watch_lifetime` [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/session/session.rs:42:13 [INFO] [stderr] | [INFO] [stderr] 42 | controller: controller, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `controller` [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/session/session.rs:43:13 [INFO] [stderr] | [INFO] [stderr] 43 | core: core, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `core` [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/layout.rs:23:53 [INFO] [stderr] | [INFO] [stderr] 23 | PositionLayout { last_pos: 0.0, start: 0.0, length: length } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `length` [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/controller.rs:185:17 [INFO] [stderr] | [INFO] [stderr] 185 | label_text: label_text, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `label_text` [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/diff_viewmodel.rs:127:13 [INFO] [stderr] | [INFO] [stderr] 127 | subcontrollers: subcontrollers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `subcontrollers` [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/diff_viewmodel.rs:128:13 [INFO] [stderr] | [INFO] [stderr] 128 | subcontroller_watchers: subcontroller_watchers, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `subcontroller_watchers` [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/diff_viewmodel.rs:129:13 [INFO] [stderr] | [INFO] [stderr] 129 | changed_properties: changed_properties, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `changed_properties` [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/diff_viewmodel.rs:130:13 [INFO] [stderr] | [INFO] [stderr] 130 | watcher_lifetimes: watcher_lifetimes, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `watcher_lifetimes` [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/viewmodel_update.rs:21:13 [INFO] [stderr] | [INFO] [stderr] 21 | controller_path: controller_path, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `controller_path` [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/viewmodel_update.rs:22:13 [INFO] [stderr] | [INFO] [stderr] 22 | updates: updates [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `updates` [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/resource_manager.rs:249:25 [INFO] [stderr] | [INFO] [stderr] 249 | id: id, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `id` [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/resource_manager.rs:251:25 [INFO] [stderr] | [INFO] [stderr] 251 | name: name [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `name` [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/binding_canvas.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | canvas: canvas, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `canvas` [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/control/control.rs:28:39 [INFO] [stderr] | [INFO] [stderr] 28 | Control { attributes: vec![], control_type: control_type } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `control_type` [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/image/inmemory.rs:87:13 [INFO] [stderr] | [INFO] [stderr] 87 | bytes: bytes [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `bytes` [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/image/static_data.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | bytes: bytes [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `bytes` [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/controllers/popup_controller.rs:53:13 [INFO] [stderr] | [INFO] [stderr] 53 | content_controller: content_controller, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `content_controller` [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/controllers/popup_controller.rs:54:13 [INFO] [stderr] | [INFO] [stderr] 54 | open: open, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `open` [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/controllers/popup_controller.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | popup_size: popup_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `popup_size` [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/controllers/popup_controller.rs:56:13 [INFO] [stderr] | [INFO] [stderr] 56 | popup_direction: popup_direction, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `popup_direction` [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/controllers/popup_controller.rs:57:13 [INFO] [stderr] | [INFO] [stderr] 57 | offset: offset, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `offset` [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/controllers/popup_controller.rs:58:13 [INFO] [stderr] | [INFO] [stderr] 58 | ui: ui [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `ui` [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/controllers/virtual_canvas.rs:49:13 [INFO] [stderr] | [INFO] [stderr] 49 | canvas_resources: canvas_resources, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `canvas_resources` [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/controllers/virtual_canvas.rs:50:13 [INFO] [stderr] | [INFO] [stderr] 50 | tiles: tiles, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `tiles` [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/controllers/virtual_canvas.rs:51:13 [INFO] [stderr] | [INFO] [stderr] 51 | top_left: top_left, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `top_left` [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/controllers/virtual_canvas.rs:52:13 [INFO] [stderr] | [INFO] [stderr] 52 | grid_size: grid_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `grid_size` [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/controllers/virtual_canvas.rs:53:13 [INFO] [stderr] | [INFO] [stderr] 53 | tile_size: tile_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `tile_size` [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/controllers/virtual_canvas.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | control: control [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `control` [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/session/core.rs:34:13 [INFO] [stderr] | [INFO] [stderr] 34 | ui_tree: ui_tree, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `ui_tree` [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/session/event_sink.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | controller: controller, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `controller` [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/session/event_sink.rs:36:13 [INFO] [stderr] | [INFO] [stderr] 36 | core: core, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `core` [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/session/update_stream.rs:68:13 [INFO] [stderr] | [INFO] [stderr] 68 | session_core: session_core, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `session_core` [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/session/update_stream.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | stream_core: stream_core, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `stream_core` [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/session/update_stream.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | pending: pending [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `pending` [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/session/update_stream.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | controller: controller, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `controller` [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/session/canvas_state.rs:123:79 [INFO] [stderr] | [INFO] [stderr] 123 | let path = CanvasPath { controller_path: controller_path.clone(), canvas_name: canvas_name }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `canvas_name` [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/session/canvas_state.rs:216:13 [INFO] [stderr] | [INFO] [stderr] 216 | core: core, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `core` [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/session/canvas_state.rs:217:13 [INFO] [stderr] | [INFO] [stderr] 217 | control_watch_lifetime: control_watch_lifetime [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `control_watch_lifetime` [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/session/session.rs:42:13 [INFO] [stderr] | [INFO] [stderr] 42 | controller: controller, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `controller` [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/session/session.rs:43:13 [INFO] [stderr] | [INFO] [stderr] 43 | core: core, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `core` [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 `#[macro_use]` import [INFO] [stderr] --> src/lib.rs:6:1 [INFO] [stderr] | [INFO] [stderr] 6 | #[macro_use] [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/controller.rs:122:5 [INFO] [stderr] | [INFO] [stderr] 122 | / return BindRef::from(computed(move || { [INFO] [stderr] 123 | | if let Some(base_controller) = weak_controller.upgrade() { [INFO] [stderr] 124 | | get_full_ui_tree(&base_controller) [INFO] [stderr] 125 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 128 | | } [INFO] [stderr] 129 | | })); [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 122 | BindRef::from(computed(move || { [INFO] [stderr] 123 | if let Some(base_controller) = weak_controller.upgrade() { [INFO] [stderr] 124 | get_full_ui_tree(&base_controller) [INFO] [stderr] 125 | } else { [INFO] [stderr] 126 | // Controller is no longer around, so it doesn't have a UI any more [INFO] [stderr] 127 | Control::empty() [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/diff_viewmodel.rs:254:5 [INFO] [stderr] | [INFO] [stderr] 254 | return ViewModelUpdate::new(controller_path, updates); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `ViewModelUpdate::new(controller_path, updates)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/control/mod.rs:7:1 [INFO] [stderr] | [INFO] [stderr] 7 | mod control; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/session/event_sink.rs:54:13 [INFO] [stderr] | [INFO] [stderr] 54 | event_id [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/session/event_sink.rs:52:35 [INFO] [stderr] | [INFO] [stderr] 52 | let event_id = *last_event; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/session/mod.rs:8:1 [INFO] [stderr] | [INFO] [stderr] 8 | pub mod session; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: unused `#[macro_use]` import [INFO] [stderr] --> src/lib.rs:6:1 [INFO] [stderr] | [INFO] [stderr] 6 | #[macro_use] [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/controller.rs:122:5 [INFO] [stderr] | [INFO] [stderr] 122 | / return BindRef::from(computed(move || { [INFO] [stderr] 123 | | if let Some(base_controller) = weak_controller.upgrade() { [INFO] [stderr] 124 | | get_full_ui_tree(&base_controller) [INFO] [stderr] 125 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 128 | | } [INFO] [stderr] 129 | | })); [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 122 | BindRef::from(computed(move || { [INFO] [stderr] 123 | if let Some(base_controller) = weak_controller.upgrade() { [INFO] [stderr] 124 | get_full_ui_tree(&base_controller) [INFO] [stderr] 125 | } else { [INFO] [stderr] 126 | // Controller is no longer around, so it doesn't have a UI any more [INFO] [stderr] 127 | Control::empty() [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/diff_viewmodel.rs:254:5 [INFO] [stderr] | [INFO] [stderr] 254 | return ViewModelUpdate::new(controller_path, updates); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `ViewModelUpdate::new(controller_path, updates)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/control/mod.rs:7:1 [INFO] [stderr] | [INFO] [stderr] 7 | mod control; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/session/event_sink.rs:54:13 [INFO] [stderr] | [INFO] [stderr] 54 | event_id [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/session/event_sink.rs:52:35 [INFO] [stderr] | [INFO] [stderr] 52 | let event_id = *last_event; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/session/mod.rs:8:1 [INFO] [stderr] | [INFO] [stderr] 8 | pub mod session; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/layout.rs:29:19 [INFO] [stderr] | [INFO] [stderr] 29 | pub fn to_abs(&mut self, pos: &Position) -> f32 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/layout.rs:32:24 [INFO] [stderr] | [INFO] [stderr] 32 | let next_pos = match pos { [INFO] [stderr] | ________________________^ [INFO] [stderr] 33 | | &At(pos) => pos, [INFO] [stderr] 34 | | &Offset(pos) => self.last_pos + pos, [INFO] [stderr] 35 | | &Stretch(_ratio) => self.last_pos, [INFO] [stderr] ... | [INFO] [stderr] 41 | | &Floating(_, _) => 0.0 [INFO] [stderr] 42 | | }; [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] 32 | let next_pos = match *pos { [INFO] [stderr] 33 | At(pos) => pos, [INFO] [stderr] 34 | Offset(pos) => self.last_pos + pos, [INFO] [stderr] 35 | Stretch(_ratio) => self.last_pos, [INFO] [stderr] 36 | Start => self.start, [INFO] [stderr] 37 | End => self.start + self.length, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/layout.rs:72:19 [INFO] [stderr] | [INFO] [stderr] 72 | pub fn to_abs(&mut self, x: &Position, y: &Position) -> (f32, f32) { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/layout.rs:79:26 [INFO] [stderr] | [INFO] [stderr] 79 | pub fn to_abs_bounds(&mut self, bounds: &Bounds) -> ((f32, f32), (f32, f32)) { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/diff.rs:20:25 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn new(address: &Vec, replacement: &TNode) -> Diff { [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] 20 | pub fn new(address: &[u32], replacement: &TNode) -> Diff { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] help: change `address.clone()` to [INFO] [stderr] | [INFO] [stderr] 21 | Diff { address: address.to_owned(), replacement: replacement.clone() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/diff.rs:60:48 [INFO] [stderr] | [INFO] [stderr] 60 | fn diff_tree_run(address: &Vec, source: &TNode, target: &TNode) -> Vec> { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [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] 60 | fn diff_tree_run(address: &[u32], source: &TNode, target: &TNode) -> Vec> { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] help: change `address.clone()` to [INFO] [stderr] | [INFO] [stderr] 80 | let mut node_address = address.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/diff.rs:74:19 [INFO] [stderr] | [INFO] [stderr] 74 | } else if source_children.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `source_children.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/controller.rs:90:71 [INFO] [stderr] | [INFO] [stderr] 90 | pub fn controller_path_for_address<'a>(ui_tree: &'a Control, address: &Vec) -> Vec<&'a str> { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[u32]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `controller::NullController` [INFO] [stderr] --> src/controller.rs:139:5 [INFO] [stderr] | [INFO] [stderr] 139 | / pub fn new() -> NullController { [INFO] [stderr] 140 | | NullController { } [INFO] [stderr] 141 | | } [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] 135 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/property.rs:34:9 [INFO] [stderr] | [INFO] [stderr] 34 | / if let &PropertyValue::String(ref result) = self { [INFO] [stderr] 35 | | Some(result.clone()) [INFO] [stderr] 36 | | } else { [INFO] [stderr] 37 | | None [INFO] [stderr] 38 | | } [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] 34 | if let PropertyValue::String(ref result) = *self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/property.rs:45:9 [INFO] [stderr] | [INFO] [stderr] 45 | / if let &PropertyValue::String(ref result) = self { [INFO] [stderr] 46 | | Some(&*result) [INFO] [stderr] 47 | | } else { [INFO] [stderr] 48 | | None [INFO] [stderr] 49 | | } [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] 45 | if let PropertyValue::String(ref result) = *self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/property.rs:55:9 [INFO] [stderr] | [INFO] [stderr] 55 | / match self { [INFO] [stderr] 56 | | &Property::Nothing => String::from("<>"), [INFO] [stderr] 57 | | &Property::Bool(ref b) => b.to_string(), [INFO] [stderr] 58 | | &Property::Int(ref i) => i.to_string(), [INFO] [stderr] ... | [INFO] [stderr] 62 | | &Property::Bind(ref binding) => format!("<>", binding) [INFO] [stderr] 63 | | } [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] 55 | match *self { [INFO] [stderr] 56 | Property::Nothing => String::from("<>"), [INFO] [stderr] 57 | Property::Bool(ref b) => b.to_string(), [INFO] [stderr] 58 | Property::Int(ref i) => i.to_string(), [INFO] [stderr] 59 | Property::Float(ref f) => f.to_string(), [INFO] [stderr] 60 | Property::String(ref s) => s.clone(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/property.rs:69:9 [INFO] [stderr] | [INFO] [stderr] 69 | / match self { [INFO] [stderr] 70 | | &PropertyValue::Nothing => String::from("<>"), [INFO] [stderr] 71 | | &PropertyValue::Bool(ref b) => b.to_string(), [INFO] [stderr] 72 | | &PropertyValue::Int(ref i) => i.to_string(), [INFO] [stderr] 73 | | &PropertyValue::Float(ref f) => f.to_string(), [INFO] [stderr] 74 | | &PropertyValue::String(ref s) => s.clone() [INFO] [stderr] 75 | | } [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] 69 | match *self { [INFO] [stderr] 70 | PropertyValue::Nothing => String::from("<>"), [INFO] [stderr] 71 | PropertyValue::Bool(ref b) => b.to_string(), [INFO] [stderr] 72 | PropertyValue::Int(ref i) => i.to_string(), [INFO] [stderr] 73 | PropertyValue::Float(ref f) => f.to_string(), [INFO] [stderr] 74 | PropertyValue::String(ref s) => s.clone() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/property.rs:112:25 [INFO] [stderr] | [INFO] [stderr] 112 | Property::Float((*self) as f64) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `f64::from((*self))` [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/property.rs:124:9 [INFO] [stderr] | [INFO] [stderr] 124 | / match self { [INFO] [stderr] 125 | | &PropertyValue::Nothing => Property::Nothing, [INFO] [stderr] 126 | | &PropertyValue::Bool(ref b) => Property::Bool(*b), [INFO] [stderr] 127 | | &PropertyValue::Int(ref i) => Property::Int(*i), [INFO] [stderr] 128 | | &PropertyValue::Float(ref f) => Property::Float(*f), [INFO] [stderr] 129 | | &PropertyValue::String(ref s) => Property::String(s.clone()) [INFO] [stderr] 130 | | } [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] 124 | match *self { [INFO] [stderr] 125 | PropertyValue::Nothing => Property::Nothing, [INFO] [stderr] 126 | PropertyValue::Bool(ref b) => Property::Bool(*b), [INFO] [stderr] 127 | PropertyValue::Int(ref i) => Property::Int(*i), [INFO] [stderr] 128 | PropertyValue::Float(ref f) => Property::Float(*f), [INFO] [stderr] 129 | PropertyValue::String(ref s) => Property::String(s.clone()) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `viewmodel::NullViewModel` [INFO] [stderr] --> src/viewmodel.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | / pub fn new() -> NullViewModel { [INFO] [stderr] 27 | | NullViewModel { nothing: BindRef::from(bind(PropertyValue::Nothing)) } [INFO] [stderr] 28 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 25 | impl Default for viewmodel::NullViewModel { [INFO] [stderr] 26 | fn default() -> Self { [INFO] [stderr] 27 | Self::new() [INFO] [stderr] 28 | } [INFO] [stderr] 29 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `dynamic_viewmodel::DynamicViewModel` [INFO] [stderr] --> src/dynamic_viewmodel.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | / pub fn new() -> DynamicViewModel { [INFO] [stderr] 31 | | DynamicViewModel { [INFO] [stderr] 32 | | bindings: Mutex::new(HashMap::new()), [INFO] [stderr] 33 | | computed: Mutex::new(HashMap::new()), [INFO] [stderr] 34 | | nothing: BindRef::from(bind(PropertyValue::Nothing)) } [INFO] [stderr] 35 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 26 | impl Default for dynamic_viewmodel::DynamicViewModel { [INFO] [stderr] 27 | fn default() -> Self { [INFO] [stderr] 28 | Self::new() [INFO] [stderr] 29 | } [INFO] [stderr] 30 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/dynamic_viewmodel.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | bindings.get(&String::from(property_name)).map(|arc| arc.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `bindings.get(&String::from(property_name)).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/dynamic_viewmodel.rs:52:9 [INFO] [stderr] | [INFO] [stderr] 52 | computed.get(&String::from(property_name)).map(|arc| arc.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `computed.get(&String::from(property_name)).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 are using an explicit closure for cloning elements [INFO] [stderr] --> src/dynamic_viewmodel.rs:104:13 [INFO] [stderr] | [INFO] [stderr] 104 | / bindings [INFO] [stderr] 105 | | .keys() [INFO] [stderr] 106 | | .map(|key| key.clone()) [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] 104 | bindings [INFO] [stderr] 105 | .keys().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/dynamic_viewmodel.rs:113:13 [INFO] [stderr] | [INFO] [stderr] 113 | / computed [INFO] [stderr] 114 | | .keys() [INFO] [stderr] 115 | | .map(|key| key.clone()) [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] 113 | computed [INFO] [stderr] 114 | .keys().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicBool instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/diff_viewmodel.rs:108:71 [INFO] [stderr] | [INFO] [stderr] 108 | .map(|property_name| (property_name.clone(), Arc::new(Mutex::new(false)))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::mutex_atomic)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/diff_viewmodel.rs:152:51 [INFO] [stderr] | [INFO] [stderr] 152 | let existing_properties: HashSet<_> = self.changed_properties.keys().map(|name| name.clone()).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.changed_properties.keys().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 are using an explicit closure for cloning elements [INFO] [stderr] --> src/diff_viewmodel.rs:153:51 [INFO] [stderr] | [INFO] [stderr] 153 | let new_properties = properties.iter() [INFO] [stderr] | ___________________________________________________^ [INFO] [stderr] 154 | | .filter(|property| !existing_properties.contains(*property)) [INFO] [stderr] 155 | | .map(|name| name.clone()); [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] 153 | let new_properties = properties.iter() [INFO] [stderr] 154 | .filter(|property| !existing_properties.contains(*property)).cloned(); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/diff_viewmodel.rs:163:16 [INFO] [stderr] | [INFO] [stderr] 163 | if properties_and_values.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!properties_and_values.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/diff_viewmodel.rs:271:12 [INFO] [stderr] | [INFO] [stderr] 271 | if viewmodel_update.updates().len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!viewmodel_update.updates().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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/resource_manager.rs:134:40 [INFO] [stderr] | [INFO] [stderr] 134 | let id = self.free_slots.pop().unwrap_or(self.resources.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| self.resources.len())` [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] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `resource_manager::ResourceManager` [INFO] [stderr] --> src/resource_manager.rs:205:5 [INFO] [stderr] | [INFO] [stderr] 205 | / pub fn new() -> ResourceManager { [INFO] [stderr] 206 | | ResourceManager { [INFO] [stderr] 207 | | core: Desync::new(ResourceManagerCore { [INFO] [stderr] 208 | | resources: vec![], [INFO] [stderr] ... | [INFO] [stderr] 214 | | } [INFO] [stderr] 215 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 201 | impl Default for resource_manager::ResourceManager { [INFO] [stderr] 202 | fn default() -> Self { [INFO] [stderr] 203 | Self::new() [INFO] [stderr] 204 | } [INFO] [stderr] 205 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/resource_manager.rs:310:13 [INFO] [stderr] | [INFO] [stderr] 310 | / core.named_resources [INFO] [stderr] 311 | | .get(&String::from(name)) [INFO] [stderr] 312 | | .map(|res| res.clone()) [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] 310 | core.named_resources [INFO] [stderr] 311 | .get(&String::from(name)).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/binding_canvas.rs:90:17 [INFO] [stderr] | [INFO] [stderr] 90 | / if let &Some(ref draw_fn) = draw_fn { [INFO] [stderr] 91 | | draw_fn(gc); [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] 90 | if let Some(ref draw_fn) = *draw_fn { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `binding_canvas::BindingCanvas` [INFO] [stderr] --> src/binding_canvas.rs:128:5 [INFO] [stderr] | [INFO] [stderr] 128 | / pub fn new() -> BindingCanvas { [INFO] [stderr] 129 | | Self::from(Arc::new(Canvas::new())) [INFO] [stderr] 130 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 124 | impl Default for binding_canvas::BindingCanvas { [INFO] [stderr] 125 | fn default() -> Self { [INFO] [stderr] 126 | Self::new() [INFO] [stderr] 127 | } [INFO] [stderr] 128 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/json.rs:13:9 [INFO] [stderr] | [INFO] [stderr] 13 | / match self { [INFO] [stderr] 14 | | &BoundingBox(ref bounds) => json!({ "BoundingBox": bounds }), [INFO] [stderr] 15 | | &Text(ref property) => json!({ "Text": property }), [INFO] [stderr] 16 | | &ZIndex(zindex) => json!({ "ZIndex": zindex }), [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] 13 | match *self { [INFO] [stderr] 14 | BoundingBox(ref bounds) => json!({ "BoundingBox": bounds }), [INFO] [stderr] 15 | Text(ref property) => json!({ "Text": property }), [INFO] [stderr] 16 | ZIndex(zindex) => json!({ "ZIndex": zindex }), [INFO] [stderr] 17 | Padding((left, top), (right, bottom)) => json!({ "Padding": { "left": left, "top": top, "right": right, "bottom": bottom } }), [INFO] [stderr] 18 | FontAttr(attr) => json!({ "Font": attr }), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/control.rs:122:5 [INFO] [stderr] | [INFO] [stderr] 122 | / pub fn controller<'a>(&'a self) -> Option<&'a str> { [INFO] [stderr] 123 | | self.attributes.iter() [INFO] [stderr] 124 | | .map(|attr| attr.controller()) [INFO] [stderr] 125 | | .find(|attr| attr.is_some()) [INFO] [stderr] 126 | | .map(|attr| attr.unwrap()) [INFO] [stderr] 127 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/control.rs:142:5 [INFO] [stderr] | [INFO] [stderr] 142 | / pub fn bounding_box<'a>(&'a self) -> Option<&'a Bounds> { [INFO] [stderr] 143 | | self.attributes.iter() [INFO] [stderr] 144 | | .map(|attr| attr.bounding_box()) [INFO] [stderr] 145 | | .find(|attr| attr.is_some()) [INFO] [stderr] 146 | | .map(|attr| attr.unwrap()) [INFO] [stderr] 147 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/control.rs:152:5 [INFO] [stderr] | [INFO] [stderr] 152 | / pub fn canvas_resource<'a>(&'a self) -> Option<&Resource> { [INFO] [stderr] 153 | | self.attributes.iter() [INFO] [stderr] 154 | | .map(|attr| attr.canvas()) [INFO] [stderr] 155 | | .find(|attr| attr.is_some()) [INFO] [stderr] 156 | | .map(|attr| attr.unwrap()) [INFO] [stderr] 157 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:71:5 [INFO] [stderr] | [INFO] [stderr] 71 | / pub fn bounding_box<'a>(&'a self) -> Option<&'a Bounds> { [INFO] [stderr] 72 | | match self { [INFO] [stderr] 73 | | &BoundingBox(ref bounds) => Some(bounds), [INFO] [stderr] 74 | | _ => None [INFO] [stderr] 75 | | } [INFO] [stderr] 76 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / match self { [INFO] [stderr] 73 | | &BoundingBox(ref bounds) => Some(bounds), [INFO] [stderr] 74 | | _ => None [INFO] [stderr] 75 | | } [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] 72 | match *self { [INFO] [stderr] 73 | BoundingBox(ref bounds) => Some(bounds), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:82:9 [INFO] [stderr] | [INFO] [stderr] 82 | / match self { [INFO] [stderr] 83 | | &ZIndex(zindex) => Some(zindex), [INFO] [stderr] 84 | | _ => None [INFO] [stderr] 85 | | } [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] 82 | match *self { [INFO] [stderr] 83 | ZIndex(zindex) => Some(zindex), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:92:9 [INFO] [stderr] | [INFO] [stderr] 92 | / match self { [INFO] [stderr] 93 | | &Padding(left_top, right_bottom) => Some((left_top, right_bottom)), [INFO] [stderr] 94 | | _ => None [INFO] [stderr] 95 | | } [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] 92 | match *self { [INFO] [stderr] 93 | Padding(left_top, right_bottom) => Some((left_top, right_bottom)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:101:5 [INFO] [stderr] | [INFO] [stderr] 101 | / pub fn text<'a>(&'a self) -> Option<&'a Property> { [INFO] [stderr] 102 | | match self { [INFO] [stderr] 103 | | &Text(ref text) => Some(text), [INFO] [stderr] 104 | | _ => None [INFO] [stderr] 105 | | } [INFO] [stderr] 106 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:102:9 [INFO] [stderr] | [INFO] [stderr] 102 | / match self { [INFO] [stderr] 103 | | &Text(ref text) => Some(text), [INFO] [stderr] 104 | | _ => None [INFO] [stderr] 105 | | } [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] 102 | match *self { [INFO] [stderr] 103 | Text(ref text) => Some(text), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:111:5 [INFO] [stderr] | [INFO] [stderr] 111 | / pub fn font<'a>(&'a self) -> Option<&'a Font> { [INFO] [stderr] 112 | | match self { [INFO] [stderr] 113 | | &FontAttr(ref attr) => Some(attr), [INFO] [stderr] 114 | | _ => None [INFO] [stderr] 115 | | } [INFO] [stderr] 116 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:112:9 [INFO] [stderr] | [INFO] [stderr] 112 | / match self { [INFO] [stderr] 113 | | &FontAttr(ref attr) => Some(attr), [INFO] [stderr] 114 | | _ => None [INFO] [stderr] 115 | | } [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] 112 | match *self { [INFO] [stderr] 113 | FontAttr(ref attr) => Some(attr), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:121:5 [INFO] [stderr] | [INFO] [stderr] 121 | / pub fn id<'a>(&'a self) -> Option<&'a String> { [INFO] [stderr] 122 | | match self { [INFO] [stderr] 123 | | &Id(ref id) => Some(id), [INFO] [stderr] 124 | | _ => None [INFO] [stderr] 125 | | } [INFO] [stderr] 126 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:122:9 [INFO] [stderr] | [INFO] [stderr] 122 | / match self { [INFO] [stderr] 123 | | &Id(ref id) => Some(id), [INFO] [stderr] 124 | | _ => None [INFO] [stderr] 125 | | } [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] 122 | match *self { [INFO] [stderr] 123 | Id(ref id) => Some(id), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:132:9 [INFO] [stderr] | [INFO] [stderr] 132 | / match self { [INFO] [stderr] 133 | | &SubComponents(ref components) => Some(components), [INFO] [stderr] 134 | | _ => None [INFO] [stderr] 135 | | } [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] 132 | match *self { [INFO] [stderr] 133 | SubComponents(ref components) => Some(components), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:141:5 [INFO] [stderr] | [INFO] [stderr] 141 | / pub fn controller<'a>(&'a self) -> Option<&'a str> { [INFO] [stderr] 142 | | match self { [INFO] [stderr] 143 | | &Controller(ref controller) => Some(controller), [INFO] [stderr] 144 | | _ => None [INFO] [stderr] 145 | | } [INFO] [stderr] 146 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:142:9 [INFO] [stderr] | [INFO] [stderr] 142 | / match self { [INFO] [stderr] 143 | | &Controller(ref controller) => Some(controller), [INFO] [stderr] 144 | | _ => None [INFO] [stderr] 145 | | } [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] 142 | match *self { [INFO] [stderr] 143 | Controller(ref controller) => Some(controller), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:151:5 [INFO] [stderr] | [INFO] [stderr] 151 | / pub fn action<'a>(&'a self) -> Option<(&'a ActionTrigger, &'a String)> { [INFO] [stderr] 152 | | match self { [INFO] [stderr] 153 | | &Action(ref trigger, ref action) => Some((trigger, action)), [INFO] [stderr] 154 | | _ => None [INFO] [stderr] 155 | | } [INFO] [stderr] 156 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:152:9 [INFO] [stderr] | [INFO] [stderr] 152 | / match self { [INFO] [stderr] 153 | | &Action(ref trigger, ref action) => Some((trigger, action)), [INFO] [stderr] 154 | | _ => None [INFO] [stderr] 155 | | } [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] 152 | match *self { [INFO] [stderr] 153 | Action(ref trigger, ref action) => Some((trigger, action)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:161:5 [INFO] [stderr] | [INFO] [stderr] 161 | / pub fn state<'a>(&'a self) -> Option<&'a State> { [INFO] [stderr] 162 | | match self { [INFO] [stderr] 163 | | &StateAttr(ref state) => Some(state), [INFO] [stderr] 164 | | _ => None [INFO] [stderr] 165 | | } [INFO] [stderr] 166 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | / match self { [INFO] [stderr] 163 | | &StateAttr(ref state) => Some(state), [INFO] [stderr] 164 | | _ => None [INFO] [stderr] 165 | | } [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] 162 | match *self { [INFO] [stderr] 163 | StateAttr(ref state) => Some(state), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:171:5 [INFO] [stderr] | [INFO] [stderr] 171 | / pub fn popup<'a>(&'a self) -> Option<&'a Popup> { [INFO] [stderr] 172 | | match self { [INFO] [stderr] 173 | | &PopupAttr(ref popup) => Some(popup), [INFO] [stderr] 174 | | _ => None [INFO] [stderr] 175 | | } [INFO] [stderr] 176 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:172:9 [INFO] [stderr] | [INFO] [stderr] 172 | / match self { [INFO] [stderr] 173 | | &PopupAttr(ref popup) => Some(popup), [INFO] [stderr] 174 | | _ => None [INFO] [stderr] 175 | | } [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] 172 | match *self { [INFO] [stderr] 173 | PopupAttr(ref popup) => Some(popup), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:182:9 [INFO] [stderr] | [INFO] [stderr] 182 | / match self { [INFO] [stderr] 183 | | &Canvas(ref canvas) => Some(canvas), [INFO] [stderr] 184 | | _ => None [INFO] [stderr] 185 | | } [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] 182 | match *self { [INFO] [stderr] 183 | Canvas(ref canvas) => Some(canvas), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:191:5 [INFO] [stderr] | [INFO] [stderr] 191 | / pub fn appearance<'a>(&'a self) -> Option<&'a Appearance> { [INFO] [stderr] 192 | | match self { [INFO] [stderr] 193 | | &AppearanceAttr(ref appearance) => Some(appearance), [INFO] [stderr] 194 | | _ => None [INFO] [stderr] 195 | | } [INFO] [stderr] 196 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:192:9 [INFO] [stderr] | [INFO] [stderr] 192 | / match self { [INFO] [stderr] 193 | | &AppearanceAttr(ref appearance) => Some(appearance), [INFO] [stderr] 194 | | _ => None [INFO] [stderr] 195 | | } [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] 192 | match *self { [INFO] [stderr] 193 | AppearanceAttr(ref appearance) => Some(appearance), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:201:5 [INFO] [stderr] | [INFO] [stderr] 201 | / pub fn scroll<'a>(&'a self) -> Option<&'a Scroll> { [INFO] [stderr] 202 | | match self { [INFO] [stderr] 203 | | &ScrollAttr(ref scroll) => Some(scroll), [INFO] [stderr] 204 | | _ => None [INFO] [stderr] 205 | | } [INFO] [stderr] 206 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:202:9 [INFO] [stderr] | [INFO] [stderr] 202 | / match self { [INFO] [stderr] 203 | | &ScrollAttr(ref scroll) => Some(scroll), [INFO] [stderr] 204 | | _ => None [INFO] [stderr] 205 | | } [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] 202 | match *self { [INFO] [stderr] 203 | ScrollAttr(ref scroll) => Some(scroll), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:213:9 [INFO] [stderr] | [INFO] [stderr] 213 | / match self { [INFO] [stderr] 214 | | &BoundingBox(ref bounds) => Some(bounds) != compare_to.bounding_box(), [INFO] [stderr] 215 | | &ZIndex(zindex) => Some(zindex) != compare_to.z_index(), [INFO] [stderr] 216 | | &Padding(lt, rb) => Some((lt, rb)) != compare_to.padding(), [INFO] [stderr] ... | [INFO] [stderr] 229 | | &SubComponents(ref components) => Some(components.len()) != compare_to.subcomponents().map(|components| components.len()) [INFO] [stderr] 230 | | } [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] 213 | match *self { [INFO] [stderr] 214 | BoundingBox(ref bounds) => Some(bounds) != compare_to.bounding_box(), [INFO] [stderr] 215 | ZIndex(zindex) => Some(zindex) != compare_to.z_index(), [INFO] [stderr] 216 | Padding(lt, rb) => Some((lt, rb)) != compare_to.padding(), [INFO] [stderr] 217 | Text(ref text) => Some(text) != compare_to.text(), [INFO] [stderr] 218 | FontAttr(ref font) => Some(font) != compare_to.font(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/controllers/virtual_canvas.rs:31:18 [INFO] [stderr] | [INFO] [stderr] 31 | draw_region: Arc Box ()+Send+Sync>+Send+Sync>, [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/controllers/virtual_canvas.rs:134:13 [INFO] [stderr] | [INFO] [stderr] 134 | for ref mut row in tiles.iter_mut() { [INFO] [stderr] | ^^^^^^^^^^^ ---------------- help: try: `let row = &mut tiles.iter_mut();` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/controllers/virtual_canvas.rs:151:27 [INFO] [stderr] | [INFO] [stderr] 151 | let new_row = (0..width).into_iter() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `(0..width)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/controllers/virtual_canvas.rs:238:22 [INFO] [stderr] | [INFO] [stderr] 238 | .zip((0..tiles.len()).into_iter()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `(0..tiles.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/controllers/virtual_canvas.rs:241:26 [INFO] [stderr] | [INFO] [stderr] 241 | .zip((0..row.len()).into_iter()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `(0..row.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/session/core.rs:58:24 [INFO] [stderr] | [INFO] [stderr] 58 | if controller_path.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `controller_path.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: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/session/core.rs:66:42 [INFO] [stderr] | [INFO] [stderr] 66 | controller = controller.map_or(None, move |ctrl| ctrl.get_subcontroller(&controller_name)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try using and_then instead: `controller.and_then(move |ctrl| ctrl.get_subcontroller(&controller_name))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_or_none)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/session/core.rs:69:25 [INFO] [stderr] | [INFO] [stderr] 69 | / match controller { [INFO] [stderr] 70 | | Some(ref controller) => self.dispatch_action(&**controller, event_name, action_parameter), [INFO] [stderr] 71 | | None => () // TODO: event has disappeared into the void :-( [INFO] [stderr] 72 | | } [INFO] [stderr] | |_________________________^ help: try this: `if let Some(ref controller) = controller { self.dispatch_action(&**controller, event_name, action_parameter) }` [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] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/session/event_sink.rs:37:37 [INFO] [stderr] | [INFO] [stderr] 37 | last_event: Mutex::new(0), [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/session/event_sink.rs:38:46 [INFO] [stderr] | [INFO] [stderr] 38 | last_finished_event: Arc::new(Mutex::new(0)) [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/session/event_sink.rs:50:35 [INFO] [stderr] | [INFO] [stderr] 50 | let mut last_event = self.last_event.lock().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/session/event_sink.rs:79:31 [INFO] [stderr] | [INFO] [stderr] 79 | let current_event = *(self.last_event.lock().unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/session/update_stream.rs:131:17 [INFO] [stderr] | [INFO] [stderr] 131 | waiting.map(|waiting| waiting.notify()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(waiting) = waiting { waiting.notify() }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/session/canvas_state.rs:80:40 [INFO] [stderr] | [INFO] [stderr] 80 | let missing_canvases: Vec<_> = self.canvases.keys() [INFO] [stderr] | ________________________________________^ [INFO] [stderr] 81 | | .filter(|canvas_path| !found_canvases.contains(canvas_path)) [INFO] [stderr] 82 | | .map(|missing_path| missing_path.clone()) [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] 80 | let missing_canvases: Vec<_> = self.canvases.keys() [INFO] [stderr] 81 | .filter(|canvas_path| !found_canvases.contains(canvas_path)).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/session/canvas_state.rs:112:70 [INFO] [stderr] | [INFO] [stderr] 112 | fn update_control(&mut self, control: &Control, controller_path: &Vec, found_canvases: &mut HashSet) { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [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] 112 | fn update_control(&mut self, control: &Control, controller_path: &[String], found_canvases: &mut HashSet) { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] help: change `controller_path.clone()` to [INFO] [stderr] | [INFO] [stderr] 123 | let path = CanvasPath { controller_path: controller_path.to_owned(), canvas_name: canvas_name }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: change `controller_path.clone()` to [INFO] [stderr] | [INFO] [stderr] 142 | our_controller_path = controller_path.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/session/canvas_state.rs:117:17 [INFO] [stderr] | [INFO] [stderr] 117 | String::from(name) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `name` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/session/canvas_state.rs:179:16 [INFO] [stderr] | [INFO] [stderr] 179 | if canvas_updates.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!canvas_updates.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: you should consider deriving a `Default` implementation for `session::state::UiSessionState` [INFO] [stderr] --> src/session/state.rs:34:5 [INFO] [stderr] | [INFO] [stderr] 34 | / pub fn new() -> UiSessionState { [INFO] [stderr] 35 | | UiSessionState { [INFO] [stderr] 36 | | ui: None, [INFO] [stderr] 37 | | view_model_diff: None, [INFO] [stderr] ... | [INFO] [stderr] 40 | | } [INFO] [stderr] 41 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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] 16 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/session/state.rs:51:16 [INFO] [stderr] | [INFO] [stderr] 51 | if differences.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `differences.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/session/state.rs:109:16 [INFO] [stderr] | [INFO] [stderr] 109 | if differences.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `differences.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/session/state.rs:134:16 [INFO] [stderr] | [INFO] [stderr] 134 | if updates.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `updates.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: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/layout.rs:29:19 [INFO] [stderr] | [INFO] [stderr] 29 | pub fn to_abs(&mut self, pos: &Position) -> f32 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/layout.rs:32:24 [INFO] [stderr] | [INFO] [stderr] 32 | let next_pos = match pos { [INFO] [stderr] | ________________________^ [INFO] [stderr] 33 | | &At(pos) => pos, [INFO] [stderr] 34 | | &Offset(pos) => self.last_pos + pos, [INFO] [stderr] 35 | | &Stretch(_ratio) => self.last_pos, [INFO] [stderr] ... | [INFO] [stderr] 41 | | &Floating(_, _) => 0.0 [INFO] [stderr] 42 | | }; [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] 32 | let next_pos = match *pos { [INFO] [stderr] 33 | At(pos) => pos, [INFO] [stderr] 34 | Offset(pos) => self.last_pos + pos, [INFO] [stderr] 35 | Stretch(_ratio) => self.last_pos, [INFO] [stderr] 36 | Start => self.start, [INFO] [stderr] 37 | End => self.start + self.length, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/layout.rs:72:19 [INFO] [stderr] | [INFO] [stderr] 72 | pub fn to_abs(&mut self, x: &Position, y: &Position) -> (f32, f32) { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/layout.rs:79:26 [INFO] [stderr] | [INFO] [stderr] 79 | pub fn to_abs_bounds(&mut self, bounds: &Bounds) -> ((f32, f32), (f32, f32)) { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/layout.rs:107:17 [INFO] [stderr] | [INFO] [stderr] 107 | assert!(layout.to_abs(&At(50.0)) == 50.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(layout.to_abs(&At(50.0)) - 50.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/layout.rs:107:17 [INFO] [stderr] | [INFO] [stderr] 107 | assert!(layout.to_abs(&At(50.0)) == 50.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/layout.rs:114:17 [INFO] [stderr] | [INFO] [stderr] 114 | assert!(layout.to_abs(&End) == 100.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(layout.to_abs(&End) - 100.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/layout.rs:114:17 [INFO] [stderr] | [INFO] [stderr] 114 | assert!(layout.to_abs(&End) == 100.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/layout.rs:122:17 [INFO] [stderr] | [INFO] [stderr] 122 | assert!(layout.to_abs(&Offset(20.0)) == 20.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(layout.to_abs(&Offset(20.0)) - 20.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/layout.rs:122:17 [INFO] [stderr] | [INFO] [stderr] 122 | assert!(layout.to_abs(&Offset(20.0)) == 20.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/layout.rs:124:17 [INFO] [stderr] | [INFO] [stderr] 124 | assert!(layout.to_abs(&After) == 20.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(layout.to_abs(&After) - 20.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/layout.rs:124:17 [INFO] [stderr] | [INFO] [stderr] 124 | assert!(layout.to_abs(&After) == 20.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/layout.rs:125:17 [INFO] [stderr] | [INFO] [stderr] 125 | assert!(layout.to_abs(&Offset(20.0)) == 40.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(layout.to_abs(&Offset(20.0)) - 40.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/layout.rs:125:17 [INFO] [stderr] | [INFO] [stderr] 125 | assert!(layout.to_abs(&Offset(20.0)) == 40.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/layout.rs:127:17 [INFO] [stderr] | [INFO] [stderr] 127 | assert!(layout.to_abs(&After) == 40.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(layout.to_abs(&After) - 40.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/layout.rs:127:17 [INFO] [stderr] | [INFO] [stderr] 127 | assert!(layout.to_abs(&After) == 40.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/layout.rs:128:17 [INFO] [stderr] | [INFO] [stderr] 128 | assert!(layout.to_abs(&End) == 100.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(layout.to_abs(&End) - 100.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/layout.rs:128:17 [INFO] [stderr] | [INFO] [stderr] 128 | assert!(layout.to_abs(&End) == 100.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [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/diff.rs:20:25 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn new(address: &Vec, replacement: &TNode) -> Diff { [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] 20 | pub fn new(address: &[u32], replacement: &TNode) -> Diff { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] help: change `address.clone()` to [INFO] [stderr] | [INFO] [stderr] 21 | Diff { address: address.to_owned(), replacement: replacement.clone() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/diff.rs:60:48 [INFO] [stderr] | [INFO] [stderr] 60 | fn diff_tree_run(address: &Vec, source: &TNode, target: &TNode) -> Vec> { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [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] 60 | fn diff_tree_run(address: &[u32], source: &TNode, target: &TNode) -> Vec> { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] help: change `address.clone()` to [INFO] [stderr] | [INFO] [stderr] 80 | let mut node_address = address.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/diff.rs:74:19 [INFO] [stderr] | [INFO] [stderr] 74 | } else if source_children.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `source_children.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: length comparison to zero [INFO] [stderr] --> src/diff.rs:262:17 [INFO] [stderr] | [INFO] [stderr] 262 | assert!(differences.len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `differences.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/controller.rs:90:71 [INFO] [stderr] | [INFO] [stderr] 90 | pub fn controller_path_for_address<'a>(ui_tree: &'a Control, address: &Vec) -> Vec<&'a str> { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[u32]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `controller::NullController` [INFO] [stderr] --> src/controller.rs:139:5 [INFO] [stderr] | [INFO] [stderr] 139 | / pub fn new() -> NullController { [INFO] [stderr] 140 | | NullController { } [INFO] [stderr] 141 | | } [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] 135 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/controller.rs:315:17 [INFO] [stderr] | [INFO] [stderr] 315 | assert!(controller_path_for_address(&control, &vec![]).len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `controller_path_for_address(&control, &vec![]).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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/property.rs:34:9 [INFO] [stderr] | [INFO] [stderr] 34 | / if let &PropertyValue::String(ref result) = self { [INFO] [stderr] 35 | | Some(result.clone()) [INFO] [stderr] 36 | | } else { [INFO] [stderr] 37 | | None [INFO] [stderr] 38 | | } [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] 34 | if let PropertyValue::String(ref result) = *self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/property.rs:45:9 [INFO] [stderr] | [INFO] [stderr] 45 | / if let &PropertyValue::String(ref result) = self { [INFO] [stderr] 46 | | Some(&*result) [INFO] [stderr] 47 | | } else { [INFO] [stderr] 48 | | None [INFO] [stderr] 49 | | } [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] 45 | if let PropertyValue::String(ref result) = *self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/property.rs:55:9 [INFO] [stderr] | [INFO] [stderr] 55 | / match self { [INFO] [stderr] 56 | | &Property::Nothing => String::from("<>"), [INFO] [stderr] 57 | | &Property::Bool(ref b) => b.to_string(), [INFO] [stderr] 58 | | &Property::Int(ref i) => i.to_string(), [INFO] [stderr] ... | [INFO] [stderr] 62 | | &Property::Bind(ref binding) => format!("<>", binding) [INFO] [stderr] 63 | | } [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] 55 | match *self { [INFO] [stderr] 56 | Property::Nothing => String::from("<>"), [INFO] [stderr] 57 | Property::Bool(ref b) => b.to_string(), [INFO] [stderr] 58 | Property::Int(ref i) => i.to_string(), [INFO] [stderr] 59 | Property::Float(ref f) => f.to_string(), [INFO] [stderr] 60 | Property::String(ref s) => s.clone(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/property.rs:69:9 [INFO] [stderr] | [INFO] [stderr] 69 | / match self { [INFO] [stderr] 70 | | &PropertyValue::Nothing => String::from("<>"), [INFO] [stderr] 71 | | &PropertyValue::Bool(ref b) => b.to_string(), [INFO] [stderr] 72 | | &PropertyValue::Int(ref i) => i.to_string(), [INFO] [stderr] 73 | | &PropertyValue::Float(ref f) => f.to_string(), [INFO] [stderr] 74 | | &PropertyValue::String(ref s) => s.clone() [INFO] [stderr] 75 | | } [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] 69 | match *self { [INFO] [stderr] 70 | PropertyValue::Nothing => String::from("<>"), [INFO] [stderr] 71 | PropertyValue::Bool(ref b) => b.to_string(), [INFO] [stderr] 72 | PropertyValue::Int(ref i) => i.to_string(), [INFO] [stderr] 73 | PropertyValue::Float(ref f) => f.to_string(), [INFO] [stderr] 74 | PropertyValue::String(ref s) => s.clone() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/property.rs:112:25 [INFO] [stderr] | [INFO] [stderr] 112 | Property::Float((*self) as f64) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `f64::from((*self))` [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/property.rs:124:9 [INFO] [stderr] | [INFO] [stderr] 124 | / match self { [INFO] [stderr] 125 | | &PropertyValue::Nothing => Property::Nothing, [INFO] [stderr] 126 | | &PropertyValue::Bool(ref b) => Property::Bool(*b), [INFO] [stderr] 127 | | &PropertyValue::Int(ref i) => Property::Int(*i), [INFO] [stderr] 128 | | &PropertyValue::Float(ref f) => Property::Float(*f), [INFO] [stderr] 129 | | &PropertyValue::String(ref s) => Property::String(s.clone()) [INFO] [stderr] 130 | | } [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] 124 | match *self { [INFO] [stderr] 125 | PropertyValue::Nothing => Property::Nothing, [INFO] [stderr] 126 | PropertyValue::Bool(ref b) => Property::Bool(*b), [INFO] [stderr] 127 | PropertyValue::Int(ref i) => Property::Int(*i), [INFO] [stderr] 128 | PropertyValue::Float(ref f) => Property::Float(*f), [INFO] [stderr] 129 | PropertyValue::String(ref s) => Property::String(s.clone()) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `viewmodel::NullViewModel` [INFO] [stderr] --> src/viewmodel.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | / pub fn new() -> NullViewModel { [INFO] [stderr] 27 | | NullViewModel { nothing: BindRef::from(bind(PropertyValue::Nothing)) } [INFO] [stderr] 28 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 25 | impl Default for viewmodel::NullViewModel { [INFO] [stderr] 26 | fn default() -> Self { [INFO] [stderr] 27 | Self::new() [INFO] [stderr] 28 | } [INFO] [stderr] 29 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `dynamic_viewmodel::DynamicViewModel` [INFO] [stderr] --> src/dynamic_viewmodel.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | / pub fn new() -> DynamicViewModel { [INFO] [stderr] 31 | | DynamicViewModel { [INFO] [stderr] 32 | | bindings: Mutex::new(HashMap::new()), [INFO] [stderr] 33 | | computed: Mutex::new(HashMap::new()), [INFO] [stderr] 34 | | nothing: BindRef::from(bind(PropertyValue::Nothing)) } [INFO] [stderr] 35 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 26 | impl Default for dynamic_viewmodel::DynamicViewModel { [INFO] [stderr] 27 | fn default() -> Self { [INFO] [stderr] 28 | Self::new() [INFO] [stderr] 29 | } [INFO] [stderr] 30 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/dynamic_viewmodel.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | bindings.get(&String::from(property_name)).map(|arc| arc.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `bindings.get(&String::from(property_name)).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/dynamic_viewmodel.rs:52:9 [INFO] [stderr] | [INFO] [stderr] 52 | computed.get(&String::from(property_name)).map(|arc| arc.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `computed.get(&String::from(property_name)).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 are using an explicit closure for cloning elements [INFO] [stderr] --> src/dynamic_viewmodel.rs:104:13 [INFO] [stderr] | [INFO] [stderr] 104 | / bindings [INFO] [stderr] 105 | | .keys() [INFO] [stderr] 106 | | .map(|key| key.clone()) [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] 104 | bindings [INFO] [stderr] 105 | .keys().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/dynamic_viewmodel.rs:113:13 [INFO] [stderr] | [INFO] [stderr] 113 | / computed [INFO] [stderr] 114 | | .keys() [INFO] [stderr] 115 | | .map(|key| key.clone()) [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] 113 | computed [INFO] [stderr] 114 | .keys().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicBool instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/dynamic_viewmodel.rs:175:36 [INFO] [stderr] | [INFO] [stderr] 175 | let notified = Arc::new(Mutex::new(false)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::mutex_atomic)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/dynamic_viewmodel.rs:187:17 [INFO] [stderr] | [INFO] [stderr] 187 | assert!((*notified.lock().unwrap()) == false); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!(*notified.lock().unwrap())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/dynamic_viewmodel.rs:192:17 [INFO] [stderr] | [INFO] [stderr] 192 | assert!((*notified.lock().unwrap()) == true); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `(*notified.lock().unwrap())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicBool instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/dynamic_viewmodel.rs:197:36 [INFO] [stderr] | [INFO] [stderr] 197 | let notified = Arc::new(Mutex::new(false)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/dynamic_viewmodel.rs:213:17 [INFO] [stderr] | [INFO] [stderr] 213 | assert!((*notified.lock().unwrap()) == false); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!(*notified.lock().unwrap())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/dynamic_viewmodel.rs:220:17 [INFO] [stderr] | [INFO] [stderr] 220 | assert!((*notified.lock().unwrap()) == true); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `(*notified.lock().unwrap())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicBool instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/dynamic_viewmodel.rs:225:36 [INFO] [stderr] | [INFO] [stderr] 225 | let notified = Arc::new(Mutex::new(false)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/dynamic_viewmodel.rs:237:17 [INFO] [stderr] | [INFO] [stderr] 237 | assert!((*notified.lock().unwrap()) == false); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!(*notified.lock().unwrap())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/dynamic_viewmodel.rs:242:17 [INFO] [stderr] | [INFO] [stderr] 242 | assert!((*notified.lock().unwrap()) == true); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `(*notified.lock().unwrap())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicBool instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/dynamic_viewmodel.rs:247:36 [INFO] [stderr] | [INFO] [stderr] 247 | let notified = Arc::new(Mutex::new(false)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/dynamic_viewmodel.rs:262:17 [INFO] [stderr] | [INFO] [stderr] 262 | assert!((*notified.lock().unwrap()) == false); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!(*notified.lock().unwrap())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/dynamic_viewmodel.rs:268:17 [INFO] [stderr] | [INFO] [stderr] 268 | assert!((*notified.lock().unwrap()) == true); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `(*notified.lock().unwrap())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicBool instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/diff_viewmodel.rs:108:71 [INFO] [stderr] | [INFO] [stderr] 108 | .map(|property_name| (property_name.clone(), Arc::new(Mutex::new(false)))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/diff_viewmodel.rs:152:51 [INFO] [stderr] | [INFO] [stderr] 152 | let existing_properties: HashSet<_> = self.changed_properties.keys().map(|name| name.clone()).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.changed_properties.keys().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 are using an explicit closure for cloning elements [INFO] [stderr] --> src/diff_viewmodel.rs:153:51 [INFO] [stderr] | [INFO] [stderr] 153 | let new_properties = properties.iter() [INFO] [stderr] | ___________________________________________________^ [INFO] [stderr] 154 | | .filter(|property| !existing_properties.contains(*property)) [INFO] [stderr] 155 | | .map(|name| name.clone()); [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] 153 | let new_properties = properties.iter() [INFO] [stderr] 154 | .filter(|property| !existing_properties.contains(*property)).cloned(); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/diff_viewmodel.rs:163:16 [INFO] [stderr] | [INFO] [stderr] 163 | if properties_and_values.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!properties_and_values.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/diff_viewmodel.rs:271:12 [INFO] [stderr] | [INFO] [stderr] 271 | if viewmodel_update.updates().len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!viewmodel_update.updates().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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/diff_viewmodel.rs:336:23 [INFO] [stderr] | [INFO] [stderr] 336 | let res = self.subcontrollers.lock().unwrap().get(id).map(|x| x.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.subcontrollers.lock().unwrap().get(id).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: length comparison to zero [INFO] [stderr] --> src/diff_viewmodel.rs:435:17 [INFO] [stderr] | [INFO] [stderr] 435 | assert!(updates.len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `updates.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/diff_viewmodel.rs:461:17 [INFO] [stderr] | [INFO] [stderr] 461 | assert!(updates.len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `updates.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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/resource_manager.rs:134:40 [INFO] [stderr] | [INFO] [stderr] 134 | let id = self.free_slots.pop().unwrap_or(self.resources.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| self.resources.len())` [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] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `resource_manager::ResourceManager` [INFO] [stderr] --> src/resource_manager.rs:205:5 [INFO] [stderr] | [INFO] [stderr] 205 | / pub fn new() -> ResourceManager { [INFO] [stderr] 206 | | ResourceManager { [INFO] [stderr] 207 | | core: Desync::new(ResourceManagerCore { [INFO] [stderr] 208 | | resources: vec![], [INFO] [stderr] ... | [INFO] [stderr] 214 | | } [INFO] [stderr] 215 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 201 | impl Default for resource_manager::ResourceManager { [INFO] [stderr] 202 | fn default() -> Self { [INFO] [stderr] 203 | Self::new() [INFO] [stderr] 204 | } [INFO] [stderr] 205 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/resource_manager.rs:310:13 [INFO] [stderr] | [INFO] [stderr] 310 | / core.named_resources [INFO] [stderr] 311 | | .get(&String::from(name)) [INFO] [stderr] 312 | | .map(|res| res.clone()) [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] 310 | core.named_resources [INFO] [stderr] 311 | .get(&String::from(name)).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/resource_manager.rs:345:17 [INFO] [stderr] | [INFO] [stderr] 345 | assert!(resource_manager.get_resource_with_id(id).map(|x| *x) == Some(2)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `resource_manager.get_resource_with_id(id).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 are using an explicit closure for cloning elements [INFO] [stderr] --> src/resource_manager.rs:355:17 [INFO] [stderr] | [INFO] [stderr] 355 | assert!(resource_manager.get_resource_with_id(id).map(|x| *x) == None); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `resource_manager.get_resource_with_id(id).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 are using an explicit closure for cloning elements [INFO] [stderr] --> src/resource_manager.rs:366:17 [INFO] [stderr] | [INFO] [stderr] 366 | assert!(resource_manager.get_resource_with_id(id).map(|x| *x) == None); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `resource_manager.get_resource_with_id(id).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 are using an explicit closure for cloning elements [INFO] [stderr] --> src/resource_manager.rs:376:17 [INFO] [stderr] | [INFO] [stderr] 376 | assert!(resource_manager.get_named_resource("Mr Resource").map(|x| *x) == Some(2)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `resource_manager.get_named_resource("Mr Resource").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 are using an explicit closure for cloning elements [INFO] [stderr] --> src/resource_manager.rs:388:17 [INFO] [stderr] | [INFO] [stderr] 388 | assert!(resource_manager.get_named_resource("Mr Resource").map(|x| *x) == Some(3)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `resource_manager.get_named_resource("Mr Resource").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 are using an explicit closure for cloning elements [INFO] [stderr] --> src/resource_manager.rs:434:17 [INFO] [stderr] | [INFO] [stderr] 434 | assert!(resource_manager.get_named_resource("Mr Resource").map(|x| *x) == Some(2)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `resource_manager.get_named_resource("Mr Resource").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: the loop variable `i` is used to index `resource` [INFO] [stderr] --> src/resource_manager.rs:447:18 [INFO] [stderr] | [INFO] [stderr] 447 | for i in 0..100 { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 447 | for (i, ) in resource.iter().enumerate().take(100) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/resource_manager.rs:448:21 [INFO] [stderr] | [INFO] [stderr] 448 | assert!(resource_manager.get_resource_with_id(resource[i].id()).map(|x| *x) == Some(i)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `resource_manager.get_resource_with_id(resource[i].id()).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/binding_canvas.rs:90:17 [INFO] [stderr] | [INFO] [stderr] 90 | / if let &Some(ref draw_fn) = draw_fn { [INFO] [stderr] 91 | | draw_fn(gc); [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] 90 | if let Some(ref draw_fn) = *draw_fn { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `binding_canvas::BindingCanvas` [INFO] [stderr] --> src/binding_canvas.rs:128:5 [INFO] [stderr] | [INFO] [stderr] 128 | / pub fn new() -> BindingCanvas { [INFO] [stderr] 129 | | Self::from(Arc::new(Canvas::new())) [INFO] [stderr] 130 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 124 | impl Default for binding_canvas::BindingCanvas { [INFO] [stderr] 125 | fn default() -> Self { [INFO] [stderr] 126 | Self::new() [INFO] [stderr] 127 | } [INFO] [stderr] 128 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/json.rs:13:9 [INFO] [stderr] | [INFO] [stderr] 13 | / match self { [INFO] [stderr] 14 | | &BoundingBox(ref bounds) => json!({ "BoundingBox": bounds }), [INFO] [stderr] 15 | | &Text(ref property) => json!({ "Text": property }), [INFO] [stderr] 16 | | &ZIndex(zindex) => json!({ "ZIndex": zindex }), [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] 13 | match *self { [INFO] [stderr] 14 | BoundingBox(ref bounds) => json!({ "BoundingBox": bounds }), [INFO] [stderr] 15 | Text(ref property) => json!({ "Text": property }), [INFO] [stderr] 16 | ZIndex(zindex) => json!({ "ZIndex": zindex }), [INFO] [stderr] 17 | Padding((left, top), (right, bottom)) => json!({ "Padding": { "left": left, "top": top, "right": right, "bottom": bottom } }), [INFO] [stderr] 18 | FontAttr(attr) => json!({ "Font": attr }), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/control.rs:122:5 [INFO] [stderr] | [INFO] [stderr] 122 | / pub fn controller<'a>(&'a self) -> Option<&'a str> { [INFO] [stderr] 123 | | self.attributes.iter() [INFO] [stderr] 124 | | .map(|attr| attr.controller()) [INFO] [stderr] 125 | | .find(|attr| attr.is_some()) [INFO] [stderr] 126 | | .map(|attr| attr.unwrap()) [INFO] [stderr] 127 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/control.rs:142:5 [INFO] [stderr] | [INFO] [stderr] 142 | / pub fn bounding_box<'a>(&'a self) -> Option<&'a Bounds> { [INFO] [stderr] 143 | | self.attributes.iter() [INFO] [stderr] 144 | | .map(|attr| attr.bounding_box()) [INFO] [stderr] 145 | | .find(|attr| attr.is_some()) [INFO] [stderr] 146 | | .map(|attr| attr.unwrap()) [INFO] [stderr] 147 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/control.rs:152:5 [INFO] [stderr] | [INFO] [stderr] 152 | / pub fn canvas_resource<'a>(&'a self) -> Option<&Resource> { [INFO] [stderr] 153 | | self.attributes.iter() [INFO] [stderr] 154 | | .map(|attr| attr.canvas()) [INFO] [stderr] 155 | | .find(|attr| attr.is_some()) [INFO] [stderr] 156 | | .map(|attr| attr.unwrap()) [INFO] [stderr] 157 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:71:5 [INFO] [stderr] | [INFO] [stderr] 71 | / pub fn bounding_box<'a>(&'a self) -> Option<&'a Bounds> { [INFO] [stderr] 72 | | match self { [INFO] [stderr] 73 | | &BoundingBox(ref bounds) => Some(bounds), [INFO] [stderr] 74 | | _ => None [INFO] [stderr] 75 | | } [INFO] [stderr] 76 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / match self { [INFO] [stderr] 73 | | &BoundingBox(ref bounds) => Some(bounds), [INFO] [stderr] 74 | | _ => None [INFO] [stderr] 75 | | } [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] 72 | match *self { [INFO] [stderr] 73 | BoundingBox(ref bounds) => Some(bounds), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:82:9 [INFO] [stderr] | [INFO] [stderr] 82 | / match self { [INFO] [stderr] 83 | | &ZIndex(zindex) => Some(zindex), [INFO] [stderr] 84 | | _ => None [INFO] [stderr] 85 | | } [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] 82 | match *self { [INFO] [stderr] 83 | ZIndex(zindex) => Some(zindex), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:92:9 [INFO] [stderr] | [INFO] [stderr] 92 | / match self { [INFO] [stderr] 93 | | &Padding(left_top, right_bottom) => Some((left_top, right_bottom)), [INFO] [stderr] 94 | | _ => None [INFO] [stderr] 95 | | } [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] 92 | match *self { [INFO] [stderr] 93 | Padding(left_top, right_bottom) => Some((left_top, right_bottom)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:101:5 [INFO] [stderr] | [INFO] [stderr] 101 | / pub fn text<'a>(&'a self) -> Option<&'a Property> { [INFO] [stderr] 102 | | match self { [INFO] [stderr] 103 | | &Text(ref text) => Some(text), [INFO] [stderr] 104 | | _ => None [INFO] [stderr] 105 | | } [INFO] [stderr] 106 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:102:9 [INFO] [stderr] | [INFO] [stderr] 102 | / match self { [INFO] [stderr] 103 | | &Text(ref text) => Some(text), [INFO] [stderr] 104 | | _ => None [INFO] [stderr] 105 | | } [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] 102 | match *self { [INFO] [stderr] 103 | Text(ref text) => Some(text), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:111:5 [INFO] [stderr] | [INFO] [stderr] 111 | / pub fn font<'a>(&'a self) -> Option<&'a Font> { [INFO] [stderr] 112 | | match self { [INFO] [stderr] 113 | | &FontAttr(ref attr) => Some(attr), [INFO] [stderr] 114 | | _ => None [INFO] [stderr] 115 | | } [INFO] [stderr] 116 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:112:9 [INFO] [stderr] | [INFO] [stderr] 112 | / match self { [INFO] [stderr] 113 | | &FontAttr(ref attr) => Some(attr), [INFO] [stderr] 114 | | _ => None [INFO] [stderr] 115 | | } [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] 112 | match *self { [INFO] [stderr] 113 | FontAttr(ref attr) => Some(attr), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:121:5 [INFO] [stderr] | [INFO] [stderr] 121 | / pub fn id<'a>(&'a self) -> Option<&'a String> { [INFO] [stderr] 122 | | match self { [INFO] [stderr] 123 | | &Id(ref id) => Some(id), [INFO] [stderr] 124 | | _ => None [INFO] [stderr] 125 | | } [INFO] [stderr] 126 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:122:9 [INFO] [stderr] | [INFO] [stderr] 122 | / match self { [INFO] [stderr] 123 | | &Id(ref id) => Some(id), [INFO] [stderr] 124 | | _ => None [INFO] [stderr] 125 | | } [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] 122 | match *self { [INFO] [stderr] 123 | Id(ref id) => Some(id), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:132:9 [INFO] [stderr] | [INFO] [stderr] 132 | / match self { [INFO] [stderr] 133 | | &SubComponents(ref components) => Some(components), [INFO] [stderr] 134 | | _ => None [INFO] [stderr] 135 | | } [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] 132 | match *self { [INFO] [stderr] 133 | SubComponents(ref components) => Some(components), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:141:5 [INFO] [stderr] | [INFO] [stderr] 141 | / pub fn controller<'a>(&'a self) -> Option<&'a str> { [INFO] [stderr] 142 | | match self { [INFO] [stderr] 143 | | &Controller(ref controller) => Some(controller), [INFO] [stderr] 144 | | _ => None [INFO] [stderr] 145 | | } [INFO] [stderr] 146 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:142:9 [INFO] [stderr] | [INFO] [stderr] 142 | / match self { [INFO] [stderr] 143 | | &Controller(ref controller) => Some(controller), [INFO] [stderr] 144 | | _ => None [INFO] [stderr] 145 | | } [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] 142 | match *self { [INFO] [stderr] 143 | Controller(ref controller) => Some(controller), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:151:5 [INFO] [stderr] | [INFO] [stderr] 151 | / pub fn action<'a>(&'a self) -> Option<(&'a ActionTrigger, &'a String)> { [INFO] [stderr] 152 | | match self { [INFO] [stderr] 153 | | &Action(ref trigger, ref action) => Some((trigger, action)), [INFO] [stderr] 154 | | _ => None [INFO] [stderr] 155 | | } [INFO] [stderr] 156 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:152:9 [INFO] [stderr] | [INFO] [stderr] 152 | / match self { [INFO] [stderr] 153 | | &Action(ref trigger, ref action) => Some((trigger, action)), [INFO] [stderr] 154 | | _ => None [INFO] [stderr] 155 | | } [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] 152 | match *self { [INFO] [stderr] 153 | Action(ref trigger, ref action) => Some((trigger, action)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:161:5 [INFO] [stderr] | [INFO] [stderr] 161 | / pub fn state<'a>(&'a self) -> Option<&'a State> { [INFO] [stderr] 162 | | match self { [INFO] [stderr] 163 | | &StateAttr(ref state) => Some(state), [INFO] [stderr] 164 | | _ => None [INFO] [stderr] 165 | | } [INFO] [stderr] 166 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | / match self { [INFO] [stderr] 163 | | &StateAttr(ref state) => Some(state), [INFO] [stderr] 164 | | _ => None [INFO] [stderr] 165 | | } [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] 162 | match *self { [INFO] [stderr] 163 | StateAttr(ref state) => Some(state), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:171:5 [INFO] [stderr] | [INFO] [stderr] 171 | / pub fn popup<'a>(&'a self) -> Option<&'a Popup> { [INFO] [stderr] 172 | | match self { [INFO] [stderr] 173 | | &PopupAttr(ref popup) => Some(popup), [INFO] [stderr] 174 | | _ => None [INFO] [stderr] 175 | | } [INFO] [stderr] 176 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:172:9 [INFO] [stderr] | [INFO] [stderr] 172 | / match self { [INFO] [stderr] 173 | | &PopupAttr(ref popup) => Some(popup), [INFO] [stderr] 174 | | _ => None [INFO] [stderr] 175 | | } [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] 172 | match *self { [INFO] [stderr] 173 | PopupAttr(ref popup) => Some(popup), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:182:9 [INFO] [stderr] | [INFO] [stderr] 182 | / match self { [INFO] [stderr] 183 | | &Canvas(ref canvas) => Some(canvas), [INFO] [stderr] 184 | | _ => None [INFO] [stderr] 185 | | } [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] 182 | match *self { [INFO] [stderr] 183 | Canvas(ref canvas) => Some(canvas), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:191:5 [INFO] [stderr] | [INFO] [stderr] 191 | / pub fn appearance<'a>(&'a self) -> Option<&'a Appearance> { [INFO] [stderr] 192 | | match self { [INFO] [stderr] 193 | | &AppearanceAttr(ref appearance) => Some(appearance), [INFO] [stderr] 194 | | _ => None [INFO] [stderr] 195 | | } [INFO] [stderr] 196 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:192:9 [INFO] [stderr] | [INFO] [stderr] 192 | / match self { [INFO] [stderr] 193 | | &AppearanceAttr(ref appearance) => Some(appearance), [INFO] [stderr] 194 | | _ => None [INFO] [stderr] 195 | | } [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] 192 | match *self { [INFO] [stderr] 193 | AppearanceAttr(ref appearance) => Some(appearance), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/control/attributes.rs:201:5 [INFO] [stderr] | [INFO] [stderr] 201 | / pub fn scroll<'a>(&'a self) -> Option<&'a Scroll> { [INFO] [stderr] 202 | | match self { [INFO] [stderr] 203 | | &ScrollAttr(ref scroll) => Some(scroll), [INFO] [stderr] 204 | | _ => None [INFO] [stderr] 205 | | } [INFO] [stderr] 206 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:202:9 [INFO] [stderr] | [INFO] [stderr] 202 | / match self { [INFO] [stderr] 203 | | &ScrollAttr(ref scroll) => Some(scroll), [INFO] [stderr] 204 | | _ => None [INFO] [stderr] 205 | | } [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] 202 | match *self { [INFO] [stderr] 203 | ScrollAttr(ref scroll) => Some(scroll), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/control/attributes.rs:213:9 [INFO] [stderr] | [INFO] [stderr] 213 | / match self { [INFO] [stderr] 214 | | &BoundingBox(ref bounds) => Some(bounds) != compare_to.bounding_box(), [INFO] [stderr] 215 | | &ZIndex(zindex) => Some(zindex) != compare_to.z_index(), [INFO] [stderr] 216 | | &Padding(lt, rb) => Some((lt, rb)) != compare_to.padding(), [INFO] [stderr] ... | [INFO] [stderr] 229 | | &SubComponents(ref components) => Some(components.len()) != compare_to.subcomponents().map(|components| components.len()) [INFO] [stderr] 230 | | } [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] 213 | match *self { [INFO] [stderr] 214 | BoundingBox(ref bounds) => Some(bounds) != compare_to.bounding_box(), [INFO] [stderr] 215 | ZIndex(zindex) => Some(zindex) != compare_to.z_index(), [INFO] [stderr] 216 | Padding(lt, rb) => Some((lt, rb)) != compare_to.padding(), [INFO] [stderr] 217 | Text(ref text) => Some(text) != compare_to.text(), [INFO] [stderr] 218 | FontAttr(ref font) => Some(font) != compare_to.font(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/controllers/virtual_canvas.rs:31:18 [INFO] [stderr] | [INFO] [stderr] 31 | draw_region: Arc Box ()+Send+Sync>+Send+Sync>, [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/controllers/virtual_canvas.rs:134:13 [INFO] [stderr] | [INFO] [stderr] 134 | for ref mut row in tiles.iter_mut() { [INFO] [stderr] | ^^^^^^^^^^^ ---------------- help: try: `let row = &mut tiles.iter_mut();` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/controllers/virtual_canvas.rs:151:27 [INFO] [stderr] | [INFO] [stderr] 151 | let new_row = (0..width).into_iter() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `(0..width)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/controllers/virtual_canvas.rs:238:22 [INFO] [stderr] | [INFO] [stderr] 238 | .zip((0..tiles.len()).into_iter()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `(0..tiles.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/controllers/virtual_canvas.rs:241:26 [INFO] [stderr] | [INFO] [stderr] 241 | .zip((0..row.len()).into_iter()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `(0..row.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/controllers/virtual_canvas.rs:275:17 [INFO] [stderr] | [INFO] [stderr] 275 | assert!(control.get().subcomponents().unwrap().len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `control.get().subcomponents().unwrap().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/session/core.rs:58:24 [INFO] [stderr] | [INFO] [stderr] 58 | if controller_path.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `controller_path.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: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/session/core.rs:66:42 [INFO] [stderr] | [INFO] [stderr] 66 | controller = controller.map_or(None, move |ctrl| ctrl.get_subcontroller(&controller_name)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try using and_then instead: `controller.and_then(move |ctrl| ctrl.get_subcontroller(&controller_name))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_or_none)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/session/core.rs:69:25 [INFO] [stderr] | [INFO] [stderr] 69 | / match controller { [INFO] [stderr] 70 | | Some(ref controller) => self.dispatch_action(&**controller, event_name, action_parameter), [INFO] [stderr] 71 | | None => () // TODO: event has disappeared into the void :-( [INFO] [stderr] 72 | | } [INFO] [stderr] | |_________________________^ help: try this: `if let Some(ref controller) = controller { self.dispatch_action(&**controller, event_name, action_parameter) }` [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] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/session/event_sink.rs:37:37 [INFO] [stderr] | [INFO] [stderr] 37 | last_event: Mutex::new(0), [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/session/event_sink.rs:38:46 [INFO] [stderr] | [INFO] [stderr] 38 | last_finished_event: Arc::new(Mutex::new(0)) [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/session/event_sink.rs:50:35 [INFO] [stderr] | [INFO] [stderr] 50 | let mut last_event = self.last_event.lock().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/session/event_sink.rs:79:31 [INFO] [stderr] | [INFO] [stderr] 79 | let current_event = *(self.last_event.lock().unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/session/update_stream.rs:131:17 [INFO] [stderr] | [INFO] [stderr] 131 | waiting.map(|waiting| waiting.notify()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(waiting) = waiting { waiting.notify() }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/session/canvas_state.rs:80:40 [INFO] [stderr] | [INFO] [stderr] 80 | let missing_canvases: Vec<_> = self.canvases.keys() [INFO] [stderr] | ________________________________________^ [INFO] [stderr] 81 | | .filter(|canvas_path| !found_canvases.contains(canvas_path)) [INFO] [stderr] 82 | | .map(|missing_path| missing_path.clone()) [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] 80 | let missing_canvases: Vec<_> = self.canvases.keys() [INFO] [stderr] 81 | .filter(|canvas_path| !found_canvases.contains(canvas_path)).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/session/canvas_state.rs:112:70 [INFO] [stderr] | [INFO] [stderr] 112 | fn update_control(&mut self, control: &Control, controller_path: &Vec, found_canvases: &mut HashSet) { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [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] 112 | fn update_control(&mut self, control: &Control, controller_path: &[String], found_canvases: &mut HashSet) { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] help: change `controller_path.clone()` to [INFO] [stderr] | [INFO] [stderr] 123 | let path = CanvasPath { controller_path: controller_path.to_owned(), canvas_name: canvas_name }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: change `controller_path.clone()` to [INFO] [stderr] | [INFO] [stderr] 142 | our_controller_path = controller_path.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/session/canvas_state.rs:117:17 [INFO] [stderr] | [INFO] [stderr] 117 | String::from(name) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `name` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/session/canvas_state.rs:179:16 [INFO] [stderr] | [INFO] [stderr] 179 | if canvas_updates.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!canvas_updates.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/session/canvas_state.rs:266:17 [INFO] [stderr] | [INFO] [stderr] 266 | assert!(canvas_state.latest_updates().len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `canvas_state.latest_updates().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/session/canvas_state.rs:279:17 [INFO] [stderr] | [INFO] [stderr] 279 | assert!(canvas_state.latest_updates().len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `canvas_state.latest_updates().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/session/canvas_state.rs:285:17 [INFO] [stderr] | [INFO] [stderr] 285 | assert!(canvas_state.latest_updates().len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `canvas_state.latest_updates().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: you should consider deriving a `Default` implementation for `session::state::UiSessionState` [INFO] [stderr] --> src/session/state.rs:34:5 [INFO] [stderr] | [INFO] [stderr] 34 | / pub fn new() -> UiSessionState { [INFO] [stderr] 35 | | UiSessionState { [INFO] [stderr] 36 | | ui: None, [INFO] [stderr] 37 | | view_model_diff: None, [INFO] [stderr] ... | [INFO] [stderr] 40 | | } [INFO] [stderr] 41 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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] 16 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/session/state.rs:51:16 [INFO] [stderr] | [INFO] [stderr] 51 | if differences.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `differences.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/session/state.rs:109:16 [INFO] [stderr] | [INFO] [stderr] 109 | if differences.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `differences.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/session/state.rs:134:16 [INFO] [stderr] | [INFO] [stderr] 134 | if updates.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `updates.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: redundant closure found [INFO] [stderr] --> src/session/tests.rs:59:45 [INFO] [stderr] | [INFO] [stderr] 59 | let next_or_timeout = update_stream.map(|updates| TestItem::Updates(updates)).select(timeout(2000).into_stream().map(|_| TestItem::Timeout).map_err(|_| ())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TestItem::Updates` [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/session/tests.rs:88:45 [INFO] [stderr] | [INFO] [stderr] 88 | let next_or_timeout = update_stream.map(|updates| TestItem::Updates(updates)).select(timeout(2000).into_stream().map(|_| TestItem::Timeout).map_err(|_| ())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TestItem::Updates` [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: redundant closure found [INFO] [stderr] --> src/session/tests.rs:114:45 [INFO] [stderr] | [INFO] [stderr] 114 | let next_or_timeout = update_stream.map(|updates| TestItem::Updates(updates)).select(timeout(250).into_stream().map(|_| TestItem::Timeout).map_err(|_| ())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TestItem::Updates` [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: redundant closure found [INFO] [stderr] --> src/session/tests.rs:140:45 [INFO] [stderr] | [INFO] [stderr] 140 | let next_or_timeout = update_stream.map(|updates| TestItem::Updates(updates)).select(timeout(1000).into_stream().map(|_| TestItem::Timeout).map_err(|_| ())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TestItem::Updates` [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] error: aborting due to 7 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `flo_ui`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "2ef366a80cc70121d26e182cec31ddf923ebb6689ef96d843565ee44efd5998c"` [INFO] running `"docker" "rm" "-f" "2ef366a80cc70121d26e182cec31ddf923ebb6689ef96d843565ee44efd5998c"` [INFO] [stdout] 2ef366a80cc70121d26e182cec31ddf923ebb6689ef96d843565ee44efd5998c