[INFO] crate topd 1.3.1 is already in cache [INFO] extracting crate topd 1.3.1 into work/ex/clippy-test-run/sources/stable/reg/topd/1.3.1 [INFO] extracting crate topd 1.3.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/topd/1.3.1 [INFO] validating manifest of topd-1.3.1 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 topd-1.3.1 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 topd-1.3.1 [INFO] finished frobbing topd-1.3.1 [INFO] frobbed toml for topd-1.3.1 written to work/ex/clippy-test-run/sources/stable/reg/topd/1.3.1/Cargo.toml [INFO] started frobbing topd-1.3.1 [INFO] finished frobbing topd-1.3.1 [INFO] frobbed toml for topd-1.3.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/topd/1.3.1/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 topd-1.3.1 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/topd/1.3.1:/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] 4b55799d0f766af46a9af8ae039ab25743a5b0b05366d20ddf1474eca54d224a [INFO] running `"docker" "start" "-a" "4b55799d0f766af46a9af8ae039ab25743a5b0b05366d20ddf1474eca54d224a"` [INFO] [stderr] Checking nom v2.2.1 [INFO] [stderr] Compiling sys-info v0.5.6 [INFO] [stderr] Checking unicode-normalization v0.1.8 [INFO] [stderr] Compiling procinfo v0.4.2 [INFO] [stderr] Checking ifaces v0.1.0 [INFO] [stderr] Checking idna v0.1.5 [INFO] [stderr] Checking url v1.7.2 [INFO] [stderr] Checking hyper v0.10.15 [INFO] [stderr] Checking iron v0.5.1 [INFO] [stderr] Checking mount v0.3.0 [INFO] [stderr] Checking topd v1.3.1 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sensors/cpu.rs:50:18 [INFO] [stderr] | [INFO] [stderr] 50 | Some(CpuUsage {usage: usage}) [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `usage` [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/sensors/processes.rs:40:64 [INFO] [stderr] | [INFO] [stderr] 40 | ProcessesSensor { last_measurement_time: PreciseTime::now(), clock_ticks_per_second: clock_ticks_per_second, page_size: page_size, last_measurement: Default::default()} [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `clock_ticks_per_second` [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/sensors/processes.rs:40:112 [INFO] [stderr] | [INFO] [stderr] 40 | ProcessesSensor { last_measurement_time: PreciseTime::now(), clock_ticks_per_second: clock_ticks_per_second, page_size: page_size, last_measurement: Default::default()} [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `page_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/sensors/processes.rs:78:55 [INFO] [stderr] | [INFO] [stderr] 78 | self.last_measurement.insert(pid, ProcessValue {ttime: ttime}); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `ttime` [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/sensors/cpu.rs:50:18 [INFO] [stderr] | [INFO] [stderr] 50 | Some(CpuUsage {usage: usage}) [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `usage` [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/sensors/processes.rs:40:64 [INFO] [stderr] | [INFO] [stderr] 40 | ProcessesSensor { last_measurement_time: PreciseTime::now(), clock_ticks_per_second: clock_ticks_per_second, page_size: page_size, last_measurement: Default::default()} [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `clock_ticks_per_second` [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/sensors/processes.rs:40:112 [INFO] [stderr] | [INFO] [stderr] 40 | ProcessesSensor { last_measurement_time: PreciseTime::now(), clock_ticks_per_second: clock_ticks_per_second, page_size: page_size, last_measurement: Default::default()} [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `page_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/sensors/processes.rs:78:55 [INFO] [stderr] | [INFO] [stderr] 78 | self.last_measurement.insert(pid, ProcessValue {ttime: ttime}); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `ttime` [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: unneeded return statement [INFO] [stderr] --> src/sensors/memory.rs:45:3 [INFO] [stderr] | [INFO] [stderr] 45 | return Some(MemoryUsage{used: used/total, buffers: buffers/total, cache: cached/total, swap: 1.0f32-swap_free/swap_total}); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(MemoryUsage{used: used/total, buffers: buffers/total, cache: cached/total, swap: 1.0f32-swap_free/swap_total})` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/sensors/processes.rs:85:3 [INFO] [stderr] | [INFO] [stderr] 85 | return result; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `result` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/server.rs:33:19 [INFO] [stderr] | [INFO] [stderr] 33 | const INDEX_HTML:&'static [u8] = include_bytes!("../ui/src/index.html"); [INFO] [stderr] | -^^^^^^^----- help: consider removing `'static`: `&[u8]` [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/server.rs:34:22 [INFO] [stderr] | [INFO] [stderr] 34 | const BUNDLE_JS_GZ: &'static [u8] = include_bytes!("assets/bundle.js.gz"); [INFO] [stderr] | -^^^^^^^----- help: consider removing `'static`: `&[u8]` [INFO] [stderr] | [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: unneeded return statement [INFO] [stderr] --> src/sensors/memory.rs:45:3 [INFO] [stderr] | [INFO] [stderr] 45 | return Some(MemoryUsage{used: used/total, buffers: buffers/total, cache: cached/total, swap: 1.0f32-swap_free/swap_total}); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(MemoryUsage{used: used/total, buffers: buffers/total, cache: cached/total, swap: 1.0f32-swap_free/swap_total})` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/sensors/processes.rs:85:3 [INFO] [stderr] | [INFO] [stderr] 85 | return result; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `result` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/server.rs:33:19 [INFO] [stderr] | [INFO] [stderr] 33 | const INDEX_HTML:&'static [u8] = include_bytes!("../ui/src/index.html"); [INFO] [stderr] | -^^^^^^^----- help: consider removing `'static`: `&[u8]` [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/server.rs:34:22 [INFO] [stderr] | [INFO] [stderr] 34 | const BUNDLE_JS_GZ: &'static [u8] = include_bytes!("assets/bundle.js.gz"); [INFO] [stderr] | -^^^^^^^----- help: consider removing `'static`: `&[u8]` [INFO] [stderr] | [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/sensors/cpu.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | / fn index<'a>(&'a self, _index: usize) -> &'a f32 { [INFO] [stderr] 22 | | &self.usage[_index] [INFO] [stderr] 23 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `sensors::cpu::CpuSensor` [INFO] [stderr] --> src/sensors/cpu.rs:27:2 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn new() -> CpuSensor { [INFO] [stderr] | _____^ [INFO] [stderr] 28 | | CpuSensor { last_measurement_time: PreciseTime::now(), last_measurement: [0; 10]} [INFO] [stderr] 29 | | } [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] 26 | impl Default for sensors::cpu::CpuSensor { [INFO] [stderr] 27 | fn default() -> Self { [INFO] [stderr] 28 | Self::new() [INFO] [stderr] 29 | } [INFO] [stderr] 30 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `sensors::memory::MemorySensor` [INFO] [stderr] --> src/sensors/memory.rs:18:2 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn new() -> MemorySensor { [INFO] [stderr] | _____^ [INFO] [stderr] 19 | | MemorySensor [INFO] [stderr] 20 | | } [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] 7 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sensors/memory.rs:37:19 [INFO] [stderr] | [INFO] [stderr] 37 | let total:f32 = value_map.get("MemTotal:").unwrap().parse().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&value_map["MemTotal:"]` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sensors/memory.rs:38:18 [INFO] [stderr] | [INFO] [stderr] 38 | let free:f32 = value_map.get("MemFree:").unwrap().parse().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&value_map["MemFree:"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sensors/memory.rs:39:21 [INFO] [stderr] | [INFO] [stderr] 39 | let buffers:f32 = value_map.get("Buffers:").unwrap().parse().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&value_map["Buffers:"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sensors/memory.rs:40:20 [INFO] [stderr] | [INFO] [stderr] 40 | let cached:f32 = value_map.get("Cached:").unwrap().parse().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&value_map["Cached:"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sensors/memory.rs:43:24 [INFO] [stderr] | [INFO] [stderr] 43 | let swap_total:f32 = value_map.get("SwapTotal:").unwrap().parse().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&value_map["SwapTotal:"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sensors/memory.rs:44:23 [INFO] [stderr] | [INFO] [stderr] 44 | let swap_free:f32 = value_map.get("SwapFree:").unwrap().parse().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&value_map["SwapFree:"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `sensors::net::NetSensor` [INFO] [stderr] --> src/sensors/net.rs:20:2 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn new() -> NetSensor { [INFO] [stderr] | _____^ [INFO] [stderr] 21 | | NetSensor { last_measurement_time: PreciseTime::now(), last_measurement_recv: 0, last_measurement_send: 0} [INFO] [stderr] 22 | | } [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] 19 | impl Default for sensors::net::NetSensor { [INFO] [stderr] 20 | fn default() -> Self { [INFO] [stderr] 21 | Self::new() [INFO] [stderr] 22 | } [INFO] [stderr] 23 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stderr] --> src/sensors/net.rs:36:11 [INFO] [stderr] | [INFO] [stderr] 36 | if let Ok(_) = reader.read_line(&mut line) { [INFO] [stderr] | _____________- ^^^^^ [INFO] [stderr] 37 | | if line.len() == 0 { [INFO] [stderr] 38 | | break; [INFO] [stderr] 39 | | } [INFO] [stderr] ... | [INFO] [stderr] 44 | | break; [INFO] [stderr] 45 | | } [INFO] [stderr] | |_____________- help: try this: `if reader.read_line(&mut line).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: length comparison to zero [INFO] [stderr] --> src/sensors/net.rs:37:8 [INFO] [stderr] | [INFO] [stderr] 37 | if line.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `line.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `sensors::disk::DiskSensor` [INFO] [stderr] --> src/sensors/disk.rs:14:2 [INFO] [stderr] | [INFO] [stderr] 14 | pub fn new() -> DiskSensor { [INFO] [stderr] | _____^ [INFO] [stderr] 15 | | DiskSensor { last_measurement_time: PreciseTime::now(), last_measurement: HashMap::new()} [INFO] [stderr] 16 | | } [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] 13 | impl Default for sensors::disk::DiskSensor { [INFO] [stderr] 14 | fn default() -> Self { [INFO] [stderr] 15 | Self::new() [INFO] [stderr] 16 | } [INFO] [stderr] 17 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stderr] --> src/sensors/disk.rs:28:11 [INFO] [stderr] | [INFO] [stderr] 28 | if let Ok(_) = reader.read_line(&mut line) { [INFO] [stderr] | _____________- ^^^^^ [INFO] [stderr] 29 | | if line.len() == 0 { [INFO] [stderr] 30 | | break; [INFO] [stderr] 31 | | } [INFO] [stderr] ... | [INFO] [stderr] 43 | | break; [INFO] [stderr] 44 | | } [INFO] [stderr] | |_____________- help: try this: `if reader.read_line(&mut line).is_ok()` [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: length comparison to zero [INFO] [stderr] --> src/sensors/disk.rs:29:8 [INFO] [stderr] | [INFO] [stderr] 29 | if line.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `line.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `sensors::processes::ProcessesSensor` [INFO] [stderr] --> src/sensors/processes.rs:33:2 [INFO] [stderr] | [INFO] [stderr] 33 | pub fn new() -> ProcessesSensor { [INFO] [stderr] | _____^ [INFO] [stderr] 34 | | let clock_ticks_per_second; [INFO] [stderr] 35 | | let page_size; [INFO] [stderr] 36 | | unsafe { [INFO] [stderr] ... | [INFO] [stderr] 40 | | ProcessesSensor { last_measurement_time: PreciseTime::now(), clock_ticks_per_second: clock_ticks_per_second, page_size: page_size, last_measurement: Default::default()} [INFO] [stderr] 41 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 32 | impl Default for sensors::processes::ProcessesSensor { [INFO] [stderr] 33 | fn default() -> Self { [INFO] [stderr] 34 | Self::new() [INFO] [stderr] 35 | } [INFO] [stderr] 36 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/sensors/processes.rs:56:33 [INFO] [stderr] | [INFO] [stderr] 56 | let cmd_start = line.find("(").expect("("); [INFO] [stderr] | ^^^ help: try using a char instead: `'('` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/sensors/processes.rs:57:32 [INFO] [stderr] | [INFO] [stderr] 57 | let cmd_end = line.rfind(")").unwrap(); [INFO] [stderr] | ^^^ help: try using a char instead: `')'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/server.rs:54:63 [INFO] [stderr] | [INFO] [stderr] 54 | result.insert("os_release", json!(&::sys_info::os_release().unwrap_or("unknown".to_string()))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| "unknown".to_string())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/sensors/cpu.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | / fn index<'a>(&'a self, _index: usize) -> &'a f32 { [INFO] [stderr] 22 | | &self.usage[_index] [INFO] [stderr] 23 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `sensors::cpu::CpuSensor` [INFO] [stderr] --> src/sensors/cpu.rs:27:2 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn new() -> CpuSensor { [INFO] [stderr] | _____^ [INFO] [stderr] 28 | | CpuSensor { last_measurement_time: PreciseTime::now(), last_measurement: [0; 10]} [INFO] [stderr] 29 | | } [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] 26 | impl Default for sensors::cpu::CpuSensor { [INFO] [stderr] 27 | fn default() -> Self { [INFO] [stderr] 28 | Self::new() [INFO] [stderr] 29 | } [INFO] [stderr] 30 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/main.rs:51:2 [INFO] [stderr] | [INFO] [stderr] 51 | let mut config = Config { [INFO] [stderr] | _____^ [INFO] [stderr] 52 | | port: default_port(), [INFO] [stderr] 53 | | }; [INFO] [stderr] 54 | | if config_file.is_ok() { [INFO] [stderr] ... | [INFO] [stderr] 57 | | config = toml::from_str(&config_content).unwrap(); [INFO] [stderr] 58 | | } [INFO] [stderr] | |_____^ [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] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 51 | let config = if config_file.is_ok() { ..; toml::from_str(&config_content).unwrap() } else { Config { [INFO] [stderr] 52 | port: default_port(), [INFO] [stderr] 53 | } }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `sensors::memory::MemorySensor` [INFO] [stderr] --> src/sensors/memory.rs:18:2 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn new() -> MemorySensor { [INFO] [stderr] | _____^ [INFO] [stderr] 19 | | MemorySensor [INFO] [stderr] 20 | | } [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] 7 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sensors/memory.rs:37:19 [INFO] [stderr] | [INFO] [stderr] 37 | let total:f32 = value_map.get("MemTotal:").unwrap().parse().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&value_map["MemTotal:"]` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sensors/memory.rs:38:18 [INFO] [stderr] | [INFO] [stderr] 38 | let free:f32 = value_map.get("MemFree:").unwrap().parse().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&value_map["MemFree:"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sensors/memory.rs:39:21 [INFO] [stderr] | [INFO] [stderr] 39 | let buffers:f32 = value_map.get("Buffers:").unwrap().parse().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&value_map["Buffers:"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sensors/memory.rs:40:20 [INFO] [stderr] | [INFO] [stderr] 40 | let cached:f32 = value_map.get("Cached:").unwrap().parse().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&value_map["Cached:"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sensors/memory.rs:43:24 [INFO] [stderr] | [INFO] [stderr] 43 | let swap_total:f32 = value_map.get("SwapTotal:").unwrap().parse().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&value_map["SwapTotal:"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sensors/memory.rs:44:23 [INFO] [stderr] | [INFO] [stderr] 44 | let swap_free:f32 = value_map.get("SwapFree:").unwrap().parse().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&value_map["SwapFree:"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `sensors::net::NetSensor` [INFO] [stderr] --> src/sensors/net.rs:20:2 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn new() -> NetSensor { [INFO] [stderr] | _____^ [INFO] [stderr] 21 | | NetSensor { last_measurement_time: PreciseTime::now(), last_measurement_recv: 0, last_measurement_send: 0} [INFO] [stderr] 22 | | } [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] 19 | impl Default for sensors::net::NetSensor { [INFO] [stderr] 20 | fn default() -> Self { [INFO] [stderr] 21 | Self::new() [INFO] [stderr] 22 | } [INFO] [stderr] 23 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stderr] --> src/sensors/net.rs:36:11 [INFO] [stderr] | [INFO] [stderr] 36 | if let Ok(_) = reader.read_line(&mut line) { [INFO] [stderr] | _____________- ^^^^^ [INFO] [stderr] 37 | | if line.len() == 0 { [INFO] [stderr] 38 | | break; [INFO] [stderr] 39 | | } [INFO] [stderr] ... | [INFO] [stderr] 44 | | break; [INFO] [stderr] 45 | | } [INFO] [stderr] | |_____________- help: try this: `if reader.read_line(&mut line).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: length comparison to zero [INFO] [stderr] --> src/sensors/net.rs:37:8 [INFO] [stderr] | [INFO] [stderr] 37 | if line.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `line.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `sensors::disk::DiskSensor` [INFO] [stderr] --> src/sensors/disk.rs:14:2 [INFO] [stderr] | [INFO] [stderr] 14 | pub fn new() -> DiskSensor { [INFO] [stderr] | _____^ [INFO] [stderr] 15 | | DiskSensor { last_measurement_time: PreciseTime::now(), last_measurement: HashMap::new()} [INFO] [stderr] 16 | | } [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] 13 | impl Default for sensors::disk::DiskSensor { [INFO] [stderr] 14 | fn default() -> Self { [INFO] [stderr] 15 | Self::new() [INFO] [stderr] 16 | } [INFO] [stderr] 17 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stderr] --> src/sensors/disk.rs:28:11 [INFO] [stderr] | [INFO] [stderr] 28 | if let Ok(_) = reader.read_line(&mut line) { [INFO] [stderr] | _____________- ^^^^^ [INFO] [stderr] 29 | | if line.len() == 0 { [INFO] [stderr] 30 | | break; [INFO] [stderr] 31 | | } [INFO] [stderr] ... | [INFO] [stderr] 43 | | break; [INFO] [stderr] 44 | | } [INFO] [stderr] | |_____________- help: try this: `if reader.read_line(&mut line).is_ok()` [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: length comparison to zero [INFO] [stderr] --> src/sensors/disk.rs:29:8 [INFO] [stderr] | [INFO] [stderr] 29 | if line.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `line.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `sensors::processes::ProcessesSensor` [INFO] [stderr] --> src/sensors/processes.rs:33:2 [INFO] [stderr] | [INFO] [stderr] 33 | pub fn new() -> ProcessesSensor { [INFO] [stderr] | _____^ [INFO] [stderr] 34 | | let clock_ticks_per_second; [INFO] [stderr] 35 | | let page_size; [INFO] [stderr] 36 | | unsafe { [INFO] [stderr] ... | [INFO] [stderr] 40 | | ProcessesSensor { last_measurement_time: PreciseTime::now(), clock_ticks_per_second: clock_ticks_per_second, page_size: page_size, last_measurement: Default::default()} [INFO] [stderr] 41 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 32 | impl Default for sensors::processes::ProcessesSensor { [INFO] [stderr] 33 | fn default() -> Self { [INFO] [stderr] 34 | Self::new() [INFO] [stderr] 35 | } [INFO] [stderr] 36 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/sensors/processes.rs:56:33 [INFO] [stderr] | [INFO] [stderr] 56 | let cmd_start = line.find("(").expect("("); [INFO] [stderr] | ^^^ help: try using a char instead: `'('` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/sensors/processes.rs:57:32 [INFO] [stderr] | [INFO] [stderr] 57 | let cmd_end = line.rfind(")").unwrap(); [INFO] [stderr] | ^^^ help: try using a char instead: `')'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/server.rs:54:63 [INFO] [stderr] | [INFO] [stderr] 54 | result.insert("os_release", json!(&::sys_info::os_release().unwrap_or("unknown".to_string()))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| "unknown".to_string())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/main.rs:51:2 [INFO] [stderr] | [INFO] [stderr] 51 | let mut config = Config { [INFO] [stderr] | _____^ [INFO] [stderr] 52 | | port: default_port(), [INFO] [stderr] 53 | | }; [INFO] [stderr] 54 | | if config_file.is_ok() { [INFO] [stderr] ... | [INFO] [stderr] 57 | | config = toml::from_str(&config_content).unwrap(); [INFO] [stderr] 58 | | } [INFO] [stderr] | |_____^ [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] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 51 | let config = if config_file.is_ok() { ..; toml::from_str(&config_content).unwrap() } else { Config { [INFO] [stderr] 52 | port: default_port(), [INFO] [stderr] 53 | } }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 47.76s [INFO] running `"docker" "inspect" "4b55799d0f766af46a9af8ae039ab25743a5b0b05366d20ddf1474eca54d224a"` [INFO] running `"docker" "rm" "-f" "4b55799d0f766af46a9af8ae039ab25743a5b0b05366d20ddf1474eca54d224a"` [INFO] [stdout] 4b55799d0f766af46a9af8ae039ab25743a5b0b05366d20ddf1474eca54d224a