[INFO] crate xdrgen 0.4.4 is already in cache [INFO] extracting crate xdrgen 0.4.4 into work/ex/clippy-test-run/sources/stable/reg/xdrgen/0.4.4 [INFO] extracting crate xdrgen 0.4.4 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/xdrgen/0.4.4 [INFO] validating manifest of xdrgen-0.4.4 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of xdrgen-0.4.4 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing xdrgen-0.4.4 [INFO] finished frobbing xdrgen-0.4.4 [INFO] frobbed toml for xdrgen-0.4.4 written to work/ex/clippy-test-run/sources/stable/reg/xdrgen/0.4.4/Cargo.toml [INFO] started frobbing xdrgen-0.4.4 [INFO] finished frobbing xdrgen-0.4.4 [INFO] frobbed toml for xdrgen-0.4.4 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/xdrgen/0.4.4/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting xdrgen-0.4.4 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/xdrgen/0.4.4:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 891699be0353c4e8f172f29d87034cfb93a1d0ac348b724a422738c9b9ceb54e [INFO] running `"docker" "start" "-a" "891699be0353c4e8f172f29d87034cfb93a1d0ac348b724a422738c9b9ceb54e"` [INFO] [stderr] Checking quote v0.3.15 [INFO] [stderr] Checking memchr v1.0.2 [INFO] [stderr] Checking env_logger v0.4.3 [INFO] [stderr] Checking xdr-codec v0.4.4 [INFO] [stderr] Checking nom v3.2.1 [INFO] [stderr] Checking xdrgen v0.4.4 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/spec/xdr_nom.rs:11:20 [INFO] [stderr] | [INFO] [stderr] 11 | fn ignore(_: T) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit expression [INFO] [stderr] --> src/spec/xdr_nom.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | () [INFO] [stderr] | ^^ help: remove the final `()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/spec/xdr_nom.rs:11:20 [INFO] [stderr] | [INFO] [stderr] 11 | fn ignore(_: T) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit expression [INFO] [stderr] --> src/spec/xdr_nom.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | () [INFO] [stderr] | ^^ help: remove the final `()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/spec/mod.rs:637:36 [INFO] [stderr] | [INFO] [stderr] 637 | } else { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 638 | | if let &Type::Ident(ref selname, _) = seltype { [INFO] [stderr] 639 | | match symtab.getconst(id) { [INFO] [stderr] 640 | | Some((_, Some(ref scope))) => scope == selname, [INFO] [stderr] ... | [INFO] [stderr] 645 | | } [INFO] [stderr] 646 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 637 | } else if let &Type::Ident(ref selname, _) = seltype { [INFO] [stderr] 638 | match symtab.getconst(id) { [INFO] [stderr] 639 | Some((_, Some(ref scope))) => scope == selname, [INFO] [stderr] 640 | _ => false, [INFO] [stderr] 641 | } [INFO] [stderr] 642 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/spec/mod.rs:637:36 [INFO] [stderr] | [INFO] [stderr] 637 | } else { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 638 | | if let &Type::Ident(ref selname, _) = seltype { [INFO] [stderr] 639 | | match symtab.getconst(id) { [INFO] [stderr] 640 | | Some((_, Some(ref scope))) => scope == selname, [INFO] [stderr] ... | [INFO] [stderr] 645 | | } [INFO] [stderr] 646 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 637 | } else if let &Type::Ident(ref selname, _) = seltype { [INFO] [stderr] 638 | match symtab.getconst(id) { [INFO] [stderr] 639 | Some((_, Some(ref scope))) => scope == selname, [INFO] [stderr] 640 | _ => false, [INFO] [stderr] 641 | } [INFO] [stderr] 642 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/spec/mod.rs:225:13 [INFO] [stderr] | [INFO] [stderr] 225 | let mut memo = match memo { [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/spec/xdr_nom.rs:21:8 [INFO] [stderr] | [INFO] [stderr] 21 | if input.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `input.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/spec/mod.rs:225:13 [INFO] [stderr] | [INFO] [stderr] 225 | let mut memo = match memo { [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `1` [INFO] [stderr] --> src/spec/mod.rs:21:22 [INFO] [stderr] | [INFO] [stderr] 21 | const COPY = 1 << 0; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/spec/mod.rs:76:9 [INFO] [stderr] | [INFO] [stderr] 76 | kws.into_iter().map(|x| *x).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `kws.into_iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/spec/mod.rs:76:13 [INFO] [stderr] | [INFO] [stderr] 76 | kws.into_iter().map(|x| *x).collect() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:102:9 [INFO] [stderr] | [INFO] [stderr] 102 | / match self { [INFO] [stderr] 103 | | &Value::Ident(ref id) => quote_ident(id), [INFO] [stderr] 104 | | &Value::Const(val) => { [INFO] [stderr] 105 | | quote::Ident::new(format!( [INFO] [stderr] ... | [INFO] [stderr] 110 | | } [INFO] [stderr] 111 | | } [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 102 | match *self { [INFO] [stderr] 103 | Value::Ident(ref id) => quote_ident(id), [INFO] [stderr] 104 | Value::Const(val) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:119:9 [INFO] [stderr] | [INFO] [stderr] 119 | / match self { [INFO] [stderr] 120 | | &Value::Const(c) => quote!(#c), [INFO] [stderr] 121 | | &Value::Ident(ref id) => { [INFO] [stderr] 122 | | let tok = quote_ident(id.as_str()); [INFO] [stderr] ... | [INFO] [stderr] 129 | | } [INFO] [stderr] 130 | | } [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] 119 | match *self { [INFO] [stderr] 120 | Value::Const(c) => quote!(#c), [INFO] [stderr] 121 | Value::Ident(ref id) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:190:9 [INFO] [stderr] | [INFO] [stderr] 190 | / match self { [INFO] [stderr] 191 | | _ if self.is_prim(symtab) => false, [INFO] [stderr] 192 | | &Array(_, _) | &Flex(_, _) | &Option(_) => false, [INFO] [stderr] 193 | | &Ident(ref name, _) => { [INFO] [stderr] ... | [INFO] [stderr] 200 | | _ => true, [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 190 | match *self { [INFO] [stderr] 191 | _ if self.is_prim(symtab) => false, [INFO] [stderr] 192 | Array(_, _) | Flex(_, _) | Option(_) => false, [INFO] [stderr] 193 | Ident(ref name, _) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:207:9 [INFO] [stderr] | [INFO] [stderr] 207 | / match self { [INFO] [stderr] 208 | | &Int | &UInt | &Hyper | &UHyper | &Float | &Double | &Quadruple | &Bool => true, [INFO] [stderr] 209 | | [INFO] [stderr] 210 | | &Ident(ref id, _) => { [INFO] [stderr] ... | [INFO] [stderr] 217 | | _ => false, [INFO] [stderr] 218 | | } [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] 207 | match *self { [INFO] [stderr] 208 | Int | UInt | Hyper | UHyper | Float | Double | Quadruple | Bool => true, [INFO] [stderr] 209 | [INFO] [stderr] 210 | Ident(ref id, _) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:294:19 [INFO] [stderr] | [INFO] [stderr] 294 | let res = match self { [INFO] [stderr] | ___________________^ [INFO] [stderr] 295 | | &Enum(_) => quote!((*#val as i32).pack(out)?), [INFO] [stderr] 296 | | [INFO] [stderr] 297 | | &Flex(ref ty, ref maxsz) => { [INFO] [stderr] ... | [INFO] [stderr] 323 | | _ => quote!(#val.pack(out)?), [INFO] [stderr] 324 | | }; [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] 294 | let res = match *self { [INFO] [stderr] 295 | Enum(_) => quote!((*#val as i32).pack(out)?), [INFO] [stderr] 296 | [INFO] [stderr] 297 | Flex(ref ty, ref maxsz) => { [INFO] [stderr] 298 | let ty = ty.as_ref(); [INFO] [stderr] 299 | let maxsz = match maxsz { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:299:29 [INFO] [stderr] | [INFO] [stderr] 299 | let maxsz = match maxsz { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 300 | | &None => quote!(None), [INFO] [stderr] 301 | | &Some(ref mx) => { [INFO] [stderr] 302 | | let mx = mx.as_token(symtab); [INFO] [stderr] 303 | | quote!(Some(#mx as usize)) [INFO] [stderr] 304 | | } [INFO] [stderr] 305 | | }; [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] 299 | let maxsz = match *maxsz { [INFO] [stderr] 300 | None => quote!(None), [INFO] [stderr] 301 | Some(ref mx) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:306:17 [INFO] [stderr] | [INFO] [stderr] 306 | / match ty { [INFO] [stderr] 307 | | &Opaque => quote!(xdr_codec::pack_opaque_flex(&#val, #maxsz, out)?), [INFO] [stderr] 308 | | &String => quote!(xdr_codec::pack_string(&#val, #maxsz, out)?), [INFO] [stderr] 309 | | _ => quote!(xdr_codec::pack_flex(&#val, #maxsz, out)?), [INFO] [stderr] 310 | | } [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] 306 | match *ty { [INFO] [stderr] 307 | Opaque => quote!(xdr_codec::pack_opaque_flex(&#val, #maxsz, out)?), [INFO] [stderr] 308 | String => quote!(xdr_codec::pack_string(&#val, #maxsz, out)?), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:315:17 [INFO] [stderr] | [INFO] [stderr] 315 | / match ty { [INFO] [stderr] 316 | | &Opaque | &String => { [INFO] [stderr] 317 | | quote!(xdr_codec::pack_opaque_array(&#val[..], #val.len(), out)?) [INFO] [stderr] 318 | | } [INFO] [stderr] 319 | | _ => quote!(xdr_codec::pack_array(&#val[..], #val.len(), out, None)?), [INFO] [stderr] 320 | | } [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] 315 | match *ty { [INFO] [stderr] 316 | Opaque | String => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:333:9 [INFO] [stderr] | [INFO] [stderr] 333 | / match self { [INFO] [stderr] 334 | | &Opaque | &String | &Option(_) | &Ident(..) | &Int | &UInt | &Hyper | &UHyper | [INFO] [stderr] 335 | | &Float | &Double | &Quadruple | &Bool => true, [INFO] [stderr] 336 | | _ => false, [INFO] [stderr] 337 | | } [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] 333 | match *self { [INFO] [stderr] 334 | Opaque | String | Option(_) | Ident(..) | Int | UInt | Hyper | UHyper | [INFO] [stderr] 335 | Float | Double | Quadruple | Bool => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:343:9 [INFO] [stderr] | [INFO] [stderr] 343 | / match self { [INFO] [stderr] 344 | | &Array(ref ty, ref value) => { [INFO] [stderr] 345 | | let ty = ty.as_ref(); [INFO] [stderr] 346 | | let value = value.as_token(symtab); [INFO] [stderr] ... | [INFO] [stderr] 384 | | _ => quote!(xdr_codec::Unpack::unpack(input)?), [INFO] [stderr] 385 | | } [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] 343 | match *self { [INFO] [stderr] 344 | Array(ref ty, ref value) => { [INFO] [stderr] 345 | let ty = ty.as_ref(); [INFO] [stderr] 346 | let value = value.as_token(symtab); [INFO] [stderr] 347 | [INFO] [stderr] 348 | match ty { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:369:29 [INFO] [stderr] | [INFO] [stderr] 369 | let maxsz = match maxsz { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 370 | | &None => quote!(None), [INFO] [stderr] 371 | | &Some(ref mx) => { [INFO] [stderr] 372 | | let mx = mx.as_token(symtab); [INFO] [stderr] 373 | | quote!(Some(#mx as usize)) [INFO] [stderr] 374 | | } [INFO] [stderr] 375 | | }; [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] 369 | let maxsz = match *maxsz { [INFO] [stderr] 370 | None => quote!(None), [INFO] [stderr] 371 | Some(ref mx) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:377:17 [INFO] [stderr] | [INFO] [stderr] 377 | / match ty { [INFO] [stderr] 378 | | &String => quote!(xdr_codec::unpack_string(input, #maxsz)?), [INFO] [stderr] 379 | | &Opaque => quote!(xdr_codec::unpack_opaque_flex(input, #maxsz)?), [INFO] [stderr] 380 | | _ => quote!(xdr_codec::unpack_flex(input, #maxsz)?), [INFO] [stderr] 381 | | } [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] 377 | match *ty { [INFO] [stderr] 378 | String => quote!(xdr_codec::unpack_string(input, #maxsz)?), [INFO] [stderr] 379 | Opaque => quote!(xdr_codec::unpack_opaque_flex(input, #maxsz)?), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:391:19 [INFO] [stderr] | [INFO] [stderr] 391 | let ret = match self { [INFO] [stderr] | ___________________^ [INFO] [stderr] 392 | | &Int => quote!(i32), [INFO] [stderr] 393 | | &UInt => quote!(u32), [INFO] [stderr] 394 | | &Hyper => quote!(i64), [INFO] [stderr] ... | [INFO] [stderr] 446 | | _ => return Err(format!("can't have unnamed type {:?}", self).into()), [INFO] [stderr] 447 | | }; [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] 391 | let ret = match *self { [INFO] [stderr] 392 | Int => quote!(i32), [INFO] [stderr] 393 | UInt => quote!(u32), [INFO] [stderr] 394 | Hyper => quote!(i64), [INFO] [stderr] 395 | UHyper => quote!(u64), [INFO] [stderr] 396 | Float => quote!(f32), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:477:9 [INFO] [stderr] | [INFO] [stderr] 477 | / match self { [INFO] [stderr] 478 | | &Void => None, [INFO] [stderr] 479 | | &Named(ref name, ref ty) => Some((quote_ident(name), ty)), [INFO] [stderr] 480 | | } [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] 477 | match *self { [INFO] [stderr] 478 | Void => None, [INFO] [stderr] 479 | Named(ref name, ref ty) => Some((quote_ident(name), ty)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this boolean expression contains a logic bug [INFO] [stderr] --> src/spec/mod.rs:490:20 [INFO] [stderr] | [INFO] [stderr] 490 | if false && ty.is_boxed(symtab) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: it would look like the following: `false` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::logic_bug)] on by default [INFO] [stderr] help: this expression can be optimized out by applying boolean operations to the outer expression [INFO] [stderr] --> src/spec/mod.rs:490:29 [INFO] [stderr] | [INFO] [stderr] 490 | if false && ty.is_boxed(symtab) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#logic_bug [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:485:9 [INFO] [stderr] | [INFO] [stderr] 485 | / match self { [INFO] [stderr] 486 | | &Void => Ok(None), [INFO] [stderr] 487 | | &Named(ref name, ref ty) => { [INFO] [stderr] 488 | | let nametok = quote_ident(name.as_str()); [INFO] [stderr] ... | [INFO] [stderr] 494 | | } [INFO] [stderr] 495 | | } [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] 485 | match *self { [INFO] [stderr] 486 | Void => Ok(None), [INFO] [stderr] 487 | Named(ref name, ref ty) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:500:9 [INFO] [stderr] | [INFO] [stderr] 500 | / match self { [INFO] [stderr] 501 | | &Void => Derives::all(), [INFO] [stderr] 502 | | &Named(_, ref ty) => ty.derivable(symtab, Some(memo)), [INFO] [stderr] 503 | | } [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] 500 | match *self { [INFO] [stderr] 501 | Void => Derives::all(), [INFO] [stderr] 502 | Named(_, ref ty) => ty.derivable(symtab, Some(memo)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:573:19 [INFO] [stderr] | [INFO] [stderr] 573 | let ret = match ty { [INFO] [stderr] | ___________________^ [INFO] [stderr] 574 | | &Enum(ref edefs) => { [INFO] [stderr] 575 | | let defs: Vec<_> = edefs [INFO] [stderr] 576 | | .iter() [INFO] [stderr] ... | [INFO] [stderr] 718 | | } [INFO] [stderr] 719 | | }; [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] 573 | let ret = match *ty { [INFO] [stderr] 574 | Enum(ref edefs) => { [INFO] [stderr] 575 | let defs: Vec<_> = edefs [INFO] [stderr] 576 | .iter() [INFO] [stderr] 577 | .filter_map(|&EnumDefn(ref field, _)| if let Some((val, Some(_))) = [INFO] [stderr] 578 | symtab.getconst(field) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:614:35 [INFO] [stderr] | [INFO] [stderr] 614 | let seltype = match selector { [INFO] [stderr] | ___________________________________^ [INFO] [stderr] 615 | | &Void => return false, [INFO] [stderr] 616 | | &Named(_, ref ty) => ty, [INFO] [stderr] 617 | | }; [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] 614 | let seltype = match *selector { [INFO] [stderr] 615 | Void => return false, [INFO] [stderr] 616 | Named(_, ref ty) => ty, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:619:21 [INFO] [stderr] | [INFO] [stderr] 619 | / match case { [INFO] [stderr] 620 | | &Const(val) if val < 0 => { [INFO] [stderr] 621 | | match seltype { [INFO] [stderr] 622 | | &Int | &Hyper => true, [INFO] [stderr] ... | [INFO] [stderr] 647 | | } [INFO] [stderr] 648 | | } [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] 619 | match *case { [INFO] [stderr] 620 | Const(val) if val < 0 => { [INFO] [stderr] 621 | match seltype { [INFO] [stderr] 622 | &Int | &Hyper => true, [INFO] [stderr] 623 | _ => false, [INFO] [stderr] 624 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:621:29 [INFO] [stderr] | [INFO] [stderr] 621 | / match seltype { [INFO] [stderr] 622 | | &Int | &Hyper => true, [INFO] [stderr] 623 | | _ => false, [INFO] [stderr] 624 | | } [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] 621 | match *seltype { [INFO] [stderr] 622 | Int | Hyper => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:628:29 [INFO] [stderr] | [INFO] [stderr] 628 | / match seltype { [INFO] [stderr] 629 | | &Int | &Hyper | &UInt | &UHyper => true, [INFO] [stderr] 630 | | _ => false, [INFO] [stderr] 631 | | } [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] 628 | match *seltype { [INFO] [stderr] 629 | Int | Hyper | UInt | UHyper => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:638:33 [INFO] [stderr] | [INFO] [stderr] 638 | / if let &Type::Ident(ref selname, _) = seltype { [INFO] [stderr] 639 | | match symtab.getconst(id) { [INFO] [stderr] 640 | | Some((_, Some(ref scope))) => scope == selname, [INFO] [stderr] 641 | | _ => false, [INFO] [stderr] ... | [INFO] [stderr] 644 | | false [INFO] [stderr] 645 | | } [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] 638 | if let Type::Ident(ref selname, _) = *seltype { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: this boolean expression contains a logic bug [INFO] [stderr] --> src/spec/mod.rs:666:36 [INFO] [stderr] | [INFO] [stderr] 666 | if false && ty.is_boxed(symtab) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: it would look like the following: `false` [INFO] [stderr] | [INFO] [stderr] help: this expression can be optimized out by applying boolean operations to the outer expression [INFO] [stderr] --> src/spec/mod.rs:666:45 [INFO] [stderr] | [INFO] [stderr] 666 | if false && ty.is_boxed(symtab) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#logic_bug [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:662:25 [INFO] [stderr] | [INFO] [stderr] 662 | / match decl { [INFO] [stderr] 663 | | &Void => Ok(quote!(#label,)), [INFO] [stderr] 664 | | &Named(ref name, ref ty) => { [INFO] [stderr] 665 | | let mut tok = ty.as_token(symtab)?; [INFO] [stderr] ... | [INFO] [stderr] 675 | | } [INFO] [stderr] 676 | | } [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] 662 | match *decl { [INFO] [stderr] 663 | Void => Ok(quote!(#label,)), [INFO] [stderr] 664 | Named(ref name, ref ty) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:680:17 [INFO] [stderr] | [INFO] [stderr] 680 | / if let &Some(ref def_val) = defl { [INFO] [stderr] 681 | | let def_val = def_val.as_ref(); [INFO] [stderr] 682 | | match def_val { [INFO] [stderr] 683 | | &Named(ref name, ref ty) => { [INFO] [stderr] ... | [INFO] [stderr] 696 | | } [INFO] [stderr] 697 | | } [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] 680 | if let Some(ref def_val) = *defl { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:682:21 [INFO] [stderr] | [INFO] [stderr] 682 | / match def_val { [INFO] [stderr] 683 | | &Named(ref name, ref ty) => { [INFO] [stderr] 684 | | let mut tok = ty.as_token(symtab)?; [INFO] [stderr] 685 | | if ty.is_boxed(symtab) { [INFO] [stderr] ... | [INFO] [stderr] 695 | | &Void => cases.push(quote!(default,)), [INFO] [stderr] 696 | | } [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] 682 | match *def_val { [INFO] [stderr] 683 | Named(ref name, ref ty) => { [INFO] [stderr] 684 | let mut tok = ty.as_token(symtab)?; [INFO] [stderr] 685 | if ty.is_boxed(symtab) { [INFO] [stderr] 686 | tok = quote!(Box<#tok>) [INFO] [stderr] 687 | }; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:733:28 [INFO] [stderr] | [INFO] [stderr] 733 | let body: Tokens = match ty { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 734 | | &Enum(_) => { [INFO] [stderr] 735 | | directive = quote!(#[inline]); [INFO] [stderr] 736 | | ty.packer(quote!(self), symtab)? [INFO] [stderr] ... | [INFO] [stderr] 807 | | } [INFO] [stderr] 808 | | }; [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] 733 | let body: Tokens = match *ty { [INFO] [stderr] 734 | Enum(_) => { [INFO] [stderr] 735 | directive = quote!(#[inline]); [INFO] [stderr] 736 | ty.packer(quote!(self), symtab)? [INFO] [stderr] 737 | } [INFO] [stderr] 738 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:741:37 [INFO] [stderr] | [INFO] [stderr] 741 | .filter_map(|d| match d { [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 742 | | &Void => None, [INFO] [stderr] 743 | | &Named(ref name, ref ty) => Some((quote_ident(name), ty)), [INFO] [stderr] 744 | | }) [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] 741 | .filter_map(|d| match *d { [INFO] [stderr] 742 | Void => None, [INFO] [stderr] 743 | Named(ref name, ref ty) => Some((quote_ident(name), ty)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:760:35 [INFO] [stderr] | [INFO] [stderr] 760 | let ret = match decl { [INFO] [stderr] | ___________________________________^ [INFO] [stderr] 761 | | &Void => quote!(&#name::#label => (#disc as i32).pack(out)?,), [INFO] [stderr] 762 | | &Named(_, ref ty) => { [INFO] [stderr] 763 | | let pack = match ty.packer(quote!(val), symtab) { [INFO] [stderr] ... | [INFO] [stderr] 768 | | } [INFO] [stderr] 769 | | }; [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] 760 | let ret = match *decl { [INFO] [stderr] 761 | Void => quote!(&#name::#label => (#disc as i32).pack(out)?,), [INFO] [stderr] 762 | Named(_, ref ty) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:774:17 [INFO] [stderr] | [INFO] [stderr] 774 | / if let &Some(ref decl) = defl { [INFO] [stderr] 775 | | let decl = decl.as_ref(); [INFO] [stderr] 776 | | // Can't cast a value-carrying enum to i32 [INFO] [stderr] 777 | | let default = match decl { [INFO] [stderr] ... | [INFO] [stderr] 790 | | matches.push(default) [INFO] [stderr] 791 | | } [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] 774 | if let Some(ref decl) = *defl { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:777:35 [INFO] [stderr] | [INFO] [stderr] 777 | let default = match decl { [INFO] [stderr] | ___________________________________^ [INFO] [stderr] 778 | | &Void => { [INFO] [stderr] 779 | | quote! { [INFO] [stderr] 780 | | &#name::default => return Err(xdr_codec::Error::invalidcase(-1)), [INFO] [stderr] ... | [INFO] [stderr] 787 | | } [INFO] [stderr] 788 | | }; [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] 777 | let default = match *decl { [INFO] [stderr] 778 | Void => { [INFO] [stderr] 779 | quote! { [INFO] [stderr] 780 | &#name::default => return Err(xdr_codec::Error::invalidcase(-1)), [INFO] [stderr] 781 | } [INFO] [stderr] 782 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:830:20 [INFO] [stderr] | [INFO] [stderr] 830 | let body = match ty { [INFO] [stderr] | ____________________^ [INFO] [stderr] 831 | | &Enum(ref defs) => { [INFO] [stderr] 832 | | directive = quote!(#[inline]); [INFO] [stderr] 833 | | let matchdefs: Vec<_> = defs.iter() [INFO] [stderr] ... | [INFO] [stderr] 938 | | _ => return Err(Error::from(format!("unimplemented ty={:?}", ty))), [INFO] [stderr] 939 | | }; [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] 830 | let body = match *ty { [INFO] [stderr] 831 | Enum(ref defs) => { [INFO] [stderr] 832 | directive = quote!(#[inline]); [INFO] [stderr] 833 | let matchdefs: Vec<_> = defs.iter() [INFO] [stderr] 834 | .filter_map(|&EnumDefn(ref name, _)| { [INFO] [stderr] 835 | let tok = quote_ident(name); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:838:29 [INFO] [stderr] | [INFO] [stderr] 838 | / if let &Some(ref scope) = scope { [INFO] [stderr] 839 | | let scope = quote_ident(scope); [INFO] [stderr] 840 | | // Some(quote!(#val => #scope :: #tok,)) [INFO] [stderr] 841 | | Some(quote!(x if x == #scope :: #tok as i32 => #scope :: #tok,)) [INFO] [stderr] ... | [INFO] [stderr] 844 | | Some(quote!(x if x == #tok as i32 => #tok,)) [INFO] [stderr] 845 | | } [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] 838 | if let Some(ref scope) = *scope { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:887:39 [INFO] [stderr] | [INFO] [stderr] 887 | let ret = match decl { [INFO] [stderr] | _______________________________________^ [INFO] [stderr] 888 | | //&Void => quote!(#disc => #name::#label,), [INFO] [stderr] 889 | | &Void => quote!(x if x == (#disc as i32) => #name::#label,), [INFO] [stderr] 890 | | &Named(_, ref ty) => { [INFO] [stderr] ... | [INFO] [stderr] 894 | | }, [INFO] [stderr] 895 | | }; [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] 887 | let ret = match *decl { [INFO] [stderr] 888 | //&Void => quote!(#disc => #name::#label,), [INFO] [stderr] 889 | Void => quote!(x if x == (#disc as i32) => #name::#label,), [INFO] [stderr] 890 | Named(_, ref ty) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:900:17 [INFO] [stderr] | [INFO] [stderr] 900 | / if let &Some(ref decl) = defl { [INFO] [stderr] 901 | | let decl = decl.as_ref(); [INFO] [stderr] 902 | | let defl = match decl { [INFO] [stderr] 903 | | &Void => quote!(_ => #name::default), [INFO] [stderr] ... | [INFO] [stderr] 917 | | matches.push(defl); [INFO] [stderr] 918 | | } [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] 900 | if let Some(ref decl) = *defl { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:902:32 [INFO] [stderr] | [INFO] [stderr] 902 | let defl = match decl { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 903 | | &Void => quote!(_ => #name::default), [INFO] [stderr] 904 | | &Named(_, ref ty) => { [INFO] [stderr] 905 | | let unpack = ty.unpacker(symtab); [INFO] [stderr] ... | [INFO] [stderr] 911 | | } [INFO] [stderr] 912 | | }; [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] 902 | let defl = match *decl { [INFO] [stderr] 903 | Void => quote!(_ => #name::default), [INFO] [stderr] 904 | Named(_, ref ty) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:920:33 [INFO] [stderr] | [INFO] [stderr] 920 | let selunpack = match sel { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 921 | | &Void => panic!("void switch selector?"), [INFO] [stderr] 922 | | &Named(_, ref ty) => ty.unpacker(symtab), [INFO] [stderr] 923 | | }; [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] 920 | let selunpack = match *sel { [INFO] [stderr] 921 | Void => panic!("void switch selector?"), [INFO] [stderr] 922 | Named(_, ref ty) => ty.unpacker(symtab), [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/spec/mod.rs:961:23 [INFO] [stderr] | [INFO] [stderr] 961 | pub fn new(defns: &Vec) -> Symtab { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[Defn]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/spec/mod.rs:973:40 [INFO] [stderr] | [INFO] [stderr] 973 | fn update_consts(&mut self, defns: &Vec) { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[Defn]` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:975:13 [INFO] [stderr] | [INFO] [stderr] 975 | / match defn { [INFO] [stderr] 976 | | &Defn::Typespec(ref name, ref ty) => { [INFO] [stderr] 977 | | self.deftype(name, ty); [INFO] [stderr] 978 | | self.update_enum_consts(name, ty); [INFO] [stderr] ... | [INFO] [stderr] 985 | | } [INFO] [stderr] 986 | | } [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] 975 | match *defn { [INFO] [stderr] 976 | Defn::Typespec(ref name, ref ty) => { [INFO] [stderr] 977 | self.deftype(name, ty); [INFO] [stderr] 978 | self.update_enum_consts(name, ty); [INFO] [stderr] 979 | } [INFO] [stderr] 980 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/spec/mod.rs:990:45 [INFO] [stderr] | [INFO] [stderr] 990 | fn update_enum_consts(&mut self, scope: &String, ty: &Type) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:994:9 [INFO] [stderr] | [INFO] [stderr] 994 | / if let &Type::Enum(ref edefn) = ty { [INFO] [stderr] 995 | | for &EnumDefn(ref name, ref maybeval) in edefn { [INFO] [stderr] 996 | | let v = match maybeval { [INFO] [stderr] 997 | | &None => prev + 1, [INFO] [stderr] ... | [INFO] [stderr] 1013 | | } [INFO] [stderr] 1014 | | } [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] 994 | if let Type::Enum(ref edefn) = *ty { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ ^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:996:25 [INFO] [stderr] | [INFO] [stderr] 996 | let v = match maybeval { [INFO] [stderr] | _________________________^ [INFO] [stderr] 997 | | &None => prev + 1, [INFO] [stderr] 998 | | &Some(ref val) => { [INFO] [stderr] 999 | | match self.value(val) { [INFO] [stderr] ... | [INFO] [stderr] 1006 | | } [INFO] [stderr] 1007 | | }; [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] 996 | let v = match *maybeval { [INFO] [stderr] 997 | None => prev + 1, [INFO] [stderr] 998 | Some(ref val) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/spec/mod.rs:1029:34 [INFO] [stderr] | [INFO] [stderr] 1029 | pub fn getconst(&self, name: &String) -> Option<(i64, Option)> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:1037:9 [INFO] [stderr] | [INFO] [stderr] 1037 | / match val { [INFO] [stderr] 1038 | | &Value::Const(c) => Some(c), [INFO] [stderr] 1039 | | &Value::Ident(ref id) => self.getconst(id).map(|(v, _)| v), [INFO] [stderr] 1040 | | } [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] 1037 | match *val { [INFO] [stderr] 1038 | Value::Const(c) => Some(c), [INFO] [stderr] 1039 | Value::Ident(ref id) => self.getconst(id).map(|(v, _)| v), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/spec/mod.rs:1043:34 [INFO] [stderr] | [INFO] [stderr] 1043 | pub fn typespec(&self, name: &String) -> Option<&Type> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/lib.rs:149:56 [INFO] [stderr] | [INFO] [stderr] 149 | let mut outdir = PathBuf::from(env::var("OUT_DIR").unwrap_or(String::from("."))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| String::from("."))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `xdrgen`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/spec/xdr_nom.rs:21:8 [INFO] [stderr] | [INFO] [stderr] 21 | if input.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `input.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `1` [INFO] [stderr] --> src/spec/mod.rs:21:22 [INFO] [stderr] | [INFO] [stderr] 21 | const COPY = 1 << 0; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/spec/mod.rs:76:9 [INFO] [stderr] | [INFO] [stderr] 76 | kws.into_iter().map(|x| *x).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `kws.into_iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/spec/mod.rs:76:13 [INFO] [stderr] | [INFO] [stderr] 76 | kws.into_iter().map(|x| *x).collect() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:102:9 [INFO] [stderr] | [INFO] [stderr] 102 | / match self { [INFO] [stderr] 103 | | &Value::Ident(ref id) => quote_ident(id), [INFO] [stderr] 104 | | &Value::Const(val) => { [INFO] [stderr] 105 | | quote::Ident::new(format!( [INFO] [stderr] ... | [INFO] [stderr] 110 | | } [INFO] [stderr] 111 | | } [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 102 | match *self { [INFO] [stderr] 103 | Value::Ident(ref id) => quote_ident(id), [INFO] [stderr] 104 | Value::Const(val) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:119:9 [INFO] [stderr] | [INFO] [stderr] 119 | / match self { [INFO] [stderr] 120 | | &Value::Const(c) => quote!(#c), [INFO] [stderr] 121 | | &Value::Ident(ref id) => { [INFO] [stderr] 122 | | let tok = quote_ident(id.as_str()); [INFO] [stderr] ... | [INFO] [stderr] 129 | | } [INFO] [stderr] 130 | | } [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] 119 | match *self { [INFO] [stderr] 120 | Value::Const(c) => quote!(#c), [INFO] [stderr] 121 | Value::Ident(ref id) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:190:9 [INFO] [stderr] | [INFO] [stderr] 190 | / match self { [INFO] [stderr] 191 | | _ if self.is_prim(symtab) => false, [INFO] [stderr] 192 | | &Array(_, _) | &Flex(_, _) | &Option(_) => false, [INFO] [stderr] 193 | | &Ident(ref name, _) => { [INFO] [stderr] ... | [INFO] [stderr] 200 | | _ => true, [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 190 | match *self { [INFO] [stderr] 191 | _ if self.is_prim(symtab) => false, [INFO] [stderr] 192 | Array(_, _) | Flex(_, _) | Option(_) => false, [INFO] [stderr] 193 | Ident(ref name, _) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:207:9 [INFO] [stderr] | [INFO] [stderr] 207 | / match self { [INFO] [stderr] 208 | | &Int | &UInt | &Hyper | &UHyper | &Float | &Double | &Quadruple | &Bool => true, [INFO] [stderr] 209 | | [INFO] [stderr] 210 | | &Ident(ref id, _) => { [INFO] [stderr] ... | [INFO] [stderr] 217 | | _ => false, [INFO] [stderr] 218 | | } [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] 207 | match *self { [INFO] [stderr] 208 | Int | UInt | Hyper | UHyper | Float | Double | Quadruple | Bool => true, [INFO] [stderr] 209 | [INFO] [stderr] 210 | Ident(ref id, _) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:294:19 [INFO] [stderr] | [INFO] [stderr] 294 | let res = match self { [INFO] [stderr] | ___________________^ [INFO] [stderr] 295 | | &Enum(_) => quote!((*#val as i32).pack(out)?), [INFO] [stderr] 296 | | [INFO] [stderr] 297 | | &Flex(ref ty, ref maxsz) => { [INFO] [stderr] ... | [INFO] [stderr] 323 | | _ => quote!(#val.pack(out)?), [INFO] [stderr] 324 | | }; [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] 294 | let res = match *self { [INFO] [stderr] 295 | Enum(_) => quote!((*#val as i32).pack(out)?), [INFO] [stderr] 296 | [INFO] [stderr] 297 | Flex(ref ty, ref maxsz) => { [INFO] [stderr] 298 | let ty = ty.as_ref(); [INFO] [stderr] 299 | let maxsz = match maxsz { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:299:29 [INFO] [stderr] | [INFO] [stderr] 299 | let maxsz = match maxsz { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 300 | | &None => quote!(None), [INFO] [stderr] 301 | | &Some(ref mx) => { [INFO] [stderr] 302 | | let mx = mx.as_token(symtab); [INFO] [stderr] 303 | | quote!(Some(#mx as usize)) [INFO] [stderr] 304 | | } [INFO] [stderr] 305 | | }; [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] 299 | let maxsz = match *maxsz { [INFO] [stderr] 300 | None => quote!(None), [INFO] [stderr] 301 | Some(ref mx) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:306:17 [INFO] [stderr] | [INFO] [stderr] 306 | / match ty { [INFO] [stderr] 307 | | &Opaque => quote!(xdr_codec::pack_opaque_flex(&#val, #maxsz, out)?), [INFO] [stderr] 308 | | &String => quote!(xdr_codec::pack_string(&#val, #maxsz, out)?), [INFO] [stderr] 309 | | _ => quote!(xdr_codec::pack_flex(&#val, #maxsz, out)?), [INFO] [stderr] 310 | | } [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] 306 | match *ty { [INFO] [stderr] 307 | Opaque => quote!(xdr_codec::pack_opaque_flex(&#val, #maxsz, out)?), [INFO] [stderr] 308 | String => quote!(xdr_codec::pack_string(&#val, #maxsz, out)?), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:315:17 [INFO] [stderr] | [INFO] [stderr] 315 | / match ty { [INFO] [stderr] 316 | | &Opaque | &String => { [INFO] [stderr] 317 | | quote!(xdr_codec::pack_opaque_array(&#val[..], #val.len(), out)?) [INFO] [stderr] 318 | | } [INFO] [stderr] 319 | | _ => quote!(xdr_codec::pack_array(&#val[..], #val.len(), out, None)?), [INFO] [stderr] 320 | | } [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] 315 | match *ty { [INFO] [stderr] 316 | Opaque | String => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:333:9 [INFO] [stderr] | [INFO] [stderr] 333 | / match self { [INFO] [stderr] 334 | | &Opaque | &String | &Option(_) | &Ident(..) | &Int | &UInt | &Hyper | &UHyper | [INFO] [stderr] 335 | | &Float | &Double | &Quadruple | &Bool => true, [INFO] [stderr] 336 | | _ => false, [INFO] [stderr] 337 | | } [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] 333 | match *self { [INFO] [stderr] 334 | Opaque | String | Option(_) | Ident(..) | Int | UInt | Hyper | UHyper | [INFO] [stderr] 335 | Float | Double | Quadruple | Bool => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:343:9 [INFO] [stderr] | [INFO] [stderr] 343 | / match self { [INFO] [stderr] 344 | | &Array(ref ty, ref value) => { [INFO] [stderr] 345 | | let ty = ty.as_ref(); [INFO] [stderr] 346 | | let value = value.as_token(symtab); [INFO] [stderr] ... | [INFO] [stderr] 384 | | _ => quote!(xdr_codec::Unpack::unpack(input)?), [INFO] [stderr] 385 | | } [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] 343 | match *self { [INFO] [stderr] 344 | Array(ref ty, ref value) => { [INFO] [stderr] 345 | let ty = ty.as_ref(); [INFO] [stderr] 346 | let value = value.as_token(symtab); [INFO] [stderr] 347 | [INFO] [stderr] 348 | match ty { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:369:29 [INFO] [stderr] | [INFO] [stderr] 369 | let maxsz = match maxsz { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 370 | | &None => quote!(None), [INFO] [stderr] 371 | | &Some(ref mx) => { [INFO] [stderr] 372 | | let mx = mx.as_token(symtab); [INFO] [stderr] 373 | | quote!(Some(#mx as usize)) [INFO] [stderr] 374 | | } [INFO] [stderr] 375 | | }; [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] 369 | let maxsz = match *maxsz { [INFO] [stderr] 370 | None => quote!(None), [INFO] [stderr] 371 | Some(ref mx) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:377:17 [INFO] [stderr] | [INFO] [stderr] 377 | / match ty { [INFO] [stderr] 378 | | &String => quote!(xdr_codec::unpack_string(input, #maxsz)?), [INFO] [stderr] 379 | | &Opaque => quote!(xdr_codec::unpack_opaque_flex(input, #maxsz)?), [INFO] [stderr] 380 | | _ => quote!(xdr_codec::unpack_flex(input, #maxsz)?), [INFO] [stderr] 381 | | } [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] 377 | match *ty { [INFO] [stderr] 378 | String => quote!(xdr_codec::unpack_string(input, #maxsz)?), [INFO] [stderr] 379 | Opaque => quote!(xdr_codec::unpack_opaque_flex(input, #maxsz)?), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:391:19 [INFO] [stderr] | [INFO] [stderr] 391 | let ret = match self { [INFO] [stderr] | ___________________^ [INFO] [stderr] 392 | | &Int => quote!(i32), [INFO] [stderr] 393 | | &UInt => quote!(u32), [INFO] [stderr] 394 | | &Hyper => quote!(i64), [INFO] [stderr] ... | [INFO] [stderr] 446 | | _ => return Err(format!("can't have unnamed type {:?}", self).into()), [INFO] [stderr] 447 | | }; [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] 391 | let ret = match *self { [INFO] [stderr] 392 | Int => quote!(i32), [INFO] [stderr] 393 | UInt => quote!(u32), [INFO] [stderr] 394 | Hyper => quote!(i64), [INFO] [stderr] 395 | UHyper => quote!(u64), [INFO] [stderr] 396 | Float => quote!(f32), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:477:9 [INFO] [stderr] | [INFO] [stderr] 477 | / match self { [INFO] [stderr] 478 | | &Void => None, [INFO] [stderr] 479 | | &Named(ref name, ref ty) => Some((quote_ident(name), ty)), [INFO] [stderr] 480 | | } [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] 477 | match *self { [INFO] [stderr] 478 | Void => None, [INFO] [stderr] 479 | Named(ref name, ref ty) => Some((quote_ident(name), ty)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this boolean expression contains a logic bug [INFO] [stderr] --> src/spec/mod.rs:490:20 [INFO] [stderr] | [INFO] [stderr] 490 | if false && ty.is_boxed(symtab) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: it would look like the following: `false` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::logic_bug)] on by default [INFO] [stderr] help: this expression can be optimized out by applying boolean operations to the outer expression [INFO] [stderr] --> src/spec/mod.rs:490:29 [INFO] [stderr] | [INFO] [stderr] 490 | if false && ty.is_boxed(symtab) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#logic_bug [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:485:9 [INFO] [stderr] | [INFO] [stderr] 485 | / match self { [INFO] [stderr] 486 | | &Void => Ok(None), [INFO] [stderr] 487 | | &Named(ref name, ref ty) => { [INFO] [stderr] 488 | | let nametok = quote_ident(name.as_str()); [INFO] [stderr] ... | [INFO] [stderr] 494 | | } [INFO] [stderr] 495 | | } [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] 485 | match *self { [INFO] [stderr] 486 | Void => Ok(None), [INFO] [stderr] 487 | Named(ref name, ref ty) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:500:9 [INFO] [stderr] | [INFO] [stderr] 500 | / match self { [INFO] [stderr] 501 | | &Void => Derives::all(), [INFO] [stderr] 502 | | &Named(_, ref ty) => ty.derivable(symtab, Some(memo)), [INFO] [stderr] 503 | | } [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] 500 | match *self { [INFO] [stderr] 501 | Void => Derives::all(), [INFO] [stderr] 502 | Named(_, ref ty) => ty.derivable(symtab, Some(memo)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:573:19 [INFO] [stderr] | [INFO] [stderr] 573 | let ret = match ty { [INFO] [stderr] | ___________________^ [INFO] [stderr] 574 | | &Enum(ref edefs) => { [INFO] [stderr] 575 | | let defs: Vec<_> = edefs [INFO] [stderr] 576 | | .iter() [INFO] [stderr] ... | [INFO] [stderr] 718 | | } [INFO] [stderr] 719 | | }; [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] 573 | let ret = match *ty { [INFO] [stderr] 574 | Enum(ref edefs) => { [INFO] [stderr] 575 | let defs: Vec<_> = edefs [INFO] [stderr] 576 | .iter() [INFO] [stderr] 577 | .filter_map(|&EnumDefn(ref field, _)| if let Some((val, Some(_))) = [INFO] [stderr] 578 | symtab.getconst(field) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:614:35 [INFO] [stderr] | [INFO] [stderr] 614 | let seltype = match selector { [INFO] [stderr] | ___________________________________^ [INFO] [stderr] 615 | | &Void => return false, [INFO] [stderr] 616 | | &Named(_, ref ty) => ty, [INFO] [stderr] 617 | | }; [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] 614 | let seltype = match *selector { [INFO] [stderr] 615 | Void => return false, [INFO] [stderr] 616 | Named(_, ref ty) => ty, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:619:21 [INFO] [stderr] | [INFO] [stderr] 619 | / match case { [INFO] [stderr] 620 | | &Const(val) if val < 0 => { [INFO] [stderr] 621 | | match seltype { [INFO] [stderr] 622 | | &Int | &Hyper => true, [INFO] [stderr] ... | [INFO] [stderr] 647 | | } [INFO] [stderr] 648 | | } [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] 619 | match *case { [INFO] [stderr] 620 | Const(val) if val < 0 => { [INFO] [stderr] 621 | match seltype { [INFO] [stderr] 622 | &Int | &Hyper => true, [INFO] [stderr] 623 | _ => false, [INFO] [stderr] 624 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:621:29 [INFO] [stderr] | [INFO] [stderr] 621 | / match seltype { [INFO] [stderr] 622 | | &Int | &Hyper => true, [INFO] [stderr] 623 | | _ => false, [INFO] [stderr] 624 | | } [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] 621 | match *seltype { [INFO] [stderr] 622 | Int | Hyper => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:628:29 [INFO] [stderr] | [INFO] [stderr] 628 | / match seltype { [INFO] [stderr] 629 | | &Int | &Hyper | &UInt | &UHyper => true, [INFO] [stderr] 630 | | _ => false, [INFO] [stderr] 631 | | } [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] 628 | match *seltype { [INFO] [stderr] 629 | Int | Hyper | UInt | UHyper => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:638:33 [INFO] [stderr] | [INFO] [stderr] 638 | / if let &Type::Ident(ref selname, _) = seltype { [INFO] [stderr] 639 | | match symtab.getconst(id) { [INFO] [stderr] 640 | | Some((_, Some(ref scope))) => scope == selname, [INFO] [stderr] 641 | | _ => false, [INFO] [stderr] ... | [INFO] [stderr] 644 | | false [INFO] [stderr] 645 | | } [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] 638 | if let Type::Ident(ref selname, _) = *seltype { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: this boolean expression contains a logic bug [INFO] [stderr] --> src/spec/mod.rs:666:36 [INFO] [stderr] | [INFO] [stderr] 666 | if false && ty.is_boxed(symtab) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: it would look like the following: `false` [INFO] [stderr] | [INFO] [stderr] help: this expression can be optimized out by applying boolean operations to the outer expression [INFO] [stderr] --> src/spec/mod.rs:666:45 [INFO] [stderr] | [INFO] [stderr] 666 | if false && ty.is_boxed(symtab) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#logic_bug [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:662:25 [INFO] [stderr] | [INFO] [stderr] 662 | / match decl { [INFO] [stderr] 663 | | &Void => Ok(quote!(#label,)), [INFO] [stderr] 664 | | &Named(ref name, ref ty) => { [INFO] [stderr] 665 | | let mut tok = ty.as_token(symtab)?; [INFO] [stderr] ... | [INFO] [stderr] 675 | | } [INFO] [stderr] 676 | | } [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] 662 | match *decl { [INFO] [stderr] 663 | Void => Ok(quote!(#label,)), [INFO] [stderr] 664 | Named(ref name, ref ty) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:680:17 [INFO] [stderr] | [INFO] [stderr] 680 | / if let &Some(ref def_val) = defl { [INFO] [stderr] 681 | | let def_val = def_val.as_ref(); [INFO] [stderr] 682 | | match def_val { [INFO] [stderr] 683 | | &Named(ref name, ref ty) => { [INFO] [stderr] ... | [INFO] [stderr] 696 | | } [INFO] [stderr] 697 | | } [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] 680 | if let Some(ref def_val) = *defl { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:682:21 [INFO] [stderr] | [INFO] [stderr] 682 | / match def_val { [INFO] [stderr] 683 | | &Named(ref name, ref ty) => { [INFO] [stderr] 684 | | let mut tok = ty.as_token(symtab)?; [INFO] [stderr] 685 | | if ty.is_boxed(symtab) { [INFO] [stderr] ... | [INFO] [stderr] 695 | | &Void => cases.push(quote!(default,)), [INFO] [stderr] 696 | | } [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] 682 | match *def_val { [INFO] [stderr] 683 | Named(ref name, ref ty) => { [INFO] [stderr] 684 | let mut tok = ty.as_token(symtab)?; [INFO] [stderr] 685 | if ty.is_boxed(symtab) { [INFO] [stderr] 686 | tok = quote!(Box<#tok>) [INFO] [stderr] 687 | }; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:733:28 [INFO] [stderr] | [INFO] [stderr] 733 | let body: Tokens = match ty { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 734 | | &Enum(_) => { [INFO] [stderr] 735 | | directive = quote!(#[inline]); [INFO] [stderr] 736 | | ty.packer(quote!(self), symtab)? [INFO] [stderr] ... | [INFO] [stderr] 807 | | } [INFO] [stderr] 808 | | }; [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] 733 | let body: Tokens = match *ty { [INFO] [stderr] 734 | Enum(_) => { [INFO] [stderr] 735 | directive = quote!(#[inline]); [INFO] [stderr] 736 | ty.packer(quote!(self), symtab)? [INFO] [stderr] 737 | } [INFO] [stderr] 738 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:741:37 [INFO] [stderr] | [INFO] [stderr] 741 | .filter_map(|d| match d { [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 742 | | &Void => None, [INFO] [stderr] 743 | | &Named(ref name, ref ty) => Some((quote_ident(name), ty)), [INFO] [stderr] 744 | | }) [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] 741 | .filter_map(|d| match *d { [INFO] [stderr] 742 | Void => None, [INFO] [stderr] 743 | Named(ref name, ref ty) => Some((quote_ident(name), ty)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:760:35 [INFO] [stderr] | [INFO] [stderr] 760 | let ret = match decl { [INFO] [stderr] | ___________________________________^ [INFO] [stderr] 761 | | &Void => quote!(&#name::#label => (#disc as i32).pack(out)?,), [INFO] [stderr] 762 | | &Named(_, ref ty) => { [INFO] [stderr] 763 | | let pack = match ty.packer(quote!(val), symtab) { [INFO] [stderr] ... | [INFO] [stderr] 768 | | } [INFO] [stderr] 769 | | }; [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] 760 | let ret = match *decl { [INFO] [stderr] 761 | Void => quote!(&#name::#label => (#disc as i32).pack(out)?,), [INFO] [stderr] 762 | Named(_, ref ty) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:774:17 [INFO] [stderr] | [INFO] [stderr] 774 | / if let &Some(ref decl) = defl { [INFO] [stderr] 775 | | let decl = decl.as_ref(); [INFO] [stderr] 776 | | // Can't cast a value-carrying enum to i32 [INFO] [stderr] 777 | | let default = match decl { [INFO] [stderr] ... | [INFO] [stderr] 790 | | matches.push(default) [INFO] [stderr] 791 | | } [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] 774 | if let Some(ref decl) = *defl { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:777:35 [INFO] [stderr] | [INFO] [stderr] 777 | let default = match decl { [INFO] [stderr] | ___________________________________^ [INFO] [stderr] 778 | | &Void => { [INFO] [stderr] 779 | | quote! { [INFO] [stderr] 780 | | &#name::default => return Err(xdr_codec::Error::invalidcase(-1)), [INFO] [stderr] ... | [INFO] [stderr] 787 | | } [INFO] [stderr] 788 | | }; [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] 777 | let default = match *decl { [INFO] [stderr] 778 | Void => { [INFO] [stderr] 779 | quote! { [INFO] [stderr] 780 | &#name::default => return Err(xdr_codec::Error::invalidcase(-1)), [INFO] [stderr] 781 | } [INFO] [stderr] 782 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:830:20 [INFO] [stderr] | [INFO] [stderr] 830 | let body = match ty { [INFO] [stderr] | ____________________^ [INFO] [stderr] 831 | | &Enum(ref defs) => { [INFO] [stderr] 832 | | directive = quote!(#[inline]); [INFO] [stderr] 833 | | let matchdefs: Vec<_> = defs.iter() [INFO] [stderr] ... | [INFO] [stderr] 938 | | _ => return Err(Error::from(format!("unimplemented ty={:?}", ty))), [INFO] [stderr] 939 | | }; [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] 830 | let body = match *ty { [INFO] [stderr] 831 | Enum(ref defs) => { [INFO] [stderr] 832 | directive = quote!(#[inline]); [INFO] [stderr] 833 | let matchdefs: Vec<_> = defs.iter() [INFO] [stderr] 834 | .filter_map(|&EnumDefn(ref name, _)| { [INFO] [stderr] 835 | let tok = quote_ident(name); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:838:29 [INFO] [stderr] | [INFO] [stderr] 838 | / if let &Some(ref scope) = scope { [INFO] [stderr] 839 | | let scope = quote_ident(scope); [INFO] [stderr] 840 | | // Some(quote!(#val => #scope :: #tok,)) [INFO] [stderr] 841 | | Some(quote!(x if x == #scope :: #tok as i32 => #scope :: #tok,)) [INFO] [stderr] ... | [INFO] [stderr] 844 | | Some(quote!(x if x == #tok as i32 => #tok,)) [INFO] [stderr] 845 | | } [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] 838 | if let Some(ref scope) = *scope { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:887:39 [INFO] [stderr] | [INFO] [stderr] 887 | let ret = match decl { [INFO] [stderr] | _______________________________________^ [INFO] [stderr] 888 | | //&Void => quote!(#disc => #name::#label,), [INFO] [stderr] 889 | | &Void => quote!(x if x == (#disc as i32) => #name::#label,), [INFO] [stderr] 890 | | &Named(_, ref ty) => { [INFO] [stderr] ... | [INFO] [stderr] 894 | | }, [INFO] [stderr] 895 | | }; [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] 887 | let ret = match *decl { [INFO] [stderr] 888 | //&Void => quote!(#disc => #name::#label,), [INFO] [stderr] 889 | Void => quote!(x if x == (#disc as i32) => #name::#label,), [INFO] [stderr] 890 | Named(_, ref ty) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:900:17 [INFO] [stderr] | [INFO] [stderr] 900 | / if let &Some(ref decl) = defl { [INFO] [stderr] 901 | | let decl = decl.as_ref(); [INFO] [stderr] 902 | | let defl = match decl { [INFO] [stderr] 903 | | &Void => quote!(_ => #name::default), [INFO] [stderr] ... | [INFO] [stderr] 917 | | matches.push(defl); [INFO] [stderr] 918 | | } [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] 900 | if let Some(ref decl) = *defl { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:902:32 [INFO] [stderr] | [INFO] [stderr] 902 | let defl = match decl { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 903 | | &Void => quote!(_ => #name::default), [INFO] [stderr] 904 | | &Named(_, ref ty) => { [INFO] [stderr] 905 | | let unpack = ty.unpacker(symtab); [INFO] [stderr] ... | [INFO] [stderr] 911 | | } [INFO] [stderr] 912 | | }; [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] 902 | let defl = match *decl { [INFO] [stderr] 903 | Void => quote!(_ => #name::default), [INFO] [stderr] 904 | Named(_, ref ty) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:920:33 [INFO] [stderr] | [INFO] [stderr] 920 | let selunpack = match sel { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 921 | | &Void => panic!("void switch selector?"), [INFO] [stderr] 922 | | &Named(_, ref ty) => ty.unpacker(symtab), [INFO] [stderr] 923 | | }; [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] 920 | let selunpack = match *sel { [INFO] [stderr] 921 | Void => panic!("void switch selector?"), [INFO] [stderr] 922 | Named(_, ref ty) => ty.unpacker(symtab), [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/spec/mod.rs:961:23 [INFO] [stderr] | [INFO] [stderr] 961 | pub fn new(defns: &Vec) -> Symtab { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[Defn]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/spec/mod.rs:973:40 [INFO] [stderr] | [INFO] [stderr] 973 | fn update_consts(&mut self, defns: &Vec) { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[Defn]` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:975:13 [INFO] [stderr] | [INFO] [stderr] 975 | / match defn { [INFO] [stderr] 976 | | &Defn::Typespec(ref name, ref ty) => { [INFO] [stderr] 977 | | self.deftype(name, ty); [INFO] [stderr] 978 | | self.update_enum_consts(name, ty); [INFO] [stderr] ... | [INFO] [stderr] 985 | | } [INFO] [stderr] 986 | | } [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] 975 | match *defn { [INFO] [stderr] 976 | Defn::Typespec(ref name, ref ty) => { [INFO] [stderr] 977 | self.deftype(name, ty); [INFO] [stderr] 978 | self.update_enum_consts(name, ty); [INFO] [stderr] 979 | } [INFO] [stderr] 980 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/spec/mod.rs:990:45 [INFO] [stderr] | [INFO] [stderr] 990 | fn update_enum_consts(&mut self, scope: &String, ty: &Type) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:994:9 [INFO] [stderr] | [INFO] [stderr] 994 | / if let &Type::Enum(ref edefn) = ty { [INFO] [stderr] 995 | | for &EnumDefn(ref name, ref maybeval) in edefn { [INFO] [stderr] 996 | | let v = match maybeval { [INFO] [stderr] 997 | | &None => prev + 1, [INFO] [stderr] ... | [INFO] [stderr] 1013 | | } [INFO] [stderr] 1014 | | } [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] 994 | if let Type::Enum(ref edefn) = *ty { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ ^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:996:25 [INFO] [stderr] | [INFO] [stderr] 996 | let v = match maybeval { [INFO] [stderr] | _________________________^ [INFO] [stderr] 997 | | &None => prev + 1, [INFO] [stderr] 998 | | &Some(ref val) => { [INFO] [stderr] 999 | | match self.value(val) { [INFO] [stderr] ... | [INFO] [stderr] 1006 | | } [INFO] [stderr] 1007 | | }; [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] 996 | let v = match *maybeval { [INFO] [stderr] 997 | None => prev + 1, [INFO] [stderr] 998 | Some(ref val) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/spec/mod.rs:1029:34 [INFO] [stderr] | [INFO] [stderr] 1029 | pub fn getconst(&self, name: &String) -> Option<(i64, Option)> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/spec/mod.rs:1037:9 [INFO] [stderr] | [INFO] [stderr] 1037 | / match val { [INFO] [stderr] 1038 | | &Value::Const(c) => Some(c), [INFO] [stderr] 1039 | | &Value::Ident(ref id) => self.getconst(id).map(|(v, _)| v), [INFO] [stderr] 1040 | | } [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] 1037 | match *val { [INFO] [stderr] 1038 | Value::Const(c) => Some(c), [INFO] [stderr] 1039 | Value::Ident(ref id) => self.getconst(id).map(|(v, _)| v), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/spec/mod.rs:1043:34 [INFO] [stderr] | [INFO] [stderr] 1043 | pub fn typespec(&self, name: &String) -> Option<&Type> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/lib.rs:149:56 [INFO] [stderr] | [INFO] [stderr] 149 | let mut outdir = PathBuf::from(env::var("OUT_DIR").unwrap_or(String::from("."))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| String::from("."))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `xdrgen`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "891699be0353c4e8f172f29d87034cfb93a1d0ac348b724a422738c9b9ceb54e"` [INFO] running `"docker" "rm" "-f" "891699be0353c4e8f172f29d87034cfb93a1d0ac348b724a422738c9b9ceb54e"` [INFO] [stdout] 891699be0353c4e8f172f29d87034cfb93a1d0ac348b724a422738c9b9ceb54e