Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bon-macros/src/builder/builder_gen/setters/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,7 @@ impl SettersItems {
// to make IDE's "go to definition" work correctly. It's so
// important that this doesn't use `format_ident!`, but rather
// `syn::Ident::new` to set the span of the `Ident` explicitly.
syn::Ident::new(&format!("maybe_{base_name}"), base_name.span())
syn::Ident::new(&format!("maybe_{}", base_name.raw_name()), base_name.span())
});

let default = member.config.default.as_deref().and_then(|default| {
Expand Down
81 changes: 63 additions & 18 deletions bon/tests/integration/builder/raw_idents.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,58 @@ use crate::prelude::*;

#[test]
#[allow(non_camel_case_types)]
fn struct_case() {
#[derive(Builder)]
struct r#Type {
r#type: u32,
fn test_struct() {
{
#[derive(Builder)]
struct r#Type {
r#type: u32,

#[builder(name = r#while)]
other: u32,
}
#[builder(name = r#while)]
other: u32,
}

let actual = r#Type::builder().r#type(42).r#while(100).build();
let actual = r#Type::builder().r#type(42).r#while(100).build();

assert_eq!(actual.r#type, 42);
assert_eq!(actual.other, 100);
assert_eq!(actual.r#type, 42);
assert_eq!(actual.other, 100);

#[derive(Builder)]
#[builder(builder_type = r#type, state_mod = r#mod)]
#[allow(clippy::items_after_statements, dead_code)]
struct Sut {
r#while: u32,
#[derive(Builder)]
#[builder(builder_type = r#type, state_mod = r#mod)]
#[allow(clippy::items_after_statements, dead_code)]
struct Sut {
r#while: u32,
}

let _actual: r#type = Sut::builder();
let _actual: r#type<r#mod::SetWhile> = Sut::builder().r#while(32);
}
// This is based on the issue https://github.com/elastio/bon/issues/174
{
{
#[derive(Builder)]
struct Sut {
r#type: Option<u32>,
}

let value = Sut::builder().maybe_type(Some(2)).build();
assert_eq!(value.r#type, Some(2));
}
{
#[derive(Builder)]
struct Sut {
#[builder(default)]
r#type: u32,
}

let _actual: r#type = Sut::builder();
let _actual: r#type<r#mod::SetWhile> = Sut::builder().r#while(32);
let value = Sut::builder().maybe_type(Some(2)).build();
assert_eq!(value.r#type, 2);
}
}
}

#[test]
#[allow(non_camel_case_types)]
fn fn_case() {
fn test_fn() {
{
#[builder]
fn r#type(r#type: u32, #[builder(name = r#while)] other: u32) {
Expand All @@ -46,4 +70,25 @@ fn fn_case() {

let _: r#type = sut();
}
// This is based on the issue https://github.com/elastio/bon/issues/174
{
{
#[builder]
fn sut(r#type: Option<u32>) -> Option<u32> {
r#type
}

let value = sut().maybe_type(Some(2)).call();
assert_eq!(value, Some(2));
}
{
#[builder]
fn sut(#[builder(default)] r#type: u32) -> u32 {
r#type
}

let value = sut().maybe_type(Some(2)).call();
assert_eq!(value, 2);
}
}
}
1 change: 1 addition & 0 deletions website/src/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ All the breaking changes are very unlikely to actually break your code that was
### Fixed

- Fix `#[cfg/cfg_attr()]` not being expanded when used on function arguments with doc comments or other attributes.
- Fix raw identifiers in optional/default members ([#175](https://github.com/elastio/bon/pull/175))

### Other

Expand Down