From 2a020d2e81197b2f94b41194a8d8381f3d3ff50b Mon Sep 17 00:00:00 2001 From: Marijn Suijten Date: Thu, 16 Feb 2023 16:02:32 +0100 Subject: [PATCH] generator: Support new `deprecated` attribute --- generator/Cargo.toml | 2 +- generator/src/lib.rs | 36 ++++++++++++++++++++---------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/generator/Cargo.toml b/generator/Cargo.toml index 87975f3e4..ec452617f 100644 --- a/generator/Cargo.toml +++ b/generator/Cargo.toml @@ -13,7 +13,7 @@ once_cell = "1.7" proc-macro2 = "1.0" quote = "1.0" regex = "1.4" -vk-parse = { version = "0.9", features = ["vkxml-convert"] } +vk-parse = { version = "0.10", features = ["vkxml-convert"] } vkxml = "0.3" [dependencies.syn] diff --git a/generator/src/lib.rs b/generator/src/lib.rs index 9946968cc..51ad0058d 100644 --- a/generator/src/lib.rs +++ b/generator/src/lib.rs @@ -40,8 +40,6 @@ macro_rules! get_variant { }; } -const BACKWARDS_COMPATIBLE_ALIAS_COMMENT: &str = "Backwards-compatible alias containing a typo"; - pub trait ExtensionExt {} #[derive(Copy, Clone, Debug)] pub enum CType { @@ -239,17 +237,9 @@ pub trait ConstantExt { fn is_alias(&self) -> bool { false } - fn doc_attribute(&self) -> TokenStream { - assert_ne!( - self.notation(), - Some(BACKWARDS_COMPATIBLE_ALIAS_COMMENT), - "Backwards-compatible constants should not be emitted" - ); - match self.formatted_notation() { - Some(n) if n.starts_with("Alias") => quote!(#[deprecated = #n]), - Some(n) => quote!(#[doc = #n]), - None => quote!(), - } + fn is_deprecated(&self) -> bool; + fn doc_attribute(&self) -> Option { + self.formatted_notation().map(|n| quote!(#[doc = #n])) } } @@ -263,6 +253,9 @@ impl ConstantExt for vkxml::ExtensionEnum { fn notation(&self) -> Option<&str> { self.notation.as_deref() } + fn is_deprecated(&self) -> bool { + todo!() + } } impl ConstantExt for vk_parse::Enum { @@ -280,6 +273,9 @@ impl ConstantExt for vk_parse::Enum { fn is_alias(&self) -> bool { matches!(self.spec, vk_parse::EnumSpec::Alias { .. }) } + fn is_deprecated(&self) -> bool { + self.deprecated.is_some() + } } impl ConstantExt for vkxml::Constant { @@ -292,6 +288,9 @@ impl ConstantExt for vkxml::Constant { fn notation(&self) -> Option<&str> { self.notation.as_deref() } + fn is_deprecated(&self) -> bool { + todo!() + } } #[derive(Clone, Debug)] @@ -943,6 +942,7 @@ pub struct ExtensionConstant<'a> { pub name: &'a str, pub constant: Constant, pub notation: Option<&'a str>, + pub deprecated: bool, } impl<'a> ConstantExt for ExtensionConstant<'a> { fn constant(&self, _enum_name: &str) -> Constant { @@ -954,6 +954,9 @@ impl<'a> ConstantExt for ExtensionConstant<'a> { fn notation(&self) -> Option<&str> { self.notation } + fn is_deprecated(&self) -> bool { + self.deprecated + } } pub fn generate_extension_constants<'a>( @@ -976,7 +979,7 @@ pub fn generate_extension_constants<'a>( continue; } - if enum_.comment.as_deref() == Some(BACKWARDS_COMPATIBLE_ALIAS_COMMENT) { + if enum_.deprecated.is_some() { continue; } @@ -996,6 +999,7 @@ pub fn generate_extension_constants<'a>( name: &enum_.name, constant, notation: enum_.comment.as_deref(), + deprecated: enum_.deprecated.is_some(), }; let ident = name_to_tokens(&extends); const_values @@ -1316,7 +1320,7 @@ pub fn bitflags_impl_block( ) -> TokenStream { let variants = constants .iter() - .filter(|constant| constant.notation() != Some(BACKWARDS_COMPATIBLE_ALIAS_COMMENT)) + .filter(|constant| !constant.is_deprecated()) .map(|constant| { let variant_ident = constant.variant_ident(enum_name); let notation = constant.doc_attribute(); @@ -1354,7 +1358,7 @@ pub fn generate_enum<'a>( .children .iter() .filter_map(get_variant!(vk_parse::EnumsChild::Enum)) - .filter(|constant| constant.notation() != Some(BACKWARDS_COMPATIBLE_ALIAS_COMMENT)) + .filter(|constant| !constant.is_deprecated()) .collect_vec(); let mut values = Vec::with_capacity(constants.len());