# Trait syn::ext::IdentExt [−] [src]

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

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

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.

## Associated Constants

### `const peek_any: PeekFn` [src]

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.

Loading content...

## Required methods

### `fn parse_any(input: ParseStream<'_>) -> Result<Self>` [src]

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)
    }

### `fn unraw(&self) -> Ident` [src]

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())
    }

Loading content...

## Implementors

### `impl IdentExt for Ident` [src]

#### `fn parse_any(input: ParseStream<'_>) -> Result<Self>` [src]

#### `fn unraw(&self) -> Ident` [src]

Loading content...