Skip to content

Commit 0c3f2ce

Browse files
committed
fix: builder methods visibility must not always be public
1 parent cdd052c commit 0c3f2ce

File tree

6 files changed

+21
-16
lines changed

6 files changed

+21
-16
lines changed

fieldx/tests/plain_builder_generics.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ use std::{
44
marker::PhantomData,
55
};
66

7-
trait Newish {
7+
pub trait Newish {
88
fn new() -> Self;
99
}
1010

1111
#[fxstruct(builder, into)]
1212
#[derive(Debug)]
13-
struct Plain<'a, 'b, T>
13+
pub struct Plain<'a, 'b, T>
1414
where
1515
T: Display + Debug + Default + Newish,
1616
'b: 'a,

fieldx_derive/src/codegen.rs

+2-12
Original file line numberDiff line numberDiff line change
@@ -305,16 +305,6 @@ impl FXRewriter {
305305
}
306306
}
307307

308-
fn builder_struct_visibility(&self) -> TokenStream {
309-
let ctx = self.ctx();
310-
self.ctx()
311-
.args()
312-
.get_helper(FXHelperKind::Builder)
313-
.and_then(|builder| builder.public_mode().map(|pm| pm.to_token_stream()))
314-
.or_else(|| Some(ctx.input().vis().to_token_stream()))
315-
.unwrap()
316-
}
317-
318308
fn builder_field_ctxs(&self) -> Vec<darling::Result<Ref<FXFieldCtx>>> {
319309
let ctx = self.ctx();
320310
let builder_field_idents = ctx.builder_field_ident().borrow();
@@ -326,7 +316,7 @@ impl FXRewriter {
326316

327317
fn builder_impl(&self) -> TokenStream {
328318
let ctx = self.ctx();
329-
let vis = self.builder_struct_visibility();
319+
let vis = ctx.builder_struct_visibility();
330320
let builder_ident = ctx.builder_ident();
331321
let builders = ctx.builders_combined();
332322
let input_ident = ctx.input_ident();
@@ -432,7 +422,7 @@ impl FXRewriter {
432422
let generics = ctx.input().generics();
433423
let where_clause = &generics.where_clause;
434424
let span = ctx.helper_span(FXHelperKind::Builder);
435-
let vis = self.builder_struct_visibility();
425+
let vis = ctx.builder_struct_visibility();
436426
let attributes = args.builder_attributes();
437427
let builder_ident = ctx.builder_ident();
438428

fieldx_derive/src/codegen/codegen_trait.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,7 @@ pub trait FXCodeGenContextual {
358358
if fctx.forced_builder() || fctx.needs_builder() {
359359
let ident = fctx.ident_tok();
360360
let mut builder_name = self.helper_name(fctx, FXHelperKind::Builder)?;
361+
let vis = fctx.builder_method_visibility();
361362
// .builder_name(fctx)?;
362363
// .unwrap_or(format_ident!("{}", fctx.helper_base_name().expect("Field name")).to_token_stream());
363364
let span = fctx.helper_span(FXHelperKind::Builder);
@@ -366,7 +367,7 @@ pub trait FXCodeGenContextual {
366367
builder_name.set_span(span);
367368
Ok(quote_spanned![span=>
368369
#attributes
369-
pub fn #builder_name #gen_params(mut self, value: #val_type) -> Self {
370+
#vis fn #builder_name #gen_params(mut self, value: #val_type) -> Self {
370371
self.#ident = ::std::option::Option::Some(value #into_tok);
371372
self
372373
}

fieldx_derive/src/ctx/codegen.rs

+8
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,14 @@ impl FXCodeGenCtx {
450450
})
451451
}
452452

453+
pub fn builder_struct_visibility(&self) -> TokenStream {
454+
self.args()
455+
.get_helper(FXHelperKind::Builder)
456+
.and_then(|builder| builder.public_mode().map(|pm| pm.to_token_stream()))
457+
.or_else(|| Some(self.input().vis().to_token_stream()))
458+
.unwrap()
459+
}
460+
453461
#[inline(always)]
454462
pub fn builder_has_post_build(&self) -> bool {
455463
self.args.builder().as_ref().map_or(false, |b| b.has_post_build())

fieldx_derive/src/ctx/field.rs

+7
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,13 @@ impl FXFieldCtx {
429429
self.attrs().iter().cloned().collect()
430430
}
431431

432+
pub fn builder_method_visibility(&self) -> TokenStream {
433+
self.builder().as_ref().and_then(|b| b.public_mode()).map_or_else(
434+
|| self.codegen_ctx().builder_struct_visibility(),
435+
|pub_mode| pub_mode.to_token_stream(),
436+
)
437+
}
438+
432439
pub fn set_builder_checker(&self, bc: TokenStream) {
433440
*self.builder_checker.borrow_mut() = Some(bc);
434441
}

makefile.ds

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ fn <scope> ask_user
88
return ${reply}
99
end
1010

11-
1211
# Function to generate the power set of an array
1312
fn <scope> generate_power_set
1413
input = set ${1}

0 commit comments

Comments
 (0)