#attributes #syntax #conditional #macro #token

macro add-syntax

Attribute macros that prepend or append arbitrary syntax. Useful with cfg_attr.

1 unstable release

0.1.0 Dec 20, 2022

#12 in #attribute


Used in 2 crates

Apache-2.0

7KB

add-syntax

Attribute macros that prepend or append arbitrary syntax. Useful with cfg_attr.

This crate provides two attribute macros, prepend and append, that add the tokens passed to them to the start or end of the item to which the attribute is applied, respectively. This is particularly useful with cfg_attr.

Example

Conditionally applying unsafe when #[may_dangle] is used:

#[cfg_attr(feature = "dropck_eyepatch", add_syntax::prepend(unsafe))]
impl<#[cfg_attr(feature = "dropck_eyepatch", may_dangle)] T> Drop
    for Foo<T>
{
    fn drop(&mut self) { /* ... */ }
}

If the hypothetical feature dropck_eyepatch is enabled, the code above is equivalent to:

unsafe impl<#[may_dangle] T> Drop for Foo<T> {
    fn drop(&mut self) { /* ... */ }
}

Otherwise, if the feature is not enabled, the code is equivalent to:

impl<T> Drop for Foo<T> {
    fn drop(&mut self) { /* ... */ }
}

No runtime deps