macro_rules! parse_quote_spanned { ($span:expr=> $($tt:tt)*) => { ... }; }
Expand description
This macro is parse_quote!
+ quote_spanned!
.
Please refer to each of their documentation.
ยงExample
use quote::{quote, quote_spanned};
use syn::spanned::Spanned;
use syn::{parse_quote_spanned, ReturnType, Signature};
// Changes `fn()` to `fn() -> Pin<Box<dyn Future<Output = ()>>>`,
// and `fn() -> T` to `fn() -> Pin<Box<dyn Future<Output = T>>>`,
// without introducing any call_site() spans.
fn make_ret_pinned_future(sig: &mut Signature) {
let ret = match &sig.output {
ReturnType::Default => quote_spanned!(sig.paren_token.span=> ()),
ReturnType::Type(_, ret) => quote!(#ret),
};
sig.output = parse_quote_spanned! {ret.span()=>
-> ::std::pin::Pin<::std::boxed::Box<dyn ::std::future::Future<Output = #ret>>>
};
}