[INFO] crate compose_yml 0.0.54 is already in cache [INFO] extracting crate compose_yml 0.0.54 into work/ex/clippy-test-run/sources/stable/reg/compose_yml/0.0.54 [INFO] extracting crate compose_yml 0.0.54 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/compose_yml/0.0.54 [INFO] validating manifest of compose_yml-0.0.54 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 compose_yml-0.0.54 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 compose_yml-0.0.54 [INFO] finished frobbing compose_yml-0.0.54 [INFO] frobbed toml for compose_yml-0.0.54 written to work/ex/clippy-test-run/sources/stable/reg/compose_yml/0.0.54/Cargo.toml [INFO] started frobbing compose_yml-0.0.54 [INFO] finished frobbing compose_yml-0.0.54 [INFO] frobbed toml for compose_yml-0.0.54 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/compose_yml/0.0.54/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 compose_yml-0.0.54 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/compose_yml/0.0.54:/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] 4225d70731bc72fe5c55574b3ce0d9c06dcfadf46ac2c7a2c27336c0bc719491 [INFO] running `"docker" "start" "-a" "4225d70731bc72fe5c55574b3ce0d9c06dcfadf46ac2c7a2c27336c0bc719491"` [INFO] [stderr] Checking uuid v0.3.1 [INFO] [stderr] Checking jsonway v1.0.1 [INFO] [stderr] Compiling valico v1.0.1 [INFO] [stderr] Checking compose_yml v0.0.54 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/v2/env_file.rs:45:22 [INFO] [stderr] | [INFO] [stderr] 45 | Ok(EnvFile { vars: vars }) [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `vars` [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: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/v2/interpolation.rs:66:5 [INFO] [stderr] | [INFO] [stderr] 66 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deprecated_cfg_attr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/v2/env_file.rs:45:22 [INFO] [stderr] | [INFO] [stderr] 45 | Ok(EnvFile { vars: vars }) [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `vars` [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: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/v2/interpolation.rs:66:5 [INFO] [stderr] | [INFO] [stderr] 66 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deprecated_cfg_attr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/errors.rs:17:1 [INFO] [stderr] | [INFO] [stderr] 17 | / error_chain! { [INFO] [stderr] 18 | | // These are external, non-`error_chain` error types that we can [INFO] [stderr] 19 | | // automatically wrap. [INFO] [stderr] 20 | | foreign_links { [INFO] [stderr] ... | [INFO] [stderr] 112 | | } [INFO] [stderr] 113 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/v2/helpers.rs:16:20 [INFO] [stderr] | [INFO] [stderr] 16 | pub fn is_false(b: &bool) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `bool` [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: identical conversion [INFO] [stderr] --> src/v2/git_url.rs:157:9 [INFO] [stderr] | [INFO] [stderr] 157 | From::from(url.url) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider removing `From::from()`: `url.url` [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: single-character string constant used as pattern [INFO] [stderr] --> src/v2/aliased_name.rs:31:43 [INFO] [stderr] | [INFO] [stderr] 31 | let bad_name = self.name.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/v2/aliased_name.rs:33:33 [INFO] [stderr] | [INFO] [stderr] 33 | .map(|a| a.contains(":")).unwrap_or(false); [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: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/v2/aliased_name.rs:46:9 [INFO] [stderr] | [INFO] [stderr] 46 | / match &self.alias { [INFO] [stderr] 47 | | &Some(ref alias) => write!(f, "{}:{}", &self.name, alias), [INFO] [stderr] 48 | | &None => write!(f, "{}", &self.name), [INFO] [stderr] 49 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 46 | match self.alias { [INFO] [stderr] 47 | Some(ref alias) => write!(f, "{}:{}", &self.name, alias), [INFO] [stderr] 48 | None => write!(f, "{}", &self.name), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/command_line.rs:25:9 [INFO] [stderr] | [INFO] [stderr] 25 | / match self { [INFO] [stderr] 26 | | &CommandLine::ShellCode(ref s) => s.serialize(serializer), [INFO] [stderr] 27 | | &CommandLine::Parsed(ref l) => l.serialize(serializer), [INFO] [stderr] 28 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 25 | match *self { [INFO] [stderr] 26 | CommandLine::ShellCode(ref s) => s.serialize(serializer), [INFO] [stderr] 27 | CommandLine::Parsed(ref l) => l.serialize(serializer), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/permissions.rs:91:9 [INFO] [stderr] | [INFO] [stderr] 91 | / match self { [INFO] [stderr] 92 | | &VolumePermissions::ReadWrite => write!(f, "rw"), [INFO] [stderr] 93 | | &VolumePermissions::ReadOnly => write!(f, "ro"), [INFO] [stderr] 94 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 91 | match *self { [INFO] [stderr] 92 | VolumePermissions::ReadWrite => write!(f, "rw"), [INFO] [stderr] 93 | VolumePermissions::ReadOnly => write!(f, "ro"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/v2/file.rs:55:12 [INFO] [stderr] | [INFO] [stderr] 55 | Ok(serde_yaml::to_writer(w, self)?) [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] 55 | Ok(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/context.rs:39:9 [INFO] [stderr] | [INFO] [stderr] 39 | / match self { [INFO] [stderr] 40 | | &Context::Dir(_) => self.clone(), [INFO] [stderr] 41 | | &Context::GitUrl(ref git_url) => { [INFO] [stderr] 42 | | Context::GitUrl(git_url.without_subdirectory()) [INFO] [stderr] 43 | | }, [INFO] [stderr] 44 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 39 | match *self { [INFO] [stderr] 40 | Context::Dir(_) => self.clone(), [INFO] [stderr] 41 | Context::GitUrl(ref git_url) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/context.rs:60:9 [INFO] [stderr] | [INFO] [stderr] 60 | / match self { [INFO] [stderr] 61 | | &Context::Dir(ref path) => write!(f, "{}", path.display()), [INFO] [stderr] 62 | | &Context::GitUrl(ref url) => write!(f, "{}", url), [INFO] [stderr] 63 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 60 | match *self { [INFO] [stderr] 61 | Context::Dir(ref path) => write!(f, "{}", path.display()), [INFO] [stderr] 62 | Context::GitUrl(ref url) => write!(f, "{}", url), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/v2/logging.rs:35:25 [INFO] [stderr] | [INFO] [stderr] 35 | options: if &self.driver == &ovr.driver || ovr.driver.is_none() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 35 | options: if self.driver == ovr.driver || ovr.driver.is_none() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/port_mapping.rs:26:9 [INFO] [stderr] | [INFO] [stderr] 26 | / match self { [INFO] [stderr] 27 | | &Ports::Port(port) => write!(f, "{}", port), [INFO] [stderr] 28 | | &Ports::Range(first, last) => write!(f, "{}-{}", first, last), [INFO] [stderr] 29 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 26 | match *self { [INFO] [stderr] 27 | Ports::Port(port) => write!(f, "{}", port), [INFO] [stderr] 28 | Ports::Range(first, last) => write!(f, "{}-{}", first, last), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/port_mapping.rs:78:9 [INFO] [stderr] | [INFO] [stderr] 78 | / match self { [INFO] [stderr] 79 | | &Protocol::Tcp => write!(f, "tcp"), [INFO] [stderr] 80 | | &Protocol::Udp => write!(f, "udp"), [INFO] [stderr] 81 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 78 | match *self { [INFO] [stderr] 79 | Protocol::Tcp => write!(f, "tcp"), [INFO] [stderr] 80 | Protocol::Udp => write!(f, "udp"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/v2/port_mapping.rs:197:51 [INFO] [stderr] | [INFO] [stderr] 197 | let fields: Vec<_> = ports_and_protocol.split("/").collect(); [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: single-character string constant used as pattern [INFO] [stderr] --> src/v2/port_mapping.rs:217:60 [INFO] [stderr] | [INFO] [stderr] 217 | let fields: Vec<_> = s_without_protocol.rsplitn(3, ":").collect(); [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/volume_mount.rs:21:9 [INFO] [stderr] | [INFO] [stderr] 21 | / match self { [INFO] [stderr] 22 | | &HostVolume::Path(ref path) => { [INFO] [stderr] 23 | | let p = path_str_to_docker(path.to_str().ok_or(fmt::Error)?); [INFO] [stderr] 24 | | if path.is_absolute() { [INFO] [stderr] ... | [INFO] [stderr] 42 | | } [INFO] [stderr] 43 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 21 | match *self { [INFO] [stderr] 22 | HostVolume::Path(ref path) => { [INFO] [stderr] 23 | let p = path_str_to_docker(path.to_str().ok_or(fmt::Error)?); [INFO] [stderr] 24 | if path.is_absolute() { [INFO] [stderr] 25 | write!(f, "{}", p) [INFO] [stderr] 26 | } else if p.starts_with("./") || p.starts_with("../") { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/v2/volume_mount.rs:26:71 [INFO] [stderr] | [INFO] [stderr] 26 | } else if p.starts_with("./") || p.starts_with("../") { [INFO] [stderr] | _______________________________________________________________________^ [INFO] [stderr] 27 | | write!(f, "{}", p) [INFO] [stderr] 28 | | } else { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/v2/volume_mount.rs:24:39 [INFO] [stderr] | [INFO] [stderr] 24 | if path.is_absolute() { [INFO] [stderr] | _______________________________________^ [INFO] [stderr] 25 | | write!(f, "{}", p) [INFO] [stderr] 26 | | } else if p.starts_with("./") || p.starts_with("../") { [INFO] [stderr] | |_________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/v2/volume_mount.rs:198:9 [INFO] [stderr] | [INFO] [stderr] 198 | / match &self.host { [INFO] [stderr] 199 | | &Some(ref host) => write!(f, "{}:", host)?, [INFO] [stderr] 200 | | &None => {}, [INFO] [stderr] 201 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 198 | match self.host { [INFO] [stderr] 199 | Some(ref host) => write!(f, "{}:", host)?, [INFO] [stderr] 200 | None => {}, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/v2/volume_mount.rs:217:29 [INFO] [stderr] | [INFO] [stderr] 217 | let items = s.split(":").collect::>(); [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: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/v2/volumes_from.rs:81:9 [INFO] [stderr] | [INFO] [stderr] 81 | / match &self.source { [INFO] [stderr] 82 | | &ServiceOrContainer::Service(ref name) => [INFO] [stderr] 83 | | write!(f, "{}", name)?, [INFO] [stderr] 84 | | &ServiceOrContainer::Container(ref name) => [INFO] [stderr] 85 | | write!(f, "container:{}", name)?, [INFO] [stderr] 86 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 81 | match self.source { [INFO] [stderr] 82 | ServiceOrContainer::Service(ref name) => [INFO] [stderr] 83 | write!(f, "{}", name)?, [INFO] [stderr] 84 | ServiceOrContainer::Container(ref name) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `compose_yml`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/errors.rs:17:1 [INFO] [stderr] | [INFO] [stderr] 17 | / error_chain! { [INFO] [stderr] 18 | | // These are external, non-`error_chain` error types that we can [INFO] [stderr] 19 | | // automatically wrap. [INFO] [stderr] 20 | | foreign_links { [INFO] [stderr] ... | [INFO] [stderr] 112 | | } [INFO] [stderr] 113 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/v2/helpers.rs:16:20 [INFO] [stderr] | [INFO] [stderr] 16 | pub fn is_false(b: &bool) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `bool` [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: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/v2/env_file.rs:91:16 [INFO] [stderr] | [INFO] [stderr] 91 | assert_eq!(env.get("FOO").unwrap().value().unwrap(), "foo"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&env["FOO"]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/v2/env_file.rs:92:16 [INFO] [stderr] | [INFO] [stderr] 92 | assert_eq!(env.get("BAR").unwrap().value().unwrap(), "2"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&env["BAR"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/v2/env_file.rs:93:16 [INFO] [stderr] | [INFO] [stderr] 93 | assert_eq!(env.get("WEIRD").unwrap().value().unwrap(), "\"quoted\""); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&env["WEIRD"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/v2/git_url.rs:157:9 [INFO] [stderr] | [INFO] [stderr] 157 | From::from(url.url) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider removing `From::from()`: `url.url` [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: casting to the same type is unnecessary (`bool` -> `bool`) [INFO] [stderr] --> src/v2/merge_override.rs:23:20 [INFO] [stderr] | [INFO] [stderr] 23 | assert_eq!(($value1 as $ty).merge_override(&($value2 as $ty)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 39 | assert_merge!(bool, false, true, true); [INFO] [stderr] | --------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_cast)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stderr] [INFO] [stderr] warning: casting to the same type is unnecessary (`bool` -> `bool`) [INFO] [stderr] --> src/v2/merge_override.rs:23:53 [INFO] [stderr] | [INFO] [stderr] 23 | assert_eq!(($value1 as $ty).merge_override(&($value2 as $ty)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 39 | assert_merge!(bool, false, true, true); [INFO] [stderr] | --------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stderr] [INFO] [stderr] warning: casting to the same type is unnecessary (`bool` -> `bool`) [INFO] [stderr] --> src/v2/merge_override.rs:24:20 [INFO] [stderr] | [INFO] [stderr] 24 | ($expected as $ty)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 39 | assert_merge!(bool, false, true, true); [INFO] [stderr] | --------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/v2/aliased_name.rs:31:43 [INFO] [stderr] | [INFO] [stderr] 31 | let bad_name = self.name.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/v2/aliased_name.rs:33:33 [INFO] [stderr] | [INFO] [stderr] 33 | .map(|a| a.contains(":")).unwrap_or(false); [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: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/v2/aliased_name.rs:46:9 [INFO] [stderr] | [INFO] [stderr] 46 | / match &self.alias { [INFO] [stderr] 47 | | &Some(ref alias) => write!(f, "{}:{}", &self.name, alias), [INFO] [stderr] 48 | | &None => write!(f, "{}", &self.name), [INFO] [stderr] 49 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 46 | match self.alias { [INFO] [stderr] 47 | Some(ref alias) => write!(f, "{}:{}", &self.name, alias), [INFO] [stderr] 48 | None => write!(f, "{}", &self.name), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/command_line.rs:25:9 [INFO] [stderr] | [INFO] [stderr] 25 | / match self { [INFO] [stderr] 26 | | &CommandLine::ShellCode(ref s) => s.serialize(serializer), [INFO] [stderr] 27 | | &CommandLine::Parsed(ref l) => l.serialize(serializer), [INFO] [stderr] 28 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 25 | match *self { [INFO] [stderr] 26 | CommandLine::ShellCode(ref s) => s.serialize(serializer), [INFO] [stderr] 27 | CommandLine::Parsed(ref l) => l.serialize(serializer), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/permissions.rs:91:9 [INFO] [stderr] | [INFO] [stderr] 91 | / match self { [INFO] [stderr] 92 | | &VolumePermissions::ReadWrite => write!(f, "rw"), [INFO] [stderr] 93 | | &VolumePermissions::ReadOnly => write!(f, "ro"), [INFO] [stderr] 94 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 91 | match *self { [INFO] [stderr] 92 | VolumePermissions::ReadWrite => write!(f, "rw"), [INFO] [stderr] 93 | VolumePermissions::ReadOnly => write!(f, "ro"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/v2/file.rs:55:12 [INFO] [stderr] | [INFO] [stderr] 55 | Ok(serde_yaml::to_writer(w, self)?) [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] 55 | Ok(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/v2/file.rs:134:15 [INFO] [stderr] | [INFO] [stderr] 134 | let foo = file.services.get("foo").unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&file.services["foo"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> src/v2/file.rs:134:9 [INFO] [stderr] | [INFO] [stderr] 134 | let foo = file.services.get("foo").unwrap(); [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::blacklisted_name)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blacklisted_name [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/v2/service.rs:361:16 [INFO] [stderr] | [INFO] [stderr] 361 | assert_eq!(service.networks.get("backend").unwrap(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&service.networks["backend"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/context.rs:39:9 [INFO] [stderr] | [INFO] [stderr] 39 | / match self { [INFO] [stderr] 40 | | &Context::Dir(_) => self.clone(), [INFO] [stderr] 41 | | &Context::GitUrl(ref git_url) => { [INFO] [stderr] 42 | | Context::GitUrl(git_url.without_subdirectory()) [INFO] [stderr] 43 | | }, [INFO] [stderr] 44 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 39 | match *self { [INFO] [stderr] 40 | Context::Dir(_) => self.clone(), [INFO] [stderr] 41 | Context::GitUrl(ref git_url) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/context.rs:60:9 [INFO] [stderr] | [INFO] [stderr] 60 | / match self { [INFO] [stderr] 61 | | &Context::Dir(ref path) => write!(f, "{}", path.display()), [INFO] [stderr] 62 | | &Context::GitUrl(ref url) => write!(f, "{}", url), [INFO] [stderr] 63 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 60 | match *self { [INFO] [stderr] 61 | Context::Dir(ref path) => write!(f, "{}", path.display()), [INFO] [stderr] 62 | Context::GitUrl(ref url) => write!(f, "{}", url), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/v2/logging.rs:35:25 [INFO] [stderr] | [INFO] [stderr] 35 | options: if &self.driver == &ovr.driver || ovr.driver.is_none() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 35 | options: if self.driver == ovr.driver || ovr.driver.is_none() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/port_mapping.rs:26:9 [INFO] [stderr] | [INFO] [stderr] 26 | / match self { [INFO] [stderr] 27 | | &Ports::Port(port) => write!(f, "{}", port), [INFO] [stderr] 28 | | &Ports::Range(first, last) => write!(f, "{}-{}", first, last), [INFO] [stderr] 29 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 26 | match *self { [INFO] [stderr] 27 | Ports::Port(port) => write!(f, "{}", port), [INFO] [stderr] 28 | Ports::Range(first, last) => write!(f, "{}-{}", first, last), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/port_mapping.rs:78:9 [INFO] [stderr] | [INFO] [stderr] 78 | / match self { [INFO] [stderr] 79 | | &Protocol::Tcp => write!(f, "tcp"), [INFO] [stderr] 80 | | &Protocol::Udp => write!(f, "udp"), [INFO] [stderr] 81 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 78 | match *self { [INFO] [stderr] 79 | Protocol::Tcp => write!(f, "tcp"), [INFO] [stderr] 80 | Protocol::Udp => write!(f, "udp"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/v2/port_mapping.rs:197:51 [INFO] [stderr] | [INFO] [stderr] 197 | let fields: Vec<_> = ports_and_protocol.split("/").collect(); [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: single-character string constant used as pattern [INFO] [stderr] --> src/v2/port_mapping.rs:217:60 [INFO] [stderr] | [INFO] [stderr] 217 | let fields: Vec<_> = s_without_protocol.rsplitn(3, ":").collect(); [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/v2/volume_mount.rs:21:9 [INFO] [stderr] | [INFO] [stderr] 21 | / match self { [INFO] [stderr] 22 | | &HostVolume::Path(ref path) => { [INFO] [stderr] 23 | | let p = path_str_to_docker(path.to_str().ok_or(fmt::Error)?); [INFO] [stderr] 24 | | if path.is_absolute() { [INFO] [stderr] ... | [INFO] [stderr] 42 | | } [INFO] [stderr] 43 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 21 | match *self { [INFO] [stderr] 22 | HostVolume::Path(ref path) => { [INFO] [stderr] 23 | let p = path_str_to_docker(path.to_str().ok_or(fmt::Error)?); [INFO] [stderr] 24 | if path.is_absolute() { [INFO] [stderr] 25 | write!(f, "{}", p) [INFO] [stderr] 26 | } else if p.starts_with("./") || p.starts_with("../") { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/v2/volume_mount.rs:26:71 [INFO] [stderr] | [INFO] [stderr] 26 | } else if p.starts_with("./") || p.starts_with("../") { [INFO] [stderr] | _______________________________________________________________________^ [INFO] [stderr] 27 | | write!(f, "{}", p) [INFO] [stderr] 28 | | } else { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/v2/volume_mount.rs:24:39 [INFO] [stderr] | [INFO] [stderr] 24 | if path.is_absolute() { [INFO] [stderr] | _______________________________________^ [INFO] [stderr] 25 | | write!(f, "{}", p) [INFO] [stderr] 26 | | } else if p.starts_with("./") || p.starts_with("../") { [INFO] [stderr] | |_________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/v2/volume_mount.rs:198:9 [INFO] [stderr] | [INFO] [stderr] 198 | / match &self.host { [INFO] [stderr] 199 | | &Some(ref host) => write!(f, "{}:", host)?, [INFO] [stderr] 200 | | &None => {}, [INFO] [stderr] 201 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 198 | match self.host { [INFO] [stderr] 199 | Some(ref host) => write!(f, "{}:", host)?, [INFO] [stderr] 200 | None => {}, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/v2/volume_mount.rs:217:29 [INFO] [stderr] | [INFO] [stderr] 217 | let items = s.split(":").collect::>(); [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: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/v2/volumes_from.rs:81:9 [INFO] [stderr] | [INFO] [stderr] 81 | / match &self.source { [INFO] [stderr] 82 | | &ServiceOrContainer::Service(ref name) => [INFO] [stderr] 83 | | write!(f, "{}", name)?, [INFO] [stderr] 84 | | &ServiceOrContainer::Container(ref name) => [INFO] [stderr] 85 | | write!(f, "container:{}", name)?, [INFO] [stderr] 86 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 81 | match self.source { [INFO] [stderr] 82 | ServiceOrContainer::Service(ref name) => [INFO] [stderr] 83 | write!(f, "{}", name)?, [INFO] [stderr] 84 | ServiceOrContainer::Container(ref name) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `compose_yml`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "4225d70731bc72fe5c55574b3ce0d9c06dcfadf46ac2c7a2c27336c0bc719491"` [INFO] running `"docker" "rm" "-f" "4225d70731bc72fe5c55574b3ce0d9c06dcfadf46ac2c7a2c27336c0bc719491"` [INFO] [stdout] 4225d70731bc72fe5c55574b3ce0d9c06dcfadf46ac2c7a2c27336c0bc719491