Crate quote_use

source ·
Expand description

Description

Macro to simplify using Types in the [quote!] macro.

Usage

The quote_use! macro can be used just like [quote!], but with the added functionality of adding use statements at the top:

quote_use! {
    # use std::fs::read;

    read("src/main.rs")
}

This will expand to the equivalent statement using [quote!]:

quote! {
    ::std::fs::read::read("src/main.rs")
}

Prelude

This also allows to use contents of the rust prelude directly:

quote_use! {
    Some("src/main.rs")
}

Overriding prelude

When you want to use your own type instead of the prelude type this can be achieved by simply importing it like so

quote_use! {
    # use anyhow::Result;

    Result
}

Different preludes

By default quote_use! uses the std prelude, core prelude and 2021 edition prelude, but this can be configured via features, and also completely disabled.

Other quote macros

There are also variants for other quote macros from syn and quote:

Auto namespacing idents

Until Span::def_site is stabilized, identifiers in e.g. let bindings in proc-macro expansions can collide with e.g. constants.

To circumvent this you can enable the feature namespace_idents which will replace all identifiers and lifetimes prefixed with $ with autonamespaced ones using the pattern "__{crate_name}_{ident}". A $ can be escaped by doubling it $$.

$ident      ->  __crate_name_ident
$'lifetime  ->  '__crate_name_lifetime
$$ident     ->  $ident

Macros