Skip to content

Commit dd6048f

Browse files
authored
Fix clippy::missing_docs_in_private_items triggering for start_fn members (#389)
1 parent 0f845dc commit dd6048f

3 files changed

Lines changed: 96 additions & 3 deletions

File tree

bon-macros/src/builder/builder_gen/builder_decl.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ impl super::BuilderGenCtx {
4040
let ident = &receiver.field_ident;
4141
let ty = &receiver.without_self_keyword;
4242
quote! {
43+
/// Value of `self` passed to the starting method, that created the builder
4344
#ident: #ty,
4445
}
4546
});
@@ -51,8 +52,18 @@ impl super::BuilderGenCtx {
5152

5253
let allows = super::allow_warnings_on_member_types();
5354

54-
let start_fn_args_fields_idents = self.start_fn_args().map(|member| &member.ident);
55-
let start_fn_args_fields_types = self.start_fn_args().map(|member| &member.ty.norm);
55+
let start_fn_args_fields = self.start_fn_args().map(|member| {
56+
let ident = &member.ident;
57+
let ty = &member.ty.norm;
58+
let doc = format!(
59+
"Value of `{ident}` passed as an argument to the starting function,
60+
that created the builder",
61+
);
62+
quote! {
63+
#[doc = #doc]
64+
#ident: #ty
65+
}
66+
});
5667

5768
let named_members_types = self.named_members().map(NamedMember::underlying_norm_ty);
5869

@@ -96,7 +107,7 @@ impl super::BuilderGenCtx {
96107

97108
#receiver_field
98109

99-
#( #start_fn_args_fields_idents: #start_fn_args_fields_types, )*
110+
#( #start_fn_args_fields, )*
100111

101112
#( #custom_fields_idents: #custom_fields_types, )*
102113

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
//! Tests that make sure `clippy::missing_docs_in_private_items` isn't triggered.
2+
//! This was created in response to [this issue](https://github.com/elastio/bon/issues/388).
3+
#![warn(clippy::missing_docs_in_private_items)]
4+
5+
use bon::{bon, builder, Builder};
6+
7+
/// Docs on `ExampleStruct`
8+
#[derive(Builder)]
9+
struct ExampleStruct {
10+
/// Docs on `start_fn` member
11+
#[builder(start_fn)]
12+
start_fn: u32,
13+
14+
/// Docs on `finish_fn` member
15+
#[builder(finish_fn)]
16+
finish_fn: u32,
17+
18+
/// Docs on regular member
19+
regular: u32,
20+
}
21+
22+
#[bon]
23+
impl ExampleStruct {
24+
#[builder]
25+
const fn selfless_fn(
26+
/// Docs on `start_fn` member
27+
#[builder(start_fn)]
28+
start_fn: u32,
29+
30+
/// Docs on `finish_fn` member
31+
#[builder(finish_fn)]
32+
finish_fn: u32,
33+
34+
/// Docs on regular member
35+
regular: u32,
36+
) {
37+
let _ = start_fn;
38+
let _ = finish_fn;
39+
let _ = regular;
40+
}
41+
42+
#[builder]
43+
const fn selfful_fn(
44+
&self,
45+
46+
/// Docs on `start_fn` member
47+
#[builder(start_fn)]
48+
start_fn: u32,
49+
50+
/// Docs on `finish_fn` member
51+
#[builder(finish_fn)]
52+
finish_fn: u32,
53+
54+
/// Docs on regular member
55+
regular: u32,
56+
) {
57+
let _ = self;
58+
let _ = start_fn;
59+
let _ = finish_fn;
60+
let _ = regular;
61+
}
62+
}
63+
64+
/// Docs on `example` function
65+
#[builder]
66+
const fn example_function(
67+
/// Docs on `start_fn` member
68+
#[builder(start_fn)]
69+
start_fn: u32,
70+
71+
/// Docs on `finish_fn` member
72+
#[builder(finish_fn)]
73+
finish_fn: u32,
74+
75+
/// Docs on regular member
76+
regular: u32,
77+
) {
78+
let _ = start_fn;
79+
let _ = finish_fn;
80+
let _ = regular;
81+
}

bon-sandbox/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ pub mod overrides;
1313
pub mod private_builder;
1414
pub mod state_mod;
1515

16+
mod docs_in_private_items;
1617
mod reexports;
1718

1819
pub use reexports::{UnexportedBuilder, UnexportedStateMod, UnexportedStateModBuilder};

0 commit comments

Comments
 (0)