1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
use swc_atoms::JsWord; use swc_common::{Span, SyntaxContext}; use swc_ecma_ast::Ident; pub trait IdentLike: Sized { fn from_ident(i: &Ident) -> Self; fn to_id(&self) -> Id; fn into_id(self) -> 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()) } } pub type Id = (JsWord, SyntaxContext); #[inline(always)] pub fn id(i: &Ident) -> Id { (i.sym.clone(), i.span.ctxt()) }