Skip to content

Commit

Permalink
generator: Support new deprecated attribute
Browse files Browse the repository at this point in the history
  • Loading branch information
MarijnS95 committed Feb 26, 2023
1 parent 4a294be commit 2a020d2
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 17 deletions.
2 changes: 1 addition & 1 deletion generator/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
36 changes: 20 additions & 16 deletions generator/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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<TokenStream> {
self.formatted_notation().map(|n| quote!(#[doc = #n]))
}
}

Expand All @@ -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 {
Expand All @@ -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 {
Expand All @@ -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)]
Expand Down Expand Up @@ -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 {
Expand All @@ -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>(
Expand All @@ -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;
}

Expand All @@ -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
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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());
Expand Down

0 comments on commit 2a020d2

Please sign in to comment.