Skip to content

Commit 04be604

Browse files
authored
Fix clippy warnings and enable clippy in CI (#1008)
* prost: clarify encoding test buffer copying: fixes `noop_method_call` clippy lint warning. * ci: add lint checking step: * Makes that the entrire workspace is checked, but tests too. * chore: fix `needless_borrow` lints * chore: fix `needless_return` lints * chore: remove noop clippy allows * chore: fix `box_default` lints * chore: fix `unnecessary_cast` lints * chore: fix `slow_vector_initialization` lints * chore: fix `assigning_clones` lints * chore: fix `unused_import` lints * chore: fix `single_match` lints
1 parent 963e942 commit 04be604

File tree

21 files changed

+94
-77
lines changed

21 files changed

+94
-77
lines changed

.github/workflows/ci.yml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ env:
1212
PROTOC_VERSION: 3.20.3
1313

1414
jobs:
15-
1615
rustfmt:
1716
runs-on: ubuntu-latest
1817
steps:
@@ -22,6 +21,21 @@ jobs:
2221
components: rustfmt
2322
- run: cargo fmt --all --check
2423

24+
clippy:
25+
runs-on: ubuntu-latest
26+
steps:
27+
- uses: actions/checkout@v4
28+
- name: install protoc
29+
uses: taiki-e/install-action@v2
30+
with:
31+
tool: protoc@${{ env.PROTOC_VERSION }}
32+
- name: install ninja
33+
uses: ./.github/actions/setup-ninja
34+
- uses: dtolnay/rust-toolchain@stable
35+
with:
36+
components: clippy
37+
- run: cargo clippy --workspace --all-features --tests -- -D warnings
38+
2539
machete:
2640
runs-on: ubuntu-latest
2741
steps:

conformance/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use tests::{roundtrip, RoundtripResult};
1212

1313
fn main() -> io::Result<()> {
1414
env_logger::init();
15-
let mut bytes = Vec::new();
15+
let mut bytes = vec![0; 4];
1616

1717
loop {
1818
bytes.resize(4, 0);

prost-build/src/code_generator.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,7 @@ impl<'a> CodeGenerator<'a> {
205205
.as_ref()
206206
.and_then(|type_name| map_types.get(type_name))
207207
{
208-
Some(&(ref key, ref value)) => {
209-
self.append_map_field(&fq_message_name, field, key, value)
210-
}
208+
Some((key, value)) => self.append_map_field(&fq_message_name, field, key, value),
211209
None => self.append_field(&fq_message_name, field),
212210
}
213211
self.path.pop();
@@ -273,7 +271,7 @@ impl<'a> CodeGenerator<'a> {
273271
self.buf.push_str(&format!(
274272
"impl {}::Name for {} {{\n",
275273
self.config.prost_path.as_deref().unwrap_or("::prost"),
276-
to_upper_camel(&message_name)
274+
to_upper_camel(message_name)
277275
));
278276
self.depth += 1;
279277

@@ -382,7 +380,7 @@ impl<'a> CodeGenerator<'a> {
382380
|| (self
383381
.config
384382
.boxed
385-
.get_first_field(&fq_message_name, field.name())
383+
.get_first_field(fq_message_name, field.name())
386384
.is_some());
387385

388386
debug!(
@@ -564,10 +562,7 @@ impl<'a> CodeGenerator<'a> {
564562
self.buf.push_str(&format!(
565563
"#[prost(oneof=\"{}\", tags=\"{}\")]\n",
566564
name,
567-
fields
568-
.iter()
569-
.map(|&(ref field, _)| field.number())
570-
.join(", ")
565+
fields.iter().map(|(field, _)| field.number()).join(", ")
571566
));
572567
self.append_field_attributes(fq_message_name, oneof.name());
573568
self.push_indent();
@@ -601,7 +596,7 @@ impl<'a> CodeGenerator<'a> {
601596
"#[derive(Clone, PartialEq, {}::Oneof)]\n",
602597
prost_path(self.config)
603598
));
604-
self.append_skip_debug(&fq_message_name);
599+
self.append_skip_debug(fq_message_name);
605600
self.push_indent();
606601
self.buf.push_str("pub enum ");
607602
self.buf.push_str(&to_upper_camel(oneof.name()));

prost-build/src/ident.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,6 @@ pub fn strip_enum_prefix(prefix: &str, name: &str) -> String {
6868

6969
#[cfg(test)]
7070
mod tests {
71-
72-
#![allow(clippy::cognitive_complexity)]
73-
7471
use super::*;
7572

7673
#[test]

prost-derive/src/field/mod.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -269,9 +269,7 @@ fn bool_attr(key: &str, attr: &Meta) -> Result<Option<bool>, Error> {
269269
}
270270
match *attr {
271271
Meta::Path(..) => Ok(Some(true)),
272-
Meta::List(ref meta_list) => {
273-
return Ok(Some(meta_list.parse_args::<LitBool>()?.value()));
274-
}
272+
Meta::List(ref meta_list) => Ok(Some(meta_list.parse_args::<LitBool>()?.value())),
275273
Meta::NameValue(MetaNameValue {
276274
value:
277275
Expr::Lit(ExprLit {
@@ -310,9 +308,7 @@ pub(super) fn tag_attr(attr: &Meta) -> Result<Option<u32>, Error> {
310308
return Ok(None);
311309
}
312310
match *attr {
313-
Meta::List(ref meta_list) => {
314-
return Ok(Some(meta_list.parse_args::<LitInt>()?.base10_parse()?));
315-
}
311+
Meta::List(ref meta_list) => Ok(Some(meta_list.parse_args::<LitInt>()?.base10_parse()?)),
316312
Meta::NameValue(MetaNameValue {
317313
value: Expr::Lit(ref expr),
318314
..

prost-derive/src/field/scalar.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use std::convert::TryFrom;
21
use std::fmt;
32

43
use anyhow::{anyhow, bail, Error};
@@ -272,7 +271,7 @@ impl Field {
272271
pub fn methods(&self, ident: &TokenStream) -> Option<TokenStream> {
273272
let mut ident_str = ident.to_string();
274273
if ident_str.starts_with("r#") {
275-
ident_str = ident_str[2..].to_owned();
274+
ident_str = ident_str.split_off(2);
276275
}
277276

278277
// Prepend `get_` for getter methods of tuple structs.

prost-derive/src/lib.rs

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,12 @@ fn try_message(input: TokenStream) -> Result<TokenStream, Error> {
8888
// TODO: This encodes oneof fields in the position of their lowest tag,
8989
// regardless of the currently occupied variant, is that consequential?
9090
// See: https://developers.google.com/protocol-buffers/docs/encoding#order
91-
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
91+
fields.sort_by_key(|(_, field)| field.tags().into_iter().min().unwrap());
9292
let fields = fields;
9393

9494
let mut tags = fields
9595
.iter()
96-
.flat_map(|&(_, ref field)| field.tags())
96+
.flat_map(|(_, field)| field.tags())
9797
.collect::<Vec<_>>();
9898
let num_tags = tags.len();
9999
tags.sort_unstable();
@@ -104,13 +104,13 @@ fn try_message(input: TokenStream) -> Result<TokenStream, Error> {
104104

105105
let encoded_len = fields
106106
.iter()
107-
.map(|&(ref field_ident, ref field)| field.encoded_len(quote!(self.#field_ident)));
107+
.map(|(field_ident, field)| field.encoded_len(quote!(self.#field_ident)));
108108

109109
let encode = fields
110110
.iter()
111-
.map(|&(ref field_ident, ref field)| field.encode(quote!(self.#field_ident)));
111+
.map(|(field_ident, field)| field.encode(quote!(self.#field_ident)));
112112

113-
let merge = fields.iter().map(|&(ref field_ident, ref field)| {
113+
let merge = fields.iter().map(|(field_ident, field)| {
114114
let merge = field.merge(quote!(value));
115115
let tags = field.tags().into_iter().map(|tag| quote!(#tag));
116116
let tags = Itertools::intersperse(tags, quote!(|));
@@ -136,7 +136,7 @@ fn try_message(input: TokenStream) -> Result<TokenStream, Error> {
136136

137137
let clear = fields
138138
.iter()
139-
.map(|&(ref field_ident, ref field)| field.clear(quote!(self.#field_ident)));
139+
.map(|(field_ident, field)| field.clear(quote!(self.#field_ident)));
140140

141141
let default = if is_struct {
142142
let default = fields.iter().map(|(field_ident, field)| {
@@ -158,7 +158,7 @@ fn try_message(input: TokenStream) -> Result<TokenStream, Error> {
158158

159159
let methods = fields
160160
.iter()
161-
.flat_map(|&(ref field_ident, ref field)| field.methods(field_ident))
161+
.flat_map(|(field_ident, field)| field.methods(field_ident))
162162
.collect::<Vec<_>>();
163163
let methods = if methods.is_empty() {
164164
quote!()
@@ -213,7 +213,7 @@ fn try_message(input: TokenStream) -> Result<TokenStream, Error> {
213213
let expanded = if skip_debug {
214214
expanded
215215
} else {
216-
let debugs = unsorted_fields.iter().map(|&(ref field_ident, ref field)| {
216+
let debugs = unsorted_fields.iter().map(|(field_ident, field)| {
217217
let wrapper = field.debug(quote!(self.#field_ident));
218218
let call = if is_struct {
219219
quote!(builder.field(stringify!(#field_ident), &wrapper))
@@ -300,16 +300,14 @@ fn try_enumeration(input: TokenStream) -> Result<TokenStream, Error> {
300300

301301
let default = variants[0].0.clone();
302302

303-
let is_valid = variants
303+
let is_valid = variants.iter().map(|(_, value)| quote!(#value => true));
304+
let from = variants
304305
.iter()
305-
.map(|&(_, ref value)| quote!(#value => true));
306-
let from = variants.iter().map(
307-
|&(ref variant, ref value)| quote!(#value => ::core::option::Option::Some(#ident::#variant)),
308-
);
306+
.map(|(variant, value)| quote!(#value => ::core::option::Option::Some(#ident::#variant)));
309307

310-
let try_from = variants.iter().map(
311-
|&(ref variant, ref value)| quote!(#value => ::core::result::Result::Ok(#ident::#variant)),
312-
);
308+
let try_from = variants
309+
.iter()
310+
.map(|(variant, value)| quote!(#value => ::core::result::Result::Ok(#ident::#variant)));
313311

314312
let is_valid_doc = format!("Returns `true` if `value` is a variant of `{}`.", ident);
315313
let from_i32_doc = format!(
@@ -416,7 +414,7 @@ fn try_oneof(input: TokenStream) -> Result<TokenStream, Error> {
416414

417415
let mut tags = fields
418416
.iter()
419-
.flat_map(|&(ref variant_ident, ref field)| -> Result<u32, Error> {
417+
.flat_map(|(variant_ident, field)| -> Result<u32, Error> {
420418
if field.tags().len() > 1 {
421419
bail!(
422420
"invalid oneof variant {}::{}: oneof variants may only have a single tag",
@@ -433,12 +431,12 @@ fn try_oneof(input: TokenStream) -> Result<TokenStream, Error> {
433431
panic!("invalid oneof {}: variants have duplicate tags", ident);
434432
}
435433

436-
let encode = fields.iter().map(|&(ref variant_ident, ref field)| {
434+
let encode = fields.iter().map(|(variant_ident, field)| {
437435
let encode = field.encode(quote!(*value));
438436
quote!(#ident::#variant_ident(ref value) => { #encode })
439437
});
440438

441-
let merge = fields.iter().map(|&(ref variant_ident, ref field)| {
439+
let merge = fields.iter().map(|(variant_ident, field)| {
442440
let tag = field.tags()[0];
443441
let merge = field.merge(quote!(value));
444442
quote! {
@@ -457,7 +455,7 @@ fn try_oneof(input: TokenStream) -> Result<TokenStream, Error> {
457455
}
458456
});
459457

460-
let encoded_len = fields.iter().map(|&(ref variant_ident, ref field)| {
458+
let encoded_len = fields.iter().map(|(variant_ident, field)| {
461459
let encoded_len = field.encoded_len(quote!(*value));
462460
quote!(#ident::#variant_ident(ref value) => #encoded_len)
463461
});
@@ -499,7 +497,7 @@ fn try_oneof(input: TokenStream) -> Result<TokenStream, Error> {
499497
let expanded = if skip_debug {
500498
expanded
501499
} else {
502-
let debug = fields.iter().map(|&(ref variant_ident, ref field)| {
500+
let debug = fields.iter().map(|(variant_ident, field)| {
503501
let wrapper = field.debug(quote!(*value));
504502
quote!(#ident::#variant_ident(ref value) => {
505503
let wrapper = #wrapper;

prost-types/src/any.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,13 @@ impl Any {
2020
{
2121
let expected_type_url = M::type_url();
2222

23-
match (
23+
if let (Some(expected), Some(actual)) = (
2424
TypeUrl::new(&expected_type_url),
2525
TypeUrl::new(&self.type_url),
2626
) {
27-
(Some(expected), Some(actual)) => {
28-
if expected == actual {
29-
return Ok(M::decode(self.value.as_slice())?);
30-
}
27+
if expected == actual {
28+
return M::decode(self.value.as_slice());
3129
}
32-
_ => (),
3330
}
3431

3532
let mut err = DecodeError::new(format!(

prost-types/src/datetime.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -567,10 +567,7 @@ pub(crate) fn parse_duration(s: &str) -> Option<Duration> {
567567
(seconds, nanos as i32)
568568
};
569569

570-
Some(Duration {
571-
seconds,
572-
nanos: nanos as i32,
573-
})
570+
Some(Duration { seconds, nanos })
574571
}
575572

576573
impl From<DateTime> for Timestamp {

prost-types/src/timestamp.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ impl Name for Timestamp {
122122
impl Eq for Timestamp {}
123123

124124
#[cfg(feature = "std")]
125-
#[allow(clippy::derive_hash_xor_eq)] // Derived logic is correct: comparing the 2 fields for equality
126125
impl std::hash::Hash for Timestamp {
127126
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
128127
self.seconds.hash(state);

0 commit comments

Comments
 (0)