# Trait syn::ext::IdentExt

source · [−]

    pub trait IdentExt: Sized + Sealed {
        const peek_any: PeekFn = private::PeekFn;

        fn parse_any(input: ParseStream<'_>) -> Result<Self>;
        fn unraw(&self) -> Ident;
    }

Expand description

Additional methods for `Ident` not provided by proc-macro2 or libproc_macro.

This trait is sealed and cannot be implemented for types outside of Syn. It is implemented only for `proc_macro2::Ident`.

This trait is available only if Syn is built with the `"parsing"` feature.

## Provided Associated Constants

source

#### const peek_any: PeekFn = private::PeekFn

Peeks any identifier including keywords. Usage: `input.peek(Ident::peek_any)`

This is different from `input.peek(Ident)` which only returns true in the case of an ident which is not a Rust keyword.

## Required Methods

source

#### fn parse_any(input: ParseStream<'_>) -> Result<Self>

Parses any identifier including keywords.

This is useful when parsing macro input which allows Rust keywords as identifiers.

##### Example

    use syn::{Error, Ident, Result, Token};
    use syn::ext::IdentExt;
    use syn::parse::ParseStream;

    mod kw {
        syn::custom_keyword!(name);
    }

    // Parses input that looks like `name = NAME` where `NAME` can be
    // any identifier.
    //
    // Examples:
    //
    //     name = anything
    //     name = impl
    fn parse_dsl(input: ParseStream) -> Result<Ident> {
        input.parse::<kw::name>()?;
        input.parse::<Token![=]>()?;
        let name = input.call(Ident::parse_any)?;
        Ok(name)
    }

source

#### fn unraw(&self) -> Ident

Strips the raw marker `r#`, if any, from the beginning of an ident.

- unraw(`x`) = `x`
- unraw(`move`) = `move`
- unraw(`r#move`) = `move`

##### Example

In the case of interop with other languages like Python that have a different set of keywords than Rust, we might come across macro input that involves raw identifiers to refer to ordinary variables in the other language with a name that happens to be a Rust keyword.

The function below appends an identifier from the caller’s input onto a fixed prefix. Without using `unraw()`, this would tend to produce invalid identifiers like `__pyo3_get_r#move`.

    use proc_macro2::Span;
    use syn::Ident;
    use syn::ext::IdentExt;

    fn ident_for_getter(variable: &Ident) -> Ident {
        let getter = format!("__pyo3_get_{}", variable.unraw());
        Ident::new(&getter, Span::call_site())
    }

## Implementors

source

### impl IdentExt for Ident