[INFO] updating cached repository boustrophedon/taskerizer-prototype [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/boustrophedon/taskerizer-prototype [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/boustrophedon/taskerizer-prototype" "work/ex/clippy-test-run/sources/stable/gh/boustrophedon/taskerizer-prototype"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/boustrophedon/taskerizer-prototype'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/boustrophedon/taskerizer-prototype" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/boustrophedon/taskerizer-prototype"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/boustrophedon/taskerizer-prototype'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] c5368bbb7ab028f1620d0bb9af370f78128fa881 [INFO] sha for GitHub repo boustrophedon/taskerizer-prototype: c5368bbb7ab028f1620d0bb9af370f78128fa881 [INFO] validating manifest of boustrophedon/taskerizer-prototype on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of boustrophedon/taskerizer-prototype on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing boustrophedon/taskerizer-prototype [INFO] finished frobbing boustrophedon/taskerizer-prototype [INFO] frobbed toml for boustrophedon/taskerizer-prototype written to work/ex/clippy-test-run/sources/stable/gh/boustrophedon/taskerizer-prototype/Cargo.toml [INFO] started frobbing boustrophedon/taskerizer-prototype [INFO] finished frobbing boustrophedon/taskerizer-prototype [INFO] frobbed toml for boustrophedon/taskerizer-prototype written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/boustrophedon/taskerizer-prototype/Cargo.toml [INFO] crate boustrophedon/taskerizer-prototype has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting boustrophedon/taskerizer-prototype against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/boustrophedon/taskerizer-prototype:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 4ffff4dd6efb6ec2a3fe4e5b9c05405f5e0bc475f52c451f3fc19bad0df87566 [INFO] running `"docker" "start" "-a" "4ffff4dd6efb6ec2a3fe4e5b9c05405f5e0bc475f52c451f3fc19bad0df87566"` [INFO] [stderr] Checking byteorder v1.2.4 [INFO] [stderr] Compiling libsqlite3-sys v0.9.3 [INFO] [stderr] Checking rand v0.5.5 [INFO] [stderr] Checking wait-timeout v0.1.5 [INFO] [stderr] Checking num-integer v0.1.39 [INFO] [stderr] Checking chrono v0.4.5 [INFO] [stderr] Checking tempfile v3.0.3 [INFO] [stderr] Checking rusty-fork v0.2.0 [INFO] [stderr] Checking proptest v0.8.4 [INFO] [stderr] Checking rusqlite v0.14.0 [INFO] [stderr] Checking taskerizer-prototype v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/task/mod.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | task: task, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `task` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/task/mod.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | priority: priority, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `priority` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/task/mod.rs:29:13 [INFO] [stderr] | [INFO] [stderr] 29 | reward: reward [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `reward` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/db/backend.rs:71:17 [INFO] [stderr] | [INFO] [stderr] 71 | version: version, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `version` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/db/backend.rs:72:17 [INFO] [stderr] | [INFO] [stderr] 72 | date_created: date_created, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `date_created` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/task/mod.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | task: task, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `task` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/task/mod.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | priority: priority, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `priority` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/task/mod.rs:29:13 [INFO] [stderr] | [INFO] [stderr] 29 | reward: reward [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `reward` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/db/backend.rs:71:17 [INFO] [stderr] | [INFO] [stderr] 71 | version: version, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `version` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/db/backend.rs:72:17 [INFO] [stderr] | [INFO] [stderr] 72 | date_created: date_created, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `date_created` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/commands/mod.rs:89:9 [INFO] [stderr] | [INFO] [stderr] 89 | return self.run(&mut db, (task_p, category_p, break_cutoff)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.run(&mut db, (task_p, category_p, break_cutoff))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/commands/mod.rs:107:9 [INFO] [stderr] | [INFO] [stderr] 107 | return output; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `output` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/commands/add.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | return Ok(s); [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(s)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/commands/add.rs:33:5 [INFO] [stderr] | [INFO] [stderr] 33 | return Ok(p); [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(p)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/config.rs:18:9 [INFO] [stderr] | [INFO] [stderr] 18 | / return SqliteBackend::open(&self.db_path) [INFO] [stderr] 19 | | .map_err(|e| format_err!("Could not acquire database connection. {}", e)); [INFO] [stderr] | |______________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 18 | SqliteBackend::open(&self.db_path) [INFO] [stderr] 19 | .map_err(|e| format_err!("Could not acquire database connection. {}", e)) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/db/backend.rs:97:9 [INFO] [stderr] | [INFO] [stderr] 97 | return Ok(all_tasks); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(all_tasks)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/db/backend.rs:211:5 [INFO] [stderr] | [INFO] [stderr] 211 | return tasks[len-1].0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `tasks[len-1].0` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/db/transaction/mod.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | return Ok(None); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/db/transaction/mod.rs:189:9 [INFO] [stderr] | [INFO] [stderr] 189 | return Ok(()); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/commands/mod.rs:89:9 [INFO] [stderr] | [INFO] [stderr] 89 | return self.run(&mut db, (task_p, category_p, break_cutoff)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.run(&mut db, (task_p, category_p, break_cutoff))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/commands/mod.rs:107:9 [INFO] [stderr] | [INFO] [stderr] 107 | return output; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `output` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/commands/add.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | return Ok(s); [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(s)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/commands/add.rs:33:5 [INFO] [stderr] | [INFO] [stderr] 33 | return Ok(p); [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(p)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/config.rs:18:9 [INFO] [stderr] | [INFO] [stderr] 18 | / return SqliteBackend::open(&self.db_path) [INFO] [stderr] 19 | | .map_err(|e| format_err!("Could not acquire database connection. {}", e)); [INFO] [stderr] | |______________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 18 | SqliteBackend::open(&self.db_path) [INFO] [stderr] 19 | .map_err(|e| format_err!("Could not acquire database connection. {}", e)) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/db/backend.rs:97:9 [INFO] [stderr] | [INFO] [stderr] 97 | return Ok(all_tasks); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(all_tasks)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/db/backend.rs:211:5 [INFO] [stderr] | [INFO] [stderr] 211 | return tasks[len-1].0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `tasks[len-1].0` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/db/transaction/mod.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | return Ok(None); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/db/transaction/mod.rs:189:9 [INFO] [stderr] | [INFO] [stderr] 189 | return Ok(()); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/commands/add.rs:21:8 [INFO] [stderr] | [INFO] [stderr] 21 | if s.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `s.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/commands/current.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | / match task.is_break() { [INFO] [stderr] 17 | | true => "Break", [INFO] [stderr] 18 | | false => "Task", [INFO] [stderr] 19 | | }.to_string() [INFO] [stderr] | |_____^ help: consider using an if/else expression: `if task.is_break() { "Break" } else { "Task" }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/task/mod.rs:16:12 [INFO] [stderr] | [INFO] [stderr] 16 | if task.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `task.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/task/mod.rs:22:26 [INFO] [stderr] | [INFO] [stderr] 22 | if task.contains("\x00") { [INFO] [stderr] | ^^^^^^ help: try using a char instead: `'\x00'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/task/mod.rs:49:9 [INFO] [stderr] | [INFO] [stderr] 49 | / match self.reward { [INFO] [stderr] 50 | | true => "Break", [INFO] [stderr] 51 | | false => "Task", [INFO] [stderr] 52 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.reward { "Break" } else { "Task" }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/db/mod.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | / fn transaction<'conn>(&'conn mut self) -> Result { [INFO] [stderr] 22 | | let tx = self.connection.transaction() [INFO] [stderr] 23 | | .map_err(|e| format_err!("Could not begin sqlite transaction: {}", e))?; [INFO] [stderr] 24 | | [INFO] [stderr] ... | [INFO] [stderr] 27 | | }) [INFO] [stderr] 28 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/db/backend.rs:120:12 [INFO] [stderr] | [INFO] [stderr] 120 | if tasks.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tasks.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/db/backend.rs:159:12 [INFO] [stderr] | [INFO] [stderr] 159 | if rows.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rows.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/db/backend.rs:191:13 [INFO] [stderr] | [INFO] [stderr] 191 | assert!(tasks.len() > 0, "Tasks is empty, nothing to select."); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tasks.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/db/transaction/mod.rs:25:36 [INFO] [stderr] | [INFO] [stderr] 25 | fn set_current_task(&self, id: &RowId) -> Result<(), Error>; [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `RowId` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/db/transaction/mod.rs:33:31 [INFO] [stderr] | [INFO] [stderr] 33 | fn remove_task(&self, id: &RowId) -> Result<(), Error>; [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `RowId` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] error: this loop never actually loops [INFO] [stderr] --> src/db/transaction/mod.rs:154:9 [INFO] [stderr] | [INFO] [stderr] 154 | / for row_res in rows { [INFO] [stderr] 155 | | let task_res = row_res.map_err(|e| format_err!("Error deserializing task row from database: {}", e))?; [INFO] [stderr] 156 | | let task = task_res.map_err(|e| format_err!("Invalid task read from database row: {}", e))?; [INFO] [stderr] 157 | | return Ok(Some(task)); [INFO] [stderr] 158 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::never_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#never_loop [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `taskerizer-prototype`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/commands/add.rs:21:8 [INFO] [stderr] | [INFO] [stderr] 21 | if s.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `s.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/commands/current.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | / match task.is_break() { [INFO] [stderr] 17 | | true => "Break", [INFO] [stderr] 18 | | false => "Task", [INFO] [stderr] 19 | | }.to_string() [INFO] [stderr] | |_____^ help: consider using an if/else expression: `if task.is_break() { "Break" } else { "Task" }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/task/mod.rs:16:12 [INFO] [stderr] | [INFO] [stderr] 16 | if task.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `task.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/task/mod.rs:22:26 [INFO] [stderr] | [INFO] [stderr] 22 | if task.contains("\x00") { [INFO] [stderr] | ^^^^^^ help: try using a char instead: `'\x00'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/task/mod.rs:49:9 [INFO] [stderr] | [INFO] [stderr] 49 | / match self.reward { [INFO] [stderr] 50 | | true => "Break", [INFO] [stderr] 51 | | false => "Task", [INFO] [stderr] 52 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.reward { "Break" } else { "Task" }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/db/mod.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | / fn transaction<'conn>(&'conn mut self) -> Result { [INFO] [stderr] 22 | | let tx = self.connection.transaction() [INFO] [stderr] 23 | | .map_err(|e| format_err!("Could not begin sqlite transaction: {}", e))?; [INFO] [stderr] 24 | | [INFO] [stderr] ... | [INFO] [stderr] 27 | | }) [INFO] [stderr] 28 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/db/backend.rs:120:12 [INFO] [stderr] | [INFO] [stderr] 120 | if tasks.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tasks.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/db/backend.rs:159:12 [INFO] [stderr] | [INFO] [stderr] 159 | if rows.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rows.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/db/backend.rs:191:13 [INFO] [stderr] | [INFO] [stderr] 191 | assert!(tasks.len() > 0, "Tasks is empty, nothing to select."); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tasks.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/db/backend.rs:274:39 [INFO] [stderr] | [INFO] [stderr] 274 | let tasks: Vec<(i32, Task)> = (1..len+1).zip(tasks).collect(); [INFO] [stderr] | ^^^^^^^^^^ help: use: `(1..=len)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/db/backend.rs:284:43 [INFO] [stderr] | [INFO] [stderr] 284 | let tasks: Vec<(i32, Task)> = (1..len+1).zip(tasks).collect(); [INFO] [stderr] | ^^^^^^^^^^ help: use: `(1..=len)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/db/transaction/mod.rs:25:36 [INFO] [stderr] | [INFO] [stderr] 25 | fn set_current_task(&self, id: &RowId) -> Result<(), Error>; [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `RowId` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/db/transaction/mod.rs:33:31 [INFO] [stderr] | [INFO] [stderr] 33 | fn remove_task(&self, id: &RowId) -> Result<(), Error>; [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `RowId` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] error: this loop never actually loops [INFO] [stderr] --> src/db/transaction/mod.rs:154:9 [INFO] [stderr] | [INFO] [stderr] 154 | / for row_res in rows { [INFO] [stderr] 155 | | let task_res = row_res.map_err(|e| format_err!("Error deserializing task row from database: {}", e))?; [INFO] [stderr] 156 | | let task = task_res.map_err(|e| format_err!("Invalid task read from database row: {}", e))?; [INFO] [stderr] 157 | | return Ok(Some(task)); [INFO] [stderr] 158 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::never_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#never_loop [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/db/transaction/tests/list.rs:48:13 [INFO] [stderr] | [INFO] [stderr] 48 | assert!(tasks.len() == 0, "Tasks still in db: tasks expected 0 got {}", tasks.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tasks.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/db/transaction/tests/list.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | assert!(breaks.len() == 0, "Breaks still in db: expected 0 got {}", tasks.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `breaks.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/db/transaction/tests/remove_task.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | assert!(tasks.len() == 0, "Incorrect number of tasks in db, expected 0, got {}", tasks.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tasks.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/db/transaction/tests/remove_task.rs:72:13 [INFO] [stderr] | [INFO] [stderr] 72 | assert!(all_db_tasks.len() == 0, "Tasks were in db even after rolling back: {:?}", all_db_tasks); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `all_db_tasks.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/db/transaction/tests/remove_task.rs:136:11 [INFO] [stderr] | [INFO] [stderr] 136 | while remaining_tasks.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!remaining_tasks.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/db/transaction/tests/remove_task.rs:192:15 [INFO] [stderr] | [INFO] [stderr] 192 | while remaining_tasks.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!remaining_tasks.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/db/tests/get_current.rs:164:24 [INFO] [stderr] | [INFO] [stderr] 164 | let min_task = tasks.iter().cloned().into_iter().min_by(cmp_tasks); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `tasks.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/db/tests/get_current.rs:166:25 [INFO] [stderr] | [INFO] [stderr] 166 | let min_break = breaks.iter().cloned().into_iter().min_by(cmp_tasks); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `breaks.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `taskerizer-prototype`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "4ffff4dd6efb6ec2a3fe4e5b9c05405f5e0bc475f52c451f3fc19bad0df87566"` [INFO] running `"docker" "rm" "-f" "4ffff4dd6efb6ec2a3fe4e5b9c05405f5e0bc475f52c451f3fc19bad0df87566"` [INFO] [stdout] 4ffff4dd6efb6ec2a3fe4e5b9c05405f5e0bc475f52c451f3fc19bad0df87566