[INFO] crate tui-logger 0.2.0 is already in cache [INFO] extracting crate tui-logger 0.2.0 into work/ex/clippy-test-run/sources/stable/reg/tui-logger/0.2.0 [INFO] extracting crate tui-logger 0.2.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/tui-logger/0.2.0 [INFO] validating manifest of tui-logger-0.2.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 tui-logger-0.2.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 tui-logger-0.2.0 [INFO] finished frobbing tui-logger-0.2.0 [INFO] frobbed toml for tui-logger-0.2.0 written to work/ex/clippy-test-run/sources/stable/reg/tui-logger/0.2.0/Cargo.toml [INFO] started frobbing tui-logger-0.2.0 [INFO] finished frobbing tui-logger-0.2.0 [INFO] frobbed toml for tui-logger-0.2.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/tui-logger/0.2.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 tui-logger-0.2.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/tui-logger/0.2.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] 7464ee335de0d0e05f8413354ae4eec1ec05824c09105a899a946863fa3a2739 [INFO] running `"docker" "start" "-a" "7464ee335de0d0e05f8413354ae4eec1ec05824c09105a899a946863fa3a2739"` [INFO] [stderr] Checking itertools v0.7.11 [INFO] [stderr] Checking termion v1.5.1 [INFO] [stderr] Checking fxhash v0.2.1 [INFO] [stderr] Checking parking_lot_core v0.3.1 [INFO] [stderr] Checking parking_lot v0.6.4 [INFO] [stderr] Checking tui v0.3.0 [INFO] [stderr] Checking tui-logger v0.2.0 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded unit expression [INFO] [stderr] --> src/lib.rs:351:13 [INFO] [stderr] | [INFO] [stderr] 351 | () [INFO] [stderr] | ^^ help: remove the final `()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:671:21 [INFO] [stderr] | [INFO] [stderr] 671 | / if hide_off { [INFO] [stderr] 672 | | if levelfilter == &LevelFilter::Off { [INFO] [stderr] 673 | | continue; [INFO] [stderr] 674 | | } [INFO] [stderr] 675 | | } [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] 671 | if hide_off && levelfilter == &LevelFilter::Off { [INFO] [stderr] 672 | continue; [INFO] [stderr] 673 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:689:20 [INFO] [stderr] | [INFO] [stderr] 689 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 690 | | if let Some(sel) = selected { [INFO] [stderr] 691 | | // sel must be < self.target.len() from above test [INFO] [stderr] 692 | | if sel >= offset + list_height { [INFO] [stderr] ... | [INFO] [stderr] 704 | | } [INFO] [stderr] 705 | | }; [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] 689 | } else if let Some(sel) = selected { [INFO] [stderr] 690 | // sel must be < self.target.len() from above test [INFO] [stderr] 691 | if sel >= offset + list_height { [INFO] [stderr] 692 | // selected is below visible list range => make it the bottom [INFO] [stderr] 693 | sel - list_height + 1 [INFO] [stderr] 694 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:695:28 [INFO] [stderr] | [INFO] [stderr] 695 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 696 | | if sel.min(offset) + list_height - 1 >= self.targets.len() { [INFO] [stderr] 697 | | self.targets.len() - list_height [INFO] [stderr] 698 | | } else { [INFO] [stderr] 699 | | sel.min(offset) [INFO] [stderr] 700 | | } [INFO] [stderr] 701 | | } [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] 695 | } else if sel.min(offset) + list_height - 1 >= self.targets.len() { [INFO] [stderr] 696 | self.targets.len() - list_height [INFO] [stderr] 697 | } else { [INFO] [stderr] 698 | sel.min(offset) [INFO] [stderr] 699 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Unnecessary `>= y + 1` or `x - 1 >=` [INFO] [stderr] --> src/lib.rs:696:28 [INFO] [stderr] | [INFO] [stderr] 696 | if sel.min(offset) + list_height - 1 >= self.targets.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::int_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#int_plus_one [INFO] [stderr] help: change `>= y + 1` to `> y` as shown [INFO] [stderr] | [INFO] [stderr] 696 | if sel.min(offset) + list_height > self.targets.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:727:28 [INFO] [stderr] | [INFO] [stderr] 727 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 728 | | if let Some(style_off) = self.style_off { [INFO] [stderr] 729 | | style_off [INFO] [stderr] 730 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 733 | | } [INFO] [stderr] 734 | | }; [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] 727 | } else if let Some(style_off) = self.style_off { [INFO] [stderr] 728 | style_off [INFO] [stderr] 729 | } else { [INFO] [stderr] 730 | cell.symbol = " ".to_string(); [INFO] [stderr] 731 | continue; [INFO] [stderr] 732 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:1160:25 [INFO] [stderr] | [INFO] [stderr] 1160 | / if hide_off { [INFO] [stderr] 1161 | | if levelfilter == &LevelFilter::Off { [INFO] [stderr] 1162 | | continue; [INFO] [stderr] 1163 | | } [INFO] [stderr] 1164 | | } [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] 1160 | if hide_off && levelfilter == &LevelFilter::Off { [INFO] [stderr] 1161 | continue; [INFO] [stderr] 1162 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: item `circular::CircularBuffer` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/circular.rs:61:1 [INFO] [stderr] | [INFO] [stderr] 61 | / impl CircularBuffer { [INFO] [stderr] 62 | | /// Create a new CircularBuffer, which can hold max_depth elements [INFO] [stderr] 63 | | pub fn new(max_depth: usize) -> CircularBuffer { [INFO] [stderr] 64 | | CircularBuffer { [INFO] [stderr] ... | [INFO] [stderr] 140 | | } [INFO] [stderr] 141 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `dispatcher::Dispatcher` [INFO] [stderr] --> src/dispatcher.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | / pub fn new() -> Dispatcher { [INFO] [stderr] 27 | | trace!("New dispatcher is created."); [INFO] [stderr] 28 | | Dispatcher:: { map: vec![] } [INFO] [stderr] 29 | | } [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:143:37 [INFO] [stderr] | [INFO] [stderr] 143 | fn advance_levelfilter(levelfilter: &LevelFilter) -> (LevelFilter, LevelFilter) { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider passing by value instead: `LevelFilter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:144:5 [INFO] [stderr] | [INFO] [stderr] 144 | / match levelfilter { [INFO] [stderr] 145 | | &LevelFilter::Trace => (LevelFilter::Trace, LevelFilter::Debug), [INFO] [stderr] 146 | | &LevelFilter::Debug => (LevelFilter::Trace, LevelFilter::Info), [INFO] [stderr] 147 | | &LevelFilter::Info => (LevelFilter::Debug, LevelFilter::Warn), [INFO] [stderr] ... | [INFO] [stderr] 150 | | &LevelFilter::Off => (LevelFilter::Error, LevelFilter::Off), [INFO] [stderr] 151 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 144 | match *levelfilter { [INFO] [stderr] 145 | LevelFilter::Trace => (LevelFilter::Trace, LevelFilter::Debug), [INFO] [stderr] 146 | LevelFilter::Debug => (LevelFilter::Trace, LevelFilter::Info), [INFO] [stderr] 147 | LevelFilter::Info => (LevelFilter::Debug, LevelFilter::Warn), [INFO] [stderr] 148 | LevelFilter::Warn => (LevelFilter::Info, LevelFilter::Error), [INFO] [stderr] 149 | LevelFilter::Error => (LevelFilter::Warn, LevelFilter::Off), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `LevelConfig` [INFO] [stderr] --> src/lib.rs:167:5 [INFO] [stderr] | [INFO] [stderr] 167 | / pub fn new() -> LevelConfig { [INFO] [stderr] 168 | | LevelConfig { [INFO] [stderr] 169 | | config: HashMap::new(), [INFO] [stderr] 170 | | generation: 0, [INFO] [stderr] 171 | | origin_generation: 0, [INFO] [stderr] 172 | | } [INFO] [stderr] 173 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 160 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `TuiWidgetState` [INFO] [stderr] --> src/lib.rs:421:5 [INFO] [stderr] | [INFO] [stderr] 421 | / pub fn new() -> TuiWidgetState { [INFO] [stderr] 422 | | TuiWidgetState { [INFO] [stderr] 423 | | inner: Rc::new(RefCell::new(TuiWidgetInnerState::new())), [INFO] [stderr] 424 | | } [INFO] [stderr] 425 | | } [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] 419 | impl Default for TuiWidgetState { [INFO] [stderr] 420 | fn default() -> Self { [INFO] [stderr] 421 | Self::new() [INFO] [stderr] 422 | } [INFO] [stderr] 423 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded unit expression [INFO] [stderr] --> src/lib.rs:351:13 [INFO] [stderr] | [INFO] [stderr] 351 | () [INFO] [stderr] | ^^ help: remove the final `()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:671:21 [INFO] [stderr] | [INFO] [stderr] 671 | / if hide_off { [INFO] [stderr] 672 | | if levelfilter == &LevelFilter::Off { [INFO] [stderr] 673 | | continue; [INFO] [stderr] 674 | | } [INFO] [stderr] 675 | | } [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] 671 | if hide_off && levelfilter == &LevelFilter::Off { [INFO] [stderr] 672 | continue; [INFO] [stderr] 673 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:689:20 [INFO] [stderr] | [INFO] [stderr] 689 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 690 | | if let Some(sel) = selected { [INFO] [stderr] 691 | | // sel must be < self.target.len() from above test [INFO] [stderr] 692 | | if sel >= offset + list_height { [INFO] [stderr] ... | [INFO] [stderr] 704 | | } [INFO] [stderr] 705 | | }; [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] 689 | } else if let Some(sel) = selected { [INFO] [stderr] 690 | // sel must be < self.target.len() from above test [INFO] [stderr] 691 | if sel >= offset + list_height { [INFO] [stderr] 692 | // selected is below visible list range => make it the bottom [INFO] [stderr] 693 | sel - list_height + 1 [INFO] [stderr] 694 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:695:28 [INFO] [stderr] | [INFO] [stderr] 695 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 696 | | if sel.min(offset) + list_height - 1 >= self.targets.len() { [INFO] [stderr] 697 | | self.targets.len() - list_height [INFO] [stderr] 698 | | } else { [INFO] [stderr] 699 | | sel.min(offset) [INFO] [stderr] 700 | | } [INFO] [stderr] 701 | | } [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] 695 | } else if sel.min(offset) + list_height - 1 >= self.targets.len() { [INFO] [stderr] 696 | self.targets.len() - list_height [INFO] [stderr] 697 | } else { [INFO] [stderr] 698 | sel.min(offset) [INFO] [stderr] 699 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Unnecessary `>= y + 1` or `x - 1 >=` [INFO] [stderr] --> src/lib.rs:696:28 [INFO] [stderr] | [INFO] [stderr] 696 | if sel.min(offset) + list_height - 1 >= self.targets.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::int_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#int_plus_one [INFO] [stderr] help: change `>= y + 1` to `> y` as shown [INFO] [stderr] | [INFO] [stderr] 696 | if sel.min(offset) + list_height > self.targets.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:727:28 [INFO] [stderr] | [INFO] [stderr] 727 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 728 | | if let Some(style_off) = self.style_off { [INFO] [stderr] 729 | | style_off [INFO] [stderr] 730 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 733 | | } [INFO] [stderr] 734 | | }; [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] 727 | } else if let Some(style_off) = self.style_off { [INFO] [stderr] 728 | style_off [INFO] [stderr] 729 | } else { [INFO] [stderr] 730 | cell.symbol = " ".to_string(); [INFO] [stderr] 731 | continue; [INFO] [stderr] 732 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:1160:25 [INFO] [stderr] | [INFO] [stderr] 1160 | / if hide_off { [INFO] [stderr] 1161 | | if levelfilter == &LevelFilter::Off { [INFO] [stderr] 1162 | | continue; [INFO] [stderr] 1163 | | } [INFO] [stderr] 1164 | | } [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] 1160 | if hide_off && levelfilter == &LevelFilter::Off { [INFO] [stderr] 1161 | continue; [INFO] [stderr] 1162 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: mutable borrow from immutable input(s) [INFO] [stderr] --> src/lib.rs:526:59 [INFO] [stderr] | [INFO] [stderr] 526 | pub fn state(&'b mut self, state: &TuiWidgetState) -> &mut TuiLoggerTargetWidget<'b> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::mut_from_ref)] on by default [INFO] [stderr] note: immutable borrow here [INFO] [stderr] --> src/lib.rs:526:39 [INFO] [stderr] | [INFO] [stderr] 526 | pub fn state(&'b mut self, state: &TuiWidgetState) -> &mut TuiLoggerTargetWidget<'b> { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mut_from_ref [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:561:16 [INFO] [stderr] | [INFO] [stderr] 561 | if self.targets.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.targets.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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:667:21 [INFO] [stderr] | [INFO] [stderr] 667 | let ref mut targets = &mut state.config; [INFO] [stderr] | ----^^^^^^^^^^^^^^^--------------------- help: try: `let targets = &mut (&mut state.config);` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:708:17 [INFO] [stderr] | [INFO] [stderr] 708 | let ref targets = &state.config; [INFO] [stderr] | ----^^^^^^^^^^^----------------- help: try: `let targets = &(&state.config);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: useless use of `vec!` [INFO] [stderr] --> src/lib.rs:713:38 [INFO] [stderr] | [INFO] [stderr] 713 | for (j, sym, lev) in vec![ [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 714 | | (0, "E", Level::Error), [INFO] [stderr] 715 | | (1, "W", Level::Warn), [INFO] [stderr] 716 | | (2, "I", Level::Info), [INFO] [stderr] 717 | | (3, "D", Level::Debug), [INFO] [stderr] 718 | | (4, "T", Level::Trace), [INFO] [stderr] 719 | | ] { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_vec)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: mutable borrow from immutable input(s) [INFO] [stderr] --> src/lib.rs:865:59 [INFO] [stderr] | [INFO] [stderr] 865 | pub fn state(&'b mut self, state: &TuiWidgetState) -> &mut TuiLoggerWidget<'b> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: immutable borrow here [INFO] [stderr] --> src/lib.rs:865:39 [INFO] [stderr] | [INFO] [stderr] 865 | pub fn state(&'b mut self, state: &TuiWidgetState) -> &mut TuiLoggerWidget<'b> { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mut_from_ref [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/lib.rs:963:13 [INFO] [stderr] | [INFO] [stderr] 963 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 1` [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] warning: use of `unwrap_or` followed by a call to `default` [INFO] [stderr] --> src/lib.rs:1138:38 [INFO] [stderr] | [INFO] [stderr] 1138 | .title_style(self.style.unwrap_or(Style::default())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.style.unwrap_or_default()` [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:1157:25 [INFO] [stderr] | [INFO] [stderr] 1157 | let ref mut targets = &mut state.config; [INFO] [stderr] | ----^^^^^^^^^^^^^^^--------------------- help: try: `let targets = &mut (&mut state.config);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `default` [INFO] [stderr] --> src/lib.rs:1180:38 [INFO] [stderr] | [INFO] [stderr] 1180 | .title_style(self.style.unwrap_or(Style::default())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.style.unwrap_or_default()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `default` [INFO] [stderr] --> src/lib.rs:1196:38 [INFO] [stderr] | [INFO] [stderr] 1196 | .title_style(self.style.unwrap_or(Style::default())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.style.unwrap_or_default()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `tui-logger`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: item `circular::CircularBuffer` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/circular.rs:61:1 [INFO] [stderr] | [INFO] [stderr] 61 | / impl CircularBuffer { [INFO] [stderr] 62 | | /// Create a new CircularBuffer, which can hold max_depth elements [INFO] [stderr] 63 | | pub fn new(max_depth: usize) -> CircularBuffer { [INFO] [stderr] 64 | | CircularBuffer { [INFO] [stderr] ... | [INFO] [stderr] 140 | | } [INFO] [stderr] 141 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 58 [INFO] [stderr] --> src/circular.rs:146:5 [INFO] [stderr] | [INFO] [stderr] 146 | / fn circular_buffer() { [INFO] [stderr] 147 | | use CircularBuffer; [INFO] [stderr] 148 | | [INFO] [stderr] 149 | | let mut cb: CircularBuffer = CircularBuffer::new(5); [INFO] [stderr] ... | [INFO] [stderr] 277 | | } [INFO] [stderr] 278 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 58 [INFO] [stderr] --> src/circular.rs:280:5 [INFO] [stderr] | [INFO] [stderr] 280 | / fn circular_buffer_rev() { [INFO] [stderr] 281 | | use CircularBuffer; [INFO] [stderr] 282 | | [INFO] [stderr] 283 | | let mut cb: CircularBuffer = CircularBuffer::new(5); [INFO] [stderr] ... | [INFO] [stderr] 411 | | } [INFO] [stderr] 412 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `dispatcher::Dispatcher` [INFO] [stderr] --> src/dispatcher.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | / pub fn new() -> Dispatcher { [INFO] [stderr] 27 | | trace!("New dispatcher is created."); [INFO] [stderr] 28 | | Dispatcher:: { map: vec![] } [INFO] [stderr] 29 | | } [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:143:37 [INFO] [stderr] | [INFO] [stderr] 143 | fn advance_levelfilter(levelfilter: &LevelFilter) -> (LevelFilter, LevelFilter) { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider passing by value instead: `LevelFilter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:144:5 [INFO] [stderr] | [INFO] [stderr] 144 | / match levelfilter { [INFO] [stderr] 145 | | &LevelFilter::Trace => (LevelFilter::Trace, LevelFilter::Debug), [INFO] [stderr] 146 | | &LevelFilter::Debug => (LevelFilter::Trace, LevelFilter::Info), [INFO] [stderr] 147 | | &LevelFilter::Info => (LevelFilter::Debug, LevelFilter::Warn), [INFO] [stderr] ... | [INFO] [stderr] 150 | | &LevelFilter::Off => (LevelFilter::Error, LevelFilter::Off), [INFO] [stderr] 151 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 144 | match *levelfilter { [INFO] [stderr] 145 | LevelFilter::Trace => (LevelFilter::Trace, LevelFilter::Debug), [INFO] [stderr] 146 | LevelFilter::Debug => (LevelFilter::Trace, LevelFilter::Info), [INFO] [stderr] 147 | LevelFilter::Info => (LevelFilter::Debug, LevelFilter::Warn), [INFO] [stderr] 148 | LevelFilter::Warn => (LevelFilter::Info, LevelFilter::Error), [INFO] [stderr] 149 | LevelFilter::Error => (LevelFilter::Warn, LevelFilter::Off), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `LevelConfig` [INFO] [stderr] --> src/lib.rs:167:5 [INFO] [stderr] | [INFO] [stderr] 167 | / pub fn new() -> LevelConfig { [INFO] [stderr] 168 | | LevelConfig { [INFO] [stderr] 169 | | config: HashMap::new(), [INFO] [stderr] 170 | | generation: 0, [INFO] [stderr] 171 | | origin_generation: 0, [INFO] [stderr] 172 | | } [INFO] [stderr] 173 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 160 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `TuiWidgetState` [INFO] [stderr] --> src/lib.rs:421:5 [INFO] [stderr] | [INFO] [stderr] 421 | / pub fn new() -> TuiWidgetState { [INFO] [stderr] 422 | | TuiWidgetState { [INFO] [stderr] 423 | | inner: Rc::new(RefCell::new(TuiWidgetInnerState::new())), [INFO] [stderr] 424 | | } [INFO] [stderr] 425 | | } [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] 419 | impl Default for TuiWidgetState { [INFO] [stderr] 420 | fn default() -> Self { [INFO] [stderr] 421 | Self::new() [INFO] [stderr] 422 | } [INFO] [stderr] 423 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: mutable borrow from immutable input(s) [INFO] [stderr] --> src/lib.rs:526:59 [INFO] [stderr] | [INFO] [stderr] 526 | pub fn state(&'b mut self, state: &TuiWidgetState) -> &mut TuiLoggerTargetWidget<'b> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::mut_from_ref)] on by default [INFO] [stderr] note: immutable borrow here [INFO] [stderr] --> src/lib.rs:526:39 [INFO] [stderr] | [INFO] [stderr] 526 | pub fn state(&'b mut self, state: &TuiWidgetState) -> &mut TuiLoggerTargetWidget<'b> { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mut_from_ref [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:561:16 [INFO] [stderr] | [INFO] [stderr] 561 | if self.targets.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.targets.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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:667:21 [INFO] [stderr] | [INFO] [stderr] 667 | let ref mut targets = &mut state.config; [INFO] [stderr] | ----^^^^^^^^^^^^^^^--------------------- help: try: `let targets = &mut (&mut state.config);` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:708:17 [INFO] [stderr] | [INFO] [stderr] 708 | let ref targets = &state.config; [INFO] [stderr] | ----^^^^^^^^^^^----------------- help: try: `let targets = &(&state.config);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: useless use of `vec!` [INFO] [stderr] --> src/lib.rs:713:38 [INFO] [stderr] | [INFO] [stderr] 713 | for (j, sym, lev) in vec![ [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 714 | | (0, "E", Level::Error), [INFO] [stderr] 715 | | (1, "W", Level::Warn), [INFO] [stderr] 716 | | (2, "I", Level::Info), [INFO] [stderr] 717 | | (3, "D", Level::Debug), [INFO] [stderr] 718 | | (4, "T", Level::Trace), [INFO] [stderr] 719 | | ] { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_vec)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: mutable borrow from immutable input(s) [INFO] [stderr] --> src/lib.rs:865:59 [INFO] [stderr] | [INFO] [stderr] 865 | pub fn state(&'b mut self, state: &TuiWidgetState) -> &mut TuiLoggerWidget<'b> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: immutable borrow here [INFO] [stderr] --> src/lib.rs:865:39 [INFO] [stderr] | [INFO] [stderr] 865 | pub fn state(&'b mut self, state: &TuiWidgetState) -> &mut TuiLoggerWidget<'b> { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mut_from_ref [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/lib.rs:963:13 [INFO] [stderr] | [INFO] [stderr] 963 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 1` [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] warning: use of `unwrap_or` followed by a call to `default` [INFO] [stderr] --> src/lib.rs:1138:38 [INFO] [stderr] | [INFO] [stderr] 1138 | .title_style(self.style.unwrap_or(Style::default())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.style.unwrap_or_default()` [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:1157:25 [INFO] [stderr] | [INFO] [stderr] 1157 | let ref mut targets = &mut state.config; [INFO] [stderr] | ----^^^^^^^^^^^^^^^--------------------- help: try: `let targets = &mut (&mut state.config);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `default` [INFO] [stderr] --> src/lib.rs:1180:38 [INFO] [stderr] | [INFO] [stderr] 1180 | .title_style(self.style.unwrap_or(Style::default())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.style.unwrap_or_default()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `default` [INFO] [stderr] --> src/lib.rs:1196:38 [INFO] [stderr] | [INFO] [stderr] 1196 | .title_style(self.style.unwrap_or(Style::default())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.style.unwrap_or_default()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `tui-logger`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "7464ee335de0d0e05f8413354ae4eec1ec05824c09105a899a946863fa3a2739"` [INFO] running `"docker" "rm" "-f" "7464ee335de0d0e05f8413354ae4eec1ec05824c09105a899a946863fa3a2739"` [INFO] [stdout] 7464ee335de0d0e05f8413354ae4eec1ec05824c09105a899a946863fa3a2739