codex: gate empty experimental fields

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
starr-openai
2026-04-20 14:29:23 -07:00
parent 8b6f131cea
commit bf85976e6e
2 changed files with 25 additions and 5 deletions

View File

@@ -98,6 +98,13 @@ mod tests {
inners: HashMap<String, EnumVariantShapes>,
}
#[allow(dead_code)]
#[derive(ExperimentalApi)]
struct ExperimentalFieldShape {
#[experimental("field/optionalCollection")]
optional_collection: Option<Vec<EnumVariantShapes>>,
}
#[test]
fn derive_supports_all_enum_variant_shapes() {
assert_eq!(
@@ -169,4 +176,20 @@ mod tests {
None
);
}
#[test]
fn derive_marks_optional_experimental_fields_when_some() {
assert_eq!(
ExperimentalApiTrait::experimental_reason(&ExperimentalFieldShape {
optional_collection: Some(Vec::new()),
}),
Some("field/optionalCollection")
);
assert_eq!(
ExperimentalApiTrait::experimental_reason(&ExperimentalFieldShape {
optional_collection: None,
}),
None
);
}
}

View File

@@ -261,11 +261,8 @@ fn presence_expr_for_access(
access: proc_macro2::TokenStream,
ty: &Type,
) -> proc_macro2::TokenStream {
if let Some(inner) = option_inner(ty) {
let inner_expr = presence_expr_for_ref(quote!(value), inner);
return quote! {
#access.as_ref().is_some_and(|value| #inner_expr)
};
if option_inner(ty).is_some() {
return quote! { #access.is_some() };
}
if is_vec_like(ty) || is_map_like(ty) {
return quote! { !#access.is_empty() };