[INFO] fetching crate tax 0.0.7... [INFO] linting tax-0.0.7 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate tax 0.0.7 into /workspace/builds/worker-6-tc1/source [INFO] started tweaking crates.io crate tax 0.0.7 [INFO] finished tweaking crates.io crate tax 0.0.7 [INFO] tweaked toml for crates.io crate tax 0.0.7 written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate tax 0.0.7 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 crates.io crate tax 0.0.7 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] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded which v4.0.1 [INFO] [stderr] Downloaded proc-macro2 v1.0.18 [INFO] [stderr] Downloaded unicode-xid v0.2.1 [INFO] [stderr] Downloaded thiserror-impl v1.0.20 [INFO] [stderr] Downloaded quote v1.0.7 [INFO] [stderr] Downloaded thiserror v1.0.20 [INFO] [stderr] Downloaded arrayref v0.3.6 [INFO] [stderr] Downloaded redox_users v0.3.4 [INFO] [stderr] Downloaded textwrap v0.11.0 [INFO] [stderr] Downloaded ansi_term v0.11.0 [INFO] [stderr] Downloaded atty v0.2.14 [INFO] [stderr] Downloaded colored v2.0.0 [INFO] [stderr] Downloaded strsim v0.8.0 [INFO] [stderr] Downloaded bitflags v1.2.1 [INFO] [stderr] Downloaded blake2b_simd v0.5.10 [INFO] [stderr] Downloaded crossbeam-utils v0.7.2 [INFO] [stderr] Downloaded base64 v0.11.0 [INFO] [stderr] Downloaded syn v1.0.34 [INFO] [stderr] Downloaded rust-argon2 v0.7.0 [INFO] [stderr] Downloaded getrandom v0.1.14 [INFO] [stderr] Downloaded dirs v3.0.1 [INFO] [stderr] Downloaded regex v1.3.9 [INFO] [stderr] Downloaded aho-corasick v0.7.13 [INFO] [stderr] Downloaded memchr v2.3.3 [INFO] [stderr] Downloaded unicode-width v0.1.8 [INFO] [stderr] Downloaded autocfg v1.0.0 [INFO] [stderr] Downloaded libc v0.2.71 [INFO] [stderr] Downloaded constant_time_eq v0.1.5 [INFO] [stderr] Downloaded dirs-sys v0.3.5 [INFO] [stderr] Downloaded regex-syntax v0.6.18 [INFO] [stderr] Downloaded vec_map v0.8.2 [INFO] [stderr] Downloaded redox_syscall v0.1.56 [INFO] [stderr] Downloaded arrayvec v0.5.1 [INFO] [stderr] Downloaded cfg-if v0.1.10 [INFO] [stderr] Downloaded hermit-abi v0.1.15 [INFO] [stderr] Downloaded thread_local v1.0.1 [INFO] [stderr] Downloaded lazy_static v1.4.0 [INFO] [stderr] Downloaded clap v2.33.1 [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] 3555dcbfc1451801f3a5206e3615500645bdcebb6ceff4a577b796242dfa1664 [INFO] running `Command { std: "docker" "start" "-a" "3555dcbfc1451801f3a5206e3615500645bdcebb6ceff4a577b796242dfa1664", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "3555dcbfc1451801f3a5206e3615500645bdcebb6ceff4a577b796242dfa1664", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3555dcbfc1451801f3a5206e3615500645bdcebb6ceff4a577b796242dfa1664", kill_on_drop: false }` [INFO] [stdout] 3555dcbfc1451801f3a5206e3615500645bdcebb6ceff4a577b796242dfa1664 [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] 999121570e5a2b5d763d71c04a30217b9cbc67de6136a22bb15e28f8c6e0b896 [INFO] running `Command { std: "docker" "start" "-a" "999121570e5a2b5d763d71c04a30217b9cbc67de6136a22bb15e28f8c6e0b896", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.71 [INFO] [stderr] Compiling proc-macro2 v1.0.18 [INFO] [stderr] Compiling unicode-xid v0.2.1 [INFO] [stderr] Compiling syn v1.0.34 [INFO] [stderr] Compiling memchr v2.3.3 [INFO] [stderr] Checking lazy_static v1.4.0 [INFO] [stderr] Compiling bitflags v1.2.1 [INFO] [stderr] Checking unicode-width v0.1.8 [INFO] [stderr] Checking strsim v0.8.0 [INFO] [stderr] Checking vec_map v0.8.2 [INFO] [stderr] Checking ansi_term v0.11.0 [INFO] [stderr] Checking regex-syntax v0.6.18 [INFO] [stderr] Checking thread_local v1.0.1 [INFO] [stderr] Checking textwrap v0.11.0 [INFO] [stderr] Checking aho-corasick v0.7.13 [INFO] [stderr] Checking atty v0.2.14 [INFO] [stderr] Checking dirs-sys v0.3.5 [INFO] [stderr] Checking colored v2.0.0 [INFO] [stderr] Checking clap v2.33.1 [INFO] [stderr] Compiling quote v1.0.7 [INFO] [stderr] Checking dirs v3.0.1 [INFO] [stderr] Checking regex v1.3.9 [INFO] [stderr] Compiling thiserror-impl v1.0.20 [INFO] [stderr] Checking thiserror v1.0.20 [INFO] [stderr] Checking which v4.0.1 [INFO] [stderr] Checking tax v0.0.7 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/services.rs:17:13 [INFO] [stdout] | [INFO] [stdout] 17 | supports_colors: supports_colors, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `supports_colors` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tasks.rs:104:21 [INFO] [stdout] | [INFO] [stdout] 104 | plain_name: plain_name, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `plain_name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tasks.rs:105:21 [INFO] [stdout] | [INFO] [stdout] 105 | is_focused: is_focused, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `is_focused` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tasks.rs:108:21 [INFO] [stdout] | [INFO] [stdout] 108 | line_num: line_num, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `line_num` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tasks.rs:138:21 [INFO] [stdout] | [INFO] [stdout] 138 | comment: comment, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `comment` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tasks.rs:141:21 [INFO] [stdout] | [INFO] [stdout] 141 | line_num: line_num, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `line_num` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/cmd_add.rs:41:9 [INFO] [stdout] | [INFO] [stdout] 41 | comment: comment, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `comment` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/main.rs:157:9 [INFO] [stdout] | [INFO] [stdout] 157 | taxfile_path_getter: taxfile_path_getter, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `taxfile_path_getter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/services.rs:17:13 [INFO] [stdout] | [INFO] [stdout] 17 | supports_colors: supports_colors, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `supports_colors` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tasks.rs:104:21 [INFO] [stdout] | [INFO] [stdout] 104 | plain_name: plain_name, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `plain_name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tasks.rs:105:21 [INFO] [stdout] | [INFO] [stdout] 105 | is_focused: is_focused, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `is_focused` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tasks.rs:108:21 [INFO] [stdout] | [INFO] [stdout] 108 | line_num: line_num, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `line_num` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tasks.rs:138:21 [INFO] [stdout] | [INFO] [stdout] 138 | comment: comment, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `comment` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tasks.rs:141:21 [INFO] [stdout] | [INFO] [stdout] 141 | line_num: line_num, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `line_num` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/test_helpers.rs:33:40 [INFO] [stdout] | [INFO] [stdout] 33 | return ContentGetterMock { outcome: outcome }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `outcome` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/test_helpers.rs:54:17 [INFO] [stdout] | [INFO] [stdout] 54 | outcome: outcome, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `outcome` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/cmd_add.rs:41:9 [INFO] [stdout] | [INFO] [stdout] 41 | comment: comment, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `comment` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/main.rs:157:9 [INFO] [stdout] | [INFO] [stdout] 157 | taxfile_path_getter: taxfile_path_getter, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `taxfile_path_getter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/services.rs:83:32 [INFO] [stdout] | [INFO] [stdout] 83 | fn info(&mut self, s: &str) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] = note: `#[warn(clippy::unused_unit)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `ok` [INFO] [stdout] --> src/services.rs:90:5 [INFO] [stdout] | [INFO] [stdout] 90 | / match env::var(name) { [INFO] [stdout] 91 | | Ok(v) => Some(v), [INFO] [stdout] 92 | | Err(_) => None, [INFO] [stdout] 93 | | } [INFO] [stdout] | |_____^ help: replace with: `env::var(name).ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_ok_err [INFO] [stdout] = note: `#[warn(clippy::manual_ok_err)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/services.rs:99:17 [INFO] [stdout] | [INFO] [stdout] 99 | None => return None, [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] 99 - None => return None, [INFO] [stdout] 99 + None => None, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/services.rs:214:17 [INFO] [stdout] | [INFO] [stdout] 214 | return Ok(Some(cmd_obj)); [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] 214 - return Ok(Some(cmd_obj)); [INFO] [stdout] 214 + Ok(Some(cmd_obj)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::filter` [INFO] [stdout] --> src/services.rs:232:5 [INFO] [stdout] | [INFO] [stdout] 232 | / match (get_env)(name) { [INFO] [stdout] 233 | | Some(v) => { [INFO] [stdout] 234 | | if v.trim().len() == 0 { [INFO] [stdout] 235 | | None [INFO] [stdout] ... | [INFO] [stdout] 240 | | None => None, [INFO] [stdout] 241 | | } [INFO] [stdout] | |_____^ help: try: `(get_env)(name).filter(|v| v.trim().len() != 0)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_filter [INFO] [stdout] = note: `#[warn(clippy::manual_filter)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/services.rs:234:16 [INFO] [stdout] | [INFO] [stdout] 234 | if v.trim().len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.trim().is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/tasks.rs:21:44 [INFO] [stdout] | [INFO] [stdout] 21 | let section_tasks = if use_sections && focused_section != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `focused_section.is_some()` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:24:52 [INFO] [stdout] | [INFO] [stdout] 24 | .filter(|t| filter_task_in_section_cbk(&t, focused_section.clone().unwrap().as_ref())) [INFO] [stdout] | ^^ help: change this to: `t` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/tasks.rs:32:8 [INFO] [stdout] | [INFO] [stdout] 32 | if focused_tasks.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!focused_tasks.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/tasks.rs:36:8 [INFO] [stdout] | [INFO] [stdout] 36 | if section_tasks.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `section_tasks.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/tasks.rs:60:6 [INFO] [stdout] | [INFO] [stdout] 60 | ) -> Result<(Vec, bool, Vec>, Option>), String> { [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: binary comparison to literal `Option::None` [INFO] [stdout] --> src/tasks.rs:84:53 [INFO] [stdout] | [INFO] [stdout] 84 | if section_rc.is_focused && focused_section == None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `focused_section.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] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/tasks.rs:162:41 [INFO] [stdout] | [INFO] [stdout] 162 | if section_rc.is_focused && focused_section == None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `focused_section.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] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/tasks.rs:177:6 [INFO] [stdout] | [INFO] [stdout] 177 | ) -> Result<(Vec, bool, Vec>, Option>), String> { [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] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/tasks.rs:191:6 [INFO] [stdout] | [INFO] [stdout] 191 | ) -> Result<(Vec, bool, Vec>, Option>), String> { [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] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/tasks.rs:204:5 [INFO] [stdout] | [INFO] [stdout] 204 | / tasks [INFO] [stdout] 205 | | .into_iter() [INFO] [stdout] 206 | | .filter(|t| filter_open_task_cbk(&t, open)) [INFO] [stdout] 207 | | .map(|t| t.clone()) [INFO] [stdout] | |___________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 204 ~ tasks [INFO] [stdout] 205 + .into_iter() [INFO] [stdout] 206 + .filter(|t| filter_open_task_cbk(&t, open)).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/tasks.rs:205:10 [INFO] [stdout] | [INFO] [stdout] 205 | .into_iter() [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:206:42 [INFO] [stdout] | [INFO] [stdout] 206 | .filter(|t| filter_open_task_cbk(&t, open)) [INFO] [stdout] | ^^ help: change this to: `t` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/tasks.rs:212:5 [INFO] [stdout] | [INFO] [stdout] 212 | / tasks [INFO] [stdout] 213 | | .into_iter() [INFO] [stdout] 214 | | .filter(|t| filter_focused_task_cbk(&t, focused)) [INFO] [stdout] 215 | | .map(|t| t.clone()) [INFO] [stdout] | |___________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 212 ~ tasks [INFO] [stdout] 213 + .into_iter() [INFO] [stdout] 214 + .filter(|t| filter_focused_task_cbk(&t, focused)).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/tasks.rs:213:10 [INFO] [stdout] | [INFO] [stdout] 213 | .into_iter() [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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:214:45 [INFO] [stdout] | [INFO] [stdout] 214 | .filter(|t| filter_focused_task_cbk(&t, focused)) [INFO] [stdout] | ^^ help: change this to: `t` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/tasks.rs:220:5 [INFO] [stdout] | [INFO] [stdout] 220 | / tasks [INFO] [stdout] 221 | | .into_iter() [INFO] [stdout] 222 | | .filter(|t| filter_task_in_section_cbk(t, section)) [INFO] [stdout] 223 | | .map(|t| t.clone()) [INFO] [stdout] | |___________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 220 ~ tasks [INFO] [stdout] 221 + .into_iter() [INFO] [stdout] 222 + .filter(|t| filter_task_in_section_cbk(t, section)).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/tasks.rs:221:10 [INFO] [stdout] | [INFO] [stdout] 221 | .into_iter() [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] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/tasks.rs:251:5 [INFO] [stdout] | [INFO] [stdout] 251 | return s == "x"; [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] 251 - return s == "x"; [INFO] [stdout] 251 + s == "x" [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/tasks.rs:275:12 [INFO] [stdout] | [INFO] [stdout] 275 | if task.comment != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `task.comment.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `line_num` is used as a loop counter [INFO] [stdout] --> src/tasks.rs:334:5 [INFO] [stdout] | [INFO] [stdout] 334 | for line in s.lines() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using: `for (line_num, line) in (1..).zip(s.lines())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] = note: `#[warn(clippy::explicit_counter_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `line_num` is used as a loop counter [INFO] [stdout] --> src/tasks.rs:354:5 [INFO] [stdout] | [INFO] [stdout] 354 | for line in s.lines() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using: `for (line_num, line) in (1..).zip(s.lines())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/tasks.rs:391:17 [INFO] [stdout] | [INFO] [stdout] 391 | None => match partial_match { [INFO] [stdout] | _________________^ [INFO] [stdout] 392 | | None => None, [INFO] [stdout] 393 | | Some(section) => Some(section), [INFO] [stdout] 394 | | }, [INFO] [stdout] | |_________^ help: try: `partial_match.map(|section| section)` [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: this function has too many arguments (8/7) [INFO] [stdout] --> src/cmd_add.rs:16:1 [INFO] [stdout] | [INFO] [stdout] 16 | / pub fn cmd( [INFO] [stdout] 17 | | outputer: &mut dyn StringOutputer, [INFO] [stdout] 18 | | content_getter: &dyn ContentGetter, [INFO] [stdout] 19 | | content_setter: &mut dyn ContentSetter, [INFO] [stdout] ... | [INFO] [stdout] 24 | | pos: AddPosition, [INFO] [stdout] 25 | | ) -> Result<(), String> { [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: length comparison to zero [INFO] [stdout] --> src/cmd_add.rs:111:39 [INFO] [stdout] | [INFO] [stdout] 111 | let (line_num, task_num) = if tasks.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tasks.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stdout] --> src/cmd_add.rs:114:13 [INFO] [stdout] | [INFO] [stdout] 114 | / match &pos { [INFO] [stdout] 115 | | &AddPosition::Prepend => (tasks[0].line_num, 1), [INFO] [stdout] 116 | | &AddPosition::Append => ( [INFO] [stdout] 117 | | tasks[tasks.len() - 1].line_num + 1, [INFO] [stdout] 118 | | tasks[tasks.len() - 1].num + 1, [INFO] [stdout] 119 | | ), [INFO] [stdout] 120 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] = note: `#[warn(clippy::match_ref_pats)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 114 ~ match pos { [INFO] [stdout] 115 ~ AddPosition::Prepend => (tasks[0].line_num, 1), [INFO] [stdout] 116 ~ AddPosition::Append => ( [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/cmd_add.rs:131:5 [INFO] [stdout] | [INFO] [stdout] 131 | / match call_user_cmd_runner( [INFO] [stdout] 132 | | user_cmd_runner, [INFO] [stdout] 133 | | match pos { [INFO] [stdout] 134 | | AddPosition::Prepend => "PREPEND", [INFO] [stdout] ... | [INFO] [stdout] 140 | | Ok(_) => (), [INFO] [stdout] 141 | | }; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 131 ~ if let Err(e) = call_user_cmd_runner( [INFO] [stdout] 132 + user_cmd_runner, [INFO] [stdout] 133 + match pos { [INFO] [stdout] 134 + AddPosition::Prepend => "PREPEND", [INFO] [stdout] 135 + AddPosition::Append => "APPEND", [INFO] [stdout] 136 + }, [INFO] [stdout] 137 + &new_task, [INFO] [stdout] 138 ~ ) { return Err(e) }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/cmd_add.rs:160:15 [INFO] [stdout] | [INFO] [stdout] 160 | sections: &Vec>, [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] 160 - sections: &Vec>, [INFO] [stdout] 160 + sections: &[Rc
], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_add.rs:168:49 [INFO] [stdout] | [INFO] [stdout] 168 | let section_tasks = filter_tasks_in_section(&tasks, section); [INFO] [stdout] | ^^^^^^ help: change this to: `tasks` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` expression can be replaced with `?` [INFO] [stdout] --> src/cmd_add.rs:170:19 [INFO] [stdout] | [INFO] [stdout] 170 | let content = match content_getter.get_contents() { [INFO] [stdout] | ___________________^ [INFO] [stdout] 171 | | Err(e) => return Err(e), [INFO] [stdout] 172 | | Ok(content) => content, [INFO] [stdout] 173 | | }; [INFO] [stdout] | |_____^ help: try instead: `content_getter.get_contents()?` [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: length comparison to zero [INFO] [stdout] --> src/cmd_add.rs:180:8 [INFO] [stdout] | [INFO] [stdout] 180 | if section_tasks.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `section_tasks.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_add.rs:190:45 [INFO] [stdout] | [INFO] [stdout] 190 | filter_tasks_in_section(&tasks, sections[cur_section_num].as_ref()); [INFO] [stdout] | ^^^^^^ help: change this to: `tasks` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/cmd_add.rs:191:20 [INFO] [stdout] | [INFO] [stdout] 191 | if tasks_in_cur_section.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!tasks_in_cur_section.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern reimplements `Option::unwrap_or` [INFO] [stdout] --> src/cmd_add.rs:204:13 [INFO] [stdout] | [INFO] [stdout] 204 | / match found { [INFO] [stdout] 205 | | None => 1, [INFO] [stdout] 206 | | Some(n) => n, [INFO] [stdout] 207 | | } [INFO] [stdout] | |_____________^ help: replace with: `found.unwrap_or(1)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_check.rs:23:50 [INFO] [stdout] | [INFO] [stdout] 23 | task_formatter.display_numbered_task(&task, use_sections) [INFO] [stdout] | ^^^^^ help: change this to: `task` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_check.rs:29:50 [INFO] [stdout] | [INFO] [stdout] 29 | task_formatter.display_numbered_task(&task, use_sections) [INFO] [stdout] | ^^^^^ help: change this to: `task` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/cmd_current.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | / match get_current_task(content_getter, cycle) { [INFO] [stdout] 11 | | Ok(Some((task, use_sections))) => { [INFO] [stdout] 12 | | outputer.info(&task_formatter.display_numbered_task(&task, use_sections)) [INFO] [stdout] ... | [INFO] [stdout] 15 | | }; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 10 ~ if let Ok(Some((task, use_sections))) = get_current_task(content_getter, cycle) { [INFO] [stdout] 11 + outputer.info(&task_formatter.display_numbered_task(&task, use_sections)) [INFO] [stdout] 12 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/cmd_edit.rs:12:8 [INFO] [stdout] | [INFO] [stdout] 12 | if !res.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `res.is_err()` [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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_focus.rs:23:50 [INFO] [stdout] | [INFO] [stdout] 23 | task_formatter.display_numbered_task(&task, use_sections) [INFO] [stdout] | ^^^^^ help: change this to: `task` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_focus.rs:31:50 [INFO] [stdout] | [INFO] [stdout] 31 | task_formatter.display_numbered_task(&task, use_sections) [INFO] [stdout] | ^^^^^ help: change this to: `task` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_focus.rs:37:50 [INFO] [stdout] | [INFO] [stdout] 37 | task_formatter.display_numbered_task(&task, use_sections) [INFO] [stdout] | ^^^^^ help: change this to: `task` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/cmd_list.rs:14:53 [INFO] [stdout] | [INFO] [stdout] 14 | let filtered_tasks = if !all && use_sections && focused_section != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `focused_section.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be written as a `let` statement [INFO] [stdout] --> src/cmd_list.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 17 | / match filter_tasks_in_section(&open_tasks, focused_section_ref) { [INFO] [stdout] 18 | | ftasks => { [INFO] [stdout] 19 | | let nb_diff = open_tasks.len() - ftasks.len(); [INFO] [stdout] ... | [INFO] [stdout] 34 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] = note: `#[warn(clippy::match_single_binding)]` on by default [INFO] [stdout] help: consider using a `let` statement [INFO] [stdout] | [INFO] [stdout] 17 ~ let ftasks = filter_tasks_in_section(&open_tasks, focused_section_ref); [INFO] [stdout] 18 + { [INFO] [stdout] 19 + let nb_diff = open_tasks.len() - ftasks.len(); [INFO] [stdout] 20 + [INFO] [stdout] 21 + other_tasks_hint = if nb_diff > 0 { [INFO] [stdout] 22 + Some(format!( [INFO] [stdout] 23 + "\n{} other open task{} outside of \"{}\".", [INFO] [stdout] 24 + nb_diff, [INFO] [stdout] 25 + if nb_diff > 1 { "s" } else { "" }, [INFO] [stdout] 26 + focused_section_ref.plain_name, [INFO] [stdout] 27 + )) [INFO] [stdout] 28 + } else { [INFO] [stdout] 29 + None [INFO] [stdout] 30 + }; [INFO] [stdout] 31 + [INFO] [stdout] 32 + ftasks [INFO] [stdout] 33 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/cmd_prune.rs:13:8 [INFO] [stdout] | [INFO] [stdout] 13 | if tasks.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tasks.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/cmd_prune.rs:18:42 [INFO] [stdout] | [INFO] [stdout] 18 | let line_nums: Vec = (&tasks).into_iter().map(|t| t.line_num).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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_prune.rs:32:61 [INFO] [stdout] | [INFO] [stdout] 32 | outputer.info(&task_formatter.display_numbered_task(&task, use_sections)) [INFO] [stdout] | ^^^^^ help: change this to: `task` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:188:13 [INFO] [stdout] | [INFO] [stdout] 188 | / return match to_focus.parse::() { [INFO] [stdout] 189 | | Ok(rank_one_based) => cmd_focus::cmd( [INFO] [stdout] 190 | | outputer, [INFO] [stdout] 191 | | content_handler_ref, [INFO] [stdout] ... | [INFO] [stdout] 205 | | ), [INFO] [stdout] 206 | | }; [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] 188 ~ match to_focus.parse::() { [INFO] [stdout] 189 + Ok(rank_one_based) => cmd_focus::cmd( [INFO] [stdout] 190 + outputer, [INFO] [stdout] 191 + content_handler_ref, [INFO] [stdout] 192 + content_handler_mutref, [INFO] [stdout] 193 + user_cmd_runner, [INFO] [stdout] 194 + task_formatter, [INFO] [stdout] 195 + rank_one_based, [INFO] [stdout] 196 + true, [INFO] [stdout] 197 + ), [INFO] [stdout] 198 + Err(_) => cmd_focus_section::cmd( [INFO] [stdout] 199 + outputer, [INFO] [stdout] 200 + content_handler_ref, [INFO] [stdout] 201 + content_handler_mutref, [INFO] [stdout] 202 + user_cmd_runner, [INFO] [stdout] 203 + to_focus.to_string(), [INFO] [stdout] 204 + true, [INFO] [stdout] 205 + ), [INFO] [stdout] 206 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:211:13 [INFO] [stdout] | [INFO] [stdout] 211 | / return match to_focus.parse::() { [INFO] [stdout] 212 | | Ok(rank_one_based) => cmd_focus::cmd( [INFO] [stdout] 213 | | outputer, [INFO] [stdout] 214 | | content_handler_ref, [INFO] [stdout] ... | [INFO] [stdout] 228 | | ), [INFO] [stdout] 229 | | }; [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] 211 ~ match to_focus.parse::() { [INFO] [stdout] 212 + Ok(rank_one_based) => cmd_focus::cmd( [INFO] [stdout] 213 + outputer, [INFO] [stdout] 214 + content_handler_ref, [INFO] [stdout] 215 + content_handler_mutref, [INFO] [stdout] 216 + user_cmd_runner, [INFO] [stdout] 217 + task_formatter, [INFO] [stdout] 218 + rank_one_based, [INFO] [stdout] 219 + false, [INFO] [stdout] 220 + ), [INFO] [stdout] 221 + Err(_) => cmd_focus_section::cmd( [INFO] [stdout] 222 + outputer, [INFO] [stdout] 223 + content_handler_ref, [INFO] [stdout] 224 + content_handler_mutref, [INFO] [stdout] 225 + user_cmd_runner, [INFO] [stdout] 226 + to_focus.to_string(), [INFO] [stdout] 227 + false, [INFO] [stdout] 228 + ), [INFO] [stdout] 229 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/main.rs:279:13 [INFO] [stdout] | [INFO] [stdout] 279 | / match info.value_of_lossy("section") { [INFO] [stdout] 280 | | None => None, [INFO] [stdout] 281 | | Some(s) => Some(s.to_string()), [INFO] [stdout] 282 | | }, [INFO] [stdout] | |_____________^ help: try: `info.value_of_lossy("section").map(|s| s.to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/main.rs:293:13 [INFO] [stdout] | [INFO] [stdout] 293 | / match info.value_of_lossy("section") { [INFO] [stdout] 294 | | None => None, [INFO] [stdout] 295 | | Some(s) => Some(s.to_string()), [INFO] [stdout] 296 | | }, [INFO] [stdout] | |_____________^ help: try: `info.value_of_lossy("section").map(|s| s.to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/main.rs:299:18 [INFO] [stdout] | [INFO] [stdout] 299 | _ => Err(format!("Unknown command")), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Unknown command".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/services.rs:83:32 [INFO] [stdout] | [INFO] [stdout] 83 | fn info(&mut self, s: &str) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] = note: `#[warn(clippy::unused_unit)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `ok` [INFO] [stdout] --> src/services.rs:90:5 [INFO] [stdout] | [INFO] [stdout] 90 | / match env::var(name) { [INFO] [stdout] 91 | | Ok(v) => Some(v), [INFO] [stdout] 92 | | Err(_) => None, [INFO] [stdout] 93 | | } [INFO] [stdout] | |_____^ help: replace with: `env::var(name).ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_ok_err [INFO] [stdout] = note: `#[warn(clippy::manual_ok_err)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/services.rs:99:17 [INFO] [stdout] | [INFO] [stdout] 99 | None => return None, [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] 99 - None => return None, [INFO] [stdout] 99 + None => None, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/services.rs:214:17 [INFO] [stdout] | [INFO] [stdout] 214 | return Ok(Some(cmd_obj)); [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] 214 - return Ok(Some(cmd_obj)); [INFO] [stdout] 214 + Ok(Some(cmd_obj)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::filter` [INFO] [stdout] --> src/services.rs:232:5 [INFO] [stdout] | [INFO] [stdout] 232 | / match (get_env)(name) { [INFO] [stdout] 233 | | Some(v) => { [INFO] [stdout] 234 | | if v.trim().len() == 0 { [INFO] [stdout] 235 | | None [INFO] [stdout] ... | [INFO] [stdout] 240 | | None => None, [INFO] [stdout] 241 | | } [INFO] [stdout] | |_____^ help: try: `(get_env)(name).filter(|v| v.trim().len() != 0)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_filter [INFO] [stdout] = note: `#[warn(clippy::manual_filter)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/services.rs:234:16 [INFO] [stdout] | [INFO] [stdout] 234 | if v.trim().len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.trim().is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/tasks.rs:21:44 [INFO] [stdout] | [INFO] [stdout] 21 | let section_tasks = if use_sections && focused_section != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `focused_section.is_some()` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:24:52 [INFO] [stdout] | [INFO] [stdout] 24 | .filter(|t| filter_task_in_section_cbk(&t, focused_section.clone().unwrap().as_ref())) [INFO] [stdout] | ^^ help: change this to: `t` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/tasks.rs:32:8 [INFO] [stdout] | [INFO] [stdout] 32 | if focused_tasks.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!focused_tasks.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/tasks.rs:36:8 [INFO] [stdout] | [INFO] [stdout] 36 | if section_tasks.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `section_tasks.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/tasks.rs:60:6 [INFO] [stdout] | [INFO] [stdout] 60 | ) -> Result<(Vec, bool, Vec>, Option>), String> { [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: binary comparison to literal `Option::None` [INFO] [stdout] --> src/tasks.rs:84:53 [INFO] [stdout] | [INFO] [stdout] 84 | if section_rc.is_focused && focused_section == None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `focused_section.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] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/tasks.rs:162:41 [INFO] [stdout] | [INFO] [stdout] 162 | if section_rc.is_focused && focused_section == None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `focused_section.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] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/tasks.rs:177:6 [INFO] [stdout] | [INFO] [stdout] 177 | ) -> Result<(Vec, bool, Vec>, Option>), String> { [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] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/tasks.rs:191:6 [INFO] [stdout] | [INFO] [stdout] 191 | ) -> Result<(Vec, bool, Vec>, Option>), String> { [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] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/tasks.rs:204:5 [INFO] [stdout] | [INFO] [stdout] 204 | / tasks [INFO] [stdout] 205 | | .into_iter() [INFO] [stdout] 206 | | .filter(|t| filter_open_task_cbk(&t, open)) [INFO] [stdout] 207 | | .map(|t| t.clone()) [INFO] [stdout] | |___________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 204 ~ tasks [INFO] [stdout] 205 + .into_iter() [INFO] [stdout] 206 + .filter(|t| filter_open_task_cbk(&t, open)).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/tasks.rs:205:10 [INFO] [stdout] | [INFO] [stdout] 205 | .into_iter() [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:206:42 [INFO] [stdout] | [INFO] [stdout] 206 | .filter(|t| filter_open_task_cbk(&t, open)) [INFO] [stdout] | ^^ help: change this to: `t` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/tasks.rs:212:5 [INFO] [stdout] | [INFO] [stdout] 212 | / tasks [INFO] [stdout] 213 | | .into_iter() [INFO] [stdout] 214 | | .filter(|t| filter_focused_task_cbk(&t, focused)) [INFO] [stdout] 215 | | .map(|t| t.clone()) [INFO] [stdout] | |___________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 212 ~ tasks [INFO] [stdout] 213 + .into_iter() [INFO] [stdout] 214 + .filter(|t| filter_focused_task_cbk(&t, focused)).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/tasks.rs:213:10 [INFO] [stdout] | [INFO] [stdout] 213 | .into_iter() [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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:214:45 [INFO] [stdout] | [INFO] [stdout] 214 | .filter(|t| filter_focused_task_cbk(&t, focused)) [INFO] [stdout] | ^^ help: change this to: `t` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/tasks.rs:220:5 [INFO] [stdout] | [INFO] [stdout] 220 | / tasks [INFO] [stdout] 221 | | .into_iter() [INFO] [stdout] 222 | | .filter(|t| filter_task_in_section_cbk(t, section)) [INFO] [stdout] 223 | | .map(|t| t.clone()) [INFO] [stdout] | |___________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 220 ~ tasks [INFO] [stdout] 221 + .into_iter() [INFO] [stdout] 222 + .filter(|t| filter_task_in_section_cbk(t, section)).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/tasks.rs:221:10 [INFO] [stdout] | [INFO] [stdout] 221 | .into_iter() [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] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/tasks.rs:251:5 [INFO] [stdout] | [INFO] [stdout] 251 | return s == "x"; [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] 251 - return s == "x"; [INFO] [stdout] 251 + s == "x" [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/tasks.rs:275:12 [INFO] [stdout] | [INFO] [stdout] 275 | if task.comment != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `task.comment.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `line_num` is used as a loop counter [INFO] [stdout] --> src/tasks.rs:334:5 [INFO] [stdout] | [INFO] [stdout] 334 | for line in s.lines() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using: `for (line_num, line) in (1..).zip(s.lines())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] = note: `#[warn(clippy::explicit_counter_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `line_num` is used as a loop counter [INFO] [stdout] --> src/tasks.rs:354:5 [INFO] [stdout] | [INFO] [stdout] 354 | for line in s.lines() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using: `for (line_num, line) in (1..).zip(s.lines())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/tasks.rs:391:17 [INFO] [stdout] | [INFO] [stdout] 391 | None => match partial_match { [INFO] [stdout] | _________________^ [INFO] [stdout] 392 | | None => None, [INFO] [stdout] 393 | | Some(section) => Some(section), [INFO] [stdout] 394 | | }, [INFO] [stdout] | |_________^ help: try: `partial_match.map(|section| section)` [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: the variable `i` is used as a loop counter [INFO] [stdout] --> src/tasks.rs:411:9 [INFO] [stdout] | [INFO] [stdout] 411 | for task in tasks { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: consider using: `for (i, task) in tasks.into_iter().enumerate()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/tasks.rs:419:9 [INFO] [stdout] | [INFO] [stdout] 419 | assert_eq!(text_is_check_symbol(""), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_assert_comparison)]` on by default [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 419 - assert_eq!(text_is_check_symbol(""), false); [INFO] [stdout] 419 + assert!(!text_is_check_symbol("")); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/tasks.rs:420:9 [INFO] [stdout] | [INFO] [stdout] 420 | assert_eq!(text_is_check_symbol("*"), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 420 - assert_eq!(text_is_check_symbol("*"), false); [INFO] [stdout] 420 + assert!(!text_is_check_symbol("*")); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/tasks.rs:421:9 [INFO] [stdout] | [INFO] [stdout] 421 | assert_eq!(text_is_check_symbol("x"), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 421 - assert_eq!(text_is_check_symbol("x"), true); [INFO] [stdout] 421 + assert!(text_is_check_symbol("x")); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/tasks.rs:422:9 [INFO] [stdout] | [INFO] [stdout] 422 | assert_eq!(text_is_check_symbol("X"), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 422 - assert_eq!(text_is_check_symbol("X"), false); [INFO] [stdout] 422 + assert!(!text_is_check_symbol("X")); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be written as a `let` statement [INFO] [stdout] --> src/tasks.rs:486:9 [INFO] [stdout] | [INFO] [stdout] 486 | / match text_add_line_in_str("", 1, "Hello, World!") { [INFO] [stdout] 487 | | s => assert_eq!(s, "Hello, World!\n"), [INFO] [stdout] 488 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] = note: `#[warn(clippy::match_single_binding)]` on by default [INFO] [stdout] help: consider using a `let` statement [INFO] [stdout] | [INFO] [stdout] 486 ~ let s = text_add_line_in_str("", 1, "Hello, World!"); [INFO] [stdout] 487 + assert_eq!(s, "Hello, World!\n"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be written as a `let` statement [INFO] [stdout] --> src/tasks.rs:490:9 [INFO] [stdout] | [INFO] [stdout] 490 | / match text_add_line_in_str("first line", 1, "Hello, World!") { [INFO] [stdout] 491 | | s => assert_eq!(s, "Hello, World!\nfirst line\n"), [INFO] [stdout] 492 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] help: consider using a `let` statement [INFO] [stdout] | [INFO] [stdout] 490 ~ let s = text_add_line_in_str("first line", 1, "Hello, World!"); [INFO] [stdout] 491 + assert_eq!(s, "Hello, World!\nfirst line\n"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be written as a `let` statement [INFO] [stdout] --> src/tasks.rs:494:9 [INFO] [stdout] | [INFO] [stdout] 494 | / match text_add_line_in_str("first line", 2, "Hello, World!") { [INFO] [stdout] 495 | | s => assert_eq!(s, "first line\nHello, World!\n"), [INFO] [stdout] 496 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] help: consider using a `let` statement [INFO] [stdout] | [INFO] [stdout] 494 ~ let s = text_add_line_in_str("first line", 2, "Hello, World!"); [INFO] [stdout] 495 + assert_eq!(s, "first line\nHello, World!\n"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be written as a `let` statement [INFO] [stdout] --> src/tasks.rs:498:9 [INFO] [stdout] | [INFO] [stdout] 498 | / match text_add_line_in_str("first line\nlast line", 2, "Hello, World!") { [INFO] [stdout] 499 | | s => assert_eq!(s, "first line\nHello, World!\nlast line\n"), [INFO] [stdout] 500 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] help: consider using a `let` statement [INFO] [stdout] | [INFO] [stdout] 498 ~ let s = text_add_line_in_str("first line\nlast line", 2, "Hello, World!"); [INFO] [stdout] 499 + assert_eq!(s, "first line\nHello, World!\nlast line\n"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be written as a `let` statement [INFO] [stdout] --> src/tasks.rs:502:9 [INFO] [stdout] | [INFO] [stdout] 502 | / match text_add_line_in_str("# Header\n\n- [ ] Do the stuff", 3, "Hello, World!") { [INFO] [stdout] 503 | | s => assert_eq!(s, "# Header\n\nHello, World!\n- [ ] Do the stuff\n"), [INFO] [stdout] 504 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] help: consider using a `let` statement [INFO] [stdout] | [INFO] [stdout] 502 ~ let s = text_add_line_in_str("# Header\n\n- [ ] Do the stuff", 3, "Hello, World!"); [INFO] [stdout] 503 + assert_eq!(s, "# Header\n\nHello, World!\n- [ ] Do the stuff\n") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/test_helpers.rs:8:9 [INFO] [stdout] | [INFO] [stdout] 8 | return None; [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] 8 - return None; [INFO] [stdout] 8 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/test_helpers.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 13 | return Some(std::path::PathBuf::from("/home/guybrush")); [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] 13 - return Some(std::path::PathBuf::from("/home/guybrush")); [INFO] [stdout] 13 + Some(std::path::PathBuf::from("/home/guybrush")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/test_helpers.rs:33:13 [INFO] [stdout] | [INFO] [stdout] 33 | return ContentGetterMock { outcome: outcome }; [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] 33 - return ContentGetterMock { outcome: outcome }; [INFO] [stdout] 33 + ContentGetterMock { outcome: outcome } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/test_helpers.rs:52:13 [INFO] [stdout] | [INFO] [stdout] 52 | / return ContentSetterMock { [INFO] [stdout] 53 | | content: None, [INFO] [stdout] 54 | | outcome: outcome, [INFO] [stdout] 55 | | }; [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] 52 ~ ContentSetterMock { [INFO] [stdout] 53 + content: None, [INFO] [stdout] 54 + outcome: outcome, [INFO] [stdout] 55 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/test_helpers.rs:62:13 [INFO] [stdout] | [INFO] [stdout] 62 | return self.outcome.clone(); [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] 62 - return self.outcome.clone(); [INFO] [stdout] 62 + self.outcome.clone() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/test_helpers.rs:75:13 [INFO] [stdout] | [INFO] [stdout] 75 | return StringOutputerMock { info_buf: vec![] }; [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] 75 - return StringOutputerMock { info_buf: vec![] }; [INFO] [stdout] 75 + StringOutputerMock { info_buf: vec![] } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/test_helpers.rs:83:36 [INFO] [stdout] | [INFO] [stdout] 83 | fn info(&mut self, s: &str) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/test_helpers.rs:84:32 [INFO] [stdout] | [INFO] [stdout] 84 | self.info_buf.push(String::from(format!("{}\n", s))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `format!("{}\n", s)` [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 function has too many arguments (8/7) [INFO] [stdout] --> src/cmd_add.rs:16:1 [INFO] [stdout] | [INFO] [stdout] 16 | / pub fn cmd( [INFO] [stdout] 17 | | outputer: &mut dyn StringOutputer, [INFO] [stdout] 18 | | content_getter: &dyn ContentGetter, [INFO] [stdout] 19 | | content_setter: &mut dyn ContentSetter, [INFO] [stdout] ... | [INFO] [stdout] 24 | | pos: AddPosition, [INFO] [stdout] 25 | | ) -> Result<(), String> { [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: length comparison to zero [INFO] [stdout] --> src/cmd_add.rs:111:39 [INFO] [stdout] | [INFO] [stdout] 111 | let (line_num, task_num) = if tasks.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tasks.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stdout] --> src/cmd_add.rs:114:13 [INFO] [stdout] | [INFO] [stdout] 114 | / match &pos { [INFO] [stdout] 115 | | &AddPosition::Prepend => (tasks[0].line_num, 1), [INFO] [stdout] 116 | | &AddPosition::Append => ( [INFO] [stdout] 117 | | tasks[tasks.len() - 1].line_num + 1, [INFO] [stdout] 118 | | tasks[tasks.len() - 1].num + 1, [INFO] [stdout] 119 | | ), [INFO] [stdout] 120 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] = note: `#[warn(clippy::match_ref_pats)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 114 ~ match pos { [INFO] [stdout] 115 ~ AddPosition::Prepend => (tasks[0].line_num, 1), [INFO] [stdout] 116 ~ AddPosition::Append => ( [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/cmd_add.rs:131:5 [INFO] [stdout] | [INFO] [stdout] 131 | / match call_user_cmd_runner( [INFO] [stdout] 132 | | user_cmd_runner, [INFO] [stdout] 133 | | match pos { [INFO] [stdout] 134 | | AddPosition::Prepend => "PREPEND", [INFO] [stdout] ... | [INFO] [stdout] 140 | | Ok(_) => (), [INFO] [stdout] 141 | | }; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 131 ~ if let Err(e) = call_user_cmd_runner( [INFO] [stdout] 132 + user_cmd_runner, [INFO] [stdout] 133 + match pos { [INFO] [stdout] 134 + AddPosition::Prepend => "PREPEND", [INFO] [stdout] 135 + AddPosition::Append => "APPEND", [INFO] [stdout] 136 + }, [INFO] [stdout] 137 + &new_task, [INFO] [stdout] 138 ~ ) { return Err(e) }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/cmd_add.rs:160:15 [INFO] [stdout] | [INFO] [stdout] 160 | sections: &Vec>, [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] 160 - sections: &Vec>, [INFO] [stdout] 160 + sections: &[Rc
], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_add.rs:168:49 [INFO] [stdout] | [INFO] [stdout] 168 | let section_tasks = filter_tasks_in_section(&tasks, section); [INFO] [stdout] | ^^^^^^ help: change this to: `tasks` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` expression can be replaced with `?` [INFO] [stdout] --> src/cmd_add.rs:170:19 [INFO] [stdout] | [INFO] [stdout] 170 | let content = match content_getter.get_contents() { [INFO] [stdout] | ___________________^ [INFO] [stdout] 171 | | Err(e) => return Err(e), [INFO] [stdout] 172 | | Ok(content) => content, [INFO] [stdout] 173 | | }; [INFO] [stdout] | |_____^ help: try instead: `content_getter.get_contents()?` [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: length comparison to zero [INFO] [stdout] --> src/cmd_add.rs:180:8 [INFO] [stdout] | [INFO] [stdout] 180 | if section_tasks.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `section_tasks.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_add.rs:190:45 [INFO] [stdout] | [INFO] [stdout] 190 | filter_tasks_in_section(&tasks, sections[cur_section_num].as_ref()); [INFO] [stdout] | ^^^^^^ help: change this to: `tasks` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/cmd_add.rs:191:20 [INFO] [stdout] | [INFO] [stdout] 191 | if tasks_in_cur_section.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!tasks_in_cur_section.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern reimplements `Option::unwrap_or` [INFO] [stdout] --> src/cmd_add.rs:204:13 [INFO] [stdout] | [INFO] [stdout] 204 | / match found { [INFO] [stdout] 205 | | None => 1, [INFO] [stdout] 206 | | Some(n) => n, [INFO] [stdout] 207 | | } [INFO] [stdout] | |_____________^ help: replace with: `found.unwrap_or(1)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_check.rs:23:50 [INFO] [stdout] | [INFO] [stdout] 23 | task_formatter.display_numbered_task(&task, use_sections) [INFO] [stdout] | ^^^^^ help: change this to: `task` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_check.rs:29:50 [INFO] [stdout] | [INFO] [stdout] 29 | task_formatter.display_numbered_task(&task, use_sections) [INFO] [stdout] | ^^^^^ help: change this to: `task` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/cmd_current.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | / match get_current_task(content_getter, cycle) { [INFO] [stdout] 11 | | Ok(Some((task, use_sections))) => { [INFO] [stdout] 12 | | outputer.info(&task_formatter.display_numbered_task(&task, use_sections)) [INFO] [stdout] ... | [INFO] [stdout] 15 | | }; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 10 ~ if let Ok(Some((task, use_sections))) = get_current_task(content_getter, cycle) { [INFO] [stdout] 11 + outputer.info(&task_formatter.display_numbered_task(&task, use_sections)) [INFO] [stdout] 12 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_current.rs:35:53 [INFO] [stdout] | [INFO] [stdout] 35 | cmd(outputer_mock, content_getter_mock, &task_formatter, false).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `task_formatter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_current.rs:45:53 [INFO] [stdout] | [INFO] [stdout] 45 | cmd(outputer_mock, content_getter_mock, &task_formatter, false).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `task_formatter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/cmd_edit.rs:12:8 [INFO] [stdout] | [INFO] [stdout] 12 | if !res.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `res.is_err()` [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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_focus.rs:23:50 [INFO] [stdout] | [INFO] [stdout] 23 | task_formatter.display_numbered_task(&task, use_sections) [INFO] [stdout] | ^^^^^ help: change this to: `task` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_focus.rs:31:50 [INFO] [stdout] | [INFO] [stdout] 31 | task_formatter.display_numbered_task(&task, use_sections) [INFO] [stdout] | ^^^^^ help: change this to: `task` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_focus.rs:37:50 [INFO] [stdout] | [INFO] [stdout] 37 | task_formatter.display_numbered_task(&task, use_sections) [INFO] [stdout] | ^^^^^ help: change this to: `task` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/cmd_list.rs:14:53 [INFO] [stdout] | [INFO] [stdout] 14 | let filtered_tasks = if !all && use_sections && focused_section != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `focused_section.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be written as a `let` statement [INFO] [stdout] --> src/cmd_list.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 17 | / match filter_tasks_in_section(&open_tasks, focused_section_ref) { [INFO] [stdout] 18 | | ftasks => { [INFO] [stdout] 19 | | let nb_diff = open_tasks.len() - ftasks.len(); [INFO] [stdout] ... | [INFO] [stdout] 34 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] help: consider using a `let` statement [INFO] [stdout] | [INFO] [stdout] 17 ~ let ftasks = filter_tasks_in_section(&open_tasks, focused_section_ref); [INFO] [stdout] 18 + { [INFO] [stdout] 19 + let nb_diff = open_tasks.len() - ftasks.len(); [INFO] [stdout] 20 + [INFO] [stdout] 21 + other_tasks_hint = if nb_diff > 0 { [INFO] [stdout] 22 + Some(format!( [INFO] [stdout] 23 + "\n{} other open task{} outside of \"{}\".", [INFO] [stdout] 24 + nb_diff, [INFO] [stdout] 25 + if nb_diff > 1 { "s" } else { "" }, [INFO] [stdout] 26 + focused_section_ref.plain_name, [INFO] [stdout] 27 + )) [INFO] [stdout] 28 + } else { [INFO] [stdout] 29 + None [INFO] [stdout] 30 + }; [INFO] [stdout] 31 + [INFO] [stdout] 32 + ftasks [INFO] [stdout] 33 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/cmd_prune.rs:13:8 [INFO] [stdout] | [INFO] [stdout] 13 | if tasks.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tasks.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/cmd_prune.rs:18:42 [INFO] [stdout] | [INFO] [stdout] 18 | let line_nums: Vec = (&tasks).into_iter().map(|t| t.line_num).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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cmd_prune.rs:32:61 [INFO] [stdout] | [INFO] [stdout] 32 | outputer.info(&task_formatter.display_numbered_task(&task, use_sections)) [INFO] [stdout] | ^^^^^ help: change this to: `task` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:188:13 [INFO] [stdout] | [INFO] [stdout] 188 | / return match to_focus.parse::() { [INFO] [stdout] 189 | | Ok(rank_one_based) => cmd_focus::cmd( [INFO] [stdout] 190 | | outputer, [INFO] [stdout] 191 | | content_handler_ref, [INFO] [stdout] ... | [INFO] [stdout] 205 | | ), [INFO] [stdout] 206 | | }; [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] 188 ~ match to_focus.parse::() { [INFO] [stdout] 189 + Ok(rank_one_based) => cmd_focus::cmd( [INFO] [stdout] 190 + outputer, [INFO] [stdout] 191 + content_handler_ref, [INFO] [stdout] 192 + content_handler_mutref, [INFO] [stdout] 193 + user_cmd_runner, [INFO] [stdout] 194 + task_formatter, [INFO] [stdout] 195 + rank_one_based, [INFO] [stdout] 196 + true, [INFO] [stdout] 197 + ), [INFO] [stdout] 198 + Err(_) => cmd_focus_section::cmd( [INFO] [stdout] 199 + outputer, [INFO] [stdout] 200 + content_handler_ref, [INFO] [stdout] 201 + content_handler_mutref, [INFO] [stdout] 202 + user_cmd_runner, [INFO] [stdout] 203 + to_focus.to_string(), [INFO] [stdout] 204 + true, [INFO] [stdout] 205 + ), [INFO] [stdout] 206 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:211:13 [INFO] [stdout] | [INFO] [stdout] 211 | / return match to_focus.parse::() { [INFO] [stdout] 212 | | Ok(rank_one_based) => cmd_focus::cmd( [INFO] [stdout] 213 | | outputer, [INFO] [stdout] 214 | | content_handler_ref, [INFO] [stdout] ... | [INFO] [stdout] 228 | | ), [INFO] [stdout] 229 | | }; [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] 211 ~ match to_focus.parse::() { [INFO] [stdout] 212 + Ok(rank_one_based) => cmd_focus::cmd( [INFO] [stdout] 213 + outputer, [INFO] [stdout] 214 + content_handler_ref, [INFO] [stdout] 215 + content_handler_mutref, [INFO] [stdout] 216 + user_cmd_runner, [INFO] [stdout] 217 + task_formatter, [INFO] [stdout] 218 + rank_one_based, [INFO] [stdout] 219 + false, [INFO] [stdout] 220 + ), [INFO] [stdout] 221 + Err(_) => cmd_focus_section::cmd( [INFO] [stdout] 222 + outputer, [INFO] [stdout] 223 + content_handler_ref, [INFO] [stdout] 224 + content_handler_mutref, [INFO] [stdout] 225 + user_cmd_runner, [INFO] [stdout] 226 + to_focus.to_string(), [INFO] [stdout] 227 + false, [INFO] [stdout] 228 + ), [INFO] [stdout] 229 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/main.rs:279:13 [INFO] [stdout] | [INFO] [stdout] 279 | / match info.value_of_lossy("section") { [INFO] [stdout] 280 | | None => None, [INFO] [stdout] 281 | | Some(s) => Some(s.to_string()), [INFO] [stdout] 282 | | }, [INFO] [stdout] | |_____________^ help: try: `info.value_of_lossy("section").map(|s| s.to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/main.rs:293:13 [INFO] [stdout] | [INFO] [stdout] 293 | / match info.value_of_lossy("section") { [INFO] [stdout] 294 | | None => None, [INFO] [stdout] 295 | | Some(s) => Some(s.to_string()), [INFO] [stdout] 296 | | }, [INFO] [stdout] | |_____________^ help: try: `info.value_of_lossy("section").map(|s| s.to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/main.rs:299:18 [INFO] [stdout] | [INFO] [stdout] 299 | _ => Err(format!("Unknown command")), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Unknown command".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/test_helpers.rs:122:13 [INFO] [stdout] | [INFO] [stdout] 122 | / vec![ [INFO] [stdout] 123 | | String::from("Not a task"), [INFO] [stdout] 124 | | String::from("- [ ] Standard unchecked"), [INFO] [stdout] 125 | | String::from("- [ ] **Standard unchecked focused**"), [INFO] [stdout] ... | [INFO] [stdout] 130 | | String::from("- [ ] **Standard unchecked focused** // with comments"), [INFO] [stdout] 131 | | ] [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] help: you can use an array directly [INFO] [stdout] | [INFO] [stdout] 122 ~ [String::from("Not a task"), [INFO] [stdout] 123 + String::from("- [ ] Standard unchecked"), [INFO] [stdout] 124 + String::from("- [ ] **Standard unchecked focused**"), [INFO] [stdout] 125 + String::from("Also not a task"), [INFO] [stdout] 126 + String::from("- [x] Checked"), [INFO] [stdout] 127 + String::from("- [x] **Focused checked**"), [INFO] [stdout] 128 + String::from("- [ ] Standard unchecked // with comments"), [INFO] [stdout] 129 + String::from("- [ ] **Standard unchecked focused** // with comments")] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/test_helpers.rs:206:13 [INFO] [stdout] | [INFO] [stdout] 206 | / vec![ [INFO] [stdout] 207 | | String::from("- [ ] Standard unchecked"), [INFO] [stdout] 208 | | String::from("- [ ] **Standard unchecked focused**"), [INFO] [stdout] 209 | | String::from("- [x] Checked"), [INFO] [stdout] ... | [INFO] [stdout] 212 | | String::from("- [ ] **Standard unchecked focused** // with comments"), [INFO] [stdout] 213 | | ] [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] help: you can use an array directly [INFO] [stdout] | [INFO] [stdout] 206 ~ [String::from("- [ ] Standard unchecked"), [INFO] [stdout] 207 + String::from("- [ ] **Standard unchecked focused**"), [INFO] [stdout] 208 + String::from("- [x] Checked"), [INFO] [stdout] 209 + String::from("- [x] **Focused checked**"), [INFO] [stdout] 210 + String::from("- [ ] Standard unchecked // with comments"), [INFO] [stdout] 211 + String::from("- [ ] **Standard unchecked focused** // with comments")] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/cmd_add.rs:332:56 [INFO] [stdout] | [INFO] [stdout] 332 | let content_getter = ContentGetterMock::new(Ok(vec![ [INFO] [stdout] | ________________________________________________________^ [INFO] [stdout] 333 | | "# Section".to_string(), [INFO] [stdout] 334 | | "".to_string(), [INFO] [stdout] 335 | | "- [ ] Existing task".to_string(), [INFO] [stdout] 336 | | ] [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] help: you can use an array directly [INFO] [stdout] | [INFO] [stdout] 332 ~ let content_getter = ContentGetterMock::new(Ok(["# Section".to_string(), [INFO] [stdout] 333 + "".to_string(), [INFO] [stdout] 334 + "- [ ] Existing task".to_string()] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/cmd_add.rs:365:56 [INFO] [stdout] | [INFO] [stdout] 365 | let content_getter = ContentGetterMock::new(Ok(vec![ [INFO] [stdout] | ________________________________________________________^ [INFO] [stdout] 366 | | "# Section".to_string(), [INFO] [stdout] 367 | | "".to_string(), [INFO] [stdout] 368 | | "- [ ] Existing task".to_string(), [INFO] [stdout] 369 | | ] [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] help: you can use an array directly [INFO] [stdout] | [INFO] [stdout] 365 ~ let content_getter = ContentGetterMock::new(Ok(["# Section".to_string(), [INFO] [stdout] 366 + "".to_string(), [INFO] [stdout] 367 + "- [ ] Existing task".to_string()] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: call to `.clone()` on a reference in this situation does nothing [INFO] [stdout] --> src/tasks.rs:412:32 [INFO] [stdout] | [INFO] [stdout] 412 | assert_eq!(lines[i].clone(), task_to_markdown(&task)); [INFO] [stdout] | ^^^^^^^^ help: remove this redundant call [INFO] [stdout] | [INFO] [stdout] = note: the type `str` does not implement `Clone`, so calling `clone` on `&str` copies the reference, which does not do anything and can be removed [INFO] [stdout] = note: `#[warn(noop_method_call)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/tasks.rs:430:30 [INFO] [stdout] | [INFO] [stdout] 430 | Err(e) => panic!(e), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(non_fmt_panics)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 430 | Err(e) => panic!("{}", e), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/tasks.rs:438:30 [INFO] [stdout] | [INFO] [stdout] 438 | Err(e) => panic!(e), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 438 | Err(e) => panic!("{}", e), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/tasks.rs:447:30 [INFO] [stdout] | [INFO] [stdout] 447 | Err(e) => panic!(e), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 447 | Err(e) => panic!("{}", e), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/tasks.rs:463:30 [INFO] [stdout] | [INFO] [stdout] 463 | Err(e) => panic!(e), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 463 | Err(e) => panic!("{}", e), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/tasks.rs:472:30 [INFO] [stdout] | [INFO] [stdout] 472 | Err(e) => panic!(e), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 472 | Err(e) => panic!("{}", e), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/tasks.rs:480:30 [INFO] [stdout] | [INFO] [stdout] 480 | Err(e) => panic!(e), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 480 | Err(e) => panic!("{}", e), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/cmd_add.rs:273:30 [INFO] [stdout] | [INFO] [stdout] 273 | Err(e) => panic!(e), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 273 | Err(e) => panic!("{}", e), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/cmd_add.rs:299:30 [INFO] [stdout] | [INFO] [stdout] 299 | Err(e) => panic!(e), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 299 | Err(e) => panic!("{}", e), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/cmd_add.rs:325:30 [INFO] [stdout] | [INFO] [stdout] 325 | Err(e) => panic!(e), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 325 | Err(e) => panic!("{}", e), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/cmd_add.rs:358:30 [INFO] [stdout] | [INFO] [stdout] 358 | Err(e) => panic!(e), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 358 | Err(e) => panic!("{}", e), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/cmd_add.rs:391:30 [INFO] [stdout] | [INFO] [stdout] 391 | Err(e) => panic!(e), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 391 | Err(e) => panic!("{}", e), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 7.20s [INFO] running `Command { std: "docker" "inspect" "999121570e5a2b5d763d71c04a30217b9cbc67de6136a22bb15e28f8c6e0b896", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "999121570e5a2b5d763d71c04a30217b9cbc67de6136a22bb15e28f8c6e0b896", kill_on_drop: false }` [INFO] [stdout] 999121570e5a2b5d763d71c04a30217b9cbc67de6136a22bb15e28f8c6e0b896