[INFO] crate gog-sync 0.3.4 is already in cache [INFO] extracting crate gog-sync 0.3.4 into work/ex/clippy-test-run/sources/stable/reg/gog-sync/0.3.4 [INFO] extracting crate gog-sync 0.3.4 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/gog-sync/0.3.4 [INFO] validating manifest of gog-sync-0.3.4 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 gog-sync-0.3.4 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 gog-sync-0.3.4 [INFO] finished frobbing gog-sync-0.3.4 [INFO] frobbed toml for gog-sync-0.3.4 written to work/ex/clippy-test-run/sources/stable/reg/gog-sync/0.3.4/Cargo.toml [INFO] started frobbing gog-sync-0.3.4 [INFO] finished frobbing gog-sync-0.3.4 [INFO] frobbed toml for gog-sync-0.3.4 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/gog-sync/0.3.4/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting gog-sync-0.3.4 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/gog-sync/0.3.4:/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] d46e9de81a0bffc442fd81b26769393e7dc11c8a0d4f601d9bb14194d8e425fc [INFO] running `"docker" "start" "-a" "d46e9de81a0bffc442fd81b26769393e7dc11c8a0d4f601d9bb14194d8e425fc"` [INFO] [stderr] Compiling curl-sys v0.4.16 [INFO] [stderr] Checking curl v0.4.19 [INFO] [stderr] Checking gog-sync v0.3.4 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/configfiles.rs:62:23 [INFO] [stderr] | [INFO] [stderr] 62 | ConfigFiles { xdg_dirs: xdg_dirs } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `xdg_dirs` [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/gog.rs:95:13 [INFO] [stderr] | [INFO] [stderr] 95 | http_client: http_client, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `http_client` [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/gog.rs:291:13 [INFO] [stderr] | [INFO] [stderr] 291 | hash: hash, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `hash` [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/gog.rs:292:13 [INFO] [stderr] | [INFO] [stderr] 292 | filename: filename, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `filename` [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/gog.rs:326:13 [INFO] [stderr] | [INFO] [stderr] 326 | hash: hash, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `hash` [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/gog.rs:327:13 [INFO] [stderr] | [INFO] [stderr] 327 | filename: filename, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `filename` [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/http.rs:82:16 [INFO] [stderr] | [INFO] [stderr] 82 | Http { curl: curl } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `curl` [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/configfiles.rs:62:23 [INFO] [stderr] | [INFO] [stderr] 62 | ConfigFiles { xdg_dirs: xdg_dirs } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `xdg_dirs` [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/gog.rs:95:13 [INFO] [stderr] | [INFO] [stderr] 95 | http_client: http_client, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `http_client` [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/gog.rs:291:13 [INFO] [stderr] | [INFO] [stderr] 291 | hash: hash, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `hash` [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/gog.rs:292:13 [INFO] [stderr] | [INFO] [stderr] 292 | filename: filename, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `filename` [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/gog.rs:326:13 [INFO] [stderr] | [INFO] [stderr] 326 | hash: hash, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `hash` [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/gog.rs:327:13 [INFO] [stderr] | [INFO] [stderr] 327 | filename: filename, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `filename` [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/http.rs:82:16 [INFO] [stderr] | [INFO] [stderr] 82 | Http { curl: curl } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `curl` [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: you should consider adding a `Default` implementation for `configfiles::ConfigFiles` [INFO] [stderr] --> src/configfiles.rs:60:5 [INFO] [stderr] | [INFO] [stderr] 60 | / pub fn new() -> ConfigFiles { [INFO] [stderr] 61 | | let xdg_dirs = xdg::BaseDirectories::with_prefix("gog-sync").unwrap(); [INFO] [stderr] 62 | | ConfigFiles { xdg_dirs: xdg_dirs } [INFO] [stderr] 63 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 50 | impl Default for configfiles::ConfigFiles { [INFO] [stderr] 51 | fn default() -> Self { [INFO] [stderr] 52 | Self::new() [INFO] [stderr] 53 | } [INFO] [stderr] 54 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/gog.rs:110:12 [INFO] [stderr] | [INFO] [stderr] 110 | Ok(self.http_client.add_header(auth_header.as_str())?) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 110 | Ok(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/gog.rs:139:29 [INFO] [stderr] | [INFO] [stderr] 139 | os_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/gog.rs:140:35 [INFO] [stderr] | [INFO] [stderr] 140 | language_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/gog.rs:141:37 [INFO] [stderr] | [INFO] [stderr] 141 | resolution_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/gog.rs:136:5 [INFO] [stderr] | [INFO] [stderr] 136 | / pub fn sync(&mut self, [INFO] [stderr] 137 | | storage_path_games: &str, [INFO] [stderr] 138 | | storage_path_movies: &str, [INFO] [stderr] 139 | | os_filters: &Vec, [INFO] [stderr] ... | [INFO] [stderr] 172 | | Ok(()) [INFO] [stderr] 173 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/gog.rs:345:12 [INFO] [stderr] | [INFO] [stderr] 345 | if cd_keys.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!cd_keys.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/gog.rs:482:32 [INFO] [stderr] | [INFO] [stderr] 482 | os_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/gog.rs:483:38 [INFO] [stderr] | [INFO] [stderr] 483 | language_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/gog.rs:484:40 [INFO] [stderr] | [INFO] [stderr] 484 | resolution_filters: &Vec) [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `http::Http` [INFO] [stderr] --> src/http.rs:78:5 [INFO] [stderr] | [INFO] [stderr] 78 | / pub fn new() -> Http { [INFO] [stderr] 79 | | let mut curl = Easy::new(); [INFO] [stderr] 80 | | curl.follow_location(true).unwrap(); [INFO] [stderr] 81 | | [INFO] [stderr] 82 | | Http { curl: curl } [INFO] [stderr] 83 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 75 | impl Default for http::Http { [INFO] [stderr] 76 | fn default() -> Self { [INFO] [stderr] 77 | Self::new() [INFO] [stderr] 78 | } [INFO] [stderr] 79 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/models/content.rs:68:33 [INFO] [stderr] | [INFO] [stderr] 68 | if raw_cd_keys_fix.contains(":") { [INFO] [stderr] | ^^^ help: try using a char instead: `':'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/models/content.rs:69:51 [INFO] [stderr] | [INFO] [stderr] 69 | let splitted_keys = raw_cd_keys_fix.split(":"); [INFO] [stderr] | ^^^ help: try using a char instead: `':'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/models/content.rs:95:32 [INFO] [stderr] | [INFO] [stderr] 95 | os_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/models/content.rs:96:38 [INFO] [stderr] | [INFO] [stderr] 96 | language_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/models/content.rs:97:40 [INFO] [stderr] | [INFO] [stderr] 97 | resolution_filters: &Vec) [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 32 [INFO] [stderr] --> src/models/content.rs:93:1 [INFO] [stderr] | [INFO] [stderr] 93 | / pub fn deserialize(content_id: u64, [INFO] [stderr] 94 | | content_string: &str, [INFO] [stderr] 95 | | os_filters: &Vec, [INFO] [stderr] 96 | | language_filters: &Vec, [INFO] [stderr] ... | [INFO] [stderr] 228 | | Ok(content) [INFO] [stderr] 229 | | } [INFO] [stderr] | |_^ [INFO] [stderr] warning: you should consider adding a `Default` implementation for `configfiles::ConfigFiles` [INFO] [stderr] --> src/configfiles.rs:60:5 [INFO] [stderr] | [INFO] [stderr] 60 | / pub fn new() -> ConfigFiles { [INFO] [stderr] 61 | | let xdg_dirs = xdg::BaseDirectories::with_prefix("gog-sync").unwrap(); [INFO] [stderr] 62 | | ConfigFiles { xdg_dirs: xdg_dirs } [INFO] [stderr] 63 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 50 | impl Default for configfiles::ConfigFiles { [INFO] [stderr] 51 | fn default() -> Self { [INFO] [stderr] 52 | Self::new() [INFO] [stderr] 53 | } [INFO] [stderr] 54 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/models/content.rs:128:5 [INFO] [stderr] | [INFO] [stderr] 128 | / match dlcs.as_array() { [INFO] [stderr] 129 | | Some(value) => { [INFO] [stderr] 130 | | if value.len() > 0 { [INFO] [stderr] 131 | | debug!("processing dlc fields: {:?}", &value); [INFO] [stderr] ... | [INFO] [stderr] 142 | | None => (), [INFO] [stderr] 143 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 128 | if let Some(value) = dlcs.as_array() { [INFO] [stderr] 129 | if value.len() > 0 { [INFO] [stderr] 130 | debug!("processing dlc fields: {:?}", &value); [INFO] [stderr] 131 | for dlc in value { [INFO] [stderr] 132 | let dlc = deserialize(content_id, [INFO] [stderr] 133 | serde_json::to_string(&dlc).unwrap().as_str(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/models/content.rs:130:16 [INFO] [stderr] | [INFO] [stderr] 130 | if value.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!value.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] error: for loop over `downloads.as_array()`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/models/content.rs:147:22 [INFO] [stderr] | [INFO] [stderr] 147 | for languages in downloads.as_array() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::for_loop_over_option)] on by default [INFO] [stderr] = help: consider replacing `for languages in downloads.as_array()` with `if let Some(languages) = downloads.as_array()` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] error: for loop over `language[1].as_object()`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/models/content.rs:170:28 [INFO] [stderr] | [INFO] [stderr] 170 | for systems in language[1].as_object() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: consider replacing `for systems in language[1].as_object()` with `if let Some(systems) = language[1].as_object()` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] error: for loop over `systems.get(system)`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/models/content.rs:180:43 [INFO] [stderr] | [INFO] [stderr] 180 | for real_downloads in systems.get(system) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: consider replacing `for real_downloads in systems.get(system)` with `if let Some(real_downloads) = systems.get(system)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] error: for loop over `real_downloads.as_array()`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/models/content.rs:181:46 [INFO] [stderr] | [INFO] [stderr] 181 | for real_download in real_downloads.as_array() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: consider replacing `for real_download in real_downloads.as_array()` with `if let Some(real_download) = real_downloads.as_array()` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/gog.rs:110:12 [INFO] [stderr] | [INFO] [stderr] 110 | Ok(self.http_client.add_header(auth_header.as_str())?) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 110 | Ok(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/gog.rs:139:29 [INFO] [stderr] | [INFO] [stderr] 139 | os_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/gog.rs:140:35 [INFO] [stderr] | [INFO] [stderr] 140 | language_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/gog.rs:141:37 [INFO] [stderr] | [INFO] [stderr] 141 | resolution_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/gog.rs:136:5 [INFO] [stderr] | [INFO] [stderr] 136 | / pub fn sync(&mut self, [INFO] [stderr] 137 | | storage_path_games: &str, [INFO] [stderr] 138 | | storage_path_movies: &str, [INFO] [stderr] 139 | | os_filters: &Vec, [INFO] [stderr] ... | [INFO] [stderr] 172 | | Ok(()) [INFO] [stderr] 173 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/gog.rs:345:12 [INFO] [stderr] | [INFO] [stderr] 345 | if cd_keys.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!cd_keys.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/gog.rs:482:32 [INFO] [stderr] | [INFO] [stderr] 482 | os_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/gog.rs:483:38 [INFO] [stderr] | [INFO] [stderr] 483 | language_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/gog.rs:484:40 [INFO] [stderr] | [INFO] [stderr] 484 | resolution_filters: &Vec) [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `http::Http` [INFO] [stderr] --> src/http.rs:78:5 [INFO] [stderr] | [INFO] [stderr] 78 | / pub fn new() -> Http { [INFO] [stderr] 79 | | let mut curl = Easy::new(); [INFO] [stderr] 80 | | curl.follow_location(true).unwrap(); [INFO] [stderr] 81 | | [INFO] [stderr] 82 | | Http { curl: curl } [INFO] [stderr] 83 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 75 | impl Default for http::Http { [INFO] [stderr] 76 | fn default() -> Self { [INFO] [stderr] 77 | Self::new() [INFO] [stderr] 78 | } [INFO] [stderr] 79 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/models/token.rs:20:32 [INFO] [stderr] | [INFO] [stderr] 20 | now > self.timestamp + self.expires_in as i64 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(self.expires_in)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `gog-sync`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/models/content.rs:68:33 [INFO] [stderr] | [INFO] [stderr] 68 | if raw_cd_keys_fix.contains(":") { [INFO] [stderr] | ^^^ help: try using a char instead: `':'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/models/content.rs:69:51 [INFO] [stderr] | [INFO] [stderr] 69 | let splitted_keys = raw_cd_keys_fix.split(":"); [INFO] [stderr] | ^^^ help: try using a char instead: `':'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/models/content.rs:95:32 [INFO] [stderr] | [INFO] [stderr] 95 | os_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/models/content.rs:96:38 [INFO] [stderr] | [INFO] [stderr] 96 | language_filters: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/models/content.rs:97:40 [INFO] [stderr] | [INFO] [stderr] 97 | resolution_filters: &Vec) [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 32 [INFO] [stderr] --> src/models/content.rs:93:1 [INFO] [stderr] | [INFO] [stderr] 93 | / pub fn deserialize(content_id: u64, [INFO] [stderr] 94 | | content_string: &str, [INFO] [stderr] 95 | | os_filters: &Vec, [INFO] [stderr] 96 | | language_filters: &Vec, [INFO] [stderr] ... | [INFO] [stderr] 228 | | Ok(content) [INFO] [stderr] 229 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/models/content.rs:128:5 [INFO] [stderr] | [INFO] [stderr] 128 | / match dlcs.as_array() { [INFO] [stderr] 129 | | Some(value) => { [INFO] [stderr] 130 | | if value.len() > 0 { [INFO] [stderr] 131 | | debug!("processing dlc fields: {:?}", &value); [INFO] [stderr] ... | [INFO] [stderr] 142 | | None => (), [INFO] [stderr] 143 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 128 | if let Some(value) = dlcs.as_array() { [INFO] [stderr] 129 | if value.len() > 0 { [INFO] [stderr] 130 | debug!("processing dlc fields: {:?}", &value); [INFO] [stderr] 131 | for dlc in value { [INFO] [stderr] 132 | let dlc = deserialize(content_id, [INFO] [stderr] 133 | serde_json::to_string(&dlc).unwrap().as_str(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/models/content.rs:130:16 [INFO] [stderr] | [INFO] [stderr] 130 | if value.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!value.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] error: for loop over `downloads.as_array()`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/models/content.rs:147:22 [INFO] [stderr] | [INFO] [stderr] 147 | for languages in downloads.as_array() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::for_loop_over_option)] on by default [INFO] [stderr] = help: consider replacing `for languages in downloads.as_array()` with `if let Some(languages) = downloads.as_array()` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] error: for loop over `language[1].as_object()`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/models/content.rs:170:28 [INFO] [stderr] | [INFO] [stderr] 170 | for systems in language[1].as_object() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: consider replacing `for systems in language[1].as_object()` with `if let Some(systems) = language[1].as_object()` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] error: for loop over `systems.get(system)`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/models/content.rs:180:43 [INFO] [stderr] | [INFO] [stderr] 180 | for real_downloads in systems.get(system) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: consider replacing `for real_downloads in systems.get(system)` with `if let Some(real_downloads) = systems.get(system)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] error: for loop over `real_downloads.as_array()`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/models/content.rs:181:46 [INFO] [stderr] | [INFO] [stderr] 181 | for real_download in real_downloads.as_array() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: consider replacing `for real_download in real_downloads.as_array()` with `if let Some(real_download) = real_downloads.as_array()` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/models/token.rs:20:32 [INFO] [stderr] | [INFO] [stderr] 20 | now > self.timestamp + self.expires_in as i64 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(self.expires_in)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `gog-sync`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "d46e9de81a0bffc442fd81b26769393e7dc11c8a0d4f601d9bb14194d8e425fc"` [INFO] running `"docker" "rm" "-f" "d46e9de81a0bffc442fd81b26769393e7dc11c8a0d4f601d9bb14194d8e425fc"` [INFO] [stdout] d46e9de81a0bffc442fd81b26769393e7dc11c8a0d4f601d9bb14194d8e425fc