80 lines
1.5 KiB
Rust
80 lines
1.5 KiB
Rust
use swc_atoms::JsWord;
|
|
use swc_common::{Span, SyntaxContext};
|
|
use swc_ecma_ast::{BindingIdent, Id, Ident};
|
|
|
|
pub trait IdentLike: Sized {
|
|
fn from_ident(i: &Ident) -> Self;
|
|
fn to_id(&self) -> Id;
|
|
fn into_id(self) -> Id;
|
|
}
|
|
|
|
impl IdentLike for BindingIdent {
|
|
fn from_ident(i: &Ident) -> Self {
|
|
i.clone().into()
|
|
}
|
|
|
|
fn to_id(&self) -> Id {
|
|
(self.id.sym.clone(), self.id.span.ctxt())
|
|
}
|
|
|
|
fn into_id(self) -> Id {
|
|
self.id.into_id()
|
|
}
|
|
}
|
|
|
|
impl IdentLike for (JsWord, Span) {
|
|
#[inline]
|
|
fn from_ident(i: &Ident) -> Self {
|
|
(i.sym.clone(), i.span)
|
|
}
|
|
|
|
#[inline]
|
|
fn to_id(&self) -> Id {
|
|
(self.0.clone(), self.1.ctxt())
|
|
}
|
|
|
|
#[inline]
|
|
fn into_id(self) -> Id {
|
|
(self.0, self.1.ctxt())
|
|
}
|
|
}
|
|
|
|
impl IdentLike for (JsWord, SyntaxContext) {
|
|
#[inline]
|
|
fn from_ident(i: &Ident) -> Self {
|
|
(i.sym.clone(), i.span.ctxt())
|
|
}
|
|
|
|
#[inline]
|
|
fn to_id(&self) -> Id {
|
|
(self.0.clone(), self.1)
|
|
}
|
|
|
|
#[inline]
|
|
fn into_id(self) -> Id {
|
|
self
|
|
}
|
|
}
|
|
|
|
impl IdentLike for Ident {
|
|
#[inline]
|
|
fn from_ident(i: &Ident) -> Self {
|
|
Ident::new(i.sym.clone(), i.span)
|
|
}
|
|
|
|
#[inline]
|
|
fn to_id(&self) -> Id {
|
|
(self.sym.clone(), self.span.ctxt())
|
|
}
|
|
|
|
#[inline]
|
|
fn into_id(self) -> Id {
|
|
(self.sym, self.span.ctxt())
|
|
}
|
|
}
|
|
|
|
#[deprecated = "Use i.to_id() instead"]
|
|
#[inline(always)]
|
|
pub fn id(i: &Ident) -> Id {
|
|
(i.sym.clone(), i.span.ctxt())
|
|
}
|