[INFO] cloning repository https://github.com/Proteus-Audio/proteus-cli [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Proteus-Audio/proteus-cli" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FProteus-Audio%2Fproteus-cli", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FProteus-Audio%2Fproteus-cli'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] f9f1dbb0b7512cabd65fb975ed00aec3c4229f50 [INFO] linting Proteus-Audio/proteus-cli against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FProteus-Audio%2Fproteus-cli" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/Proteus-Audio/proteus-cli [INFO] finished tweaking git repo https://github.com/Proteus-Audio/proteus-cli [INFO] tweaked toml for git repo https://github.com/Proteus-Audio/proteus-cli written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Proteus-Audio/proteus-cli on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/Proteus-Audio/proteus-cli already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded symphonia-codec-adpcm v0.5.5 [INFO] [stderr] Downloaded symphonia-codec-alac v0.5.5 [INFO] [stderr] Downloaded primal-check v0.3.3 [INFO] [stderr] Downloaded transpose v0.2.2 [INFO] [stderr] Downloaded stability v0.2.1 [INFO] [stderr] Downloaded matroska v0.26.0 [INFO] [stderr] Downloaded bitstream-io v1.8.0 [INFO] [stderr] Downloaded symphonia-format-mkv v0.5.5 [INFO] [stderr] Downloaded realfft v3.5.0 [INFO] [stderr] Downloaded symphonia-format-caf v0.5.5 [INFO] [stderr] Downloaded winnow v0.5.19 [INFO] [stderr] Downloaded text-to-ascii-art v0.1.10 [INFO] [stderr] Downloaded indicatif v0.18.3 [INFO] [stderr] Downloaded ratatui v0.26.3 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 5723ab189659db1d82184acf2f7425ecb5b272535b0e88e04aa671597506c38b [INFO] running `Command { std: "docker" "start" "-a" "5723ab189659db1d82184acf2f7425ecb5b272535b0e88e04aa671597506c38b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "5723ab189659db1d82184acf2f7425ecb5b272535b0e88e04aa671597506c38b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5723ab189659db1d82184acf2f7425ecb5b272535b0e88e04aa671597506c38b", kill_on_drop: false }` [INFO] [stdout] 5723ab189659db1d82184acf2f7425ecb5b272535b0e88e04aa671597506c38b [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 155c5d0ab242eda12372622c598b981bd3acaab9489581206d381e7ca7b09dc8 [INFO] running `Command { std: "docker" "start" "-a" "155c5d0ab242eda12372622c598b981bd3acaab9489581206d381e7ca7b09dc8", kill_on_drop: false }` [INFO] [stderr] Checking bytemuck v1.14.0 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Checking encoding_rs v0.8.33 [INFO] [stderr] Compiling proc-macro2 v1.0.92 [INFO] [stderr] Compiling alsa-sys v0.3.1 [INFO] [stderr] Compiling phf_shared v0.11.2 [INFO] [stderr] Checking getrandom v0.2.11 [INFO] [stderr] Checking extended v0.1.0 [INFO] [stderr] Compiling phf_generator v0.11.2 [INFO] [stderr] Checking strength_reduce v0.2.4 [INFO] [stderr] Compiling cpal v0.16.0 [INFO] [stderr] Checking symphonia-core v0.5.5 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Compiling serde_json v1.0.108 [INFO] [stderr] Checking errno v0.3.14 [INFO] [stderr] Checking memchr v2.8.0 [INFO] [stderr] Compiling quote v1.0.38 [INFO] [stderr] Checking alsa v0.9.1 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking bitstream-io v1.8.0 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Compiling syn v2.0.96 [INFO] [stderr] Checking aho-corasick v1.1.4 [INFO] [stderr] Checking signal-hook-registry v1.4.8 [INFO] [stderr] Checking num-integer v0.1.46 [INFO] [stderr] Checking num-complex v0.4.6 [INFO] [stderr] Checking symphonia-codec-adpcm v0.5.5 [INFO] [stderr] Checking symphonia-metadata v0.5.5 [INFO] [stderr] Checking symphonia-codec-alac v0.5.5 [INFO] [stderr] Checking transpose v0.2.2 [INFO] [stderr] Checking primal-check v0.3.3 [INFO] [stderr] Checking num-bigint v0.4.6 [INFO] [stderr] Checking symphonia-codec-pcm v0.5.5 [INFO] [stderr] Checking symphonia-codec-aac v0.5.5 [INFO] [stderr] Checking dasp_ring_buffer v0.11.0 [INFO] [stderr] Checking symphonia-utils-xiph v0.5.5 [INFO] [stderr] Checking symphonia-bundle-mp3 v0.5.5 [INFO] [stderr] Checking symphonia-format-mkv v0.5.5 [INFO] [stderr] Checking symphonia-bundle-flac v0.5.5 [INFO] [stderr] Checking symphonia-format-isomp4 v0.5.5 [INFO] [stderr] Checking symphonia-format-ogg v0.5.5 [INFO] [stderr] Checking symphonia-codec-vorbis v0.5.5 [INFO] [stderr] Checking symphonia-format-riff v0.5.5 [INFO] [stderr] Checking symphonia-format-caf v0.5.5 [INFO] [stderr] Checking rustfft v6.4.1 [INFO] [stderr] Checking smallvec v1.11.2 [INFO] [stderr] Checking regex-syntax v0.8.9 [INFO] [stderr] Checking signal-hook v0.3.18 [INFO] [stderr] Checking mio v0.8.11 [INFO] [stderr] Checking parking_lot_core v0.9.9 [INFO] [stderr] Checking symphonia v0.5.5 [INFO] [stderr] Compiling portable-atomic v1.13.1 [INFO] [stderr] Checking hashbrown v0.15.5 [INFO] [stderr] Checking parking_lot v0.12.1 [INFO] [stderr] Checking num-rational v0.4.2 [INFO] [stderr] Checking signal-hook-mio v0.2.5 [INFO] [stderr] Checking castaway v0.2.4 [INFO] [stderr] Checking console v0.16.2 [INFO] [stderr] Checking compact_str v0.7.1 [INFO] [stderr] Checking rodio v0.21.1 [INFO] [stderr] Checking lru v0.12.5 [INFO] [stderr] Checking unicode-truncate v1.1.0 [INFO] [stderr] Checking clap_builder v4.4.8 [INFO] [stderr] Checking crossterm v0.27.0 [INFO] [stderr] Checking float-cmp v0.10.0 [INFO] [stderr] Compiling assert_cmd v2.1.2 [INFO] [stderr] Checking unit-prefix v0.5.2 [INFO] [stderr] Checking cassowary v0.3.0 [INFO] [stderr] Checking indicatif v0.18.3 [INFO] [stderr] Checking getrandom v0.3.4 [INFO] [stderr] Checking wait-timeout v0.2.1 [INFO] [stderr] Checking colored v3.1.1 [INFO] [stderr] Checking text-to-ascii-art v0.1.10 [INFO] [stderr] Checking tempfile v3.24.0 [INFO] [stderr] Checking hound v3.5.1 [INFO] [stderr] Checking regex-automata v0.4.14 [INFO] [stderr] Checking clap v4.4.8 [INFO] [stderr] Compiling phf_macros v0.11.2 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling stability v0.2.1 [INFO] [stderr] Checking phf v0.11.2 [INFO] [stderr] Checking matroska v0.26.0 [INFO] [stderr] Checking regex v1.12.3 [INFO] [stderr] Checking bstr v1.12.1 [INFO] [stderr] Checking strum v0.26.3 [INFO] [stderr] Checking predicates v3.1.3 [INFO] [stderr] Checking realfft v3.5.0 [INFO] [stderr] Checking ratatui v0.26.3 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking proteus-lib v0.6.3 (/opt/rustwide/workdir/proteus-lib) [INFO] [stdout] warning: unused import: `log::info` [INFO] [stdout] --> proteus-lib/src/logging/mod.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use log::info; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `log::info` [INFO] [stdout] --> proteus-lib/src/logging/mod.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use log::info; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `log::info` [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/output_stage.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use log::info; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `log::info` [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/output_stage.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use log::info; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ContainerTrackArgs` and `buffer_container_tracks` [INFO] [stdout] --> proteus-lib/src/track/mod.rs:8:21 [INFO] [stdout] | [INFO] [stdout] 8 | pub use container::{buffer_container_tracks, ContainerTrackArgs}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ContainerTrackArgs` and `buffer_container_tracks` [INFO] [stdout] --> proteus-lib/src/track/mod.rs:8:21 [INFO] [stdout] | [INFO] [stdout] 8 | pub use container::{buffer_container_tracks, ContainerTrackArgs}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ShuffleRuntimePlan` is never constructed [INFO] [stdout] --> proteus-lib/src/container/prot.rs:29:19 [INFO] [stdout] | [INFO] [stdout] 29 | pub(crate) struct ShuffleRuntimePlan { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `build_runtime_shuffle_plan` is never used [INFO] [stdout] --> proteus-lib/src/container/prot.rs:426:19 [INFO] [stdout] | [INFO] [stdout] 78 | impl Prot { [INFO] [stdout] | --------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 426 | pub(crate) fn build_runtime_shuffle_plan(&self, start_time: f64) -> ShuffleRuntimePlan { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `append_to_log` is never used [INFO] [stdout] --> proteus-lib/src/logging/mod.rs:10:4 [INFO] [stdout] | [INFO] [stdout] 10 | fn append_to_log(message: &str) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `append_on_line` is never used [INFO] [stdout] --> proteus-lib/src/logging/mod.rs:27:8 [INFO] [stdout] | [INFO] [stdout] 27 | pub fn append_on_line(file: &mut File, message: &str, line_number: usize) -> io::Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `log` is never used [INFO] [stdout] --> proteus-lib/src/logging/mod.rs:59:8 [INFO] [stdout] | [INFO] [stdout] 59 | pub fn log(message: &str) { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `clear_logfile` is never used [INFO] [stdout] --> proteus-lib/src/logging/mod.rs:63:8 [INFO] [stdout] | [INFO] [stdout] 63 | pub fn clear_logfile() { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `log_on_line` is never used [INFO] [stdout] --> proteus-lib/src/logging/mod.rs:80:8 [INFO] [stdout] | [INFO] [stdout] 80 | pub fn log_on_line(message: &str, line_number: usize) -> io::Result<()> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TypeData` is never constructed [INFO] [stdout] --> proteus-lib/src/logging/pivot_buffer_trace.rs:6:8 [INFO] [stdout] | [INFO] [stdout] 6 | struct TypeData { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_type_line` is never used [INFO] [stdout] --> proteus-lib/src/logging/pivot_buffer_trace.rs:17:4 [INFO] [stdout] | [INFO] [stdout] 17 | fn is_type_line(s: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `parse_item_line` is never used [INFO] [stdout] --> proteus-lib/src/logging/pivot_buffer_trace.rs:26:4 [INFO] [stdout] | [INFO] [stdout] 26 | fn parse_item_line(line: &str) -> Result<(String, String), String> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pivot_buffer` is never used [INFO] [stdout] --> proteus-lib/src/logging/pivot_buffer_trace.rs:40:8 [INFO] [stdout] | [INFO] [stdout] 40 | pub fn pivot_buffer() -> Result<(), Box> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `FillState` is never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/buffer_mixer/mod.rs:51:17 [INFO] [stdout] | [INFO] [stdout] 51 | pub(crate) enum FillState { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `track_ready`, `instance_buffer_fills`, `tracks_fill_state`, `track_fill_state`, `mix_fill_state`, and `counters` are never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/buffer_mixer/mod.rs:401:19 [INFO] [stdout] | [INFO] [stdout] 115 | impl BufferMixer { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 401 | pub(crate) fn track_ready(&self, logical_track_index: usize) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 464 | pub(crate) fn instance_buffer_fills(&self) -> Vec<(usize, usize)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 472 | pub(crate) fn tracks_fill_state(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 489 | pub(crate) fn track_fill_state(&self, logical_track_index: usize) -> FillState { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 501 | pub(crate) fn mix_fill_state(&self) -> FillState { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 654 | pub(crate) fn counters(&self) -> Vec<(usize, u64, u64, Option)> { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `aggregate_fill_state` is never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/buffer_mixer/helpers.rs:82:15 [INFO] [stdout] | [INFO] [stdout] 82 | pub(super) fn aggregate_fill_state(states: I) -> FillState [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `log_buffer_header` is never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/buffer_mixer/helpers.rs:202:15 [INFO] [stdout] | [INFO] [stdout] 202 | pub(super) fn log_buffer_header( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `log_buffer` is never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/buffer_mixer/helpers.rs:212:15 [INFO] [stdout] | [INFO] [stdout] 212 | pub(super) fn log_buffer(_instance: &BufferInstance, _map: Vec<&str>) {} [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OutputStageArgs` is never constructed [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/output_stage.rs:19:19 [INFO] [stdout] | [INFO] [stdout] 19 | pub(super) struct OutputStageArgs<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `produce_output_samples` is never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/output_stage.rs:74:15 [INFO] [stdout] | [INFO] [stdout] 74 | pub(super) fn produce_output_samples(args: OutputStageArgs<'_>) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SourceSpawner` is never constructed [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/source_spawner.rs:14:19 [INFO] [stdout] | [INFO] [stdout] 14 | pub(super) struct SourceSpawner { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `spawn` is never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/source_spawner.rs:36:19 [INFO] [stdout] | [INFO] [stdout] 27 | impl SourceSpawner { [INFO] [stdout] | ------------------ method in this implementation [INFO] [stdout] ... [INFO] [stdout] 36 | pub(super) fn spawn( [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TrackMixArgs` is never constructed [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/track_mix.rs:10:19 [INFO] [stdout] | [INFO] [stdout] 10 | pub(super) struct TrackMixArgs<'a> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `mix_tracks_into_premix` is never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/track_mix.rs:34:15 [INFO] [stdout] | [INFO] [stdout] 34 | pub(super) fn mix_tracks_into_premix(args: TrackMixArgs<'_>) -> (u64, bool) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PremixBuffer` is never constructed [INFO] [stdout] --> proteus-lib/src/playback/engine/premix.rs:10:12 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct PremixBuffer { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `len`, `is_empty`, `clear`, `push_interleaved`, and `pop_chunk` are never used [INFO] [stdout] --> proteus-lib/src/playback/engine/premix.rs:16:12 [INFO] [stdout] | [INFO] [stdout] 14 | impl PremixBuffer { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 15 | /// Create an empty premix buffer. [INFO] [stdout] 16 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 21 | pub fn len(&self) -> usize { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 26 | pub fn is_empty(&self) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | pub fn clear(&mut self) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 39 | pub fn push_interleaved(&mut self, samples: &[f32]) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 50 | pub fn pop_chunk(&mut self, sample_count: usize) -> Vec { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_samples_to_buffer_map` is never used [INFO] [stdout] --> proteus-lib/src/track/buffer.rs:11:8 [INFO] [stdout] | [INFO] [stdout] 11 | pub fn add_samples_to_buffer_map( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `mark_track_as_finished` is never used [INFO] [stdout] --> proteus-lib/src/track/buffer.rs:88:8 [INFO] [stdout] | [INFO] [stdout] 88 | pub fn mark_track_as_finished(finished_tracks: &mut Arc>>, track_key: u16) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ContainerTrackArgs` is never constructed [INFO] [stdout] --> proteus-lib/src/track/container.rs:20:12 [INFO] [stdout] | [INFO] [stdout] 20 | pub struct ContainerTrackArgs { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `buffer_container_tracks` is never used [INFO] [stdout] --> proteus-lib/src/track/container.rs:33:8 [INFO] [stdout] | [INFO] [stdout] 33 | pub fn buffer_container_tracks(args: ContainerTrackArgs, abort: Arc) -> JoinHandle<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `decoded_format_label` is never used [INFO] [stdout] --> proteus-lib/src/track/convert.rs:52:8 [INFO] [stdout] | [INFO] [stdout] 52 | pub fn decoded_format_label(decoded: &AudioBufferRef<'_>) -> &'static str { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TrackArgs` is never constructed [INFO] [stdout] --> proteus-lib/src/track/single.rs:20:12 [INFO] [stdout] | [INFO] [stdout] 20 | pub struct TrackArgs { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `buffer_track` is never used [INFO] [stdout] --> proteus-lib/src/track/single.rs:33:8 [INFO] [stdout] | [INFO] [stdout] 33 | pub fn buffer_track(args: TrackArgs, abort: Arc) -> JoinHandle<()> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `rodio::source::Buffered` [INFO] [stdout] --> proteus-lib/src/audio/samples.rs:22:26 [INFO] [stdout] | [INFO] [stdout] 22 | let vector_samples = buffered.clone().into_iter().collect::>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `buffered.clone()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> proteus-lib/src/container/info.rs:79:24 [INFO] [stdout] | [INFO] [stdout] 79 | Err(Error::IoError(std::io::Error::new( [INFO] [stdout] | ________________________^ [INFO] [stdout] 80 | | std::io::ErrorKind::Other, [INFO] [stdout] 81 | | "Failed to probe media file", [INFO] [stdout] 82 | | ))) [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 79 ~ Err(Error::IoError(std::io::Error::other( [INFO] [stdout] 80 ~ "Failed to probe media file", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> proteus-lib/src/container/info.rs:183:5 [INFO] [stdout] | [INFO] [stdout] 183 | / loop { [INFO] [stdout] 184 | | match probed.format.next_packet() { [INFO] [stdout] 185 | | Ok(packet) => { [INFO] [stdout] 186 | | let entry = max_ts.entry(packet.track_id()).or_insert(0); [INFO] [stdout] ... | [INFO] [stdout] 193 | | } [INFO] [stdout] | |_____^ help: try: `while let Ok(packet) = probed.format.next_packet() { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] = note: `#[warn(clippy::while_let_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> proteus-lib/src/container/info.rs:609:9 [INFO] [stdout] | [INFO] [stdout] 609 | / match self.duration_map.get(&index) { [INFO] [stdout] 610 | | Some(duration) => Some(*duration), [INFO] [stdout] 611 | | None => None, [INFO] [stdout] 612 | | } [INFO] [stdout] | |_________^ help: try: `self.duration_map.get(&index).map(|duration| *duration)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> proteus-lib/src/container/prot.rs:80:27 [INFO] [stdout] | [INFO] [stdout] 80 | pub fn new(file_path: &String) -> Self { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 80 ~ pub fn new(file_path: &str) -> Self { [INFO] [stdout] 81 ~ let info = Info::new(file_path.to_owned()); [INFO] [stdout] 82 | [INFO] [stdout] ... [INFO] [stdout] 86 | info, [INFO] [stdout] 87 ~ file_path: Some(file_path.to_owned()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> proteus-lib/src/container/prot.rs:178:12 [INFO] [stdout] | [INFO] [stdout] 178 | if !self.file_path.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.file_path.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> proteus-lib/src/container/prot.rs:344:30 [INFO] [stdout] | [INFO] [stdout] 344 | return track_ids.into_iter().map(|id| format!("{}", id)).collect(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `slot_index` is used to index `last_sources` [INFO] [stdout] --> proteus-lib/src/container/prot.rs:511:31 [INFO] [stdout] | [INFO] [stdout] 511 | for slot_index in 0..slot_count { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 511 - for slot_index in 0..slot_count { [INFO] [stdout] 511 + for (slot_index, ) in last_sources.iter_mut().enumerate().take(slot_count) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> proteus-lib/src/container/prot.rs:1213:1 [INFO] [stdout] | [INFO] [stdout] 1213 | / fn build_segment_instance( [INFO] [stdout] 1214 | | instance_id: usize, [INFO] [stdout] 1215 | | logical_track_index: usize, [INFO] [stdout] 1216 | | slot_index: usize, [INFO] [stdout] ... | [INFO] [stdout] 1222 | | occurrence_counters: &mut HashMap<(usize, usize), usize>, [INFO] [stdout] 1223 | | ) -> Option { [INFO] [stdout] | |________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/compressor.rs:89:1 [INFO] [stdout] | [INFO] [stdout] 89 | / impl Default for CompressorEffect { [INFO] [stdout] 90 | | fn default() -> Self { [INFO] [stdout] 91 | | Self { [INFO] [stdout] 92 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 97 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 72 + #[derive(Default)] [INFO] [stdout] 73 | pub struct CompressorEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (8/7) [INFO] [stdout] --> proteus-lib/src/dsp/effects/compressor.rs:227:5 [INFO] [stdout] | [INFO] [stdout] 227 | / fn matches( [INFO] [stdout] 228 | | &self, [INFO] [stdout] 229 | | sample_rate: u32, [INFO] [stdout] 230 | | channels: usize, [INFO] [stdout] ... | [INFO] [stdout] 235 | | makeup_gain_db: f32, [INFO] [stdout] 236 | | ) -> bool { [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `time_domain` [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/convolution.rs:294:26 [INFO] [stdout] | [INFO] [stdout] 294 | for i in 0..segment_size { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 294 - for i in 0..segment_size { [INFO] [stdout] 294 + for (i, ) in time_domain.iter_mut().enumerate().take(segment_size) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/convolution.rs:332:13 [INFO] [stdout] | [INFO] [stdout] 332 | sample1.re = sample1.re + sample2.re; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sample1.re += sample2.re` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/convolution.rs:333:13 [INFO] [stdout] | [INFO] [stdout] 333 | sample1.im = sample1.im + sample2.im; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sample1.im += sample2.im` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`f32` -> `f32`) [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/impulse_response.rs:173:48 [INFO] [stdout] | [INFO] [stdout] 173 | channel_samples[index % channels].push(sample as f32); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `sample` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/reverb.rs:159:25 [INFO] [stdout] | [INFO] [stdout] 159 | let frames = if self.channels > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ check performed here [INFO] [stdout] 160 | input_buffer.len() / self.channels [INFO] [stdout] | ---------------------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] = note: `#[warn(clippy::manual_checked_ops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/mod.rs:49:1 [INFO] [stdout] | [INFO] [stdout] 49 | / impl Default for ConvolutionReverbSettings { [INFO] [stdout] 50 | | fn default() -> Self { [INFO] [stdout] 51 | | Self { [INFO] [stdout] 52 | | impulse_response: None, [INFO] [stdout] ... | [INFO] [stdout] 59 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 41 + #[derive(Default)] [INFO] [stdout] 42 | pub struct ConvolutionReverbSettings { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `extend` instead of `append` for adding the full range of a second vector [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/mod.rs:289:17 [INFO] [stdout] | [INFO] [stdout] 289 | out.extend(self.output_buffer.drain(..)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `out.append(&mut self.output_buffer)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extend_with_drain [INFO] [stdout] = note: `#[warn(clippy::extend_with_drain)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> proteus-lib/src/dsp/effects/diffusion_reverb/mod.rs:326:28 [INFO] [stdout] | [INFO] [stdout] 326 | let channel_step = channel_index as usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `channel_index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/distortion.rs:55:1 [INFO] [stdout] | [INFO] [stdout] 55 | / impl Default for DistortionEffect { [INFO] [stdout] 56 | | fn default() -> Self { [INFO] [stdout] 57 | | Self { [INFO] [stdout] 58 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 62 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 40 + #[derive(Default)] [INFO] [stdout] 41 | pub struct DistortionEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/gain.rs:49:1 [INFO] [stdout] | [INFO] [stdout] 49 | / impl Default for GainEffect { [INFO] [stdout] 50 | | fn default() -> Self { [INFO] [stdout] 51 | | Self { [INFO] [stdout] 52 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 56 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 34 + #[derive(Default)] [INFO] [stdout] 35 | pub struct GainEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/high_pass.rs:57:1 [INFO] [stdout] | [INFO] [stdout] 57 | / impl Default for HighPassFilterEffect { [INFO] [stdout] 58 | | fn default() -> Self { [INFO] [stdout] 59 | | Self { [INFO] [stdout] 60 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 65 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 40 + #[derive(Default)] [INFO] [stdout] 41 | pub struct HighPassFilterEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/limiter.rs:82:1 [INFO] [stdout] | [INFO] [stdout] 82 | / impl Default for LimiterEffect { [INFO] [stdout] 83 | | fn default() -> Self { [INFO] [stdout] 84 | | Self { [INFO] [stdout] 85 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 90 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 65 + #[derive(Default)] [INFO] [stdout] 66 | pub struct LimiterEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/low_pass.rs:57:1 [INFO] [stdout] | [INFO] [stdout] 57 | / impl Default for LowPassFilterEffect { [INFO] [stdout] 58 | | fn default() -> Self { [INFO] [stdout] 59 | | Self { [INFO] [stdout] 60 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 65 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 40 + #[derive(Default)] [INFO] [stdout] 41 | pub struct LowPassFilterEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/multiband_eq.rs:133:1 [INFO] [stdout] | [INFO] [stdout] 133 | / impl Default for MultibandEqEffect { [INFO] [stdout] 134 | | fn default() -> Self { [INFO] [stdout] 135 | | Self { [INFO] [stdout] 136 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 141 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 116 + #[derive(Default)] [INFO] [stdout] 117 | pub struct MultibandEqEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/pan.rs:53:1 [INFO] [stdout] | [INFO] [stdout] 53 | / impl Default for PanEffect { [INFO] [stdout] 54 | | fn default() -> Self { [INFO] [stdout] 55 | | Self { [INFO] [stdout] 56 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 60 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 38 + #[derive(Default)] [INFO] [stdout] 39 | pub struct PanEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> proteus-lib/src/peaks/extract.rs:118:68 [INFO] [stdout] | [INFO] [stdout] 118 | for_each_channel_sample(&decoded, channel, |sample| push(sample)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `&mut push` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `channel` is used to index `accumulators` [INFO] [stdout] --> proteus-lib/src/peaks/extract.rs:152:20 [INFO] [stdout] | [INFO] [stdout] 152 | for channel in 0..channels { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 152 - for channel in 0..channels { [INFO] [stdout] 152 + for (channel, ) in accumulators.iter_mut().enumerate().take(channels) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ShuffleRuntimePlan` is never constructed [INFO] [stdout] --> proteus-lib/src/container/prot.rs:29:19 [INFO] [stdout] | [INFO] [stdout] 29 | pub(crate) struct ShuffleRuntimePlan { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `build_runtime_shuffle_plan` is never used [INFO] [stdout] --> proteus-lib/src/container/prot.rs:426:19 [INFO] [stdout] | [INFO] [stdout] 78 | impl Prot { [INFO] [stdout] | --------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 426 | pub(crate) fn build_runtime_shuffle_plan(&self, start_time: f64) -> ShuffleRuntimePlan { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `append_to_log` is never used [INFO] [stdout] --> proteus-lib/src/logging/mod.rs:10:4 [INFO] [stdout] | [INFO] [stdout] 10 | fn append_to_log(message: &str) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `append_on_line` is never used [INFO] [stdout] --> proteus-lib/src/logging/mod.rs:27:8 [INFO] [stdout] | [INFO] [stdout] 27 | pub fn append_on_line(file: &mut File, message: &str, line_number: usize) -> io::Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `log` is never used [INFO] [stdout] --> proteus-lib/src/logging/mod.rs:59:8 [INFO] [stdout] | [INFO] [stdout] 59 | pub fn log(message: &str) { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `clear_logfile` is never used [INFO] [stdout] --> proteus-lib/src/logging/mod.rs:63:8 [INFO] [stdout] | [INFO] [stdout] 63 | pub fn clear_logfile() { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `log_on_line` is never used [INFO] [stdout] --> proteus-lib/src/logging/mod.rs:80:8 [INFO] [stdout] | [INFO] [stdout] 80 | pub fn log_on_line(message: &str, line_number: usize) -> io::Result<()> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TypeData` is never constructed [INFO] [stdout] --> proteus-lib/src/logging/pivot_buffer_trace.rs:6:8 [INFO] [stdout] | [INFO] [stdout] 6 | struct TypeData { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_type_line` is never used [INFO] [stdout] --> proteus-lib/src/logging/pivot_buffer_trace.rs:17:4 [INFO] [stdout] | [INFO] [stdout] 17 | fn is_type_line(s: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `parse_item_line` is never used [INFO] [stdout] --> proteus-lib/src/logging/pivot_buffer_trace.rs:26:4 [INFO] [stdout] | [INFO] [stdout] 26 | fn parse_item_line(line: &str) -> Result<(String, String), String> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pivot_buffer` is never used [INFO] [stdout] --> proteus-lib/src/logging/pivot_buffer_trace.rs:40:8 [INFO] [stdout] | [INFO] [stdout] 40 | pub fn pivot_buffer() -> Result<(), Box> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `track_ready`, `instance_buffer_fills`, `tracks_fill_state`, `track_fill_state`, and `counters` are never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/buffer_mixer/mod.rs:401:19 [INFO] [stdout] | [INFO] [stdout] 115 | impl BufferMixer { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 401 | pub(crate) fn track_ready(&self, logical_track_index: usize) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 464 | pub(crate) fn instance_buffer_fills(&self) -> Vec<(usize, usize)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 472 | pub(crate) fn tracks_fill_state(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 489 | pub(crate) fn track_fill_state(&self, logical_track_index: usize) -> FillState { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 654 | pub(crate) fn counters(&self) -> Vec<(usize, u64, u64, Option)> { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `log_buffer_header` is never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/buffer_mixer/helpers.rs:202:15 [INFO] [stdout] | [INFO] [stdout] 202 | pub(super) fn log_buffer_header( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `log_buffer` is never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/buffer_mixer/helpers.rs:212:15 [INFO] [stdout] | [INFO] [stdout] 212 | pub(super) fn log_buffer(_instance: &BufferInstance, _map: Vec<&str>) {} [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OutputStageArgs` is never constructed [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/output_stage.rs:19:19 [INFO] [stdout] | [INFO] [stdout] 19 | pub(super) struct OutputStageArgs<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `produce_output_samples` is never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/output_stage.rs:74:15 [INFO] [stdout] | [INFO] [stdout] 74 | pub(super) fn produce_output_samples(args: OutputStageArgs<'_>) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SourceSpawner` is never constructed [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/source_spawner.rs:14:19 [INFO] [stdout] | [INFO] [stdout] 14 | pub(super) struct SourceSpawner { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `spawn` is never used [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/source_spawner.rs:36:19 [INFO] [stdout] | [INFO] [stdout] 27 | impl SourceSpawner { [INFO] [stdout] | ------------------ method in this implementation [INFO] [stdout] ... [INFO] [stdout] 36 | pub(super) fn spawn( [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `is_empty` and `clear` are never used [INFO] [stdout] --> proteus-lib/src/playback/engine/premix.rs:26:12 [INFO] [stdout] | [INFO] [stdout] 14 | impl PremixBuffer { [INFO] [stdout] | ----------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 26 | pub fn is_empty(&self) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | pub fn clear(&mut self) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_samples_to_buffer_map` is never used [INFO] [stdout] --> proteus-lib/src/track/buffer.rs:11:8 [INFO] [stdout] | [INFO] [stdout] 11 | pub fn add_samples_to_buffer_map( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `mark_track_as_finished` is never used [INFO] [stdout] --> proteus-lib/src/track/buffer.rs:88:8 [INFO] [stdout] | [INFO] [stdout] 88 | pub fn mark_track_as_finished(finished_tracks: &mut Arc>>, track_key: u16) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ContainerTrackArgs` is never constructed [INFO] [stdout] --> proteus-lib/src/track/container.rs:20:12 [INFO] [stdout] | [INFO] [stdout] 20 | pub struct ContainerTrackArgs { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `buffer_container_tracks` is never used [INFO] [stdout] --> proteus-lib/src/track/container.rs:33:8 [INFO] [stdout] | [INFO] [stdout] 33 | pub fn buffer_container_tracks(args: ContainerTrackArgs, abort: Arc) -> JoinHandle<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `decoded_format_label` is never used [INFO] [stdout] --> proteus-lib/src/track/convert.rs:52:8 [INFO] [stdout] | [INFO] [stdout] 52 | pub fn decoded_format_label(decoded: &AudioBufferRef<'_>) -> &'static str { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TrackArgs` is never constructed [INFO] [stdout] --> proteus-lib/src/track/single.rs:20:12 [INFO] [stdout] | [INFO] [stdout] 20 | pub struct TrackArgs { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `buffer_track` is never used [INFO] [stdout] --> proteus-lib/src/track/single.rs:33:8 [INFO] [stdout] | [INFO] [stdout] 33 | pub fn buffer_track(args: TrackArgs, abort: Arc) -> JoinHandle<()> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `rodio::source::Buffered` [INFO] [stdout] --> proteus-lib/src/audio/samples.rs:22:26 [INFO] [stdout] | [INFO] [stdout] 22 | let vector_samples = buffered.clone().into_iter().collect::>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `buffered.clone()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> proteus-lib/src/container/info.rs:79:24 [INFO] [stdout] | [INFO] [stdout] 79 | Err(Error::IoError(std::io::Error::new( [INFO] [stdout] | ________________________^ [INFO] [stdout] 80 | | std::io::ErrorKind::Other, [INFO] [stdout] 81 | | "Failed to probe media file", [INFO] [stdout] 82 | | ))) [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 79 ~ Err(Error::IoError(std::io::Error::other( [INFO] [stdout] 80 ~ "Failed to probe media file", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> proteus-lib/src/container/info.rs:183:5 [INFO] [stdout] | [INFO] [stdout] 183 | / loop { [INFO] [stdout] 184 | | match probed.format.next_packet() { [INFO] [stdout] 185 | | Ok(packet) => { [INFO] [stdout] 186 | | let entry = max_ts.entry(packet.track_id()).or_insert(0); [INFO] [stdout] ... | [INFO] [stdout] 193 | | } [INFO] [stdout] | |_____^ help: try: `while let Ok(packet) = probed.format.next_packet() { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] = note: `#[warn(clippy::while_let_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> proteus-lib/src/container/info.rs:609:9 [INFO] [stdout] | [INFO] [stdout] 609 | / match self.duration_map.get(&index) { [INFO] [stdout] 610 | | Some(duration) => Some(*duration), [INFO] [stdout] 611 | | None => None, [INFO] [stdout] 612 | | } [INFO] [stdout] | |_________^ help: try: `self.duration_map.get(&index).map(|duration| *duration)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `iter().copied().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/buffer_mixer/mod.rs:324:62 [INFO] [stdout] | [INFO] [stdout] 324 | ... samples[start_sample..end_sample].iter().copied().collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.to_vec()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stdout] = note: `#[warn(clippy::iter_cloned_collect)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `packet` after checking its variant with `is_none` [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:268:34 [INFO] [stdout] | [INFO] [stdout] 265 | if packet.is_none() { [INFO] [stdout] | ------------------- help: try: `if let Some() = packet` [INFO] [stdout] ... [INFO] [stdout] 268 | let packet = packet.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:105:16 [INFO] [stdout] | [INFO] [stdout] 105 | if batch_samples > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ check performed here [INFO] [stdout] 106 | min_mix_samples = [INFO] [stdout] 107 | ((min_mix_samples + batch_samples - 1) / batch_samples) * batch_samples; [INFO] [stdout] | ------------------------------------------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:107:21 [INFO] [stdout] | [INFO] [stdout] 107 | ((min_mix_samples + batch_samples - 1) / batch_samples) * batch_samples; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `min_mix_samples.div_ceil(batch_samples)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] = note: `#[warn(clippy::manual_div_ceil)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> proteus-lib/src/container/prot.rs:80:27 [INFO] [stdout] | [INFO] [stdout] 80 | pub fn new(file_path: &String) -> Self { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 80 ~ pub fn new(file_path: &str) -> Self { [INFO] [stdout] 81 ~ let info = Info::new(file_path.to_owned()); [INFO] [stdout] 82 | [INFO] [stdout] ... [INFO] [stdout] 86 | info, [INFO] [stdout] 87 ~ file_path: Some(file_path.to_owned()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> proteus-lib/src/container/prot.rs:178:12 [INFO] [stdout] | [INFO] [stdout] 178 | if !self.file_path.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.file_path.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:415:49 [INFO] [stdout] | [INFO] [stdout] 415 | convolution_batch_samples - pending_mix_samples.len() as usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `pending_mix_samples.len()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to move all elements into a new `Vec` [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:419:47 [INFO] [stdout] | [INFO] [stdout] 419 | samples_for_processing = Some(pending_mix_samples.drain(..).collect()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `mem::take`: `std::mem::take(&mut pending_mix_samples)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#drain_collect [INFO] [stdout] = note: `#[warn(clippy::drain_collect)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> proteus-lib/src/container/prot.rs:344:30 [INFO] [stdout] | [INFO] [stdout] 344 | return track_ids.into_iter().map(|id| format!("{}", id)).collect(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:538:35 [INFO] [stdout] | [INFO] [stdout] 538 | let sample_rate = audio_info.sample_rate as u32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `audio_info.sample_rate` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:616:35 [INFO] [stdout] | [INFO] [stdout] 616 | let sample_rate = audio_info.sample_rate as u32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `audio_info.sample_rate` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `slot_index` is used to index `last_sources` [INFO] [stdout] --> proteus-lib/src/container/prot.rs:511:31 [INFO] [stdout] | [INFO] [stdout] 511 | for slot_index in 0..slot_count { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 511 - for slot_index in 0..slot_count { [INFO] [stdout] 511 + for (slot_index, ) in last_sources.iter_mut().enumerate().take(slot_count) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `let...else` may be rewritten with the `?` operator [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/source_spawner.rs:68:17 [INFO] [stdout] | [INFO] [stdout] 68 | / let Some(container_path) = self.container_path.as_ref() else { [INFO] [stdout] 69 | | return None; [INFO] [stdout] 70 | | }; [INFO] [stdout] | |__________________^ help: replace it with: `let container_path = self.container_path.as_ref()?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/utils.rs:73:14 [INFO] [stdout] | [INFO] [stdout] 73 | overlap: &Vec<(usize, usize)>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 73 - overlap: &Vec<(usize, usize)>, [INFO] [stdout] 73 + overlap: &[(usize, usize)], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> proteus-lib/src/playback/engine/mod.rs:70:5 [INFO] [stdout] | [INFO] [stdout] 70 | / pub fn new( [INFO] [stdout] 71 | | prot: Arc>, [INFO] [stdout] 72 | | abort_option: Option>, [INFO] [stdout] 73 | | start_time: f64, [INFO] [stdout] ... | [INFO] [stdout] 79 | | inline_track_mix_updates: Arc>>, [INFO] [stdout] 80 | | ) -> Self { [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `abort_option` after checking its variant with `is_some` [INFO] [stdout] --> proteus-lib/src/playback/engine/mod.rs:87:13 [INFO] [stdout] | [INFO] [stdout] 86 | let abort = if abort_option.is_some() { [INFO] [stdout] | ------------------------- help: try: `if let Some() = abort_option` [INFO] [stdout] 87 | abort_option.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> proteus-lib/src/container/prot.rs:1213:1 [INFO] [stdout] | [INFO] [stdout] 1213 | / fn build_segment_instance( [INFO] [stdout] 1214 | | instance_id: usize, [INFO] [stdout] 1215 | | logical_track_index: usize, [INFO] [stdout] 1216 | | slot_index: usize, [INFO] [stdout] ... | [INFO] [stdout] 1222 | | occurrence_counters: &mut HashMap<(usize, usize), usize>, [INFO] [stdout] 1223 | | ) -> Option { [INFO] [stdout] | |________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `PlayerState` which implements the `Copy` trait [INFO] [stdout] --> proteus-lib/src/playback/player/controls.rs:223:21 [INFO] [stdout] | [INFO] [stdout] 223 | let state = self.state.lock().unwrap().clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*self.state.lock().unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `self.reporter` after checking its variant with `is_some` [INFO] [stdout] --> proteus-lib/src/playback/player/controls.rs:403:13 [INFO] [stdout] | [INFO] [stdout] 402 | if self.reporter.is_some() { [INFO] [stdout] | -------------------------- help: try: `if let Some() = &self.reporter` [INFO] [stdout] 403 | self.reporter.as_ref().unwrap().lock().unwrap().stop(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> proteus-lib/src/playback/player/runtime/worker/runner.rs:248:23 [INFO] [stdout] | [INFO] [stdout] 248 | let sample_rate = ctx.audio_info.sample_rate as u32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `ctx.audio_info.sample_rate` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `TestData` [INFO] [stdout] --> proteus-lib/src/test_data.rs:81:5 [INFO] [stdout] | [INFO] [stdout] 81 | / pub fn new() -> Self { [INFO] [stdout] 82 | | Self { [INFO] [stdout] 83 | | mp3s: get_double_vec_of_mp3s(), [INFO] [stdout] 84 | | wavs: get_double_vec_of_wavs(), [INFO] [stdout] 85 | | } [INFO] [stdout] 86 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 79 + impl Default for TestData { [INFO] [stdout] 80 + fn default() -> Self { [INFO] [stdout] 81 + Self::new() [INFO] [stdout] 82 + } [INFO] [stdout] 83 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Timer` [INFO] [stdout] --> proteus-lib/src/tools/timer.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | / pub fn new() -> Self { [INFO] [stdout] 15 | | Self { [INFO] [stdout] 16 | | time: Duration::new(0, 0), [INFO] [stdout] 17 | | start_time: None, [INFO] [stdout] 18 | | } [INFO] [stdout] 19 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 12 + impl Default for Timer { [INFO] [stdout] 13 + fn default() -> Self { [INFO] [stdout] 14 + Self::new() [INFO] [stdout] 15 + } [INFO] [stdout] 16 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> proteus-lib/src/tools/timer.rs:34:12 [INFO] [stdout] | [INFO] [stdout] 34 | if self.start_time == None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `self.start_time.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> proteus-lib/src/tools/mod.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | pub mod tools; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> proteus-lib/src/tools/tools.rs:65:28 [INFO] [stdout] | [INFO] [stdout] 65 | pub fn get_decoder(format: &Box) -> Box { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn FormatReader` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] = note: `#[warn(clippy::borrowed_box)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/compressor.rs:89:1 [INFO] [stdout] | [INFO] [stdout] 89 | / impl Default for CompressorEffect { [INFO] [stdout] 90 | | fn default() -> Self { [INFO] [stdout] 91 | | Self { [INFO] [stdout] 92 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 97 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 72 + #[derive(Default)] [INFO] [stdout] 73 | pub struct CompressorEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> proteus-lib/src/track/container.rs:252:30 [INFO] [stdout] | [INFO] [stdout] 252 | .zip(channel2.into_iter()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/iterator.rs:629:11 [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 252 - .zip(channel2.into_iter()) [INFO] [stdout] 252 + .zip(channel2) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (8/7) [INFO] [stdout] --> proteus-lib/src/dsp/effects/compressor.rs:227:5 [INFO] [stdout] | [INFO] [stdout] 227 | / fn matches( [INFO] [stdout] 228 | | &self, [INFO] [stdout] 229 | | sample_rate: u32, [INFO] [stdout] 230 | | channels: usize, [INFO] [stdout] ... | [INFO] [stdout] 235 | | makeup_gain_db: f32, [INFO] [stdout] 236 | | ) -> bool { [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> proteus-lib/src/dsp/effects/compressor.rs:334:9 [INFO] [stdout] | [INFO] [stdout] 334 | effect.enabled = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `dsp::effects::compressor::CompressorEffect { enabled: true, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> proteus-lib/src/dsp/effects/compressor.rs:333:9 [INFO] [stdout] | [INFO] [stdout] 333 | let mut effect = CompressorEffect::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] = note: `#[warn(clippy::field_reassign_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> proteus-lib/src/track/single.rs:145:30 [INFO] [stdout] | [INFO] [stdout] 145 | .zip(channel2.into_iter()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/iterator.rs:629:11 [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 145 - .zip(channel2.into_iter()) [INFO] [stdout] 145 + .zip(channel2) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `time_domain` [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/convolution.rs:294:26 [INFO] [stdout] | [INFO] [stdout] 294 | for i in 0..segment_size { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 294 - for i in 0..segment_size { [INFO] [stdout] 294 + for (i, ) in time_domain.iter_mut().enumerate().take(segment_size) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/convolution.rs:332:13 [INFO] [stdout] | [INFO] [stdout] 332 | sample1.re = sample1.re + sample2.re; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sample1.re += sample2.re` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/convolution.rs:333:13 [INFO] [stdout] | [INFO] [stdout] 333 | sample1.im = sample1.im + sample2.im; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sample1.im += sample2.im` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`f32` -> `f32`) [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/impulse_response.rs:173:48 [INFO] [stdout] | [INFO] [stdout] 173 | channel_samples[index % channels].push(sample as f32); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `sample` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/reverb.rs:159:25 [INFO] [stdout] | [INFO] [stdout] 159 | let frames = if self.channels > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ check performed here [INFO] [stdout] 160 | input_buffer.len() / self.channels [INFO] [stdout] | ---------------------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] = note: `#[warn(clippy::manual_checked_ops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/mod.rs:49:1 [INFO] [stdout] | [INFO] [stdout] 49 | / impl Default for ConvolutionReverbSettings { [INFO] [stdout] 50 | | fn default() -> Self { [INFO] [stdout] 51 | | Self { [INFO] [stdout] 52 | | impulse_response: None, [INFO] [stdout] ... | [INFO] [stdout] 59 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 41 + #[derive(Default)] [INFO] [stdout] 42 | pub struct ConvolutionReverbSettings { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `extend` instead of `append` for adding the full range of a second vector [INFO] [stdout] --> proteus-lib/src/dsp/effects/convolution_reverb/mod.rs:289:17 [INFO] [stdout] | [INFO] [stdout] 289 | out.extend(self.output_buffer.drain(..)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `out.append(&mut self.output_buffer)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extend_with_drain [INFO] [stdout] = note: `#[warn(clippy::extend_with_drain)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> proteus-lib/src/dsp/effects/diffusion_reverb/mod.rs:326:28 [INFO] [stdout] | [INFO] [stdout] 326 | let channel_step = channel_index as usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `channel_index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: items after a test module [INFO] [stdout] --> proteus-lib/src/dsp/effects/distortion.rs:99:1 [INFO] [stdout] | [INFO] [stdout] 99 | mod tests { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 144 | fn sanitize_gain(gain: f32) -> f32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 152 | fn sanitize_threshold(threshold: f32) -> f32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#items_after_test_module [INFO] [stdout] = note: `#[warn(clippy::items_after_test_module)]` on by default [INFO] [stdout] = help: move the items to before the test module was defined [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/distortion.rs:55:1 [INFO] [stdout] | [INFO] [stdout] 55 | / impl Default for DistortionEffect { [INFO] [stdout] 56 | | fn default() -> Self { [INFO] [stdout] 57 | | Self { [INFO] [stdout] 58 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 62 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 40 + #[derive(Default)] [INFO] [stdout] 41 | pub struct DistortionEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> proteus-lib/src/dsp/effects/distortion.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 123 | effect.enabled = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `dsp::effects::distortion::DistortionEffect { enabled: true, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> proteus-lib/src/dsp/effects/distortion.rs:122:9 [INFO] [stdout] | [INFO] [stdout] 122 | let mut effect = DistortionEffect::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: items after a test module [INFO] [stdout] --> proteus-lib/src/dsp/effects/gain.rs:91:1 [INFO] [stdout] | [INFO] [stdout] 91 | mod tests { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 140 | fn sanitize_gain(gain: f32) -> f32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#items_after_test_module [INFO] [stdout] = help: move the items to before the test module was defined [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/gain.rs:49:1 [INFO] [stdout] | [INFO] [stdout] 49 | / impl Default for GainEffect { [INFO] [stdout] 50 | | fn default() -> Self { [INFO] [stdout] 51 | | Self { [INFO] [stdout] 52 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 56 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 34 + #[derive(Default)] [INFO] [stdout] 35 | pub struct GainEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> proteus-lib/src/dsp/effects/gain.rs:116:9 [INFO] [stdout] | [INFO] [stdout] 116 | effect.enabled = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `dsp::effects::gain::GainEffect { enabled: true, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> proteus-lib/src/dsp/effects/gain.rs:115:9 [INFO] [stdout] | [INFO] [stdout] 115 | let mut effect = GainEffect::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/high_pass.rs:57:1 [INFO] [stdout] | [INFO] [stdout] 57 | / impl Default for HighPassFilterEffect { [INFO] [stdout] 58 | | fn default() -> Self { [INFO] [stdout] 59 | | Self { [INFO] [stdout] 60 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 65 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 40 + #[derive(Default)] [INFO] [stdout] 41 | pub struct HighPassFilterEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> proteus-lib/src/dsp/effects/high_pass.rs:150:9 [INFO] [stdout] | [INFO] [stdout] 150 | effect.enabled = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `dsp::effects::high_pass::HighPassFilterEffect { enabled: true, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> proteus-lib/src/dsp/effects/high_pass.rs:149:9 [INFO] [stdout] | [INFO] [stdout] 149 | let mut effect = HighPassFilterEffect::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking proteus-scripts v0.1.0 (/opt/rustwide/workdir/proteus-scripts) [INFO] [stderr] Checking proteus-cli v0.6.1 (/opt/rustwide/workdir/proteus-cli) [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/limiter.rs:82:1 [INFO] [stdout] | [INFO] [stdout] 82 | / impl Default for LimiterEffect { [INFO] [stdout] 83 | | fn default() -> Self { [INFO] [stdout] 84 | | Self { [INFO] [stdout] 85 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 90 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 65 + #[derive(Default)] [INFO] [stdout] 66 | pub struct LimiterEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> proteus-lib/src/dsp/effects/limiter.rs:320:9 [INFO] [stdout] | [INFO] [stdout] 320 | effect.enabled = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `dsp::effects::limiter::LimiterEffect { enabled: true, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> proteus-lib/src/dsp/effects/limiter.rs:319:9 [INFO] [stdout] | [INFO] [stdout] 319 | let mut effect = LimiterEffect::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> proteus-lib/src/dsp/effects/limiter.rs:336:9 [INFO] [stdout] | [INFO] [stdout] 336 | settings.enabled = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `dsp::effects::limiter::LimiterEffect { enabled: true, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> proteus-lib/src/dsp/effects/limiter.rs:335:9 [INFO] [stdout] | [INFO] [stdout] 335 | let mut settings = LimiterEffect::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/low_pass.rs:57:1 [INFO] [stdout] | [INFO] [stdout] 57 | / impl Default for LowPassFilterEffect { [INFO] [stdout] 58 | | fn default() -> Self { [INFO] [stdout] 59 | | Self { [INFO] [stdout] 60 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 65 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 40 + #[derive(Default)] [INFO] [stdout] 41 | pub struct LowPassFilterEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> proteus-lib/src/dsp/effects/low_pass.rs:150:9 [INFO] [stdout] | [INFO] [stdout] 150 | effect.enabled = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `dsp::effects::low_pass::LowPassFilterEffect { enabled: true, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> proteus-lib/src/dsp/effects/low_pass.rs:149:9 [INFO] [stdout] | [INFO] [stdout] 149 | let mut effect = LowPassFilterEffect::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/multiband_eq.rs:133:1 [INFO] [stdout] | [INFO] [stdout] 133 | / impl Default for MultibandEqEffect { [INFO] [stdout] 134 | | fn default() -> Self { [INFO] [stdout] 135 | | Self { [INFO] [stdout] 136 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 141 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 116 + #[derive(Default)] [INFO] [stdout] 117 | pub struct MultibandEqEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> proteus-lib/src/dsp/effects/multiband_eq.rs:726:9 [INFO] [stdout] | [INFO] [stdout] 726 | effect.enabled = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `dsp::effects::multiband_eq::MultibandEqEffect { enabled: true, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> proteus-lib/src/dsp/effects/multiband_eq.rs:725:9 [INFO] [stdout] | [INFO] [stdout] 725 | let mut effect = MultibandEqEffect::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> proteus-lib/src/dsp/effects/pan.rs:53:1 [INFO] [stdout] | [INFO] [stdout] 53 | / impl Default for PanEffect { [INFO] [stdout] 54 | | fn default() -> Self { [INFO] [stdout] 55 | | Self { [INFO] [stdout] 56 | | enabled: false, [INFO] [stdout] ... | [INFO] [stdout] 60 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 38 + #[derive(Default)] [INFO] [stdout] 39 | pub struct PanEffect { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> proteus-lib/src/dsp/effects/pan.rs:149:9 [INFO] [stdout] | [INFO] [stdout] 149 | effect.enabled = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `dsp::effects::pan::PanEffect { enabled: true, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> proteus-lib/src/dsp/effects/pan.rs:148:9 [INFO] [stdout] | [INFO] [stdout] 148 | let mut effect = PanEffect::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> proteus-lib/src/dsp/effects/pan.rs:159:9 [INFO] [stdout] | [INFO] [stdout] 159 | effect.enabled = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `dsp::effects::pan::PanEffect { enabled: true, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> proteus-lib/src/dsp/effects/pan.rs:158:9 [INFO] [stdout] | [INFO] [stdout] 158 | let mut effect = PanEffect::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> proteus-lib/src/dsp/effects/pan.rs:173:9 [INFO] [stdout] | [INFO] [stdout] 173 | effect.enabled = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `dsp::effects::pan::PanEffect { enabled: true, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> proteus-lib/src/dsp/effects/pan.rs:172:9 [INFO] [stdout] | [INFO] [stdout] 172 | let mut effect = PanEffect::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> proteus-lib/src/peaks/extract.rs:118:68 [INFO] [stdout] | [INFO] [stdout] 118 | for_each_channel_sample(&decoded, channel, |sample| push(sample)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `&mut push` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `channel` is used to index `accumulators` [INFO] [stdout] --> proteus-lib/src/peaks/extract.rs:152:20 [INFO] [stdout] | [INFO] [stdout] 152 | for channel in 0..channels { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 152 - for channel in 0..channels { [INFO] [stdout] 152 + for (channel, ) in accumulators.iter_mut().enumerate().take(channels) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `iter().copied().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/buffer_mixer/mod.rs:324:62 [INFO] [stdout] | [INFO] [stdout] 324 | ... samples[start_sample..end_sample].iter().copied().collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.to_vec()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stdout] = note: `#[warn(clippy::iter_cloned_collect)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `packet` after checking its variant with `is_none` [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:268:34 [INFO] [stdout] | [INFO] [stdout] 265 | if packet.is_none() { [INFO] [stdout] | ------------------- help: try: `if let Some() = packet` [INFO] [stdout] ... [INFO] [stdout] 268 | let packet = packet.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:105:16 [INFO] [stdout] | [INFO] [stdout] 105 | if batch_samples > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ check performed here [INFO] [stdout] 106 | min_mix_samples = [INFO] [stdout] 107 | ((min_mix_samples + batch_samples - 1) / batch_samples) * batch_samples; [INFO] [stdout] | ------------------------------------------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:107:21 [INFO] [stdout] | [INFO] [stdout] 107 | ((min_mix_samples + batch_samples - 1) / batch_samples) * batch_samples; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `min_mix_samples.div_ceil(batch_samples)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] = note: `#[warn(clippy::manual_div_ceil)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:415:49 [INFO] [stdout] | [INFO] [stdout] 415 | convolution_batch_samples - pending_mix_samples.len() as usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `pending_mix_samples.len()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to move all elements into a new `Vec` [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:419:47 [INFO] [stdout] | [INFO] [stdout] 419 | samples_for_processing = Some(pending_mix_samples.drain(..).collect()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `mem::take`: `std::mem::take(&mut pending_mix_samples)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#drain_collect [INFO] [stdout] = note: `#[warn(clippy::drain_collect)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:538:35 [INFO] [stdout] | [INFO] [stdout] 538 | let sample_rate = audio_info.sample_rate as u32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `audio_info.sample_rate` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/runner/mod.rs:616:35 [INFO] [stdout] | [INFO] [stdout] 616 | let sample_rate = audio_info.sample_rate as u32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `audio_info.sample_rate` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `let...else` may be rewritten with the `?` operator [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/source_spawner.rs:68:17 [INFO] [stdout] | [INFO] [stdout] 68 | / let Some(container_path) = self.container_path.as_ref() else { [INFO] [stdout] 69 | | return None; [INFO] [stdout] 70 | | }; [INFO] [stdout] | |__________________^ help: replace it with: `let container_path = self.container_path.as_ref()?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> proteus-lib/src/playback/engine/mix/utils.rs:73:14 [INFO] [stdout] | [INFO] [stdout] 73 | overlap: &Vec<(usize, usize)>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 73 - overlap: &Vec<(usize, usize)>, [INFO] [stdout] 73 + overlap: &[(usize, usize)], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> proteus-lib/src/playback/engine/mod.rs:70:5 [INFO] [stdout] | [INFO] [stdout] 70 | / pub fn new( [INFO] [stdout] 71 | | prot: Arc>, [INFO] [stdout] 72 | | abort_option: Option>, [INFO] [stdout] 73 | | start_time: f64, [INFO] [stdout] ... | [INFO] [stdout] 79 | | inline_track_mix_updates: Arc>>, [INFO] [stdout] 80 | | ) -> Self { [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `abort_option` after checking its variant with `is_some` [INFO] [stdout] --> proteus-lib/src/playback/engine/mod.rs:87:13 [INFO] [stdout] | [INFO] [stdout] 86 | let abort = if abort_option.is_some() { [INFO] [stdout] | ------------------------- help: try: `if let Some() = abort_option` [INFO] [stdout] 87 | abort_option.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `PlayerState` which implements the `Copy` trait [INFO] [stdout] --> proteus-lib/src/playback/player/controls.rs:223:21 [INFO] [stdout] | [INFO] [stdout] 223 | let state = self.state.lock().unwrap().clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*self.state.lock().unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `self.reporter` after checking its variant with `is_some` [INFO] [stdout] --> proteus-lib/src/playback/player/controls.rs:403:13 [INFO] [stdout] | [INFO] [stdout] 402 | if self.reporter.is_some() { [INFO] [stdout] | -------------------------- help: try: `if let Some() = &self.reporter` [INFO] [stdout] 403 | self.reporter.as_ref().unwrap().lock().unwrap().stop(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> proteus-lib/src/playback/player/runtime/worker/runner.rs:248:23 [INFO] [stdout] | [INFO] [stdout] 248 | let sample_rate = ctx.audio_info.sample_rate as u32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `ctx.audio_info.sample_rate` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> proteus-cli/src/cli/args.rs:52:37 [INFO] [stdout] | [INFO] [stdout] 52 | .conflicts_with_all(&["verify"]), [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `["verify"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> proteus-cli/src/cli/bench.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | return Ok(Some(1)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 25 - return Ok(Some(1)); [INFO] [stdout] 25 + Ok(Some(1)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> proteus-cli/src/cli/bench.rs:85:9 [INFO] [stdout] | [INFO] [stdout] 85 | return Ok(Some(1)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 85 - return Ok(Some(1)); [INFO] [stdout] 85 + Ok(Some(1)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: all variants have the same postfix: `Only` [INFO] [stdout] --> proteus-cli/src/cli/verify.rs:18:1 [INFO] [stdout] | [INFO] [stdout] 18 | / pub enum VerifyMode { [INFO] [stdout] 19 | | DecodeOnly, [INFO] [stdout] 20 | | ProbeOnly, [INFO] [stdout] 21 | | VerifyOnly, [INFO] [stdout] 22 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: remove the postfixes and use full paths to the variants instead of glob imports [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] = note: `#[warn(clippy::enum_variant_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> proteus-cli/src/cli/verify.rs:97:37 [INFO] [stdout] | [INFO] [stdout] 97 | fn open_decoder(file_path: &str) -> Result<(Box, Box, u32)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> proteus-cli/src/cli/args.rs:52:37 [INFO] [stdout] | [INFO] [stdout] 52 | .conflicts_with_all(&["verify"]), [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `["verify"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> proteus-cli/src/cli/verify.rs:119:36 [INFO] [stdout] | [INFO] [stdout] 119 | let (track_id, codec_params) = format [INFO] [stdout] | ____________________________________^ [INFO] [stdout] 120 | | .tracks() [INFO] [stdout] 121 | | .iter() [INFO] [stdout] 122 | | .find(|track| track.codec_params.codec != CODEC_TYPE_NULL) [INFO] [stdout] 123 | | .map(|track| (track.id, track.codec_params.clone())) [INFO] [stdout] 124 | | .ok_or_else(|| Error::Unsupported("no supported audio tracks"))?; [INFO] [stdout] | |_______________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 124 - .ok_or_else(|| Error::Unsupported("no supported audio tracks"))?; [INFO] [stdout] 124 + .ok_or(Error::Unsupported("no supported audio tracks"))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> proteus-cli/src/cli/bench.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | return Ok(Some(1)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 25 - return Ok(Some(1)); [INFO] [stdout] 25 + Ok(Some(1)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `TestData` [INFO] [stdout] --> proteus-lib/src/test_data.rs:81:5 [INFO] [stdout] | [INFO] [stdout] 81 | / pub fn new() -> Self { [INFO] [stdout] 82 | | Self { [INFO] [stdout] 83 | | mp3s: get_double_vec_of_mp3s(), [INFO] [stdout] 84 | | wavs: get_double_vec_of_wavs(), [INFO] [stdout] 85 | | } [INFO] [stdout] 86 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 79 + impl Default for TestData { [INFO] [stdout] 80 + fn default() -> Self { [INFO] [stdout] 81 + Self::new() [INFO] [stdout] 82 + } [INFO] [stdout] 83 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> proteus-cli/src/cli/bench.rs:85:9 [INFO] [stdout] | [INFO] [stdout] 85 | return Ok(Some(1)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 85 - return Ok(Some(1)); [INFO] [stdout] 85 + Ok(Some(1)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Timer` [INFO] [stdout] --> proteus-lib/src/tools/timer.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | / pub fn new() -> Self { [INFO] [stdout] 15 | | Self { [INFO] [stdout] 16 | | time: Duration::new(0, 0), [INFO] [stdout] 17 | | start_time: None, [INFO] [stdout] 18 | | } [INFO] [stdout] 19 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 12 + impl Default for Timer { [INFO] [stdout] 13 + fn default() -> Self { [INFO] [stdout] 14 + Self::new() [INFO] [stdout] 15 + } [INFO] [stdout] 16 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: all variants have the same postfix: `Only` [INFO] [stdout] --> proteus-cli/src/cli/verify.rs:18:1 [INFO] [stdout] | [INFO] [stdout] 18 | / pub enum VerifyMode { [INFO] [stdout] 19 | | DecodeOnly, [INFO] [stdout] 20 | | ProbeOnly, [INFO] [stdout] 21 | | VerifyOnly, [INFO] [stdout] 22 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: remove the postfixes and use full paths to the variants instead of glob imports [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] = note: `#[warn(clippy::enum_variant_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> proteus-lib/src/tools/timer.rs:34:12 [INFO] [stdout] | [INFO] [stdout] 34 | if self.start_time == None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `self.start_time.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> proteus-lib/src/tools/mod.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | pub mod tools; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> proteus-lib/src/tools/tools.rs:65:28 [INFO] [stdout] | [INFO] [stdout] 65 | pub fn get_decoder(format: &Box) -> Box { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn FormatReader` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] = note: `#[warn(clippy::borrowed_box)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> proteus-cli/src/cli/verify.rs:97:37 [INFO] [stdout] | [INFO] [stdout] 97 | fn open_decoder(file_path: &str) -> Result<(Box, Box, u32)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> proteus-cli/src/cli/verify.rs:119:36 [INFO] [stdout] | [INFO] [stdout] 119 | let (track_id, codec_params) = format [INFO] [stdout] | ____________________________________^ [INFO] [stdout] 120 | | .tracks() [INFO] [stdout] 121 | | .iter() [INFO] [stdout] 122 | | .find(|track| track.codec_params.codec != CODEC_TYPE_NULL) [INFO] [stdout] 123 | | .map(|track| (track.id, track.codec_params.clone())) [INFO] [stdout] 124 | | .ok_or_else(|| Error::Unsupported("no supported audio tracks"))?; [INFO] [stdout] | |_______________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 124 - .ok_or_else(|| Error::Unsupported("no supported audio tracks"))?; [INFO] [stdout] 124 + .ok_or(Error::Unsupported("no supported audio tracks"))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> proteus-lib/src/track/container.rs:252:30 [INFO] [stdout] | [INFO] [stdout] 252 | .zip(channel2.into_iter()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/iterator.rs:629:11 [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 252 - .zip(channel2.into_iter()) [INFO] [stdout] 252 + .zip(channel2) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> proteus-lib/src/track/single.rs:145:30 [INFO] [stdout] | [INFO] [stdout] 145 | .zip(channel2.into_iter()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/iterator.rs:629:11 [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 145 - .zip(channel2.into_iter()) [INFO] [stdout] 145 + .zip(channel2) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> proteus-cli/src/runner.rs:96:9 [INFO] [stdout] | [INFO] [stdout] 96 | items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 96 - items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] 96 + items.sort_by_key(|a| a.0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> proteus-cli/src/runner.rs:108:9 [INFO] [stdout] | [INFO] [stdout] 108 | items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 108 - items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] 108 + items.sort_by_key(|a| a.0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> proteus-cli/src/runner.rs:134:53 [INFO] [stdout] | [INFO] [stdout] 134 | symphonia::core::errors::Error::IoError(std::io::Error::new( [INFO] [stdout] | _____________________________________________________^ [INFO] [stdout] 135 | | std::io::ErrorKind::Other, [INFO] [stdout] 136 | | err, [INFO] [stdout] 137 | | )) [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 134 ~ symphonia::core::errors::Error::IoError(std::io::Error::other( [INFO] [stdout] 135 ~ err, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> proteus-cli/src/runner.rs:530:9 [INFO] [stdout] | [INFO] [stdout] 530 | track_items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 530 - track_items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] 530 + track_items.sort_by_key(|a| a.0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> proteus-cli/src/ui.rs:368:9 [INFO] [stdout] | [INFO] [stdout] 368 | track_items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 368 - track_items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] 368 + track_items.sort_by_key(|a| a.0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> proteus-cli/src/runner.rs:96:9 [INFO] [stdout] | [INFO] [stdout] 96 | items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 96 - items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] 96 + items.sort_by_key(|a| a.0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> proteus-cli/src/runner.rs:108:9 [INFO] [stdout] | [INFO] [stdout] 108 | items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 108 - items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] 108 + items.sort_by_key(|a| a.0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> proteus-cli/src/runner.rs:134:53 [INFO] [stdout] | [INFO] [stdout] 134 | symphonia::core::errors::Error::IoError(std::io::Error::new( [INFO] [stdout] | _____________________________________________________^ [INFO] [stdout] 135 | | std::io::ErrorKind::Other, [INFO] [stdout] 136 | | err, [INFO] [stdout] 137 | | )) [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 134 ~ symphonia::core::errors::Error::IoError(std::io::Error::other( [INFO] [stdout] 135 ~ err, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> proteus-cli/src/runner.rs:530:9 [INFO] [stdout] | [INFO] [stdout] 530 | track_items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 530 - track_items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] 530 + track_items.sort_by_key(|a| a.0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> proteus-cli/src/ui.rs:368:9 [INFO] [stdout] | [INFO] [stdout] 368 | track_items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 368 - track_items.sort_by(|a, b| a.0.cmp(&b.0)); [INFO] [stdout] 368 + track_items.sort_by_key(|a| a.0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 58.73s [INFO] running `Command { std: "docker" "inspect" "155c5d0ab242eda12372622c598b981bd3acaab9489581206d381e7ca7b09dc8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "155c5d0ab242eda12372622c598b981bd3acaab9489581206d381e7ca7b09dc8", kill_on_drop: false }` [INFO] [stdout] 155c5d0ab242eda12372622c598b981bd3acaab9489581206d381e7ca7b09dc8