[INFO] crate protobuf-codegen-pure 2.2.0 is already in cache [INFO] extracting crate protobuf-codegen-pure 2.2.0 into work/ex/clippy-test-run/sources/stable/reg/protobuf-codegen-pure/2.2.0 [INFO] extracting crate protobuf-codegen-pure 2.2.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/protobuf-codegen-pure/2.2.0 [INFO] validating manifest of protobuf-codegen-pure-2.2.0 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of protobuf-codegen-pure-2.2.0 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing protobuf-codegen-pure-2.2.0 [INFO] finished frobbing protobuf-codegen-pure-2.2.0 [INFO] frobbed toml for protobuf-codegen-pure-2.2.0 written to work/ex/clippy-test-run/sources/stable/reg/protobuf-codegen-pure/2.2.0/Cargo.toml [INFO] started frobbing protobuf-codegen-pure-2.2.0 [INFO] finished frobbing protobuf-codegen-pure-2.2.0 [INFO] frobbed toml for protobuf-codegen-pure-2.2.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/protobuf-codegen-pure/2.2.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting protobuf-codegen-pure-2.2.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/protobuf-codegen-pure/2.2.0:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 07fbc8938afd600033ef0abb172768fbe0406f12562db7958c1e041b7b88fc94 [INFO] running `"docker" "start" "-a" "07fbc8938afd600033ef0abb172768fbe0406f12562db7958c1e041b7b88fc94"` [INFO] [stderr] Checking protobuf-codegen v2.2.0 [INFO] [stderr] Checking protobuf-codegen-pure v2.2.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:205:9 [INFO] [stderr] | [INFO] [stderr] 205 | includes: includes, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `includes` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:205:9 [INFO] [stderr] | [INFO] [stderr] 205 | includes: includes, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `includes` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/parser.rs:547:20 [INFO] [stderr] | [INFO] [stderr] 547 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 548 | | if self.next_exponent_opt()? == None { [INFO] [stderr] 549 | | return Err(ParserError::IncorrectFloatLit) [INFO] [stderr] 550 | | } [INFO] [stderr] 551 | | } [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] 547 | } else if self.next_exponent_opt()? == None { [INFO] [stderr] 548 | return Err(ParserError::IncorrectFloatLit) [INFO] [stderr] 549 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/parser.rs:547:20 [INFO] [stderr] | [INFO] [stderr] 547 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 548 | | if self.next_exponent_opt()? == None { [INFO] [stderr] 549 | | return Err(ParserError::IncorrectFloatLit) [INFO] [stderr] 550 | | } [INFO] [stderr] 551 | | } [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] 547 | } else if self.next_exponent_opt()? == None { [INFO] [stderr] 548 | return Err(ParserError::IncorrectFloatLit) [INFO] [stderr] 549 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:58:35 [INFO] [stderr] | [INFO] [stderr] 58 | assert!(!path.starts_with(".")); [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:187:53 [INFO] [stderr] | [INFO] [stderr] 187 | assert!(path.is_empty() || path.starts_with(".")); [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:188:33 [INFO] [stderr] | [INFO] [stderr] 188 | assert!(!path.ends_with(".")); [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:196:39 [INFO] [stderr] | [INFO] [stderr] 196 | assert!(!path.starts_with(".")); [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:197:37 [INFO] [stderr] | [INFO] [stderr] 197 | assert!(!path.ends_with(".")); [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:203:29 [INFO] [stderr] | [INFO] [stderr] 203 | if path.starts_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/convert.rs:282:9 [INFO] [stderr] | [INFO] [stderr] 282 | / match self { [INFO] [stderr] 283 | | &LookupScope::File(file) => &file.messages, [INFO] [stderr] 284 | | &LookupScope::Message(messasge) => &messasge.messages, [INFO] [stderr] 285 | | } [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] 282 | match *self { [INFO] [stderr] 283 | LookupScope::File(file) => &file.messages, [INFO] [stderr] 284 | LookupScope::Message(messasge) => &messasge.messages, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/convert.rs:289:25 [INFO] [stderr] | [INFO] [stderr] 289 | self.messages().into_iter().find(|m| m.name == simple_name) [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/convert.rs:293:9 [INFO] [stderr] | [INFO] [stderr] 293 | / match self { [INFO] [stderr] 294 | | &LookupScope::File(file) => &file.enums, [INFO] [stderr] 295 | | &LookupScope::Message(messasge) => &messasge.enums, [INFO] [stderr] 296 | | } [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] 293 | match *self { [INFO] [stderr] 294 | LookupScope::File(file) => &file.enums, [INFO] [stderr] 295 | LookupScope::Message(messasge) => &messasge.enums, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/convert.rs:301:31 [INFO] [stderr] | [INFO] [stderr] 301 | r.extend(self.enums().into_iter().map(|e| (&e.name[..], MessageOrEnum::Enum))); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [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: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/convert.rs:302:34 [INFO] [stderr] | [INFO] [stderr] 302 | r.extend(self.messages().into_iter().map(|e| (&e.name[..], MessageOrEnum::Message))); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [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/convert.rs:467:21 [INFO] [stderr] | [INFO] [stderr] 467 | / if let &model::ProtobufConstant::String(ref s) = default { [INFO] [stderr] 468 | | s.decode_utf8()? [INFO] [stderr] 469 | | } else { [INFO] [stderr] 470 | | return Err(ConvertError::DefaultValueIsNotStringLiteral); [INFO] [stderr] 471 | | } [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] 467 | if let model::ProtobufConstant::String(ref s) = *default { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/convert.rs:474:21 [INFO] [stderr] | [INFO] [stderr] 474 | / if let &model::ProtobufConstant::String(ref s) = default { [INFO] [stderr] 475 | | s.escaped.clone() [INFO] [stderr] 476 | | } else { [INFO] [stderr] 477 | | return Err(ConvertError::DefaultValueIsNotStringLiteral); [INFO] [stderr] 478 | | } [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] 474 | if let model::ProtobufConstant::String(ref s) = *default { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:516:30 [INFO] [stderr] | [INFO] [stderr] 516 | if !name.starts_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/convert.rs:661:17 [INFO] [stderr] | [INFO] [stderr] 661 | let v = match value { [INFO] [stderr] | _________________^ [INFO] [stderr] 662 | | &model::ProtobufConstant::Bool(b) => { [INFO] [stderr] 663 | | if field_type != &model::FieldType::Bool { [INFO] [stderr] 664 | | Err(()) [INFO] [stderr] ... | [INFO] [stderr] 680 | | _ => Err(()), [INFO] [stderr] 681 | | }; [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] 661 | let v = match *value { [INFO] [stderr] 662 | model::ProtobufConstant::Bool(b) => { [INFO] [stderr] 663 | if field_type != &model::FieldType::Bool { [INFO] [stderr] 664 | Err(()) [INFO] [stderr] 665 | } else { [INFO] [stderr] 666 | Ok(protobuf::UnknownValue::Varint(if b { 1 } else { 0 })) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/convert.rs:670:17 [INFO] [stderr] | [INFO] [stderr] 670 | / match field_type { [INFO] [stderr] 671 | | &model::FieldType::Fixed64 => Ok(protobuf::UnknownValue::Fixed64(v)), [INFO] [stderr] 672 | | // TODO: check overflow [INFO] [stderr] 673 | | &model::FieldType::Int64 | [INFO] [stderr] ... | [INFO] [stderr] 677 | | _ => Err(()), [INFO] [stderr] 678 | | } [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] 670 | match *field_type { [INFO] [stderr] 671 | model::FieldType::Fixed64 => Ok(protobuf::UnknownValue::Fixed64(v)), [INFO] [stderr] 672 | // TODO: check overflow [INFO] [stderr] 673 | model::FieldType::Int64 | [INFO] [stderr] 674 | model::FieldType::Int32 | [INFO] [stderr] 675 | model::FieldType::Uint64 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:124:21 [INFO] [stderr] | [INFO] [stderr] 124 | if *self <= i32::max_value() as i64 && *self >= i32::min_value() as i64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(i32::max_value())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:124:57 [INFO] [stderr] | [INFO] [stderr] 124 | if *self <= i32::max_value() as i64 && *self >= i32::min_value() as i64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(i32::min_value())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:154:12 [INFO] [stderr] | [INFO] [stderr] 154 | if *self as u8 as u32 == *self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `u32::from(*self as u8)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:192:9 [INFO] [stderr] | [INFO] [stderr] 192 | / match self { [INFO] [stderr] 193 | | &Token::Ident(ref s) => s.clone(), [INFO] [stderr] 194 | | &Token::Symbol(c) => c.to_string(), [INFO] [stderr] 195 | | &Token::IntLit(ref i) => i.to_string(), [INFO] [stderr] 196 | | &Token::StrLit(ref s) => s.quoted(), [INFO] [stderr] 197 | | &Token::FloatLit(ref f) => f.to_string(), [INFO] [stderr] 198 | | } [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] 192 | match *self { [INFO] [stderr] 193 | Token::Ident(ref s) => s.clone(), [INFO] [stderr] 194 | Token::Symbol(c) => c.to_string(), [INFO] [stderr] 195 | Token::IntLit(ref i) => i.to_string(), [INFO] [stderr] 196 | Token::StrLit(ref s) => s.quoted(), [INFO] [stderr] 197 | Token::FloatLit(ref f) => f.to_string(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:202:9 [INFO] [stderr] | [INFO] [stderr] 202 | / match self { [INFO] [stderr] 203 | | &Token::IntLit(i) => Ok(NumLit::U64(i)), [INFO] [stderr] 204 | | &Token::FloatLit(f) => Ok(NumLit::F64(f)), [INFO] [stderr] 205 | | _ => Err(ParserError::IncorrectInput), [INFO] [stderr] 206 | | } [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] 202 | match *self { [INFO] [stderr] 203 | Token::IntLit(i) => Ok(NumLit::U64(i)), [INFO] [stderr] 204 | Token::FloatLit(f) => Ok(NumLit::F64(f)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/parser.rs:249:65 [INFO] [stderr] | [INFO] [stderr] 249 | let c_len = char_indices.next().map(|(len, _)| len).unwrap_or(rem.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| rem.len())` [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] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:344:25 [INFO] [stderr] | [INFO] [stderr] 344 | let mut clone = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:455:25 [INFO] [stderr] | [INFO] [stderr] 455 | let mut clone = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:471:25 [INFO] [stderr] | [INFO] [stderr] 471 | let mut clone = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:473:53 [INFO] [stderr] | [INFO] [stderr] 473 | c if c >= '0' && c <= '9' => c as u32 - b'0' as u32, [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b'0')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:474:53 [INFO] [stderr] | [INFO] [stderr] 474 | c if c >= 'A' && c <= 'F' => c as u32 - b'A' as u32 + 10, [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b'A')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:475:53 [INFO] [stderr] | [INFO] [stderr] 475 | c if c >= 'a' && c <= 'f' => c as u32 - b'a' as u32 + 10, [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b'a')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:484:25 [INFO] [stderr] | [INFO] [stderr] 484 | let mut clone = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:486:53 [INFO] [stderr] | [INFO] [stderr] 486 | c if c >= '0' && c <= '7' => c as u32 - b'0' as u32, [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b'0')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:495:25 [INFO] [stderr] | [INFO] [stderr] 495 | let mut clone = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:661:25 [INFO] [stderr] | [INFO] [stderr] 661 | let mut clone = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stderr] --> src/parser.rs:663:16 [INFO] [stderr] | [INFO] [stderr] 663 | if let Ok(_) = clone.next_float_lit() { [INFO] [stderr] | _________- ^^^^^ [INFO] [stderr] 664 | | let f = float::parse_protobuf_float(&self.input[pos..clone.pos])?; [INFO] [stderr] 665 | | *self = clone; [INFO] [stderr] 666 | | return Ok(Token::FloatLit(f)); [INFO] [stderr] 667 | | } [INFO] [stderr] | |_________- help: try this: `if clone.next_float_lit().is_ok()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/parser.rs:723:22 [INFO] [stderr] | [INFO] [stderr] 723 | fn label_allowed(&self, label: Rule) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/parser.rs:747:28 [INFO] [stderr] | [INFO] [stderr] 747 | fn some_label_required(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/parser.rs:757:20 [INFO] [stderr] | [INFO] [stderr] 757 | fn map_allowed(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/parser.rs:767:35 [INFO] [stderr] | [INFO] [stderr] 767 | fn is_most_non_fields_allowed(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/parser.rs:777:26 [INFO] [stderr] | [INFO] [stderr] 777 | fn is_option_allowed(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/parser.rs:914:20 [INFO] [stderr] | [INFO] [stderr] 914 | if idents.into_iter().find(|&i| i == next).is_some() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = note: replace `find(|&i| i == next).is_some()` with `any(|&i| i == next)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/parser.rs:914:27 [INFO] [stderr] | [INFO] [stderr] 914 | if idents.into_iter().find(|&i| i == next).is_some() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [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/parser.rs:938:39 [INFO] [stderr] | [INFO] [stderr] 938 | Ok(self.next_token_if(|token| match token { [INFO] [stderr] | _______________________________________^ [INFO] [stderr] 939 | | &Token::Symbol(c) if c == symbol => true, [INFO] [stderr] 940 | | _ => false, [INFO] [stderr] 941 | | })? != None) [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] 938 | Ok(self.next_token_if(|token| match *token { [INFO] [stderr] 939 | Token::Symbol(c) if c == symbol => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:968:13 [INFO] [stderr] | [INFO] [stderr] 968 | / match token { [INFO] [stderr] 969 | | &Token::Ident(ref ident) => Ok(ident.clone()), [INFO] [stderr] 970 | | _ => Err(ParserError::ExpectIdent), [INFO] [stderr] 971 | | } [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] 968 | match *token { [INFO] [stderr] 969 | Token::Ident(ref ident) => Ok(ident.clone()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:977:13 [INFO] [stderr] | [INFO] [stderr] 977 | / match token { [INFO] [stderr] 978 | | &Token::StrLit(ref str_lit) => Ok(str_lit.clone()), [INFO] [stderr] 979 | | _ => Err(ParserError::IncorrectInput), [INFO] [stderr] 980 | | } [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] 977 | match *token { [INFO] [stderr] 978 | Token::StrLit(ref str_lit) => Ok(str_lit.clone()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:1063:9 [INFO] [stderr] | [INFO] [stderr] 1063 | / if let &Token::Symbol(c) = self.lookahead_some()? { [INFO] [stderr] 1064 | | if c == '+' || c == '-' { [INFO] [stderr] 1065 | | self.advance()?; [INFO] [stderr] 1066 | | let sign = c == '+'; [INFO] [stderr] 1067 | | return Ok(self.next_num_lit()?.to_option_value(sign)?); [INFO] [stderr] 1068 | | } [INFO] [stderr] 1069 | | } [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] 1063 | if let Token::Symbol(c) = *(self.lookahead_some()?) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:1072:17 [INFO] [stderr] | [INFO] [stderr] 1072 | / match token { [INFO] [stderr] 1073 | | &Token::StrLit(ref s) => Some(ProtobufConstant::String(s.clone())), [INFO] [stderr] 1074 | | _ => None, [INFO] [stderr] 1075 | | } [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] 1072 | match *token { [INFO] [stderr] 1073 | Token::StrLit(ref s) => Some(ProtobufConstant::String(s.clone())), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:1081:9 [INFO] [stderr] | [INFO] [stderr] 1081 | / match self.lookahead_some()? { [INFO] [stderr] 1082 | | &Token::IntLit(..) | &Token::FloatLit(..) => { [INFO] [stderr] 1083 | | return self.next_num_lit()?.to_option_value(true); [INFO] [stderr] 1084 | | }, [INFO] [stderr] ... | [INFO] [stderr] 1088 | | _ => {}, [INFO] [stderr] 1089 | | } [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] 1081 | match *(self.lookahead_some()?) { [INFO] [stderr] 1082 | Token::IntLit(..) | Token::FloatLit(..) => { [INFO] [stderr] 1083 | return self.next_num_lit()?.to_option_value(true); [INFO] [stderr] 1084 | }, [INFO] [stderr] 1085 | Token::Ident(..) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:1096:13 [INFO] [stderr] | [INFO] [stderr] 1096 | / match token { [INFO] [stderr] 1097 | | &Token::IntLit(i) => Ok(i), [INFO] [stderr] 1098 | | _ => Err(ParserError::IncorrectInput), [INFO] [stderr] 1099 | | } [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] 1096 | match *token { [INFO] [stderr] 1097 | Token::IntLit(i) => Ok(i), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:1254:13 [INFO] [stderr] | [INFO] [stderr] 1254 | / match token { [INFO] [stderr] 1255 | | &Token::IntLit(i) => i.to_i32(), [INFO] [stderr] 1256 | | _ => Err(ParserError::IncorrectInput), [INFO] [stderr] 1257 | | } [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] 1254 | match *token { [INFO] [stderr] 1255 | Token::IntLit(i) => i.to_i32(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:1441:17 [INFO] [stderr] | [INFO] [stderr] 1441 | / if let &Token::StrLit(..) = self.lookahead_some()? { [INFO] [stderr] 1442 | | let mut names = Vec::new(); [INFO] [stderr] 1443 | | names.push(self.next_str_lit()?.decode_utf8()?); [INFO] [stderr] 1444 | | while self.next_symbol_if_eq(',')? { [INFO] [stderr] ... | [INFO] [stderr] 1449 | | (self.next_ranges()?, Vec::new()) [INFO] [stderr] 1450 | | }; [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] 1441 | if let Token::StrLit(..) = *(self.lookahead_some()?) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/lib.rs:100:16 [INFO] [stderr] | [INFO] [stderr] 100 | if let Some(_) = result.get(protobuf_path) { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 101 | | return; [INFO] [stderr] 102 | | } [INFO] [stderr] | |_________- help: try this: `if result.get(protobuf_path).is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/lib.rs:121:16 [INFO] [stderr] | [INFO] [stderr] 121 | if let Some(_) = self.parsed_files.get(protobuf_path) { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 122 | | return Ok(()); [INFO] [stderr] 123 | | } [INFO] [stderr] | |_________- help: try this: `if self.parsed_files.get(protobuf_path).is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:58:35 [INFO] [stderr] | [INFO] [stderr] 58 | assert!(!path.starts_with(".")); [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:187:53 [INFO] [stderr] | [INFO] [stderr] 187 | assert!(path.is_empty() || path.starts_with(".")); [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:188:33 [INFO] [stderr] | [INFO] [stderr] 188 | assert!(!path.ends_with(".")); [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:196:39 [INFO] [stderr] | [INFO] [stderr] 196 | assert!(!path.starts_with(".")); [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:197:37 [INFO] [stderr] | [INFO] [stderr] 197 | assert!(!path.ends_with(".")); [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:203:29 [INFO] [stderr] | [INFO] [stderr] 203 | if path.starts_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> src/convert.rs:244:17 [INFO] [stderr] | [INFO] [stderr] 244 | let mut foo = AbsolutePath::new(".foo".to_owned()); [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::blacklisted_name)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blacklisted_name [INFO] [stderr] [INFO] [stderr] warning: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> src/convert.rs:248:17 [INFO] [stderr] | [INFO] [stderr] 248 | let mut foo = AbsolutePath::root(); [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blacklisted_name [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/convert.rs:282:9 [INFO] [stderr] | [INFO] [stderr] 282 | / match self { [INFO] [stderr] 283 | | &LookupScope::File(file) => &file.messages, [INFO] [stderr] 284 | | &LookupScope::Message(messasge) => &messasge.messages, [INFO] [stderr] 285 | | } [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] 282 | match *self { [INFO] [stderr] 283 | LookupScope::File(file) => &file.messages, [INFO] [stderr] 284 | LookupScope::Message(messasge) => &messasge.messages, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/convert.rs:289:25 [INFO] [stderr] | [INFO] [stderr] 289 | self.messages().into_iter().find(|m| m.name == simple_name) [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/convert.rs:293:9 [INFO] [stderr] | [INFO] [stderr] 293 | / match self { [INFO] [stderr] 294 | | &LookupScope::File(file) => &file.enums, [INFO] [stderr] 295 | | &LookupScope::Message(messasge) => &messasge.enums, [INFO] [stderr] 296 | | } [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] 293 | match *self { [INFO] [stderr] 294 | LookupScope::File(file) => &file.enums, [INFO] [stderr] 295 | LookupScope::Message(messasge) => &messasge.enums, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/convert.rs:301:31 [INFO] [stderr] | [INFO] [stderr] 301 | r.extend(self.enums().into_iter().map(|e| (&e.name[..], MessageOrEnum::Enum))); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [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: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/convert.rs:302:34 [INFO] [stderr] | [INFO] [stderr] 302 | r.extend(self.messages().into_iter().map(|e| (&e.name[..], MessageOrEnum::Message))); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [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/convert.rs:467:21 [INFO] [stderr] | [INFO] [stderr] 467 | / if let &model::ProtobufConstant::String(ref s) = default { [INFO] [stderr] 468 | | s.decode_utf8()? [INFO] [stderr] 469 | | } else { [INFO] [stderr] 470 | | return Err(ConvertError::DefaultValueIsNotStringLiteral); [INFO] [stderr] 471 | | } [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] 467 | if let model::ProtobufConstant::String(ref s) = *default { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/convert.rs:474:21 [INFO] [stderr] | [INFO] [stderr] 474 | / if let &model::ProtobufConstant::String(ref s) = default { [INFO] [stderr] 475 | | s.escaped.clone() [INFO] [stderr] 476 | | } else { [INFO] [stderr] 477 | | return Err(ConvertError::DefaultValueIsNotStringLiteral); [INFO] [stderr] 478 | | } [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] 474 | if let model::ProtobufConstant::String(ref s) = *default { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/convert.rs:516:30 [INFO] [stderr] | [INFO] [stderr] 516 | if !name.starts_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/convert.rs:661:17 [INFO] [stderr] | [INFO] [stderr] 661 | let v = match value { [INFO] [stderr] | _________________^ [INFO] [stderr] 662 | | &model::ProtobufConstant::Bool(b) => { [INFO] [stderr] 663 | | if field_type != &model::FieldType::Bool { [INFO] [stderr] 664 | | Err(()) [INFO] [stderr] ... | [INFO] [stderr] 680 | | _ => Err(()), [INFO] [stderr] 681 | | }; [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] 661 | let v = match *value { [INFO] [stderr] 662 | model::ProtobufConstant::Bool(b) => { [INFO] [stderr] 663 | if field_type != &model::FieldType::Bool { [INFO] [stderr] 664 | Err(()) [INFO] [stderr] 665 | } else { [INFO] [stderr] 666 | Ok(protobuf::UnknownValue::Varint(if b { 1 } else { 0 })) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/convert.rs:670:17 [INFO] [stderr] | [INFO] [stderr] 670 | / match field_type { [INFO] [stderr] 671 | | &model::FieldType::Fixed64 => Ok(protobuf::UnknownValue::Fixed64(v)), [INFO] [stderr] 672 | | // TODO: check overflow [INFO] [stderr] 673 | | &model::FieldType::Int64 | [INFO] [stderr] ... | [INFO] [stderr] 677 | | _ => Err(()), [INFO] [stderr] 678 | | } [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] 670 | match *field_type { [INFO] [stderr] 671 | model::FieldType::Fixed64 => Ok(protobuf::UnknownValue::Fixed64(v)), [INFO] [stderr] 672 | // TODO: check overflow [INFO] [stderr] 673 | model::FieldType::Int64 | [INFO] [stderr] 674 | model::FieldType::Int32 | [INFO] [stderr] 675 | model::FieldType::Uint64 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:124:21 [INFO] [stderr] | [INFO] [stderr] 124 | if *self <= i32::max_value() as i64 && *self >= i32::min_value() as i64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(i32::max_value())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:124:57 [INFO] [stderr] | [INFO] [stderr] 124 | if *self <= i32::max_value() as i64 && *self >= i32::min_value() as i64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(i32::min_value())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:154:12 [INFO] [stderr] | [INFO] [stderr] 154 | if *self as u8 as u32 == *self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `u32::from(*self as u8)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:192:9 [INFO] [stderr] | [INFO] [stderr] 192 | / match self { [INFO] [stderr] 193 | | &Token::Ident(ref s) => s.clone(), [INFO] [stderr] 194 | | &Token::Symbol(c) => c.to_string(), [INFO] [stderr] 195 | | &Token::IntLit(ref i) => i.to_string(), [INFO] [stderr] 196 | | &Token::StrLit(ref s) => s.quoted(), [INFO] [stderr] 197 | | &Token::FloatLit(ref f) => f.to_string(), [INFO] [stderr] 198 | | } [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] 192 | match *self { [INFO] [stderr] 193 | Token::Ident(ref s) => s.clone(), [INFO] [stderr] 194 | Token::Symbol(c) => c.to_string(), [INFO] [stderr] 195 | Token::IntLit(ref i) => i.to_string(), [INFO] [stderr] 196 | Token::StrLit(ref s) => s.quoted(), [INFO] [stderr] 197 | Token::FloatLit(ref f) => f.to_string(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:202:9 [INFO] [stderr] | [INFO] [stderr] 202 | / match self { [INFO] [stderr] 203 | | &Token::IntLit(i) => Ok(NumLit::U64(i)), [INFO] [stderr] 204 | | &Token::FloatLit(f) => Ok(NumLit::F64(f)), [INFO] [stderr] 205 | | _ => Err(ParserError::IncorrectInput), [INFO] [stderr] 206 | | } [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] 202 | match *self { [INFO] [stderr] 203 | Token::IntLit(i) => Ok(NumLit::U64(i)), [INFO] [stderr] 204 | Token::FloatLit(f) => Ok(NumLit::F64(f)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/parser.rs:249:65 [INFO] [stderr] | [INFO] [stderr] 249 | let c_len = char_indices.next().map(|(len, _)| len).unwrap_or(rem.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| rem.len())` [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] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:344:25 [INFO] [stderr] | [INFO] [stderr] 344 | let mut clone = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:455:25 [INFO] [stderr] | [INFO] [stderr] 455 | let mut clone = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:471:25 [INFO] [stderr] | [INFO] [stderr] 471 | let mut clone = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:473:53 [INFO] [stderr] | [INFO] [stderr] 473 | c if c >= '0' && c <= '9' => c as u32 - b'0' as u32, [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b'0')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:474:53 [INFO] [stderr] | [INFO] [stderr] 474 | c if c >= 'A' && c <= 'F' => c as u32 - b'A' as u32 + 10, [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b'A')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:475:53 [INFO] [stderr] | [INFO] [stderr] 475 | c if c >= 'a' && c <= 'f' => c as u32 - b'a' as u32 + 10, [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b'a')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:484:25 [INFO] [stderr] | [INFO] [stderr] 484 | let mut clone = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:486:53 [INFO] [stderr] | [INFO] [stderr] 486 | c if c >= '0' && c <= '7' => c as u32 - b'0' as u32, [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b'0')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:495:25 [INFO] [stderr] | [INFO] [stderr] 495 | let mut clone = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:661:25 [INFO] [stderr] | [INFO] [stderr] 661 | let mut clone = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stderr] --> src/parser.rs:663:16 [INFO] [stderr] | [INFO] [stderr] 663 | if let Ok(_) = clone.next_float_lit() { [INFO] [stderr] | _________- ^^^^^ [INFO] [stderr] 664 | | let f = float::parse_protobuf_float(&self.input[pos..clone.pos])?; [INFO] [stderr] 665 | | *self = clone; [INFO] [stderr] 666 | | return Ok(Token::FloatLit(f)); [INFO] [stderr] 667 | | } [INFO] [stderr] | |_________- help: try this: `if clone.next_float_lit().is_ok()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/parser.rs:723:22 [INFO] [stderr] | [INFO] [stderr] 723 | fn label_allowed(&self, label: Rule) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/parser.rs:747:28 [INFO] [stderr] | [INFO] [stderr] 747 | fn some_label_required(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/parser.rs:757:20 [INFO] [stderr] | [INFO] [stderr] 757 | fn map_allowed(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/parser.rs:767:35 [INFO] [stderr] | [INFO] [stderr] 767 | fn is_most_non_fields_allowed(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/parser.rs:777:26 [INFO] [stderr] | [INFO] [stderr] 777 | fn is_option_allowed(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/parser.rs:914:20 [INFO] [stderr] | [INFO] [stderr] 914 | if idents.into_iter().find(|&i| i == next).is_some() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = note: replace `find(|&i| i == next).is_some()` with `any(|&i| i == next)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/parser.rs:914:27 [INFO] [stderr] | [INFO] [stderr] 914 | if idents.into_iter().find(|&i| i == next).is_some() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [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/parser.rs:938:39 [INFO] [stderr] | [INFO] [stderr] 938 | Ok(self.next_token_if(|token| match token { [INFO] [stderr] | _______________________________________^ [INFO] [stderr] 939 | | &Token::Symbol(c) if c == symbol => true, [INFO] [stderr] 940 | | _ => false, [INFO] [stderr] 941 | | })? != None) [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] 938 | Ok(self.next_token_if(|token| match *token { [INFO] [stderr] 939 | Token::Symbol(c) if c == symbol => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:968:13 [INFO] [stderr] | [INFO] [stderr] 968 | / match token { [INFO] [stderr] 969 | | &Token::Ident(ref ident) => Ok(ident.clone()), [INFO] [stderr] 970 | | _ => Err(ParserError::ExpectIdent), [INFO] [stderr] 971 | | } [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] 968 | match *token { [INFO] [stderr] 969 | Token::Ident(ref ident) => Ok(ident.clone()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:977:13 [INFO] [stderr] | [INFO] [stderr] 977 | / match token { [INFO] [stderr] 978 | | &Token::StrLit(ref str_lit) => Ok(str_lit.clone()), [INFO] [stderr] 979 | | _ => Err(ParserError::IncorrectInput), [INFO] [stderr] 980 | | } [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] 977 | match *token { [INFO] [stderr] 978 | Token::StrLit(ref str_lit) => Ok(str_lit.clone()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:1063:9 [INFO] [stderr] | [INFO] [stderr] 1063 | / if let &Token::Symbol(c) = self.lookahead_some()? { [INFO] [stderr] 1064 | | if c == '+' || c == '-' { [INFO] [stderr] 1065 | | self.advance()?; [INFO] [stderr] 1066 | | let sign = c == '+'; [INFO] [stderr] 1067 | | return Ok(self.next_num_lit()?.to_option_value(sign)?); [INFO] [stderr] 1068 | | } [INFO] [stderr] 1069 | | } [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] 1063 | if let Token::Symbol(c) = *(self.lookahead_some()?) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:1072:17 [INFO] [stderr] | [INFO] [stderr] 1072 | / match token { [INFO] [stderr] 1073 | | &Token::StrLit(ref s) => Some(ProtobufConstant::String(s.clone())), [INFO] [stderr] 1074 | | _ => None, [INFO] [stderr] 1075 | | } [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] 1072 | match *token { [INFO] [stderr] 1073 | Token::StrLit(ref s) => Some(ProtobufConstant::String(s.clone())), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:1081:9 [INFO] [stderr] | [INFO] [stderr] 1081 | / match self.lookahead_some()? { [INFO] [stderr] 1082 | | &Token::IntLit(..) | &Token::FloatLit(..) => { [INFO] [stderr] 1083 | | return self.next_num_lit()?.to_option_value(true); [INFO] [stderr] 1084 | | }, [INFO] [stderr] ... | [INFO] [stderr] 1088 | | _ => {}, [INFO] [stderr] 1089 | | } [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] 1081 | match *(self.lookahead_some()?) { [INFO] [stderr] 1082 | Token::IntLit(..) | Token::FloatLit(..) => { [INFO] [stderr] 1083 | return self.next_num_lit()?.to_option_value(true); [INFO] [stderr] 1084 | }, [INFO] [stderr] 1085 | Token::Ident(..) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:1096:13 [INFO] [stderr] | [INFO] [stderr] 1096 | / match token { [INFO] [stderr] 1097 | | &Token::IntLit(i) => Ok(i), [INFO] [stderr] 1098 | | _ => Err(ParserError::IncorrectInput), [INFO] [stderr] 1099 | | } [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] 1096 | match *token { [INFO] [stderr] 1097 | Token::IntLit(i) => Ok(i), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:1254:13 [INFO] [stderr] | [INFO] [stderr] 1254 | / match token { [INFO] [stderr] 1255 | | &Token::IntLit(i) => i.to_i32(), [INFO] [stderr] 1256 | | _ => Err(ParserError::IncorrectInput), [INFO] [stderr] 1257 | | } [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] 1254 | match *token { [INFO] [stderr] 1255 | Token::IntLit(i) => i.to_i32(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:1441:17 [INFO] [stderr] | [INFO] [stderr] 1441 | / if let &Token::StrLit(..) = self.lookahead_some()? { [INFO] [stderr] 1442 | | let mut names = Vec::new(); [INFO] [stderr] 1443 | | names.push(self.next_str_lit()?.decode_utf8()?); [INFO] [stderr] 1444 | | while self.next_symbol_if_eq(',')? { [INFO] [stderr] ... | [INFO] [stderr] 1449 | | (self.next_ranges()?, Vec::new()) [INFO] [stderr] 1450 | | }; [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] 1441 | if let Token::StrLit(..) = *(self.lookahead_some()?) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/parser.rs:1790:14 [INFO] [stderr] | [INFO] [stderr] 1790 | .expect(&format!("lexer failed at {}", lexer.loc)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("lexer failed at {}", lexer.loc))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/parser.rs:1804:14 [INFO] [stderr] | [INFO] [stderr] 1804 | .expect(&format!("lexer failed at {}", lexer.loc)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("lexer failed at {}", lexer.loc))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/parser.rs:1805:19 [INFO] [stderr] | [INFO] [stderr] 1805 | let r = o.expect(&format!("lexer returned none at {}", lexer.loc)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("lexer returned none at {}", lexer.loc))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/parser.rs:1815:14 [INFO] [stderr] | [INFO] [stderr] 1815 | .expect(&format!("parse failed at {}", parser.loc())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("parse failed at {}", parser.loc()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/parser.rs:1816:39 [INFO] [stderr] | [INFO] [stderr] 1816 | let eof = parser.syntax_eof().expect(&format!("check eof failed at {}", parser.loc())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("check eof failed at {}", parser.loc()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/parser.rs:1826:14 [INFO] [stderr] | [INFO] [stderr] 1826 | .expect(&format!("parse failed at {}", parser.loc())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("parse failed at {}", parser.loc()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/parser.rs:1827:19 [INFO] [stderr] | [INFO] [stderr] 1827 | let r = o.expect(&format!("parser returned none at {}", parser.loc())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("parser returned none at {}", parser.loc()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/lib.rs:100:16 [INFO] [stderr] | [INFO] [stderr] 100 | if let Some(_) = result.get(protobuf_path) { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 101 | | return; [INFO] [stderr] 102 | | } [INFO] [stderr] | |_________- help: try this: `if result.get(protobuf_path).is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/lib.rs:121:16 [INFO] [stderr] | [INFO] [stderr] 121 | if let Some(_) = self.parsed_files.get(protobuf_path) { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 122 | | return Ok(()); [INFO] [stderr] 123 | | } [INFO] [stderr] | |_________- help: try this: `if self.parsed_files.get(protobuf_path).is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 5.21s [INFO] running `"docker" "inspect" "07fbc8938afd600033ef0abb172768fbe0406f12562db7958c1e041b7b88fc94"` [INFO] running `"docker" "rm" "-f" "07fbc8938afd600033ef0abb172768fbe0406f12562db7958c1e041b7b88fc94"` [INFO] [stdout] 07fbc8938afd600033ef0abb172768fbe0406f12562db7958c1e041b7b88fc94