[INFO] crate opcua-server 0.5.0 is already in cache [INFO] extracting crate opcua-server 0.5.0 into work/ex/clippy-test-run/sources/stable/reg/opcua-server/0.5.0 [INFO] extracting crate opcua-server 0.5.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/opcua-server/0.5.0 [INFO] validating manifest of opcua-server-0.5.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 opcua-server-0.5.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 opcua-server-0.5.0 [INFO] finished frobbing opcua-server-0.5.0 [INFO] frobbed toml for opcua-server-0.5.0 written to work/ex/clippy-test-run/sources/stable/reg/opcua-server/0.5.0/Cargo.toml [INFO] started frobbing opcua-server-0.5.0 [INFO] finished frobbing opcua-server-0.5.0 [INFO] frobbed toml for opcua-server-0.5.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/opcua-server/0.5.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 opcua-server-0.5.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/opcua-server/0.5.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] 6076766320c7309aacb9f175c8edac4b6a6170833de9c88cbe13f72be8999eb2 [INFO] running `"docker" "start" "-a" "6076766320c7309aacb9f175c8edac4b6a6170833de9c88cbe13f72be8999eb2"` [INFO] [stderr] Checking opcua-types v0.5.0 [INFO] [stderr] Checking opcua-core v0.5.0 [INFO] [stderr] Checking opcua-client v0.5.0 [INFO] [stderr] Checking opcua-server v0.5.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/tests/services/monitored_item.rs:34:13 [INFO] [stderr] | [INFO] [stderr] 34 | sampling_interval: sampling_interval, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sampling_interval` [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/tests/services/monitored_item.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | filter: filter, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `filter` [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/tests/services/monitored_item.rs:36:13 [INFO] [stderr] | [INFO] [stderr] 36 | queue_size: queue_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `queue_size` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/tests/services/monitored_item.rs:209:13 [INFO] [stderr] | [INFO] [stderr] 209 | client_handle: client_handle, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `client_handle` [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/tests/services/monitored_item.rs:216:9 [INFO] [stderr] | [INFO] [stderr] 216 | client_handle: client_handle, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `client_handle` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/services/view.rs:172:16 [INFO] [stderr] | [INFO] [stderr] 172 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 173 | | if let Ok(reference_type_id) = node_to_browse.reference_type_id.as_reference_type_id() { [INFO] [stderr] 174 | | Some((reference_type_id, node_to_browse.include_subtypes)) [INFO] [stderr] 175 | | } else { [INFO] [stderr] 176 | | None [INFO] [stderr] 177 | | } [INFO] [stderr] 178 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 172 | } else if let Ok(reference_type_id) = node_to_browse.reference_type_id.as_reference_type_id() { [INFO] [stderr] 173 | Some((reference_type_id, node_to_browse.include_subtypes)) [INFO] [stderr] 174 | } else { [INFO] [stderr] 175 | None [INFO] [stderr] 176 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/diagnostics.rs:59:28 [INFO] [stderr] | [INFO] [stderr] 59 | const SERVER_DIAGNOSTICS: &'static str = "ServerDiagnostics"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/subscriptions/mod.rs:29:1 [INFO] [stderr] | [INFO] [stderr] 29 | pub mod subscriptions; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/subscriptions/monitored_item.rs:141:17 [INFO] [stderr] | [INFO] [stderr] 141 | value_has_changed [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/subscriptions/monitored_item.rs:139:41 [INFO] [stderr] | [INFO] [stderr] 139 | let value_has_changed = self.check_value(address_space, now, resend_data) && self.monitoring_mode == MonitoringMode::Reporting; [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/services/view.rs:172:16 [INFO] [stderr] | [INFO] [stderr] 172 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 173 | | if let Ok(reference_type_id) = node_to_browse.reference_type_id.as_reference_type_id() { [INFO] [stderr] 174 | | Some((reference_type_id, node_to_browse.include_subtypes)) [INFO] [stderr] 175 | | } else { [INFO] [stderr] 176 | | None [INFO] [stderr] 177 | | } [INFO] [stderr] 178 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 172 | } else if let Ok(reference_type_id) = node_to_browse.reference_type_id.as_reference_type_id() { [INFO] [stderr] 173 | Some((reference_type_id, node_to_browse.include_subtypes)) [INFO] [stderr] 174 | } else { [INFO] [stderr] 175 | None [INFO] [stderr] 176 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/diagnostics.rs:59:28 [INFO] [stderr] | [INFO] [stderr] 59 | const SERVER_DIAGNOSTICS: &'static str = "ServerDiagnostics"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/subscriptions/mod.rs:29:1 [INFO] [stderr] | [INFO] [stderr] 29 | pub mod subscriptions; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/subscriptions/monitored_item.rs:141:17 [INFO] [stderr] | [INFO] [stderr] 141 | value_has_changed [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/subscriptions/monitored_item.rs:139:41 [INFO] [stderr] | [INFO] [stderr] 139 | let value_has_changed = self.check_value(address_space, now, resend_data) && self.monitoring_mode == MonitoringMode::Reporting; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/address_space/mod.rs:121:1 [INFO] [stderr] | [INFO] [stderr] 121 | pub mod address_space; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/address_space/base.rs:165:24 [INFO] [stderr] | [INFO] [stderr] 165 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 166 | | if let &Variant::Array(ref array) = value.value.as_ref().unwrap() { [INFO] [stderr] 167 | | // check that the array of variants are all UInt32s [INFO] [stderr] 168 | | if let Some(_) = array.iter().find(|v| if let &Variant::UInt32(_) = v { false } else { true }) { [INFO] [stderr] ... | [INFO] [stderr] 176 | | } [INFO] [stderr] 177 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 165 | } else if let &Variant::Array(ref array) = value.value.as_ref().unwrap() { [INFO] [stderr] 166 | // check that the array of variants are all UInt32s [INFO] [stderr] 167 | if let Some(_) = array.iter().find(|v| if let &Variant::UInt32(_) = v { false } else { true }) { [INFO] [stderr] 168 | error!("Array contains non UInt32 values, cannot use as array dimensions"); [INFO] [stderr] 169 | false [INFO] [stderr] 170 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/address_space/method_impls.rs:22:12 [INFO] [stderr] | [INFO] [stderr] 22 | } else { [INFO] [stderr] | ____________^ [INFO] [stderr] 23 | | if expected == 0 { [INFO] [stderr] 24 | | Ok(()) [INFO] [stderr] 25 | | } else { [INFO] [stderr] 26 | | Err(StatusCode::BadArgumentsMissing) [INFO] [stderr] 27 | | } [INFO] [stderr] 28 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 22 | } else if expected == 0 { [INFO] [stderr] 23 | Ok(()) [INFO] [stderr] 24 | } else { [INFO] [stderr] 25 | Err(StatusCode::BadArgumentsMissing) [INFO] [stderr] 26 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/address_space/mod.rs:121:1 [INFO] [stderr] | [INFO] [stderr] 121 | pub mod address_space; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/address_space/base.rs:165:24 [INFO] [stderr] | [INFO] [stderr] 165 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 166 | | if let &Variant::Array(ref array) = value.value.as_ref().unwrap() { [INFO] [stderr] 167 | | // check that the array of variants are all UInt32s [INFO] [stderr] 168 | | if let Some(_) = array.iter().find(|v| if let &Variant::UInt32(_) = v { false } else { true }) { [INFO] [stderr] ... | [INFO] [stderr] 176 | | } [INFO] [stderr] 177 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 165 | } else if let &Variant::Array(ref array) = value.value.as_ref().unwrap() { [INFO] [stderr] 166 | // check that the array of variants are all UInt32s [INFO] [stderr] 167 | if let Some(_) = array.iter().find(|v| if let &Variant::UInt32(_) = v { false } else { true }) { [INFO] [stderr] 168 | error!("Array contains non UInt32 values, cannot use as array dimensions"); [INFO] [stderr] 169 | false [INFO] [stderr] 170 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/address_space/method_impls.rs:22:12 [INFO] [stderr] | [INFO] [stderr] 22 | } else { [INFO] [stderr] | ____________^ [INFO] [stderr] 23 | | if expected == 0 { [INFO] [stderr] 24 | | Ok(()) [INFO] [stderr] 25 | | } else { [INFO] [stderr] 26 | | Err(StatusCode::BadArgumentsMissing) [INFO] [stderr] 27 | | } [INFO] [stderr] 28 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 22 | } else if expected == 0 { [INFO] [stderr] 23 | Ok(()) [INFO] [stderr] 24 | } else { [INFO] [stderr] 25 | Err(StatusCode::BadArgumentsMissing) [INFO] [stderr] 26 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/tests/services/mod.rs:43:23 [INFO] [stderr] | [INFO] [stderr] 43 | timeout_hint: 123456, [INFO] [stderr] | ^^^^^^ help: consider: `123_456` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/tests/subscriptions/mod.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | mod subscriptions; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/session.rs:169:50 [INFO] [stderr] | [INFO] [stderr] 169 | pub fn terminated_at(&self) -> DateTimeUtc { self.terminated_at.clone() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.terminated_at` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/comms/tcp_transport.rs:209:59 [INFO] [stderr] | [INFO] [stderr] 209 | Self::spawn_hello_timeout_task(transport.clone(), session_start_time.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `session_start_time` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: The function/method `write` doesn't need a mutable reference [INFO] [stderr] --> src/comms/tcp_transport.rs:315:68 [INFO] [stderr] | [INFO] [stderr] 315 | let _ = send_buffer.write(request_id, msg, &mut secure_channel); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/comms/tcp_transport.rs:370:17 [INFO] [stderr] | [INFO] [stderr] 370 | transport.transport_state.clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `transport.transport_state` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/comms/tcp_transport.rs:468:17 [INFO] [stderr] | [INFO] [stderr] 468 | server_config.tcp_config.hello_timeout as i64 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(server_config.tcp_config.hello_timeout)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/comms/tcp_transport.rs:475:33 [INFO] [stderr] | [INFO] [stderr] 475 | session_start_time: session_start_time.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `session_start_time` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/comms/tcp_transport.rs:499:50 [INFO] [stderr] | [INFO] [stderr] 499 | if now.signed_duration_since(state.session_start_time.clone()).num_milliseconds() > state.hello_timeout.num_milliseconds() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `state.session_start_time` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/comms/tcp_transport.rs:693:61 [INFO] [stderr] | [INFO] [stderr] 693 | fn turn_received_chunks_into_message(&mut self, chunks: &Vec) -> std::result::Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[MessageChunk]` [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 should consider adding a `Default` implementation for `metrics::ServerMetrics` [INFO] [stderr] --> src/metrics.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | / pub fn new() -> ServerMetrics { [INFO] [stderr] 46 | | // Sample metrics [INFO] [stderr] 47 | | ServerMetrics { [INFO] [stderr] 48 | | server: Server { [INFO] [stderr] ... | [INFO] [stderr] 56 | | } [INFO] [stderr] 57 | | } [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] 44 | impl Default for metrics::ServerMetrics { [INFO] [stderr] 45 | fn default() -> Self { [INFO] [stderr] 46 | Self::new() [INFO] [stderr] 47 | } [INFO] [stderr] 48 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/metrics.rs:91:60 [INFO] [stderr] | [INFO] [stderr] 91 | pub fn update_from_connections(&mut self, connections: &server::Connections) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/server.rs:234:28 [INFO] [stderr] | [INFO] [stderr] 234 | if { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 235 | | let server_state = trace_read_lock_unwrap!(server.server_state); [INFO] [stderr] 236 | | server_state.is_abort() [INFO] [stderr] 237 | | } { [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] = help: try [INFO] [stderr] let res = { [INFO] [stderr] let server_state = trace_read_lock_unwrap!(server.server_state); [INFO] [stderr] server_state.is_abort() [INFO] [stderr] }; [INFO] [stderr] if res { [INFO] [stderr] info!("Server is aborting so it will not accept new connections"); [INFO] [stderr] } ... [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/server.rs:293:38 [INFO] [stderr] | [INFO] [stderr] 293 | let users: Vec = endpoint.user_token_ids.iter().map(|id| id.clone()).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `endpoint.user_token_ids.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/server.rs:382:43 [INFO] [stderr] | [INFO] [stderr] 382 | let register_server = if now.duration_since(*last_registered) >= register_duration { [INFO] [stderr] | ___________________________________________^ [INFO] [stderr] 383 | | true [INFO] [stderr] 384 | | } else { [INFO] [stderr] 385 | | false [INFO] [stderr] 386 | | }; [INFO] [stderr] | |_____________________^ help: you can reduce it to: `now.duration_since(*last_registered) >= register_duration` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `builder::ServerBuilder` [INFO] [stderr] --> src/builder.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | / pub fn new() -> Self { [INFO] [stderr] 24 | | ServerBuilder { [INFO] [stderr] 25 | | config: ServerConfig::default() [INFO] [stderr] 26 | | } [INFO] [stderr] 27 | | } [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] 18 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stderr] --> src/state.rs:265:36 [INFO] [stderr] | [INFO] [stderr] 265 | if let Ok(_) = result { [INFO] [stderr] | _____________________________- ^^^^^ [INFO] [stderr] 266 | | error!("X509 identity token type is not supported"); [INFO] [stderr] 267 | | StatusCode::BadIdentityTokenRejected [INFO] [stderr] 268 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 271 | | StatusCode::BadIdentityTokenInvalid [INFO] [stderr] 272 | | } [INFO] [stderr] | |_____________________________- help: try this: `if result.is_ok()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of left operand [INFO] [stderr] --> src/state.rs:316:24 [INFO] [stderr] | [INFO] [stderr] 316 | if &server_user_token.user == token.user_name.as_ref() { [INFO] [stderr] | -----------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: use the left value directly: `server_user_token.user` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/diagnostics.rs:30:9 [INFO] [stderr] | [INFO] [stderr] 30 | running_components.iter().map(|k| k.clone()).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `running_components.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/subscriptions/subscriptions.rs:165:36 [INFO] [stderr] | [INFO] [stderr] 165 | let subscription = self.subscriptions.get(&subscription_id).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.subscriptions[&subscription_id]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/subscriptions/subscriptions.rs:235:110 [INFO] [stderr] | [INFO] [stderr] 235 | let publish_request_timeout = time::Duration::milliseconds(if request_header.timeout_hint > 0 && (request_header.timeout_hint as i64) < publish_request_timeout { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(request_header.timeout_hint)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/subscriptions/subscriptions.rs:236:17 [INFO] [stderr] | [INFO] [stderr] 236 | request_header.timeout_hint as i64 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(request_header.timeout_hint)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/subscriptions/subscriptions.rs:298:9 [INFO] [stderr] | [INFO] [stderr] 298 | self.transmission_queue.iter().find(|v| v.0 == subscription_id).is_some() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = note: replace `find(|v| v.0 == subscription_id).is_some()` with `any(|v| v.0 == subscription_id)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/subscriptions/subscriptions.rs:319:5 [INFO] [stderr] | [INFO] [stderr] 319 | / fn make_publish_response(&self, publish_request: &PublishRequestEntry, subscription_id: u32, now: &DateTimeUtc, notification_message: NotificationMessage, more_notifications: bool, available_sequence_numbers: Option>, results: Option>) -> PublishResponseEntry { [INFO] [stderr] 320 | | let now = DateTime::from(now.clone()); [INFO] [stderr] 321 | | PublishResponseEntry { [INFO] [stderr] 322 | | request_id: publish_request.request_id, [INFO] [stderr] ... | [INFO] [stderr] 332 | | } [INFO] [stderr] 333 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/subscriptions/subscriptions.rs:320:34 [INFO] [stderr] | [INFO] [stderr] 320 | let now = DateTime::from(now.clone()); [INFO] [stderr] | ^^^^^^^^^^^ help: try dereferencing it: `*now` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/subscriptions/subscriptions.rs:340:16 [INFO] [stderr] | [INFO] [stderr] 340 | if let Some(_) = self.subscriptions.get(&subscription_id) { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 341 | | // Look for the sequence number [INFO] [stderr] 342 | | if let Some(ref notification_message) = self.retransmission_queue.get(&(subscription_id, sequence_number)) { [INFO] [stderr] 343 | | Ok((*notification_message).clone()) [INFO] [stderr] ... | [INFO] [stderr] 348 | | Err(StatusCode::BadNoSubscription) [INFO] [stderr] 349 | | } [INFO] [stderr] | |_________- help: try this: `if self.subscriptions.get(&subscription_id).is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/subscriptions/subscription.rs:344:100 [INFO] [stderr] | [INFO] [stderr] 344 | Some(NotificationMessage::keep_alive(self.next_sequence_number, DateTime::from(now.clone()))) [INFO] [stderr] | ^^^^^^^^^^^ help: try dereferencing it: `*now` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/subscriptions/subscription.rs:369:36 [INFO] [stderr] | [INFO] [stderr] 369 | for (_, monitored_item) in &mut self.monitored_items { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 369 | for monitored_item in self.monitored_items.values_mut() { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/subscriptions/subscription.rs:472:24 [INFO] [stderr] | [INFO] [stderr] 472 | if !self.publishing_enabled || (self.publishing_enabled && !p.more_notifications) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 472 | if !p.more_notifications || !self.publishing_enabled { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 472 | if !(self.publishing_enabled && p.more_notifications) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/subscriptions/subscription.rs:488:31 [INFO] [stderr] | [INFO] [stderr] 488 | } else if p.publishing_req_queued && !self.message_sent && (!self.publishing_enabled || (self.publishing_enabled && !p.notifications_available)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 488 | } else if !(self.publishing_enabled && p.notifications_available || self.message_sent || !p.publishing_req_queued) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 488 | } else if (!self.publishing_enabled || !p.notifications_available) && !self.message_sent && p.publishing_req_queued { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/subscriptions/subscription.rs:499:31 [INFO] [stderr] | [INFO] [stderr] 499 | } else if self.message_sent && (!self.publishing_enabled || (self.publishing_enabled && !p.notifications_available)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 499 | } else if !(self.publishing_enabled && p.notifications_available || !self.message_sent) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 499 | } else if (!self.publishing_enabled || !p.notifications_available) && self.message_sent { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/subscriptions/subscription.rs:516:31 [INFO] [stderr] | [INFO] [stderr] 516 | } else if !self.publishing_enabled || (self.publishing_enabled && !p.notifications_available && !p.more_notifications) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!p.notifications_available && !p.more_notifications || !self.publishing_enabled` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/subscriptions/subscription.rs:539:31 [INFO] [stderr] | [INFO] [stderr] 539 | } else if p.publishing_req_queued && self.current_keep_alive_count == 1 && (!self.publishing_enabled || (self.publishing_enabled && p.notifications_available)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 539 | } else if !(self.publishing_enabled && !p.notifications_available || self.current_keep_alive_count != 1 || !p.publishing_req_queued) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 539 | } else if (!self.publishing_enabled || p.notifications_available) && self.current_keep_alive_count == 1 && p.publishing_req_queued { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/subscriptions/subscription.rs:544:31 [INFO] [stderr] | [INFO] [stderr] 544 | } else if self.current_keep_alive_count > 1 && (!self.publishing_enabled || (self.publishing_enabled && !p.notifications_available)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 544 | } else if !(self.publishing_enabled && p.notifications_available || self.current_keep_alive_count <= 1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 544 | } else if (!self.publishing_enabled || !p.notifications_available) && self.current_keep_alive_count > 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/subscriptions/monitored_item.rs:251:13 [INFO] [stderr] | [INFO] [stderr] 251 | status_code = status_code | StatusCode::OVERFLOW.bits(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `status_code |= StatusCode::OVERFLOW.bits()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/subscriptions/monitored_item.rs:310:45 [INFO] [stderr] | [INFO] [stderr] 310 | } else if requested_queue_size == 1 { [INFO] [stderr] | _____________________________________________^ [INFO] [stderr] 311 | | 1 [INFO] [stderr] 312 | | // Future - for event monitored items, the minimum queue size the server requires for event notifications [INFO] [stderr] 313 | | } else if requested_queue_size > constants::MAX_DATA_CHANGE_QUEUE_SIZE { [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/subscriptions/monitored_item.rs:306:38 [INFO] [stderr] | [INFO] [stderr] 306 | if requested_queue_size == 0 { [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 307 | | // For data monitored items 0 -> 1 [INFO] [stderr] 308 | | 1 [INFO] [stderr] 309 | | // Future - for event monitored items, queue size should be the default queue size for event notifications [INFO] [stderr] 310 | | } else if requested_queue_size == 1 { [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: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/config.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | / let mut valid = true; [INFO] [stderr] 43 | | if id == ANONYMOUS_USER_TOKEN_ID { [INFO] [stderr] 44 | | error!("User token {} uses the reserved name \"anonymous\"", id); [INFO] [stderr] 45 | | valid = false; [INFO] [stderr] 46 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let valid = if id == ANONYMOUS_USER_TOKEN_ID { ..; false } else { true };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/config.rs:89:29 [INFO] [stderr] | [INFO] [stderr] 89 | user_token_ids: user_token_ids.iter().map(|id| id.clone()).collect(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `user_token_ids.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/config.rs:225:9 [INFO] [stderr] | [INFO] [stderr] 225 | / let mut valid = true; [INFO] [stderr] 226 | | if self.endpoints.is_empty() { [INFO] [stderr] 227 | | error!("Server configuration is invalid. It defines no endpoints"); [INFO] [stderr] 228 | | valid = false; [INFO] [stderr] 229 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let valid = if self.endpoints.is_empty() { ..; false } else { true };` [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: function is never used: `resend_data` [INFO] [stderr] --> src/tests/services/subscription.rs:215:1 [INFO] [stderr] | [INFO] [stderr] 215 | fn resend_data() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/session.rs:169:50 [INFO] [stderr] | [INFO] [stderr] 169 | pub fn terminated_at(&self) -> DateTimeUtc { self.terminated_at.clone() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.terminated_at` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/comms/tcp_transport.rs:209:59 [INFO] [stderr] | [INFO] [stderr] 209 | Self::spawn_hello_timeout_task(transport.clone(), session_start_time.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `session_start_time` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: The function/method `write` doesn't need a mutable reference [INFO] [stderr] --> src/comms/tcp_transport.rs:315:68 [INFO] [stderr] | [INFO] [stderr] 315 | let _ = send_buffer.write(request_id, msg, &mut secure_channel); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/comms/tcp_transport.rs:370:17 [INFO] [stderr] | [INFO] [stderr] 370 | transport.transport_state.clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `transport.transport_state` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/comms/tcp_transport.rs:468:17 [INFO] [stderr] | [INFO] [stderr] 468 | server_config.tcp_config.hello_timeout as i64 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(server_config.tcp_config.hello_timeout)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/comms/tcp_transport.rs:475:33 [INFO] [stderr] | [INFO] [stderr] 475 | session_start_time: session_start_time.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `session_start_time` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/comms/tcp_transport.rs:499:50 [INFO] [stderr] | [INFO] [stderr] 499 | if now.signed_duration_since(state.session_start_time.clone()).num_milliseconds() > state.hello_timeout.num_milliseconds() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `state.session_start_time` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/comms/tcp_transport.rs:693:61 [INFO] [stderr] | [INFO] [stderr] 693 | fn turn_received_chunks_into_message(&mut self, chunks: &Vec) -> std::result::Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[MessageChunk]` [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 should consider adding a `Default` implementation for `metrics::ServerMetrics` [INFO] [stderr] --> src/metrics.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | / pub fn new() -> ServerMetrics { [INFO] [stderr] 46 | | // Sample metrics [INFO] [stderr] 47 | | ServerMetrics { [INFO] [stderr] 48 | | server: Server { [INFO] [stderr] ... | [INFO] [stderr] 56 | | } [INFO] [stderr] 57 | | } [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] 44 | impl Default for metrics::ServerMetrics { [INFO] [stderr] 45 | fn default() -> Self { [INFO] [stderr] 46 | Self::new() [INFO] [stderr] 47 | } [INFO] [stderr] 48 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/metrics.rs:91:60 [INFO] [stderr] | [INFO] [stderr] 91 | pub fn update_from_connections(&mut self, connections: &server::Connections) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/server.rs:234:28 [INFO] [stderr] | [INFO] [stderr] 234 | if { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 235 | | let server_state = trace_read_lock_unwrap!(server.server_state); [INFO] [stderr] 236 | | server_state.is_abort() [INFO] [stderr] 237 | | } { [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] = help: try [INFO] [stderr] let res = { [INFO] [stderr] let server_state = trace_read_lock_unwrap!(server.server_state); [INFO] [stderr] server_state.is_abort() [INFO] [stderr] }; [INFO] [stderr] if res { [INFO] [stderr] info!("Server is aborting so it will not accept new connections"); [INFO] [stderr] } ... [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/server.rs:293:38 [INFO] [stderr] | [INFO] [stderr] 293 | let users: Vec = endpoint.user_token_ids.iter().map(|id| id.clone()).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `endpoint.user_token_ids.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/server.rs:382:43 [INFO] [stderr] | [INFO] [stderr] 382 | let register_server = if now.duration_since(*last_registered) >= register_duration { [INFO] [stderr] | ___________________________________________^ [INFO] [stderr] 383 | | true [INFO] [stderr] 384 | | } else { [INFO] [stderr] 385 | | false [INFO] [stderr] 386 | | }; [INFO] [stderr] | |_____________________^ help: you can reduce it to: `now.duration_since(*last_registered) >= register_duration` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `builder::ServerBuilder` [INFO] [stderr] --> src/builder.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | / pub fn new() -> Self { [INFO] [stderr] 24 | | ServerBuilder { [INFO] [stderr] 25 | | config: ServerConfig::default() [INFO] [stderr] 26 | | } [INFO] [stderr] 27 | | } [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] 18 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stderr] --> src/state.rs:265:36 [INFO] [stderr] | [INFO] [stderr] 265 | if let Ok(_) = result { [INFO] [stderr] | _____________________________- ^^^^^ [INFO] [stderr] 266 | | error!("X509 identity token type is not supported"); [INFO] [stderr] 267 | | StatusCode::BadIdentityTokenRejected [INFO] [stderr] 268 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 271 | | StatusCode::BadIdentityTokenInvalid [INFO] [stderr] 272 | | } [INFO] [stderr] | |_____________________________- help: try this: `if result.is_ok()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of left operand [INFO] [stderr] --> src/state.rs:316:24 [INFO] [stderr] | [INFO] [stderr] 316 | if &server_user_token.user == token.user_name.as_ref() { [INFO] [stderr] | -----------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: use the left value directly: `server_user_token.user` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/diagnostics.rs:30:9 [INFO] [stderr] | [INFO] [stderr] 30 | running_components.iter().map(|k| k.clone()).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `running_components.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/subscriptions/subscriptions.rs:165:36 [INFO] [stderr] | [INFO] [stderr] 165 | let subscription = self.subscriptions.get(&subscription_id).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.subscriptions[&subscription_id]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/subscriptions/subscriptions.rs:235:110 [INFO] [stderr] | [INFO] [stderr] 235 | let publish_request_timeout = time::Duration::milliseconds(if request_header.timeout_hint > 0 && (request_header.timeout_hint as i64) < publish_request_timeout { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(request_header.timeout_hint)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/subscriptions/subscriptions.rs:236:17 [INFO] [stderr] | [INFO] [stderr] 236 | request_header.timeout_hint as i64 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(request_header.timeout_hint)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/subscriptions/subscriptions.rs:298:9 [INFO] [stderr] | [INFO] [stderr] 298 | self.transmission_queue.iter().find(|v| v.0 == subscription_id).is_some() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = note: replace `find(|v| v.0 == subscription_id).is_some()` with `any(|v| v.0 == subscription_id)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/subscriptions/subscriptions.rs:319:5 [INFO] [stderr] | [INFO] [stderr] 319 | / fn make_publish_response(&self, publish_request: &PublishRequestEntry, subscription_id: u32, now: &DateTimeUtc, notification_message: NotificationMessage, more_notifications: bool, available_sequence_numbers: Option>, results: Option>) -> PublishResponseEntry { [INFO] [stderr] 320 | | let now = DateTime::from(now.clone()); [INFO] [stderr] 321 | | PublishResponseEntry { [INFO] [stderr] 322 | | request_id: publish_request.request_id, [INFO] [stderr] ... | [INFO] [stderr] 332 | | } [INFO] [stderr] 333 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/subscriptions/subscriptions.rs:320:34 [INFO] [stderr] | [INFO] [stderr] 320 | let now = DateTime::from(now.clone()); [INFO] [stderr] | ^^^^^^^^^^^ help: try dereferencing it: `*now` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/subscriptions/subscriptions.rs:340:16 [INFO] [stderr] | [INFO] [stderr] 340 | if let Some(_) = self.subscriptions.get(&subscription_id) { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 341 | | // Look for the sequence number [INFO] [stderr] 342 | | if let Some(ref notification_message) = self.retransmission_queue.get(&(subscription_id, sequence_number)) { [INFO] [stderr] 343 | | Ok((*notification_message).clone()) [INFO] [stderr] ... | [INFO] [stderr] 348 | | Err(StatusCode::BadNoSubscription) [INFO] [stderr] 349 | | } [INFO] [stderr] | |_________- help: try this: `if self.subscriptions.get(&subscription_id).is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/subscriptions/subscription.rs:344:100 [INFO] [stderr] | [INFO] [stderr] 344 | Some(NotificationMessage::keep_alive(self.next_sequence_number, DateTime::from(now.clone()))) [INFO] [stderr] | ^^^^^^^^^^^ help: try dereferencing it: `*now` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/subscriptions/subscription.rs:369:36 [INFO] [stderr] | [INFO] [stderr] 369 | for (_, monitored_item) in &mut self.monitored_items { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 369 | for monitored_item in self.monitored_items.values_mut() { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/subscriptions/subscription.rs:472:24 [INFO] [stderr] | [INFO] [stderr] 472 | if !self.publishing_enabled || (self.publishing_enabled && !p.more_notifications) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 472 | if !p.more_notifications || !self.publishing_enabled { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 472 | if !(self.publishing_enabled && p.more_notifications) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/subscriptions/subscription.rs:488:31 [INFO] [stderr] | [INFO] [stderr] 488 | } else if p.publishing_req_queued && !self.message_sent && (!self.publishing_enabled || (self.publishing_enabled && !p.notifications_available)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 488 | } else if !(self.publishing_enabled && p.notifications_available || self.message_sent || !p.publishing_req_queued) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 488 | } else if (!self.publishing_enabled || !p.notifications_available) && !self.message_sent && p.publishing_req_queued { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/subscriptions/subscription.rs:499:31 [INFO] [stderr] | [INFO] [stderr] 499 | } else if self.message_sent && (!self.publishing_enabled || (self.publishing_enabled && !p.notifications_available)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 499 | } else if !(self.publishing_enabled && p.notifications_available || !self.message_sent) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 499 | } else if (!self.publishing_enabled || !p.notifications_available) && self.message_sent { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/subscriptions/subscription.rs:516:31 [INFO] [stderr] | [INFO] [stderr] 516 | } else if !self.publishing_enabled || (self.publishing_enabled && !p.notifications_available && !p.more_notifications) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!p.notifications_available && !p.more_notifications || !self.publishing_enabled` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/subscriptions/subscription.rs:539:31 [INFO] [stderr] | [INFO] [stderr] 539 | } else if p.publishing_req_queued && self.current_keep_alive_count == 1 && (!self.publishing_enabled || (self.publishing_enabled && p.notifications_available)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 539 | } else if !(self.publishing_enabled && !p.notifications_available || self.current_keep_alive_count != 1 || !p.publishing_req_queued) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 539 | } else if (!self.publishing_enabled || p.notifications_available) && self.current_keep_alive_count == 1 && p.publishing_req_queued { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/subscriptions/subscription.rs:544:31 [INFO] [stderr] | [INFO] [stderr] 544 | } else if self.current_keep_alive_count > 1 && (!self.publishing_enabled || (self.publishing_enabled && !p.notifications_available)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 544 | } else if !(self.publishing_enabled && p.notifications_available || self.current_keep_alive_count <= 1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 544 | } else if (!self.publishing_enabled || !p.notifications_available) && self.current_keep_alive_count > 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/subscriptions/monitored_item.rs:251:13 [INFO] [stderr] | [INFO] [stderr] 251 | status_code = status_code | StatusCode::OVERFLOW.bits(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `status_code |= StatusCode::OVERFLOW.bits()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/subscriptions/monitored_item.rs:310:45 [INFO] [stderr] | [INFO] [stderr] 310 | } else if requested_queue_size == 1 { [INFO] [stderr] | _____________________________________________^ [INFO] [stderr] 311 | | 1 [INFO] [stderr] 312 | | // Future - for event monitored items, the minimum queue size the server requires for event notifications [INFO] [stderr] 313 | | } else if requested_queue_size > constants::MAX_DATA_CHANGE_QUEUE_SIZE { [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/subscriptions/monitored_item.rs:306:38 [INFO] [stderr] | [INFO] [stderr] 306 | if requested_queue_size == 0 { [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 307 | | // For data monitored items 0 -> 1 [INFO] [stderr] 308 | | 1 [INFO] [stderr] 309 | | // Future - for event monitored items, queue size should be the default queue size for event notifications [INFO] [stderr] 310 | | } else if requested_queue_size == 1 { [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: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/config.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | / let mut valid = true; [INFO] [stderr] 43 | | if id == ANONYMOUS_USER_TOKEN_ID { [INFO] [stderr] 44 | | error!("User token {} uses the reserved name \"anonymous\"", id); [INFO] [stderr] 45 | | valid = false; [INFO] [stderr] 46 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let valid = if id == ANONYMOUS_USER_TOKEN_ID { ..; false } else { true };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/config.rs:89:29 [INFO] [stderr] | [INFO] [stderr] 89 | user_token_ids: user_token_ids.iter().map(|id| id.clone()).collect(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `user_token_ids.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/config.rs:225:9 [INFO] [stderr] | [INFO] [stderr] 225 | / let mut valid = true; [INFO] [stderr] 226 | | if self.endpoints.is_empty() { [INFO] [stderr] 227 | | error!("Server configuration is invalid. It defines no endpoints"); [INFO] [stderr] 228 | | valid = false; [INFO] [stderr] 229 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let valid = if self.endpoints.is_empty() { ..; false } else { true };` [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `address_space::address_space::AddressSpace` [INFO] [stderr] --> src/address_space/address_space.rs:139:5 [INFO] [stderr] | [INFO] [stderr] 139 | / pub fn new() -> AddressSpace { [INFO] [stderr] 140 | | // Construct the Root folder and the top level nodes [INFO] [stderr] 141 | | let mut address_space = AddressSpace { [INFO] [stderr] 142 | | node_map: HashMap::new(), [INFO] [stderr] ... | [INFO] [stderr] 150 | | address_space [INFO] [stderr] 151 | | } [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] 136 | impl Default for address_space::address_space::AddressSpace { [INFO] [stderr] 137 | fn default() -> Self { [INFO] [stderr] 138 | Self::new() [INFO] [stderr] 139 | } [INFO] [stderr] 140 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/address_space/address_space.rs:155:9 [INFO] [stderr] | [INFO] [stderr] 155 | self.last_modified.clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.last_modified` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/address_space.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / if let &NodeType::$type(ref node) = $a.find_node($id).unwrap() { [INFO] [stderr] 32 | | node [INFO] [stderr] 33 | | } else { [INFO] [stderr] 34 | | panic!("There should be a node of id {:?}!", $id); [INFO] [stderr] 35 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 323 | expect_and_find_object!(self, &AddressSpace::root_folder_id()) [INFO] [stderr] | -------------------------------------------------------------- in this macro invocation [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] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/address_space.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / if let &NodeType::$type(ref node) = $a.find_node($id).unwrap() { [INFO] [stderr] 32 | | node [INFO] [stderr] 33 | | } else { [INFO] [stderr] 34 | | panic!("There should be a node of id {:?}!", $id); [INFO] [stderr] 35 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 328 | expect_and_find_object!(self, &AddressSpace::objects_folder_id()) [INFO] [stderr] | ----------------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/address_space.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / if let &NodeType::$type(ref node) = $a.find_node($id).unwrap() { [INFO] [stderr] 32 | | node [INFO] [stderr] 33 | | } else { [INFO] [stderr] 34 | | panic!("There should be a node of id {:?}!", $id); [INFO] [stderr] 35 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 333 | expect_and_find_object!(self, &AddressSpace::types_folder_id()) [INFO] [stderr] | --------------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/address_space.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / if let &NodeType::$type(ref node) = $a.find_node($id).unwrap() { [INFO] [stderr] 32 | | node [INFO] [stderr] 33 | | } else { [INFO] [stderr] 34 | | panic!("There should be a node of id {:?}!", $id); [INFO] [stderr] 35 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 338 | expect_and_find_object!(self, &AddressSpace::views_folder_id()) [INFO] [stderr] | --------------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/address_space.rs:573:13 [INFO] [stderr] | [INFO] [stderr] 573 | / if let &NodeType::Variable(ref variable) = node { [INFO] [stderr] 574 | | Some(variable) [INFO] [stderr] 575 | | } else { [INFO] [stderr] 576 | | None [INFO] [stderr] 577 | | } [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] 573 | if let NodeType::Variable(ref variable) = *node { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/address_space.rs:593:13 [INFO] [stderr] | [INFO] [stderr] 593 | / if let &mut NodeType::Variable(ref mut variable) = node { [INFO] [stderr] 594 | | Some(variable) [INFO] [stderr] 595 | | } else { [INFO] [stderr] 596 | | None [INFO] [stderr] 597 | | } [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] 593 | if let NodeType::Variable(ref mut variable) = *node { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/address_space/address_space.rs:640:16 [INFO] [stderr] | [INFO] [stderr] 640 | if let Some(_) = self.method_handlers.insert(key, handler) { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 641 | | trace!("Registration replaced a previous callback"); [INFO] [stderr] 642 | | } [INFO] [stderr] | |_________- help: try this: `if self.method_handlers.insert(key, handler).is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/address_space/address_space.rs:663:13 [INFO] [stderr] | [INFO] [stderr] 663 | / references.iter().find(|r| { [INFO] [stderr] 664 | | r.reference_type_id == reference_type && r.node_id == *to_node_id [INFO] [stderr] 665 | | }).is_some() [INFO] [stderr] | |________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [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/address_space/address_space.rs:777:53 [INFO] [stderr] | [INFO] [stderr] 777 | fn filter_references_by_type(&self, references: &Vec, reference_filter: Option<(ReferenceTypeId, bool)>) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 777 | fn filter_references_by_type(&self, references: &[Reference], reference_filter: Option<(ReferenceTypeId, bool)>) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] help: change `references.clone()` to [INFO] [stderr] | [INFO] [stderr] 779 | references.to_owned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/address_space/address_space.rs:783:13 [INFO] [stderr] | [INFO] [stderr] 783 | / references.iter() [INFO] [stderr] 784 | | .filter(|r| self.reference_type_matches(reference_type_id, r.reference_type_id, include_subtypes)) [INFO] [stderr] 785 | | .map(|r| r.clone()) [INFO] [stderr] | |___________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 783 | references.iter() [INFO] [stderr] 784 | .filter(|r| self.reference_type_matches(reference_type_id, r.reference_type_id, include_subtypes)).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this block may be rewritten with the `?` operator [INFO] [stderr] --> src/address_space/base.rs:75:9 [INFO] [stderr] | [INFO] [stderr] 75 | / if result.is_none() { [INFO] [stderr] 76 | | None [INFO] [stderr] 77 | | } else { [INFO] [stderr] 78 | | Some(result.unwrap().as_ref().clone()) [INFO] [stderr] 79 | | } [INFO] [stderr] | |_________^ help: replace_it_with: `result?;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::question_mark)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 52 [INFO] [stderr] --> src/address_space/base.rs:128:5 [INFO] [stderr] | [INFO] [stderr] 128 | / fn set_attribute(&mut self, attribute_id: AttributeId, value: DataValue) -> Result<(), StatusCode> { [INFO] [stderr] 129 | | // Check the type of the datavalue [INFO] [stderr] 130 | | let type_is_valid = match attribute_id { [INFO] [stderr] 131 | | AttributeId::Value => { [INFO] [stderr] ... | [INFO] [stderr] 196 | | } [INFO] [stderr] 197 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/base.rs:166:21 [INFO] [stderr] | [INFO] [stderr] 166 | / if let &Variant::Array(ref array) = value.value.as_ref().unwrap() { [INFO] [stderr] 167 | | // check that the array of variants are all UInt32s [INFO] [stderr] 168 | | if let Some(_) = array.iter().find(|v| if let &Variant::UInt32(_) = v { false } else { true }) { [INFO] [stderr] 169 | | error!("Array contains non UInt32 values, cannot use as array dimensions"); [INFO] [stderr] ... | [INFO] [stderr] 175 | | panic!("The value should be an Array"); [INFO] [stderr] 176 | | } [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 | if let Variant::Array(ref array) = *value.value.as_ref().unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/address_space/base.rs:168:32 [INFO] [stderr] | [INFO] [stderr] 168 | if let Some(_) = array.iter().find(|v| if let &Variant::UInt32(_) = v { false } else { true }) { [INFO] [stderr] | _________________________- ^^^^^^^ [INFO] [stderr] 169 | | error!("Array contains non UInt32 values, cannot use as array dimensions"); [INFO] [stderr] 170 | | false [INFO] [stderr] 171 | | } else { [INFO] [stderr] 172 | | true [INFO] [stderr] 173 | | } [INFO] [stderr] | |_________________________- help: try this: `if array.iter().find(|v| if let &Variant::UInt32(_) = v { false } else { true }).is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/base.rs:168:64 [INFO] [stderr] | [INFO] [stderr] 168 | if let Some(_) = array.iter().find(|v| if let &Variant::UInt32(_) = v { false } else { true }) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 168 | if let Some(_) = array.iter().find(|v| if let Variant::UInt32(_) = *v { false } else { true }) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/address_space/variable.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | let _ = self.node.set_value(value); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/variable.rs:149:13 [INFO] [stderr] | [INFO] [stderr] 149 | / match value { [INFO] [stderr] 150 | | &Variant::Array(ref values) => Some(vec![values.len() as u32]), [INFO] [stderr] 151 | | &Variant::MultiDimensionArray(ref values) => { [INFO] [stderr] 152 | | // Multidimensional arrays encode/decode dimensions with Int32 in Part 6, but arrayDimensions in Part 3 [INFO] [stderr] ... | [INFO] [stderr] 156 | | _ => None [INFO] [stderr] 157 | | } [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] 149 | match *value { [INFO] [stderr] 150 | Variant::Array(ref values) => Some(vec![values.len() as u32]), [INFO] [stderr] 151 | Variant::MultiDimensionArray(ref values) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this block may be rewritten with the `?` operator [INFO] [stderr] --> src/address_space/reference_type.rs:36:9 [INFO] [stderr] | [INFO] [stderr] 36 | / if result.is_none() { [INFO] [stderr] 37 | | None [INFO] [stderr] 38 | | } else { [INFO] [stderr] 39 | | Some(result.unwrap().as_ref().clone()) [INFO] [stderr] 40 | | } [INFO] [stderr] | |_________^ help: replace_it_with: `result?;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/util/mod.rs:26:69 [INFO] [stderr] | [INFO] [stderr] 26 | let f = Interval::new(Instant::now(), Duration::from_millis(interval_ms as u64)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `u64::from(interval_ms)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `opcua-server`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you should consider adding a `Default` implementation for `address_space::address_space::AddressSpace` [INFO] [stderr] --> src/address_space/address_space.rs:139:5 [INFO] [stderr] | [INFO] [stderr] 139 | / pub fn new() -> AddressSpace { [INFO] [stderr] 140 | | // Construct the Root folder and the top level nodes [INFO] [stderr] 141 | | let mut address_space = AddressSpace { [INFO] [stderr] 142 | | node_map: HashMap::new(), [INFO] [stderr] ... | [INFO] [stderr] 150 | | address_space [INFO] [stderr] 151 | | } [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] 136 | impl Default for address_space::address_space::AddressSpace { [INFO] [stderr] 137 | fn default() -> Self { [INFO] [stderr] 138 | Self::new() [INFO] [stderr] 139 | } [INFO] [stderr] 140 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/address_space/address_space.rs:155:9 [INFO] [stderr] | [INFO] [stderr] 155 | self.last_modified.clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.last_modified` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/address_space.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / if let &NodeType::$type(ref node) = $a.find_node($id).unwrap() { [INFO] [stderr] 32 | | node [INFO] [stderr] 33 | | } else { [INFO] [stderr] 34 | | panic!("There should be a node of id {:?}!", $id); [INFO] [stderr] 35 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 323 | expect_and_find_object!(self, &AddressSpace::root_folder_id()) [INFO] [stderr] | -------------------------------------------------------------- in this macro invocation [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] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/address_space.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / if let &NodeType::$type(ref node) = $a.find_node($id).unwrap() { [INFO] [stderr] 32 | | node [INFO] [stderr] 33 | | } else { [INFO] [stderr] 34 | | panic!("There should be a node of id {:?}!", $id); [INFO] [stderr] 35 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 328 | expect_and_find_object!(self, &AddressSpace::objects_folder_id()) [INFO] [stderr] | ----------------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/address_space.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / if let &NodeType::$type(ref node) = $a.find_node($id).unwrap() { [INFO] [stderr] 32 | | node [INFO] [stderr] 33 | | } else { [INFO] [stderr] 34 | | panic!("There should be a node of id {:?}!", $id); [INFO] [stderr] 35 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 333 | expect_and_find_object!(self, &AddressSpace::types_folder_id()) [INFO] [stderr] | --------------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/address_space.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / if let &NodeType::$type(ref node) = $a.find_node($id).unwrap() { [INFO] [stderr] 32 | | node [INFO] [stderr] 33 | | } else { [INFO] [stderr] 34 | | panic!("There should be a node of id {:?}!", $id); [INFO] [stderr] 35 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 338 | expect_and_find_object!(self, &AddressSpace::views_folder_id()) [INFO] [stderr] | --------------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/address_space.rs:573:13 [INFO] [stderr] | [INFO] [stderr] 573 | / if let &NodeType::Variable(ref variable) = node { [INFO] [stderr] 574 | | Some(variable) [INFO] [stderr] 575 | | } else { [INFO] [stderr] 576 | | None [INFO] [stderr] 577 | | } [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] 573 | if let NodeType::Variable(ref variable) = *node { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/address_space.rs:593:13 [INFO] [stderr] | [INFO] [stderr] 593 | / if let &mut NodeType::Variable(ref mut variable) = node { [INFO] [stderr] 594 | | Some(variable) [INFO] [stderr] 595 | | } else { [INFO] [stderr] 596 | | None [INFO] [stderr] 597 | | } [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] 593 | if let NodeType::Variable(ref mut variable) = *node { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/address_space/address_space.rs:640:16 [INFO] [stderr] | [INFO] [stderr] 640 | if let Some(_) = self.method_handlers.insert(key, handler) { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 641 | | trace!("Registration replaced a previous callback"); [INFO] [stderr] 642 | | } [INFO] [stderr] | |_________- help: try this: `if self.method_handlers.insert(key, handler).is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/address_space/address_space.rs:663:13 [INFO] [stderr] | [INFO] [stderr] 663 | / references.iter().find(|r| { [INFO] [stderr] 664 | | r.reference_type_id == reference_type && r.node_id == *to_node_id [INFO] [stderr] 665 | | }).is_some() [INFO] [stderr] | |________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [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/address_space/address_space.rs:777:53 [INFO] [stderr] | [INFO] [stderr] 777 | fn filter_references_by_type(&self, references: &Vec, reference_filter: Option<(ReferenceTypeId, bool)>) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 777 | fn filter_references_by_type(&self, references: &[Reference], reference_filter: Option<(ReferenceTypeId, bool)>) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] help: change `references.clone()` to [INFO] [stderr] | [INFO] [stderr] 779 | references.to_owned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/address_space/address_space.rs:783:13 [INFO] [stderr] | [INFO] [stderr] 783 | / references.iter() [INFO] [stderr] 784 | | .filter(|r| self.reference_type_matches(reference_type_id, r.reference_type_id, include_subtypes)) [INFO] [stderr] 785 | | .map(|r| r.clone()) [INFO] [stderr] | |___________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 783 | references.iter() [INFO] [stderr] 784 | .filter(|r| self.reference_type_matches(reference_type_id, r.reference_type_id, include_subtypes)).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this block may be rewritten with the `?` operator [INFO] [stderr] --> src/address_space/base.rs:75:9 [INFO] [stderr] | [INFO] [stderr] 75 | / if result.is_none() { [INFO] [stderr] 76 | | None [INFO] [stderr] 77 | | } else { [INFO] [stderr] 78 | | Some(result.unwrap().as_ref().clone()) [INFO] [stderr] 79 | | } [INFO] [stderr] | |_________^ help: replace_it_with: `result?;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::question_mark)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 52 [INFO] [stderr] --> src/address_space/base.rs:128:5 [INFO] [stderr] | [INFO] [stderr] 128 | / fn set_attribute(&mut self, attribute_id: AttributeId, value: DataValue) -> Result<(), StatusCode> { [INFO] [stderr] 129 | | // Check the type of the datavalue [INFO] [stderr] 130 | | let type_is_valid = match attribute_id { [INFO] [stderr] 131 | | AttributeId::Value => { [INFO] [stderr] ... | [INFO] [stderr] 196 | | } [INFO] [stderr] 197 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/base.rs:166:21 [INFO] [stderr] | [INFO] [stderr] 166 | / if let &Variant::Array(ref array) = value.value.as_ref().unwrap() { [INFO] [stderr] 167 | | // check that the array of variants are all UInt32s [INFO] [stderr] 168 | | if let Some(_) = array.iter().find(|v| if let &Variant::UInt32(_) = v { false } else { true }) { [INFO] [stderr] 169 | | error!("Array contains non UInt32 values, cannot use as array dimensions"); [INFO] [stderr] ... | [INFO] [stderr] 175 | | panic!("The value should be an Array"); [INFO] [stderr] 176 | | } [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 | if let Variant::Array(ref array) = *value.value.as_ref().unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/address_space/base.rs:168:32 [INFO] [stderr] | [INFO] [stderr] 168 | if let Some(_) = array.iter().find(|v| if let &Variant::UInt32(_) = v { false } else { true }) { [INFO] [stderr] | _________________________- ^^^^^^^ [INFO] [stderr] 169 | | error!("Array contains non UInt32 values, cannot use as array dimensions"); [INFO] [stderr] 170 | | false [INFO] [stderr] 171 | | } else { [INFO] [stderr] 172 | | true [INFO] [stderr] 173 | | } [INFO] [stderr] | |_________________________- help: try this: `if array.iter().find(|v| if let &Variant::UInt32(_) = v { false } else { true }).is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/base.rs:168:64 [INFO] [stderr] | [INFO] [stderr] 168 | if let Some(_) = array.iter().find(|v| if let &Variant::UInt32(_) = v { false } else { true }) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 168 | if let Some(_) = array.iter().find(|v| if let Variant::UInt32(_) = *v { false } else { true }) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/address_space/variable.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | let _ = self.node.set_value(value); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/address_space/variable.rs:149:13 [INFO] [stderr] | [INFO] [stderr] 149 | / match value { [INFO] [stderr] 150 | | &Variant::Array(ref values) => Some(vec![values.len() as u32]), [INFO] [stderr] 151 | | &Variant::MultiDimensionArray(ref values) => { [INFO] [stderr] 152 | | // Multidimensional arrays encode/decode dimensions with Int32 in Part 6, but arrayDimensions in Part 3 [INFO] [stderr] ... | [INFO] [stderr] 156 | | _ => None [INFO] [stderr] 157 | | } [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] 149 | match *value { [INFO] [stderr] 150 | Variant::Array(ref values) => Some(vec![values.len() as u32]), [INFO] [stderr] 151 | Variant::MultiDimensionArray(ref values) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this block may be rewritten with the `?` operator [INFO] [stderr] --> src/address_space/reference_type.rs:36:9 [INFO] [stderr] | [INFO] [stderr] 36 | / if result.is_none() { [INFO] [stderr] 37 | | None [INFO] [stderr] 38 | | } else { [INFO] [stderr] 39 | | Some(result.unwrap().as_ref().clone()) [INFO] [stderr] 40 | | } [INFO] [stderr] | |_________^ help: replace_it_with: `result?;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/util/mod.rs:26:69 [INFO] [stderr] | [INFO] [stderr] 26 | let f = Interval::new(Instant::now(), Duration::from_millis(interval_ms as u64)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `u64::from(interval_ms)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/tests/address_space.rs:185:31 [INFO] [stderr] | [INFO] [stderr] 185 | let values = (0..100).map(|i| Variant::Int32(i)).collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Variant::Int32` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/tests/address_space.rs:203:31 [INFO] [stderr] | [INFO] [stderr] 203 | let values = (0..100).map(|i| Variant::Int32(i)).collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Variant::Int32` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/tests/services/attribute.rs:120:21 [INFO] [stderr] | [INFO] [stderr] 120 | let _ = node.as_mut_node().set_attribute(AttributeId::AccessLevel, DataValue::new(0u8)).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/tests/services/attribute.rs:127:21 [INFO] [stderr] | [INFO] [stderr] 127 | let _ = node.as_mut_node().set_attribute(AttributeId::AccessLevel, DataValue::new(AccessLevel::CURRENT_WRITE.bits())).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: The function/method `get_endpoints` doesn't need a mutable reference [INFO] [stderr] --> src/tests/services/discovery.rs:21:39 [INFO] [stderr] | [INFO] [stderr] 21 | let result = ds.get_endpoints(&mut server_state, request); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: The function/method `get_endpoints` doesn't need a mutable reference [INFO] [stderr] --> src/tests/services/discovery.rs:50:39 [INFO] [stderr] | [INFO] [stderr] 50 | let result = ds.get_endpoints(&mut server_state, request); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: The function/method `get_endpoints` doesn't need a mutable reference [INFO] [stderr] --> src/tests/services/discovery.rs:69:39 [INFO] [stderr] | [INFO] [stderr] 69 | let result = ds.get_endpoints(&mut server_state, request); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: The function/method `get_endpoints` doesn't need a mutable reference [INFO] [stderr] --> src/tests/services/discovery.rs:82:39 [INFO] [stderr] | [INFO] [stderr] 82 | let result = ds.get_endpoints(&mut server_state, request); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tests/services/monitored_item.rs:189:5 [INFO] [stderr] | [INFO] [stderr] 189 | / if let &mut NodeType::Variable(ref mut node) = address_space.find_node_mut(&test_var_node_id()).unwrap() { [INFO] [stderr] 190 | | let mut value = node.value(); [INFO] [stderr] 191 | | value.value = Some(Variant::UInt32(1)); [INFO] [stderr] 192 | | node.set_value(value); [INFO] [stderr] 193 | | } else { [INFO] [stderr] 194 | | panic!("Expected a variable, didn't get one!!"); [INFO] [stderr] 195 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 189 | if let NodeType::Variable(ref mut node) = *address_space.find_node_mut(&test_var_node_id()).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tests/mod.rs:100:30 [INFO] [stderr] | [INFO] [stderr] 100 | let now = DateTime::from(now.clone()); [INFO] [stderr] | ^^^^^^^^^^^ help: try removing the `clone` call: `now` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `opcua-server`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "6076766320c7309aacb9f175c8edac4b6a6170833de9c88cbe13f72be8999eb2"` [INFO] running `"docker" "rm" "-f" "6076766320c7309aacb9f175c8edac4b6a6170833de9c88cbe13f72be8999eb2"` [INFO] [stdout] 6076766320c7309aacb9f175c8edac4b6a6170833de9c88cbe13f72be8999eb2