[INFO] crate flo_http_ui 0.1.0 is already in cache [INFO] extracting crate flo_http_ui 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/flo_http_ui/0.1.0 [INFO] extracting crate flo_http_ui 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/flo_http_ui/0.1.0 [INFO] validating manifest of flo_http_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_http_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_http_ui-0.1.0 [INFO] finished frobbing flo_http_ui-0.1.0 [INFO] frobbed toml for flo_http_ui-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/flo_http_ui/0.1.0/Cargo.toml [INFO] started frobbing flo_http_ui-0.1.0 [INFO] finished frobbing flo_http_ui-0.1.0 [INFO] frobbed toml for flo_http_ui-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/flo_http_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_http_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-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/flo_http_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] 70188f89338a5e70b0c6a72834f2ba83d964b0ef0ce0ff04768c1b303c2897af [INFO] running `"docker" "start" "-a" "70188f89338a5e70b0c6a72834f2ba83d964b0ef0ce0ff04768c1b303c2897af"` [INFO] [stderr] Checking rust-hsluv v0.1.3 [INFO] [stderr] Checking svg v0.5.12 [INFO] [stderr] Checking desync v0.1.2 [INFO] [stderr] Checking desync v0.2.4 [INFO] [stderr] Checking rulinalg v0.4.2 [INFO] [stderr] Checking persistent v0.4.0 [INFO] [stderr] Checking mount v0.4.0 [INFO] [stderr] Checking websocket v0.20.4 [INFO] [stderr] Checking flo_binding v0.1.1 [INFO] [stderr] Checking bodyparser v0.8.0 [INFO] [stderr] Checking flo_curves v0.1.0 [INFO] [stderr] Checking flo_canvas v0.1.0 [INFO] [stderr] Checking flo_ui v0.1.0 [INFO] [stderr] Checking flo_http_ui v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/http_user_interface.rs:40:13 [INFO] [stderr] | [INFO] [stderr] 40 | ui_tree: ui_tree, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `ui_tree` [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/http_user_interface.rs:41:13 [INFO] [stderr] | [INFO] [stderr] 41 | base_path: base_path [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `base_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/http_session.rs:39:13 [INFO] [stderr] | [INFO] [stderr] 39 | http_ui: http_ui, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `http_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/http_session.rs:40:13 [INFO] [stderr] | [INFO] [stderr] 40 | input: input, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `input` [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/http_session.rs:41:13 [INFO] [stderr] | [INFO] [stderr] 41 | 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/update.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | address: address, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `address` [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/ui_handler.rs:54:13 [INFO] [stderr] | [INFO] [stderr] 54 | sessions: sessions, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sessions` [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/ws_handler.rs:44:28 [INFO] [stderr] | [INFO] [stderr] 44 | WebSocketHandler { sessions: sessions } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `sessions` [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/canvas_update.rs:25:13 [INFO] [stderr] | [INFO] [stderr] 25 | 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/canvas_update.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | 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/canvas_update.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | 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/parked_future.rs:83:43 [INFO] [stderr] | [INFO] [stderr] 83 | let unparker = FutureUnparker { 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/http_user_interface.rs:40:13 [INFO] [stderr] | [INFO] [stderr] 40 | ui_tree: ui_tree, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `ui_tree` [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/http_user_interface.rs:41:13 [INFO] [stderr] | [INFO] [stderr] 41 | base_path: base_path [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `base_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/http_session.rs:39:13 [INFO] [stderr] | [INFO] [stderr] 39 | http_ui: http_ui, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `http_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/http_session.rs:40:13 [INFO] [stderr] | [INFO] [stderr] 40 | input: input, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `input` [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/http_session.rs:41:13 [INFO] [stderr] | [INFO] [stderr] 41 | 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/update.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | address: address, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `address` [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/ui_handler.rs:54:13 [INFO] [stderr] | [INFO] [stderr] 54 | sessions: sessions, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sessions` [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/ws_handler.rs:44:28 [INFO] [stderr] | [INFO] [stderr] 44 | WebSocketHandler { sessions: sessions } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `sessions` [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/canvas_update.rs:25:13 [INFO] [stderr] | [INFO] [stderr] 25 | 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/canvas_update.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | 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/canvas_update.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | 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/parked_future.rs:83:43 [INFO] [stderr] | [INFO] [stderr] 83 | let unparker = FutureUnparker { 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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/ui_handler.rs:112:9 [INFO] [stderr] | [INFO] [stderr] 112 | session_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/ui_handler.rs:109:26 [INFO] [stderr] | [INFO] [stderr] 109 | let session_id = self.sessions.new_session(session_controller, base_url); [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: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:250:32 [INFO] [stderr] | [INFO] [stderr] 250 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_parens)] on by default [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:250:32 [INFO] [stderr] | [INFO] [stderr] 250 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::double_parens)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:254:28 [INFO] [stderr] | [INFO] [stderr] 254 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:254:28 [INFO] [stderr] | [INFO] [stderr] 254 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:304:32 [INFO] [stderr] | [INFO] [stderr] 304 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:304:32 [INFO] [stderr] | [INFO] [stderr] 304 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:307:35 [INFO] [stderr] | [INFO] [stderr] 307 | return Response::with((status::NotFound)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:307:35 [INFO] [stderr] | [INFO] [stderr] 307 | return Response::with((status::NotFound)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:317:35 [INFO] [stderr] | [INFO] [stderr] 317 | return Response::with((status::NotFound)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:317:35 [INFO] [stderr] | [INFO] [stderr] 317 | return Response::with((status::NotFound)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:340:43 [INFO] [stderr] | [INFO] [stderr] 340 | _ => Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:340:43 [INFO] [stderr] | [INFO] [stderr] 340 | _ => Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:344:28 [INFO] [stderr] | [INFO] [stderr] 344 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:344:28 [INFO] [stderr] | [INFO] [stderr] 344 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:365:39 [INFO] [stderr] | [INFO] [stderr] 365 | Ok(Response::with((status::BadRequest))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:365:39 [INFO] [stderr] | [INFO] [stderr] 365 | Ok(Response::with((status::BadRequest))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:372:66 [INFO] [stderr] | [INFO] [stderr] 372 | Ok(None) => Ok(Response::with((status::BadRequest))), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:372:66 [INFO] [stderr] | [INFO] [stderr] 372 | Ok(None) => Ok(Response::with((status::BadRequest))), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:373:66 [INFO] [stderr] | [INFO] [stderr] 373 | Err(_) => Ok(Response::with((status::BadRequest))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:373:66 [INFO] [stderr] | [INFO] [stderr] 373 | Err(_) => Ok(Response::with((status::BadRequest))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:385:35 [INFO] [stderr] | [INFO] [stderr] 385 | Ok(Response::with((status::BadRequest))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:385:35 [INFO] [stderr] | [INFO] [stderr] 385 | Ok(Response::with((status::BadRequest))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/ui_handler.rs:112:9 [INFO] [stderr] | [INFO] [stderr] 112 | session_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/ui_handler.rs:109:26 [INFO] [stderr] | [INFO] [stderr] 109 | let session_id = self.sessions.new_session(session_controller, base_url); [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: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:250:32 [INFO] [stderr] | [INFO] [stderr] 250 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_parens)] on by default [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:250:32 [INFO] [stderr] | [INFO] [stderr] 250 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::double_parens)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:254:28 [INFO] [stderr] | [INFO] [stderr] 254 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:254:28 [INFO] [stderr] | [INFO] [stderr] 254 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:304:32 [INFO] [stderr] | [INFO] [stderr] 304 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:304:32 [INFO] [stderr] | [INFO] [stderr] 304 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:307:35 [INFO] [stderr] | [INFO] [stderr] 307 | return Response::with((status::NotFound)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:307:35 [INFO] [stderr] | [INFO] [stderr] 307 | return Response::with((status::NotFound)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:317:35 [INFO] [stderr] | [INFO] [stderr] 317 | return Response::with((status::NotFound)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:317:35 [INFO] [stderr] | [INFO] [stderr] 317 | return Response::with((status::NotFound)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:340:43 [INFO] [stderr] | [INFO] [stderr] 340 | _ => Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:340:43 [INFO] [stderr] | [INFO] [stderr] 340 | _ => Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:344:28 [INFO] [stderr] | [INFO] [stderr] 344 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:344:28 [INFO] [stderr] | [INFO] [stderr] 344 | Response::with((status::NotFound)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:365:39 [INFO] [stderr] | [INFO] [stderr] 365 | Ok(Response::with((status::BadRequest))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:365:39 [INFO] [stderr] | [INFO] [stderr] 365 | Ok(Response::with((status::BadRequest))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:372:66 [INFO] [stderr] | [INFO] [stderr] 372 | Ok(None) => Ok(Response::with((status::BadRequest))), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:372:66 [INFO] [stderr] | [INFO] [stderr] 372 | Ok(None) => Ok(Response::with((status::BadRequest))), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:373:66 [INFO] [stderr] | [INFO] [stderr] 373 | Err(_) => Ok(Response::with((status::BadRequest))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:373:66 [INFO] [stderr] | [INFO] [stderr] 373 | Err(_) => Ok(Response::with((status::BadRequest))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ui_handler.rs:385:35 [INFO] [stderr] | [INFO] [stderr] 385 | Ok(Response::with((status::BadRequest))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/ui_handler.rs:385:35 [INFO] [stderr] | [INFO] [stderr] 385 | Ok(Response::with((status::BadRequest))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/http_user_interface.rs:79:32 [INFO] [stderr] | [INFO] [stderr] 79 | .flat_map(|update| match update { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 80 | | &Update::UpdateViewModel(ref view_model) => view_model.clone(), [INFO] [stderr] 81 | | _ => vec![] [INFO] [stderr] 82 | | }.into_iter()) [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] 79 | .flat_map(|update| match *update { [INFO] [stderr] 80 | Update::UpdateViewModel(ref view_model) => view_model.clone(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/http_user_interface.rs:89:48 [INFO] [stderr] | [INFO] [stderr] 89 | if html_diff.len() == 1 && html_diff[0].address.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `html_diff[0].address.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: redundant closure found [INFO] [stderr] --> src/http_user_interface.rs:163:98 [INFO] [stderr] | [INFO] [stderr] 163 | UpdateCanvas(canvas_diffs) => vec![Update::UpdateCanvas(canvas_diffs.into_iter().map(|diff| Self::map_canvas_diff(diff)).collect())], [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Self::map_canvas_diff` [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: length comparison to zero [INFO] [stderr] --> src/http_user_interface.rs:175:27 [INFO] [stderr] | [INFO] [stderr] 175 | let is_start = core_update.len() > 0 && core_update[0] == Start; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!core_update.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/http_user_interface.rs:204:22 [INFO] [stderr] | [INFO] [stderr] 204 | .map(|evt| Self::http_event_to_core_event(evt)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Self::http_event_to_core_event` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/http_session.rs:112:101 [INFO] [stderr] | [INFO] [stderr] 112 | Ok(Async::Ready(result)) => Ok(Async::Ready((updates.take().unwrap(), result.unwrap_or(vec![])))), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| vec![])` [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: passing a unit value to a function [INFO] [stderr] --> src/http_session.rs:114:56 [INFO] [stderr] | [INFO] [stderr] 114 | Err(derp) => Err(derp) [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 114 | Err(derp) => Err(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/http_session.rs:207:101 [INFO] [stderr] | [INFO] [stderr] 207 | Ok(Async::Ready(result)) => Ok(Async::Ready((updates.take().unwrap(), result.unwrap_or(vec![])))), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| vec![])` [INFO] [stderr] | [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: passing a unit value to a function [INFO] [stderr] --> src/http_session.rs:209:56 [INFO] [stderr] | [INFO] [stderr] 209 | Err(derp) => Err(derp) [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 209 | Err(derp) => Err(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/sessions.rs:17:15 [INFO] [stderr] | [INFO] [stderr] 17 | sessions: Mutex>>>>> [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `sessions::WebSessions` [INFO] [stderr] --> src/sessions.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | / pub fn new() -> WebSessions { [INFO] [stderr] 25 | | WebSessions { [INFO] [stderr] 26 | | sessions: Mutex::new(HashMap::new()) [INFO] [stderr] 27 | | } [INFO] [stderr] 28 | | } [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] 15 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/update.rs:30:25 [INFO] [stderr] | [INFO] [stderr] 30 | new_html: String::from(new_html) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `new_html` [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: this lifetime isn't used in the function definition [INFO] [stderr] --> src/htmlcontrol.rs:31:44 [INFO] [stderr] | [INFO] [stderr] 31 | pub fn append_component_to_controller_path<'a>(controller_path: &str, subcontroller_name: &str) -> String { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [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/htmlcontrol.rs:38:76 [INFO] [stderr] | [INFO] [stderr] 38 | pub fn html_controller_path_for_address<'a>(ui_tree: &'a Control, address: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[u32]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:82:13 [INFO] [stderr] | [INFO] [stderr] 82 | / match attribute { [INFO] [stderr] 83 | | &SubComponents(_) => { [INFO] [stderr] 84 | | // Subcomponents get the subcomponent controller path [INFO] [stderr] 85 | | result.append_child_node(attribute.to_html_subcomponent(base_path, subcomponent_path)); [INFO] [stderr] ... | [INFO] [stderr] 91 | | } [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] 82 | match *attribute { [INFO] [stderr] 83 | SubComponents(_) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:105:9 [INFO] [stderr] | [INFO] [stderr] 105 | / match self { [INFO] [stderr] 106 | | &SubComponents(ref subcomponents) => { [INFO] [stderr] 107 | | let mut result = DomCollection::new(vec![]); [INFO] [stderr] 108 | | [INFO] [stderr] ... | [INFO] [stderr] 157 | | &Action(_, _) => DomEmpty::new() [INFO] [stderr] 158 | | } [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] 105 | match *self { [INFO] [stderr] 106 | SubComponents(ref subcomponents) => { [INFO] [stderr] 107 | let mut result = DomCollection::new(vec![]); [INFO] [stderr] 108 | [INFO] [stderr] 109 | // Subcomponents go inside the div [INFO] [stderr] 110 | let subcomponent_nodes = subcomponents.iter() [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/htmlcontrol.rs:142:60 [INFO] [stderr] | [INFO] [stderr] 142 | DomAttribute::new("flo-controller", if controller_path.len() > 0 { &controller_path[1..] } else { "" }) [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:166:9 [INFO] [stderr] | [INFO] [stderr] 166 | / match self { [INFO] [stderr] 167 | | &HorizontalScrollBar(ScrollBarVisibility::Never) => DomAttribute::new("style", "overflow-x: hidden;"), [INFO] [stderr] 168 | | &HorizontalScrollBar(ScrollBarVisibility::Always) => DomAttribute::new("style", "overflow-x: scroll;"), [INFO] [stderr] 169 | | &HorizontalScrollBar(ScrollBarVisibility::OnlyIfNeeded) => DomAttribute::new("style", "overflow-x: auto;"), [INFO] [stderr] ... | [INFO] [stderr] 179 | | _ => DomEmpty::new() [INFO] [stderr] 180 | | } [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] 166 | match *self { [INFO] [stderr] 167 | HorizontalScrollBar(ScrollBarVisibility::Never) => DomAttribute::new("style", "overflow-x: hidden;"), [INFO] [stderr] 168 | HorizontalScrollBar(ScrollBarVisibility::Always) => DomAttribute::new("style", "overflow-x: scroll;"), [INFO] [stderr] 169 | HorizontalScrollBar(ScrollBarVisibility::OnlyIfNeeded) => DomAttribute::new("style", "overflow-x: auto;"), [INFO] [stderr] 170 | [INFO] [stderr] 171 | VerticalScrollBar(ScrollBarVisibility::Never) => DomAttribute::new("style", "overflow-y: hidden;"), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:188:9 [INFO] [stderr] | [INFO] [stderr] 188 | / match self { [INFO] [stderr] 189 | | &Background(ref col) => { [INFO] [stderr] 190 | | let (r, g, b, a) = col.to_rgba_components(); [INFO] [stderr] 191 | | let (r, g, b) = ((r*255.0).floor() as i32, (g*255.0).floor() as i32, (b*255.0).floor() as i32); [INFO] [stderr] ... | [INFO] [stderr] 218 | | } [INFO] [stderr] 219 | | } [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] 188 | match *self { [INFO] [stderr] 189 | Background(ref col) => { [INFO] [stderr] 190 | let (r, g, b, a) = col.to_rgba_components(); [INFO] [stderr] 191 | let (r, g, b) = ((r*255.0).floor() as i32, (g*255.0).floor() as i32, (b*255.0).floor() as i32); [INFO] [stderr] 192 | [INFO] [stderr] 193 | DomAttribute::new("style", &format!("background-color: rgba({}, {}, {}, {});", r, g, b, a)) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:233:9 [INFO] [stderr] | [INFO] [stderr] 233 | / match self { [INFO] [stderr] 234 | | &Size(size) => DomAttribute::new("style", &format!("font-size: {}px;", size)), [INFO] [stderr] 235 | | &Align(align) => align.to_html_subcomponent(base_path, controller_path), [INFO] [stderr] 236 | | &Weight(weight) => weight.to_html_subcomponent(base_path, controller_path) [INFO] [stderr] 237 | | } [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] 233 | match *self { [INFO] [stderr] 234 | Size(size) => DomAttribute::new("style", &format!("font-size: {}px;", size)), [INFO] [stderr] 235 | Align(align) => align.to_html_subcomponent(base_path, controller_path), [INFO] [stderr] 236 | Weight(weight) => weight.to_html_subcomponent(base_path, controller_path) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:245:9 [INFO] [stderr] | [INFO] [stderr] 245 | / match self { [INFO] [stderr] 246 | | &Left => DomAttribute::new("style", &format!("text-align: left;")), [INFO] [stderr] 247 | | &Center => DomAttribute::new("style", &format!("text-align: center;")), [INFO] [stderr] 248 | | &Right => DomAttribute::new("style", &format!("text-align: right;")) [INFO] [stderr] 249 | | } [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] 245 | match *self { [INFO] [stderr] 246 | Left => DomAttribute::new("style", &format!("text-align: left;")), [INFO] [stderr] 247 | Center => DomAttribute::new("style", &format!("text-align: center;")), [INFO] [stderr] 248 | Right => DomAttribute::new("style", &format!("text-align: right;")) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/htmlcontrol.rs:246:52 [INFO] [stderr] | [INFO] [stderr] 246 | &Left => DomAttribute::new("style", &format!("text-align: left;")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"text-align: left;".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/htmlcontrol.rs:247:52 [INFO] [stderr] | [INFO] [stderr] 247 | &Center => DomAttribute::new("style", &format!("text-align: center;")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"text-align: center;".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/htmlcontrol.rs:248:52 [INFO] [stderr] | [INFO] [stderr] 248 | &Right => DomAttribute::new("style", &format!("text-align: right;")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"text-align: right;".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:263:9 [INFO] [stderr] | [INFO] [stderr] 263 | / match self { [INFO] [stderr] 264 | | &IsOpen(_) => DomEmpty::new(), [INFO] [stderr] 265 | | &Direction(_) => DomEmpty::new(), [INFO] [stderr] 266 | | &Size(_, _) => DomEmpty::new(), [INFO] [stderr] 267 | | &Offset(_) => DomEmpty::new() [INFO] [stderr] 268 | | } [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] 263 | match *self { [INFO] [stderr] 264 | IsOpen(_) => DomEmpty::new(), [INFO] [stderr] 265 | Direction(_) => DomEmpty::new(), [INFO] [stderr] 266 | Size(_, _) => DomEmpty::new(), [INFO] [stderr] 267 | Offset(_) => DomEmpty::new() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `ui_handler::UiHandler` [INFO] [stderr] --> src/ui_handler.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | / pub fn new() -> UiHandler { [INFO] [stderr] 42 | | UiHandler { [INFO] [stderr] 43 | | sessions: Arc::new(WebSessions::new()), [INFO] [stderr] 44 | | websocket_port: None [INFO] [stderr] 45 | | } [INFO] [stderr] 46 | | } [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] 37 | impl Default for ui_handler::UiHandler { [INFO] [stderr] 38 | fn default() -> Self { [INFO] [stderr] 39 | Self::new() [INFO] [stderr] 40 | } [INFO] [stderr] 41 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/ui_handler.rs:73:14 [INFO] [stderr] | [INFO] [stderr] 73 | .unwrap_or(Url::parse("http://localhost/").unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Url::parse("http://localhost/").unwrap())` [INFO] [stderr] | [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 are using an explicit closure for cloning elements [INFO] [stderr] --> src/ui_handler.rs:71:28 [INFO] [stderr] | [INFO] [stderr] 71 | let original_url = req.extensions.get::() [INFO] [stderr] | ____________________________^ [INFO] [stderr] 72 | | .map(|url| url.clone()) [INFO] [stderr] | |___________________________________^ help: Consider calling the dedicated `cloned` method: `req.extensions.get::().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] error: this `if` has identical blocks [INFO] [stderr] --> src/ui_handler.rs:86:64 [INFO] [stderr] | [INFO] [stderr] 86 | } else if request_path.len() > original_path.len() { [INFO] [stderr] | ________________________________________________________________^ [INFO] [stderr] 87 | | 0 [INFO] [stderr] 88 | | } else { [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/ui_handler.rs:84:65 [INFO] [stderr] | [INFO] [stderr] 84 | if request_path.len() == 1 && request_path[0] == "" { [INFO] [stderr] | _________________________________________________________________^ [INFO] [stderr] 85 | | 0 [INFO] [stderr] 86 | | } else if request_path.len() > original_path.len() { [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ui_handler.rs:198:12 [INFO] [stderr] | [INFO] [stderr] 198 | if relative_url.path().len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `relative_url.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: the loop variable `path_component` is only used to index `path`. [INFO] [stderr] --> src/ui_handler.rs:207:31 [INFO] [stderr] | [INFO] [stderr] 207 | for path_component in 0..(path.len()-1) { [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] 207 | for in path.iter().take((path.len()-1)) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/ui_handler.rs:211:18 [INFO] [stderr] | [INFO] [stderr] 211 | .unwrap_or(String::from(path[path_component])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| String::from(path[path_component]))` [INFO] [stderr] | [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: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/ui_handler.rs:212:26 [INFO] [stderr] | [INFO] [stderr] 212 | controller = controller.map_or(None, move |controller| controller.get_subcontroller(next_controller_name)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try using and_then instead: `controller.and_then(move |controller| controller.get_subcontroller(next_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: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/ui_handler.rs:239:39 [INFO] [stderr] | [INFO] [stderr] 239 | let canvas = canvas_resources.map_or(None, |resources| { [INFO] [stderr] | _______________________________________^ [INFO] [stderr] 240 | | if let Ok(id) = u32::from_str(&canvas_name) { [INFO] [stderr] 241 | | resources.get_resource_with_id(id) [INFO] [stderr] 242 | | } else { [INFO] [stderr] 243 | | resources.get_named_resource(&canvas_name) [INFO] [stderr] 244 | | } [INFO] [stderr] 245 | | }); [INFO] [stderr] | |______________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] help: try using and_then instead [INFO] [stderr] | [INFO] [stderr] 239 | let canvas = canvas_resources.and_then(|resources| { [INFO] [stderr] 240 | if let Ok(id) = u32::from_str(&canvas_name) { [INFO] [stderr] 241 | resources.get_resource_with_id(id) [INFO] [stderr] 242 | } else { [INFO] [stderr] 243 | resources.get_named_resource(&canvas_name) [INFO] [stderr] 244 | } [INFO] [stderr] ... [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/ui_handler.rs:290:35 [INFO] [stderr] | [INFO] [stderr] 290 | let image = image_resources.map_or(None, |resources| { [INFO] [stderr] | ___________________________________^ [INFO] [stderr] 291 | | if let Ok(id) = u32::from_str(&image_name) { [INFO] [stderr] 292 | | resources.get_resource_with_id(id) [INFO] [stderr] 293 | | } else { [INFO] [stderr] 294 | | resources.get_named_resource(&image_name) [INFO] [stderr] 295 | | } [INFO] [stderr] 296 | | }); [INFO] [stderr] | |______________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] help: try using and_then instead [INFO] [stderr] | [INFO] [stderr] 290 | let image = image_resources.and_then(|resources| { [INFO] [stderr] 291 | if let Ok(id) = u32::from_str(&image_name) { [INFO] [stderr] 292 | resources.get_resource_with_id(id) [INFO] [stderr] 293 | } else { [INFO] [stderr] 294 | resources.get_named_resource(&image_name) [INFO] [stderr] 295 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `ws_handler::WebSocketHandler` [INFO] [stderr] --> src/ws_handler.rs:35:5 [INFO] [stderr] | [INFO] [stderr] 35 | / pub fn new() -> WebSocketHandler { [INFO] [stderr] 36 | | WebSocketHandler { sessions: Arc::new(WebSessions::new()) } [INFO] [stderr] 37 | | } [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] 31 | impl Default for ws_handler::WebSocketHandler { [INFO] [stderr] 32 | fn default() -> Self { [INFO] [stderr] 33 | Self::new() [INFO] [stderr] 34 | } [INFO] [stderr] 35 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/ws_handler.rs:50:54 [INFO] [stderr] | [INFO] [stderr] 50 | pub fn handle_incoming_requests(&self, incoming: Box, SocketAddr), Error=InvalidConnection>>, tokio_core_handle: Arc) -> Box> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ws_handler.rs:106:42 [INFO] [stderr] | [INFO] [stderr] 106 | .map(|update_json| OwnedMessage::Text(update_json)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `OwnedMessage::Text` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `null_session::NullSession` [INFO] [stderr] --> src/null_session.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | / pub fn new() -> NullSession { [INFO] [stderr] 17 | | NullSession { [INFO] [stderr] 18 | | ui: BindRef::from(computed(|| { [INFO] [stderr] 19 | | Control::container() [INFO] [stderr] ... | [INFO] [stderr] 22 | | } [INFO] [stderr] 23 | | } [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] 15 | impl Default for null_session::NullSession { [INFO] [stderr] 16 | fn default() -> Self { [INFO] [stderr] 17 | Self::new() [INFO] [stderr] 18 | } [INFO] [stderr] 19 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `new` usually return `Self` [INFO] [stderr] --> src/minidom/element.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | / pub fn new(name: &str) -> DomNode { [INFO] [stderr] 19 | | DomNode::new(DomElement { [INFO] [stderr] 20 | | name: String::from(name), [INFO] [stderr] 21 | | content: vec![] [INFO] [stderr] 22 | | }) [INFO] [stderr] 23 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_ret_no_self)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/minidom/element.rs:39:20 [INFO] [stderr] | [INFO] [stderr] 39 | if value.len() > 0 { value.push_str(" "); } [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!value.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/minidom/element.rs:86:51 [INFO] [stderr] | [INFO] [stderr] 86 | .map(move |attr| (attr.element_name().unwrap_or(empty.clone()), attr.value().unwrap_or(empty.clone()))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| empty.clone())` [INFO] [stderr] | [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/minidom/element.rs:86:90 [INFO] [stderr] | [INFO] [stderr] 86 | .map(move |attr| (attr.element_name().unwrap_or(empty.clone()), attr.value().unwrap_or(empty.clone()))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| empty.clone())` [INFO] [stderr] | [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/minidom/element.rs:97:54 [INFO] [stderr] | [INFO] [stderr] 97 | matching_name.nth(0).map(|attr| attr.value().unwrap_or(String::from(""))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from(""))` [INFO] [stderr] | [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: methods called `new` usually return `Self` [INFO] [stderr] --> src/minidom/attribute.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | / pub fn new(name: &str, value: &str) -> DomNode { [INFO] [stderr] 8 | | DomNode::new(DomAttribute(String::from(name), String::from(value))) [INFO] [stderr] 9 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: methods called `new` usually return `Self` [INFO] [stderr] --> src/minidom/text.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | / pub fn new(text: &str) -> DomNode { [INFO] [stderr] 14 | | DomNode::new(DomText(String::from(text))) [INFO] [stderr] 15 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: methods called `new` usually return `Self` [INFO] [stderr] --> src/minidom/collection.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | / pub fn new(items: Vec) -> DomNode { [INFO] [stderr] 10 | | DomNode::new(DomCollection(items)) [INFO] [stderr] 11 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: methods called `new` usually return `Self` [INFO] [stderr] --> src/minidom/empty.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | / pub fn new() -> DomNode { [INFO] [stderr] 10 | | DomNode::new(DomEmpty) [INFO] [stderr] 11 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/minidom/quote.rs:4:25 [INFO] [stderr] | [INFO] [stderr] 4 | pub fn quote_text(text: &String) -> String { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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: the loop variable `index` is used to index `content` [INFO] [stderr] --> src/minidom/mod.rs:114:26 [INFO] [stderr] | [INFO] [stderr] 114 | for index in 0..content.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 114 | for (index, ) in content.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/minidom/mod.rs:124:16 [INFO] [stderr] | [INFO] [stderr] 124 | if replace_indexes.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `replace_indexes.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(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/parked_future.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | core.wait.as_mut().map(|wait| wait.notify()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(wait) = core.wait.as_mut() { wait.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] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `flo_http_ui`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/http_user_interface.rs:79:32 [INFO] [stderr] | [INFO] [stderr] 79 | .flat_map(|update| match update { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 80 | | &Update::UpdateViewModel(ref view_model) => view_model.clone(), [INFO] [stderr] 81 | | _ => vec![] [INFO] [stderr] 82 | | }.into_iter()) [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] 79 | .flat_map(|update| match *update { [INFO] [stderr] 80 | Update::UpdateViewModel(ref view_model) => view_model.clone(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/http_user_interface.rs:89:48 [INFO] [stderr] | [INFO] [stderr] 89 | if html_diff.len() == 1 && html_diff[0].address.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `html_diff[0].address.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: redundant closure found [INFO] [stderr] --> src/http_user_interface.rs:163:98 [INFO] [stderr] | [INFO] [stderr] 163 | UpdateCanvas(canvas_diffs) => vec![Update::UpdateCanvas(canvas_diffs.into_iter().map(|diff| Self::map_canvas_diff(diff)).collect())], [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Self::map_canvas_diff` [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: length comparison to zero [INFO] [stderr] --> src/http_user_interface.rs:175:27 [INFO] [stderr] | [INFO] [stderr] 175 | let is_start = core_update.len() > 0 && core_update[0] == Start; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!core_update.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/http_user_interface.rs:204:22 [INFO] [stderr] | [INFO] [stderr] 204 | .map(|evt| Self::http_event_to_core_event(evt)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Self::http_event_to_core_event` [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/http_user_interface.rs:279:51 [INFO] [stderr] | [INFO] [stderr] 279 | let next_or_timeout = http_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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/http_session.rs:112:101 [INFO] [stderr] | [INFO] [stderr] 112 | Ok(Async::Ready(result)) => Ok(Async::Ready((updates.take().unwrap(), result.unwrap_or(vec![])))), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| vec![])` [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: passing a unit value to a function [INFO] [stderr] --> src/http_session.rs:114:56 [INFO] [stderr] | [INFO] [stderr] 114 | Err(derp) => Err(derp) [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 114 | Err(derp) => Err(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/http_session.rs:207:101 [INFO] [stderr] | [INFO] [stderr] 207 | Ok(Async::Ready(result)) => Ok(Async::Ready((updates.take().unwrap(), result.unwrap_or(vec![])))), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| vec![])` [INFO] [stderr] | [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: passing a unit value to a function [INFO] [stderr] --> src/http_session.rs:209:56 [INFO] [stderr] | [INFO] [stderr] 209 | Err(derp) => Err(derp) [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 209 | Err(derp) => Err(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/http_session.rs:249:17 [INFO] [stderr] | [INFO] [stderr] 249 | assert!(updates.unwrap().len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!updates.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/http_session.rs:266:17 [INFO] [stderr] | [INFO] [stderr] 266 | assert!(updates.unwrap().len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `updates.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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/sessions.rs:17:15 [INFO] [stderr] | [INFO] [stderr] 17 | sessions: Mutex>>>>> [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `sessions::WebSessions` [INFO] [stderr] --> src/sessions.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | / pub fn new() -> WebSessions { [INFO] [stderr] 25 | | WebSessions { [INFO] [stderr] 26 | | sessions: Mutex::new(HashMap::new()) [INFO] [stderr] 27 | | } [INFO] [stderr] 28 | | } [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] 15 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/update.rs:30:25 [INFO] [stderr] | [INFO] [stderr] 30 | new_html: String::from(new_html) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `new_html` [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: this lifetime isn't used in the function definition [INFO] [stderr] --> src/htmlcontrol.rs:31:44 [INFO] [stderr] | [INFO] [stderr] 31 | pub fn append_component_to_controller_path<'a>(controller_path: &str, subcontroller_name: &str) -> String { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [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/htmlcontrol.rs:38:76 [INFO] [stderr] | [INFO] [stderr] 38 | pub fn html_controller_path_for_address<'a>(ui_tree: &'a Control, address: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[u32]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:82:13 [INFO] [stderr] | [INFO] [stderr] 82 | / match attribute { [INFO] [stderr] 83 | | &SubComponents(_) => { [INFO] [stderr] 84 | | // Subcomponents get the subcomponent controller path [INFO] [stderr] 85 | | result.append_child_node(attribute.to_html_subcomponent(base_path, subcomponent_path)); [INFO] [stderr] ... | [INFO] [stderr] 91 | | } [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] 82 | match *attribute { [INFO] [stderr] 83 | SubComponents(_) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:105:9 [INFO] [stderr] | [INFO] [stderr] 105 | / match self { [INFO] [stderr] 106 | | &SubComponents(ref subcomponents) => { [INFO] [stderr] 107 | | let mut result = DomCollection::new(vec![]); [INFO] [stderr] 108 | | [INFO] [stderr] ... | [INFO] [stderr] 157 | | &Action(_, _) => DomEmpty::new() [INFO] [stderr] 158 | | } [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] 105 | match *self { [INFO] [stderr] 106 | SubComponents(ref subcomponents) => { [INFO] [stderr] 107 | let mut result = DomCollection::new(vec![]); [INFO] [stderr] 108 | [INFO] [stderr] 109 | // Subcomponents go inside the div [INFO] [stderr] 110 | let subcomponent_nodes = subcomponents.iter() [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/htmlcontrol.rs:142:60 [INFO] [stderr] | [INFO] [stderr] 142 | DomAttribute::new("flo-controller", if controller_path.len() > 0 { &controller_path[1..] } else { "" }) [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:166:9 [INFO] [stderr] | [INFO] [stderr] 166 | / match self { [INFO] [stderr] 167 | | &HorizontalScrollBar(ScrollBarVisibility::Never) => DomAttribute::new("style", "overflow-x: hidden;"), [INFO] [stderr] 168 | | &HorizontalScrollBar(ScrollBarVisibility::Always) => DomAttribute::new("style", "overflow-x: scroll;"), [INFO] [stderr] 169 | | &HorizontalScrollBar(ScrollBarVisibility::OnlyIfNeeded) => DomAttribute::new("style", "overflow-x: auto;"), [INFO] [stderr] ... | [INFO] [stderr] 179 | | _ => DomEmpty::new() [INFO] [stderr] 180 | | } [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] 166 | match *self { [INFO] [stderr] 167 | HorizontalScrollBar(ScrollBarVisibility::Never) => DomAttribute::new("style", "overflow-x: hidden;"), [INFO] [stderr] 168 | HorizontalScrollBar(ScrollBarVisibility::Always) => DomAttribute::new("style", "overflow-x: scroll;"), [INFO] [stderr] 169 | HorizontalScrollBar(ScrollBarVisibility::OnlyIfNeeded) => DomAttribute::new("style", "overflow-x: auto;"), [INFO] [stderr] 170 | [INFO] [stderr] 171 | VerticalScrollBar(ScrollBarVisibility::Never) => DomAttribute::new("style", "overflow-y: hidden;"), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:188:9 [INFO] [stderr] | [INFO] [stderr] 188 | / match self { [INFO] [stderr] 189 | | &Background(ref col) => { [INFO] [stderr] 190 | | let (r, g, b, a) = col.to_rgba_components(); [INFO] [stderr] 191 | | let (r, g, b) = ((r*255.0).floor() as i32, (g*255.0).floor() as i32, (b*255.0).floor() as i32); [INFO] [stderr] ... | [INFO] [stderr] 218 | | } [INFO] [stderr] 219 | | } [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] 188 | match *self { [INFO] [stderr] 189 | Background(ref col) => { [INFO] [stderr] 190 | let (r, g, b, a) = col.to_rgba_components(); [INFO] [stderr] 191 | let (r, g, b) = ((r*255.0).floor() as i32, (g*255.0).floor() as i32, (b*255.0).floor() as i32); [INFO] [stderr] 192 | [INFO] [stderr] 193 | DomAttribute::new("style", &format!("background-color: rgba({}, {}, {}, {});", r, g, b, a)) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:233:9 [INFO] [stderr] | [INFO] [stderr] 233 | / match self { [INFO] [stderr] 234 | | &Size(size) => DomAttribute::new("style", &format!("font-size: {}px;", size)), [INFO] [stderr] 235 | | &Align(align) => align.to_html_subcomponent(base_path, controller_path), [INFO] [stderr] 236 | | &Weight(weight) => weight.to_html_subcomponent(base_path, controller_path) [INFO] [stderr] 237 | | } [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] 233 | match *self { [INFO] [stderr] 234 | Size(size) => DomAttribute::new("style", &format!("font-size: {}px;", size)), [INFO] [stderr] 235 | Align(align) => align.to_html_subcomponent(base_path, controller_path), [INFO] [stderr] 236 | Weight(weight) => weight.to_html_subcomponent(base_path, controller_path) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:245:9 [INFO] [stderr] | [INFO] [stderr] 245 | / match self { [INFO] [stderr] 246 | | &Left => DomAttribute::new("style", &format!("text-align: left;")), [INFO] [stderr] 247 | | &Center => DomAttribute::new("style", &format!("text-align: center;")), [INFO] [stderr] 248 | | &Right => DomAttribute::new("style", &format!("text-align: right;")) [INFO] [stderr] 249 | | } [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] 245 | match *self { [INFO] [stderr] 246 | Left => DomAttribute::new("style", &format!("text-align: left;")), [INFO] [stderr] 247 | Center => DomAttribute::new("style", &format!("text-align: center;")), [INFO] [stderr] 248 | Right => DomAttribute::new("style", &format!("text-align: right;")) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/htmlcontrol.rs:246:52 [INFO] [stderr] | [INFO] [stderr] 246 | &Left => DomAttribute::new("style", &format!("text-align: left;")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"text-align: left;".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/htmlcontrol.rs:247:52 [INFO] [stderr] | [INFO] [stderr] 247 | &Center => DomAttribute::new("style", &format!("text-align: center;")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"text-align: center;".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/htmlcontrol.rs:248:52 [INFO] [stderr] | [INFO] [stderr] 248 | &Right => DomAttribute::new("style", &format!("text-align: right;")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"text-align: right;".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/htmlcontrol.rs:263:9 [INFO] [stderr] | [INFO] [stderr] 263 | / match self { [INFO] [stderr] 264 | | &IsOpen(_) => DomEmpty::new(), [INFO] [stderr] 265 | | &Direction(_) => DomEmpty::new(), [INFO] [stderr] 266 | | &Size(_, _) => DomEmpty::new(), [INFO] [stderr] 267 | | &Offset(_) => DomEmpty::new() [INFO] [stderr] 268 | | } [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] 263 | match *self { [INFO] [stderr] 264 | IsOpen(_) => DomEmpty::new(), [INFO] [stderr] 265 | Direction(_) => DomEmpty::new(), [INFO] [stderr] 266 | Size(_, _) => DomEmpty::new(), [INFO] [stderr] 267 | Offset(_) => DomEmpty::new() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `ui_handler::UiHandler` [INFO] [stderr] --> src/ui_handler.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | / pub fn new() -> UiHandler { [INFO] [stderr] 42 | | UiHandler { [INFO] [stderr] 43 | | sessions: Arc::new(WebSessions::new()), [INFO] [stderr] 44 | | websocket_port: None [INFO] [stderr] 45 | | } [INFO] [stderr] 46 | | } [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] 37 | impl Default for ui_handler::UiHandler { [INFO] [stderr] 38 | fn default() -> Self { [INFO] [stderr] 39 | Self::new() [INFO] [stderr] 40 | } [INFO] [stderr] 41 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/ui_handler.rs:73:14 [INFO] [stderr] | [INFO] [stderr] 73 | .unwrap_or(Url::parse("http://localhost/").unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Url::parse("http://localhost/").unwrap())` [INFO] [stderr] | [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 are using an explicit closure for cloning elements [INFO] [stderr] --> src/ui_handler.rs:71:28 [INFO] [stderr] | [INFO] [stderr] 71 | let original_url = req.extensions.get::() [INFO] [stderr] | ____________________________^ [INFO] [stderr] 72 | | .map(|url| url.clone()) [INFO] [stderr] | |___________________________________^ help: Consider calling the dedicated `cloned` method: `req.extensions.get::().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] error: this `if` has identical blocks [INFO] [stderr] --> src/ui_handler.rs:86:64 [INFO] [stderr] | [INFO] [stderr] 86 | } else if request_path.len() > original_path.len() { [INFO] [stderr] | ________________________________________________________________^ [INFO] [stderr] 87 | | 0 [INFO] [stderr] 88 | | } else { [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/ui_handler.rs:84:65 [INFO] [stderr] | [INFO] [stderr] 84 | if request_path.len() == 1 && request_path[0] == "" { [INFO] [stderr] | _________________________________________________________________^ [INFO] [stderr] 85 | | 0 [INFO] [stderr] 86 | | } else if request_path.len() > original_path.len() { [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ui_handler.rs:198:12 [INFO] [stderr] | [INFO] [stderr] 198 | if relative_url.path().len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `relative_url.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: the loop variable `path_component` is only used to index `path`. [INFO] [stderr] --> src/ui_handler.rs:207:31 [INFO] [stderr] | [INFO] [stderr] 207 | for path_component in 0..(path.len()-1) { [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] 207 | for in path.iter().take((path.len()-1)) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/ui_handler.rs:211:18 [INFO] [stderr] | [INFO] [stderr] 211 | .unwrap_or(String::from(path[path_component])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| String::from(path[path_component]))` [INFO] [stderr] | [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: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/ui_handler.rs:212:26 [INFO] [stderr] | [INFO] [stderr] 212 | controller = controller.map_or(None, move |controller| controller.get_subcontroller(next_controller_name)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try using and_then instead: `controller.and_then(move |controller| controller.get_subcontroller(next_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: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/ui_handler.rs:239:39 [INFO] [stderr] | [INFO] [stderr] 239 | let canvas = canvas_resources.map_or(None, |resources| { [INFO] [stderr] | _______________________________________^ [INFO] [stderr] 240 | | if let Ok(id) = u32::from_str(&canvas_name) { [INFO] [stderr] 241 | | resources.get_resource_with_id(id) [INFO] [stderr] 242 | | } else { [INFO] [stderr] 243 | | resources.get_named_resource(&canvas_name) [INFO] [stderr] 244 | | } [INFO] [stderr] 245 | | }); [INFO] [stderr] | |______________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] help: try using and_then instead [INFO] [stderr] | [INFO] [stderr] 239 | let canvas = canvas_resources.and_then(|resources| { [INFO] [stderr] 240 | if let Ok(id) = u32::from_str(&canvas_name) { [INFO] [stderr] 241 | resources.get_resource_with_id(id) [INFO] [stderr] 242 | } else { [INFO] [stderr] 243 | resources.get_named_resource(&canvas_name) [INFO] [stderr] 244 | } [INFO] [stderr] ... [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/ui_handler.rs:290:35 [INFO] [stderr] | [INFO] [stderr] 290 | let image = image_resources.map_or(None, |resources| { [INFO] [stderr] | ___________________________________^ [INFO] [stderr] 291 | | if let Ok(id) = u32::from_str(&image_name) { [INFO] [stderr] 292 | | resources.get_resource_with_id(id) [INFO] [stderr] 293 | | } else { [INFO] [stderr] 294 | | resources.get_named_resource(&image_name) [INFO] [stderr] 295 | | } [INFO] [stderr] 296 | | }); [INFO] [stderr] | |______________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] help: try using and_then instead [INFO] [stderr] | [INFO] [stderr] 290 | let image = image_resources.and_then(|resources| { [INFO] [stderr] 291 | if let Ok(id) = u32::from_str(&image_name) { [INFO] [stderr] 292 | resources.get_resource_with_id(id) [INFO] [stderr] 293 | } else { [INFO] [stderr] 294 | resources.get_named_resource(&image_name) [INFO] [stderr] 295 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `ws_handler::WebSocketHandler` [INFO] [stderr] --> src/ws_handler.rs:35:5 [INFO] [stderr] | [INFO] [stderr] 35 | / pub fn new() -> WebSocketHandler { [INFO] [stderr] 36 | | WebSocketHandler { sessions: Arc::new(WebSessions::new()) } [INFO] [stderr] 37 | | } [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] 31 | impl Default for ws_handler::WebSocketHandler { [INFO] [stderr] 32 | fn default() -> Self { [INFO] [stderr] 33 | Self::new() [INFO] [stderr] 34 | } [INFO] [stderr] 35 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/ws_handler.rs:50:54 [INFO] [stderr] | [INFO] [stderr] 50 | pub fn handle_incoming_requests(&self, incoming: Box, SocketAddr), Error=InvalidConnection>>, tokio_core_handle: Arc) -> Box> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ws_handler.rs:106:42 [INFO] [stderr] | [INFO] [stderr] 106 | .map(|update_json| OwnedMessage::Text(update_json)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `OwnedMessage::Text` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `null_session::NullSession` [INFO] [stderr] --> src/null_session.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | / pub fn new() -> NullSession { [INFO] [stderr] 17 | | NullSession { [INFO] [stderr] 18 | | ui: BindRef::from(computed(|| { [INFO] [stderr] 19 | | Control::container() [INFO] [stderr] ... | [INFO] [stderr] 22 | | } [INFO] [stderr] 23 | | } [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] 15 | impl Default for null_session::NullSession { [INFO] [stderr] 16 | fn default() -> Self { [INFO] [stderr] 17 | Self::new() [INFO] [stderr] 18 | } [INFO] [stderr] 19 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `new` usually return `Self` [INFO] [stderr] --> src/minidom/element.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | / pub fn new(name: &str) -> DomNode { [INFO] [stderr] 19 | | DomNode::new(DomElement { [INFO] [stderr] 20 | | name: String::from(name), [INFO] [stderr] 21 | | content: vec![] [INFO] [stderr] 22 | | }) [INFO] [stderr] 23 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_ret_no_self)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/minidom/element.rs:39:20 [INFO] [stderr] | [INFO] [stderr] 39 | if value.len() > 0 { value.push_str(" "); } [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!value.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/minidom/element.rs:86:51 [INFO] [stderr] | [INFO] [stderr] 86 | .map(move |attr| (attr.element_name().unwrap_or(empty.clone()), attr.value().unwrap_or(empty.clone()))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| empty.clone())` [INFO] [stderr] | [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/minidom/element.rs:86:90 [INFO] [stderr] | [INFO] [stderr] 86 | .map(move |attr| (attr.element_name().unwrap_or(empty.clone()), attr.value().unwrap_or(empty.clone()))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| empty.clone())` [INFO] [stderr] | [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/minidom/element.rs:97:54 [INFO] [stderr] | [INFO] [stderr] 97 | matching_name.nth(0).map(|attr| attr.value().unwrap_or(String::from(""))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from(""))` [INFO] [stderr] | [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: length comparison to zero [INFO] [stderr] --> src/minidom/element.rs:162:17 [INFO] [stderr] | [INFO] [stderr] 162 | assert!(element.content().len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!element.content().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 `new` usually return `Self` [INFO] [stderr] --> src/minidom/attribute.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | / pub fn new(name: &str, value: &str) -> DomNode { [INFO] [stderr] 8 | | DomNode::new(DomAttribute(String::from(name), String::from(value))) [INFO] [stderr] 9 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: methods called `new` usually return `Self` [INFO] [stderr] --> src/minidom/text.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | / pub fn new(text: &str) -> DomNode { [INFO] [stderr] 14 | | DomNode::new(DomText(String::from(text))) [INFO] [stderr] 15 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: methods called `new` usually return `Self` [INFO] [stderr] --> src/minidom/collection.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | / pub fn new(items: Vec) -> DomNode { [INFO] [stderr] 10 | | DomNode::new(DomCollection(items)) [INFO] [stderr] 11 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: methods called `new` usually return `Self` [INFO] [stderr] --> src/minidom/empty.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | / pub fn new() -> DomNode { [INFO] [stderr] 10 | | DomNode::new(DomEmpty) [INFO] [stderr] 11 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/minidom/quote.rs:4:25 [INFO] [stderr] | [INFO] [stderr] 4 | pub fn quote_text(text: &String) -> String { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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: the loop variable `index` is used to index `content` [INFO] [stderr] --> src/minidom/mod.rs:114:26 [INFO] [stderr] | [INFO] [stderr] 114 | for index in 0..content.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 114 | for (index, ) in content.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/minidom/mod.rs:124:16 [INFO] [stderr] | [INFO] [stderr] 124 | if replace_indexes.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `replace_indexes.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(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/parked_future.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | core.wait.as_mut().map(|wait| wait.notify()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(wait) = core.wait.as_mut() { wait.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] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `flo_http_ui`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "70188f89338a5e70b0c6a72834f2ba83d964b0ef0ce0ff04768c1b303c2897af"` [INFO] running `"docker" "rm" "-f" "70188f89338a5e70b0c6a72834f2ba83d964b0ef0ce0ff04768c1b303c2897af"` [INFO] [stdout] 70188f89338a5e70b0c6a72834f2ba83d964b0ef0ce0ff04768c1b303c2897af