Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/modprog/quote-use
Support `use` in procmacros hygienically
https://github.com/modprog/quote-use
Last synced: 3 months ago
JSON representation
Support `use` in procmacros hygienically
- Host: GitHub
- URL: https://github.com/modprog/quote-use
- Owner: ModProg
- Created: 2022-03-30T21:52:31.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-08-25T12:50:01.000Z (5 months ago)
- Last Synced: 2024-09-26T16:38:52.765Z (4 months ago)
- Language: Rust
- Size: 90.8 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# Use statements in `quote!`
[![Crates.io Version](https://img.shields.io/crates/v/quote-use.svg)](https://crates.io/crates/quote-use)
[![CI](https://github.com/ModProg/quote-use/actions/workflows/test.yml/badge.svg)](https://github.com/ModProg/quote-use/actions/workflows/test.yml)
[![Docs.rs Documentation](https://img.shields.io/docsrs/quote-use)](https://docs.rs/crate/quote-use)## Description
Macro to simplify using Types in the [`quote!`](https://docs.rs/quote/latest/quote/macro.quote.html) macro.
## Usage
The [`quote_use!`](https://docs.rs/quote-use/latest/quote_use/macro.quote_use.html) macro can be used just like [`quote!`](https://docs.rs/quote/latest/quote/macro.quote.html), but with the added functionality of
adding use statements at the top:```rust
quote_use!{
use std::fs::read;
read("src/main.rs")
}
```This will expand to the equivalent statement using [`quote!`](https://docs.rs/quote/latest/quote/macro.quote.html):
```rust
quote!{
::std::fs::read::read("src/main.rs")
}
```### Prelude
This also allows to use contents of the rust prelude directly:
```rust
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```rust
quote_use!{
use anyhow::Result;
Result
}
```#### Different preludes
By default [`quote_use!`](https://docs.rs/quote-use/latest/quote_use/macro.quote_use.html) uses the [std prelude](std::prelude) for [2021 edition](std::prelude::rust_2021),
but this can be configured via features, and also completely disabled.- **`prelude_std`**: Enables [`std::prelude::v1`](https://doc.rust-lang.org/nightly/std/prelude/v1/index.html) (incompatible with `prelude_core`)
- `prelude_core`: Enables [`core::prelude::v1`](https://doc.rust-lang.org/nightly/core/prelude/v1/index.html) (incompatible with `prelude_std`)
- **`prelude_2021`**: Enables [`core::prelude::rust_2021`](https://doc.rust-lang.org/nightly/core/prelude/rust_2021/index.html) (requires either `prelude_std` or `prelude_core`)### Other quote macros
There are also variants for other quote macros from [syn](https://docs.rs/syn/latest/syn/) and [quote](https://docs.rs/quote/latest/quote/):
- [`quote_use!`](https://docs.rs/quote-use/latest/quote_use/macro.quote_use.html) and [`quote_spanned_use!`](https://docs.rs/quote-use/latest/quote_use/macro.quote_spanned_use.html) as replacement for [`quote!`](https://docs.rs/quote/latest/quote/macro.quote.html) and
[`quote_spanned!`](https://docs.rs/quote/latest/quote/macro.quote_spanned.html) respectively
- [`parse_quote_use!`](https://docs.rs/quote-use/latest/quote_use/macro.parse_quote_use.html) and [`parse_quote_spanned_use!`](https://docs.rs/quote-use/latest/quote_use/macro.parse_quote_spanned_use.html) for [`parse_quote!`](https://docs.rs/syn/latest/syn/macro.parse_quote.html)
and [`parse_quote_spanned!`](https://docs.rs/syn/latest/syn/macro.parse_quote_spanned.html)## Auto namespacing idents
Until [`Span::def_site`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.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 with autonamespaced ones using the pattern `"__{crate_name}_{ident}"`.