#![allow(unused)]
#[cfg(feature = "hot_reload")]
use internment::Intern;
use proc_macro2::TokenStream as TokenStream2;
use std::{fmt::Debug, hash::Hash};
use syn::{
ext::IdentExt,
parse::{Parse, ParseBuffer},
Ident,
};
#[cfg(feature = "hot_reload")]
pub(crate) fn intern<T: Eq + Hash + Send + Sync + ?Sized + 'static>(
s: impl Into<Intern<T>>,
) -> &'static T {
s.into().as_ref()
}
pub trait PrettyUnparse {
fn pretty_unparse(&self) -> String;
}
impl PrettyUnparse for TokenStream2 {
fn pretty_unparse(&self) -> String {
let parsed = syn::parse2::<syn::Expr>(self.clone()).unwrap();
prettier_please::unparse_expr(&parsed)
}
}
pub fn parse_raw_ident(parse_buffer: &ParseBuffer) -> syn::Result<Ident> {
if let Ok(ident) = Ident::parse(parse_buffer) {
return Ok(ident);
}
let ident = Ident::parse_any(parse_buffer)?;
Ok(Ident::new_raw(&ident.to_string(), ident.span()))
}