[INFO] crate derive-into-owned 0.1.0 is already in cache [INFO] extracting crate derive-into-owned 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/derive-into-owned/0.1.0 [INFO] extracting crate derive-into-owned 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/derive-into-owned/0.1.0 [INFO] validating manifest of derive-into-owned-0.1.0 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 derive-into-owned-0.1.0 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 derive-into-owned-0.1.0 [INFO] finished frobbing derive-into-owned-0.1.0 [INFO] frobbed toml for derive-into-owned-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/derive-into-owned/0.1.0/Cargo.toml [INFO] started frobbing derive-into-owned-0.1.0 [INFO] finished frobbing derive-into-owned-0.1.0 [INFO] frobbed toml for derive-into-owned-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/derive-into-owned/0.1.0/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 derive-into-owned-0.1.0 against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/derive-into-owned/0.1.0:/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 -Dclippy::into_iter_on_array" "-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] 31f772e84e7f7b91057e02227715ecce97baf91e8b06d634c754a207d0c714ef [INFO] running `"docker" "start" "-a" "31f772e84e7f7b91057e02227715ecce97baf91e8b06d634c754a207d0c714ef"` [INFO] [stderr] Compiling unicode-xid v0.0.4 [INFO] [stderr] Compiling quote v0.3.15 [INFO] [stderr] Checking derive-into-owned v0.1.0 (/opt/crater/workdir) [INFO] [stderr] error[E0602]: unknown lint: `clippy::into_iter_on_array` [INFO] [stderr] | [INFO] [stderr] = note: requested on the command line with `-D clippy::into_iter_on_array` [INFO] [stderr] [INFO] [stderr] error[E0602]: unknown lint: `clippy::into_iter_on_array` [INFO] [stderr] | [INFO] [stderr] = note: requested on the command line with `-D clippy::into_iter_on_array` [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] For more information about this error, try `rustc --explain E0602`. [INFO] [stderr] error: Could not compile `unicode-xid`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] For more information about this error, try `rustc --explain E0602`. [INFO] [stderr] error: Could not compile `quote`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:138:58 [INFO] [stderr] | [INFO] [stderr] 138 | ast.generics.ty_params.iter().map(|ty| { let ref ident = &ty.ident; quote! { #ident } }) [INFO] [stderr] | ----^^^^^^^^^------------- help: try: `let ident = &(&ty.ident);` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:144:78 [INFO] [stderr] | [INFO] [stderr] 144 | let owned_type_params = ast.generics.ty_params.iter().map(|ty| { let ref ident = &ty.ident; quote! { #ident } }); [INFO] [stderr] | ----^^^^^^^^^------------- help: try: `let ident = &(&ty.ident);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:195:29 [INFO] [stderr] | [INFO] [stderr] 195 | let ref ident = field.ident.as_ref().unwrap(); [INFO] [stderr] | ----^^^^^^^^^--------------------------------- help: try: `let ident = &field.ident.as_ref().unwrap();` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:237:78 [INFO] [stderr] | [INFO] [stderr] 237 | let owned_type_params = ast.generics.ty_params.iter().map(|ty| { let ref ident = &ty.ident; quote! { #ident } }); [INFO] [stderr] | ----^^^^^^^^^------------- help: try: `let ident = &(&ty.ident);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:279:29 [INFO] [stderr] | [INFO] [stderr] 279 | let ref ident = field.ident.as_ref().unwrap(); [INFO] [stderr] | ----^^^^^^^^^--------------------------------- help: try: `let ident = &field.ident.as_ref().unwrap();` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:327:9 [INFO] [stderr] | [INFO] [stderr] 327 | / match &field.ty { [INFO] [stderr] 328 | | &syn::Ty::Path(None, syn::Path { ref segments, .. }) => { [INFO] [stderr] 329 | | if is_cow(segments) { [INFO] [stderr] 330 | | FieldKind::PlainCow [INFO] [stderr] ... | [INFO] [stderr] 341 | | _ => FieldKind::JustMoved, [INFO] [stderr] 342 | | } [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] 327 | match field.ty { [INFO] [stderr] 328 | syn::Ty::Path(None, syn::Path { ref segments, .. }) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:348:9 [INFO] [stderr] | [INFO] [stderr] 348 | / match self { [INFO] [stderr] 349 | | &PlainCow => quote! { ::std::borrow::Cow::Owned(#var.into_owned()) }, [INFO] [stderr] 350 | | &AssumedCow => quote! { #var.into_owned() }, [INFO] [stderr] 351 | | &OptField(levels, ref inner) => { [INFO] [stderr] ... | [INFO] [stderr] 371 | | &JustMoved => quote! { #var }, [INFO] [stderr] 372 | | } [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] 348 | match *self { [INFO] [stderr] 349 | PlainCow => quote! { ::std::borrow::Cow::Owned(#var.into_owned()) }, [INFO] [stderr] 350 | AssumedCow => quote! { #var.into_owned() }, [INFO] [stderr] 351 | OptField(levels, ref inner) => { [INFO] [stderr] 352 | let next = syn::Ident::from("val"); [INFO] [stderr] 353 | let next = quote! { #next }; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:378:9 [INFO] [stderr] | [INFO] [stderr] 378 | / match self { [INFO] [stderr] 379 | | &PlainCow => quote! { ::std::borrow::Cow::Borrowed(#var.as_ref()) }, [INFO] [stderr] 380 | | &AssumedCow => quote! { #var.borrowed() }, [INFO] [stderr] 381 | | &OptField(levels, ref inner) => { [INFO] [stderr] ... | [INFO] [stderr] 401 | | &JustMoved => quote! { #var.clone() }, [INFO] [stderr] 402 | | } [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] 378 | match *self { [INFO] [stderr] 379 | PlainCow => quote! { ::std::borrow::Cow::Borrowed(#var.as_ref()) }, [INFO] [stderr] 380 | AssumedCow => quote! { #var.borrowed() }, [INFO] [stderr] 381 | OptField(levels, ref inner) => { [INFO] [stderr] 382 | let next = syn::Ident::from("val"); [INFO] [stderr] 383 | let next = quote! { #next }; [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/lib.rs:406:32 [INFO] [stderr] | [INFO] [stderr] 406 | fn type_hopefully_is(segments: &Vec, expected: &str) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::PathSegment]` [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: needlessly taken reference of both operands [INFO] [stderr] --> src/lib.rs:416:12 [INFO] [stderr] | [INFO] [stderr] 416 | if &segments[..] == &expected[expected.len() - len - 1..] { [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] 416 | if segments[..] == expected[expected.len() - len - 1..] { [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/lib.rs:424:21 [INFO] [stderr] | [INFO] [stderr] 424 | fn is_cow(segments: &Vec) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::PathSegment]` [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/lib.rs:428:27 [INFO] [stderr] | [INFO] [stderr] 428 | fn is_cow_alike(segments: &Vec) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::PathSegment]` [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/lib.rs:436:29 [INFO] [stderr] | [INFO] [stderr] 436 | fn is_opt_cow(mut segments: &Vec) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::PathSegment]` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lib.rs:440:13 [INFO] [stderr] | [INFO] [stderr] 440 | / match *segments.last().unwrap() { [INFO] [stderr] 441 | | syn::PathSegment { parameters: syn::PathParameters::AngleBracketed(ref data), .. } => { [INFO] [stderr] 442 | | if !data.lifetimes.is_empty() || !data.bindings.is_empty() { [INFO] [stderr] 443 | | // Option<&'a ?> cannot be moved but let the compiler complain [INFO] [stderr] ... | [INFO] [stderr] 462 | | _ => {} [INFO] [stderr] 463 | | } [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] 440 | if let syn::PathSegment { parameters: syn::PathParameters::AngleBracketed(ref data), .. } = *segments.last().unwrap() { [INFO] [stderr] 441 | if !data.lifetimes.is_empty() || !data.bindings.is_empty() { [INFO] [stderr] 442 | // Option<&'a ?> cannot be moved but let the compiler complain [INFO] [stderr] 443 | // don't know about data bindings [INFO] [stderr] 444 | break; [INFO] [stderr] 445 | } [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/lib.rs:476:32 [INFO] [stderr] | [INFO] [stderr] 476 | fn is_iter_field(mut segments: &Vec) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::PathSegment]` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lib.rs:480:13 [INFO] [stderr] | [INFO] [stderr] 480 | / match *segments.last().unwrap() { [INFO] [stderr] 481 | | syn::PathSegment { parameters: syn::PathParameters::AngleBracketed(ref data), .. } => { [INFO] [stderr] 482 | | if !data.lifetimes.is_empty() || !data.bindings.is_empty() { [INFO] [stderr] 483 | | break; [INFO] [stderr] ... | [INFO] [stderr] 499 | | _ => {} [INFO] [stderr] 500 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 480 | if let syn::PathSegment { parameters: syn::PathParameters::AngleBracketed(ref data), .. } = *segments.last().unwrap() { [INFO] [stderr] 481 | if !data.lifetimes.is_empty() || !data.bindings.is_empty() { [INFO] [stderr] 482 | break; [INFO] [stderr] 483 | } [INFO] [stderr] 484 | [INFO] [stderr] 485 | if data.types.len() != 1 { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:138:58 [INFO] [stderr] | [INFO] [stderr] 138 | ast.generics.ty_params.iter().map(|ty| { let ref ident = &ty.ident; quote! { #ident } }) [INFO] [stderr] | ----^^^^^^^^^------------- help: try: `let ident = &(&ty.ident);` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:144:78 [INFO] [stderr] | [INFO] [stderr] 144 | let owned_type_params = ast.generics.ty_params.iter().map(|ty| { let ref ident = &ty.ident; quote! { #ident } }); [INFO] [stderr] | ----^^^^^^^^^------------- help: try: `let ident = &(&ty.ident);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:195:29 [INFO] [stderr] | [INFO] [stderr] 195 | let ref ident = field.ident.as_ref().unwrap(); [INFO] [stderr] | ----^^^^^^^^^--------------------------------- help: try: `let ident = &field.ident.as_ref().unwrap();` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:237:78 [INFO] [stderr] | [INFO] [stderr] 237 | let owned_type_params = ast.generics.ty_params.iter().map(|ty| { let ref ident = &ty.ident; quote! { #ident } }); [INFO] [stderr] | ----^^^^^^^^^------------- help: try: `let ident = &(&ty.ident);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:279:29 [INFO] [stderr] | [INFO] [stderr] 279 | let ref ident = field.ident.as_ref().unwrap(); [INFO] [stderr] | ----^^^^^^^^^--------------------------------- help: try: `let ident = &field.ident.as_ref().unwrap();` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:327:9 [INFO] [stderr] | [INFO] [stderr] 327 | / match &field.ty { [INFO] [stderr] 328 | | &syn::Ty::Path(None, syn::Path { ref segments, .. }) => { [INFO] [stderr] 329 | | if is_cow(segments) { [INFO] [stderr] 330 | | FieldKind::PlainCow [INFO] [stderr] ... | [INFO] [stderr] 341 | | _ => FieldKind::JustMoved, [INFO] [stderr] 342 | | } [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] 327 | match field.ty { [INFO] [stderr] 328 | syn::Ty::Path(None, syn::Path { ref segments, .. }) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:348:9 [INFO] [stderr] | [INFO] [stderr] 348 | / match self { [INFO] [stderr] 349 | | &PlainCow => quote! { ::std::borrow::Cow::Owned(#var.into_owned()) }, [INFO] [stderr] 350 | | &AssumedCow => quote! { #var.into_owned() }, [INFO] [stderr] 351 | | &OptField(levels, ref inner) => { [INFO] [stderr] ... | [INFO] [stderr] 371 | | &JustMoved => quote! { #var }, [INFO] [stderr] 372 | | } [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] 348 | match *self { [INFO] [stderr] 349 | PlainCow => quote! { ::std::borrow::Cow::Owned(#var.into_owned()) }, [INFO] [stderr] 350 | AssumedCow => quote! { #var.into_owned() }, [INFO] [stderr] 351 | OptField(levels, ref inner) => { [INFO] [stderr] 352 | let next = syn::Ident::from("val"); [INFO] [stderr] 353 | let next = quote! { #next }; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:378:9 [INFO] [stderr] | [INFO] [stderr] 378 | / match self { [INFO] [stderr] 379 | | &PlainCow => quote! { ::std::borrow::Cow::Borrowed(#var.as_ref()) }, [INFO] [stderr] 380 | | &AssumedCow => quote! { #var.borrowed() }, [INFO] [stderr] 381 | | &OptField(levels, ref inner) => { [INFO] [stderr] ... | [INFO] [stderr] 401 | | &JustMoved => quote! { #var.clone() }, [INFO] [stderr] 402 | | } [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] 378 | match *self { [INFO] [stderr] 379 | PlainCow => quote! { ::std::borrow::Cow::Borrowed(#var.as_ref()) }, [INFO] [stderr] 380 | AssumedCow => quote! { #var.borrowed() }, [INFO] [stderr] 381 | OptField(levels, ref inner) => { [INFO] [stderr] 382 | let next = syn::Ident::from("val"); [INFO] [stderr] 383 | let next = quote! { #next }; [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/lib.rs:406:32 [INFO] [stderr] | [INFO] [stderr] 406 | fn type_hopefully_is(segments: &Vec, expected: &str) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::PathSegment]` [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: needlessly taken reference of both operands [INFO] [stderr] --> src/lib.rs:416:12 [INFO] [stderr] | [INFO] [stderr] 416 | if &segments[..] == &expected[expected.len() - len - 1..] { [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] 416 | if segments[..] == expected[expected.len() - len - 1..] { [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/lib.rs:424:21 [INFO] [stderr] | [INFO] [stderr] 424 | fn is_cow(segments: &Vec) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::PathSegment]` [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/lib.rs:428:27 [INFO] [stderr] | [INFO] [stderr] 428 | fn is_cow_alike(segments: &Vec) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::PathSegment]` [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/lib.rs:436:29 [INFO] [stderr] | [INFO] [stderr] 436 | fn is_opt_cow(mut segments: &Vec) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::PathSegment]` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lib.rs:440:13 [INFO] [stderr] | [INFO] [stderr] 440 | / match *segments.last().unwrap() { [INFO] [stderr] 441 | | syn::PathSegment { parameters: syn::PathParameters::AngleBracketed(ref data), .. } => { [INFO] [stderr] 442 | | if !data.lifetimes.is_empty() || !data.bindings.is_empty() { [INFO] [stderr] 443 | | // Option<&'a ?> cannot be moved but let the compiler complain [INFO] [stderr] ... | [INFO] [stderr] 462 | | _ => {} [INFO] [stderr] 463 | | } [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] 440 | if let syn::PathSegment { parameters: syn::PathParameters::AngleBracketed(ref data), .. } = *segments.last().unwrap() { [INFO] [stderr] 441 | if !data.lifetimes.is_empty() || !data.bindings.is_empty() { [INFO] [stderr] 442 | // Option<&'a ?> cannot be moved but let the compiler complain [INFO] [stderr] 443 | // don't know about data bindings [INFO] [stderr] 444 | break; [INFO] [stderr] 445 | } [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/lib.rs:476:32 [INFO] [stderr] | [INFO] [stderr] 476 | fn is_iter_field(mut segments: &Vec) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::PathSegment]` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lib.rs:480:13 [INFO] [stderr] | [INFO] [stderr] 480 | / match *segments.last().unwrap() { [INFO] [stderr] 481 | | syn::PathSegment { parameters: syn::PathParameters::AngleBracketed(ref data), .. } => { [INFO] [stderr] 482 | | if !data.lifetimes.is_empty() || !data.bindings.is_empty() { [INFO] [stderr] 483 | | break; [INFO] [stderr] ... | [INFO] [stderr] 499 | | _ => {} [INFO] [stderr] 500 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 480 | if let syn::PathSegment { parameters: syn::PathParameters::AngleBracketed(ref data), .. } = *segments.last().unwrap() { [INFO] [stderr] 481 | if !data.lifetimes.is_empty() || !data.bindings.is_empty() { [INFO] [stderr] 482 | break; [INFO] [stderr] 483 | } [INFO] [stderr] 484 | [INFO] [stderr] 485 | if data.types.len() != 1 { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "31f772e84e7f7b91057e02227715ecce97baf91e8b06d634c754a207d0c714ef"` [INFO] running `"docker" "rm" "-f" "31f772e84e7f7b91057e02227715ecce97baf91e8b06d634c754a207d0c714ef"` [INFO] [stdout] 31f772e84e7f7b91057e02227715ecce97baf91e8b06d634c754a207d0c714ef