[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 for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/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" "-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] 68e0a40ddc4c03867abdc3d60c6ef2ee2ea5cc9c886fa50df035a5ae8b0b3c58 [INFO] running `"docker" "start" "-a" "68e0a40ddc4c03867abdc3d60c6ef2ee2ea5cc9c886fa50df035a5ae8b0b3c58"` [INFO] [stderr] Compiling derive-into-owned v0.1.0 (/opt/crater/workdir) [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] warning: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> tests/vec.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | let foo = Foo { bees: vec![Bar { s: Cow::Borrowed(&local) }], cees: vec![] }; [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: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> tests/vec.rs:26:18 [INFO] [stderr] | [INFO] [stderr] 26 | fn accept_static(foo: Foo<'static>) { [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blacklisted_name [INFO] [stderr] [INFO] [stderr] warning: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> tests/generic_tuple_struct.rs:14:9 [INFO] [stderr] | [INFO] [stderr] 14 | let foo = Foo(Cow::Borrowed(&non_static_string)); [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: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> tests/generic_tuple_struct.rs:20:9 [INFO] [stderr] | [INFO] [stderr] 20 | let foo = Foo(Cow::Borrowed(&non_static_vec[..])); [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blacklisted_name [INFO] [stderr] [INFO] [stderr] warning: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> tests/simple_enum.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | let foo = Foo::Str(Cow::Borrowed(&s)); [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: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> tests/simple_enum.rs:20:9 [INFO] [stderr] | [INFO] [stderr] 20 | let foo = Foo::Bytes(Cow::Borrowed(&v[..])); [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blacklisted_name [INFO] [stderr] [INFO] [stderr] error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing. [INFO] [stderr] --> tests/borrowed.rs:35:5 [INFO] [stderr] | [INFO] [stderr] 35 | drop(lives_longer); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::drop_ref)] on by default [INFO] [stderr] note: argument has type &Foo<'a> [INFO] [stderr] --> tests/borrowed.rs:35:10 [INFO] [stderr] | [INFO] [stderr] 35 | drop(lives_longer); [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#drop_ref [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `derive-into-owned`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: consider using `Option` instead of `Option>` or a custom enum if you need to distinguish all 3 cases [INFO] [stderr] --> tests/opt_field.rs:15:12 [INFO] [stderr] | [INFO] [stderr] 15 | field: Option>>>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_option)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_option [INFO] [stderr] [INFO] [stderr] warning: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> tests/opt_field.rs:27:9 [INFO] [stderr] | [INFO] [stderr] 27 | let foo = Foo { field: Some(Cow::Borrowed(&s)) }; [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: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> tests/opt_field.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | let foo = Foo { field: None }; [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blacklisted_name [INFO] [stderr] [INFO] [stderr] warning: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> tests/tuple_struct.rs:28:9 [INFO] [stderr] | [INFO] [stderr] 28 | let foo = Foo(Cow::Borrowed(&non_static_string)); [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: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> tests/variant_enum.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | let foo = Foo::Str { a: Cow::Borrowed(&s), b: 32 }; [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: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> tests/variant_enum.rs:20:9 [INFO] [stderr] | [INFO] [stderr] 20 | let foo = Foo::Bytes { a: false, b: Cow::Borrowed(&v[..]) }; [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blacklisted_name [INFO] [stderr] [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "68e0a40ddc4c03867abdc3d60c6ef2ee2ea5cc9c886fa50df035a5ae8b0b3c58"` [INFO] running `"docker" "rm" "-f" "68e0a40ddc4c03867abdc3d60c6ef2ee2ea5cc9c886fa50df035a5ae8b0b3c58"` [INFO] [stdout] 68e0a40ddc4c03867abdc3d60c6ef2ee2ea5cc9c886fa50df035a5ae8b0b3c58