mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 12:19:15 +00:00
feat(ast): add JSXElementName::get_identifier method (#5556)
Add `get_identifier` method for `JSXElementName`, `JSXMemberExpression` and `JSXMemberExpressionObject`, to get root object `IdentifierReference`. i.e. `Foo` in `<Foo>` or `<Foo.bar>`.
This commit is contained in:
parent
cdd1a91754
commit
2da5ad19be
1 changed files with 31 additions and 0 deletions
|
|
@ -28,6 +28,16 @@ impl<'a> fmt::Display for JSXNamespacedName<'a> {
|
|||
}
|
||||
|
||||
impl<'a> JSXElementName<'a> {
|
||||
pub fn get_identifier(&self) -> Option<&IdentifierReference<'a>> {
|
||||
match self {
|
||||
JSXElementName::Identifier(_)
|
||||
| JSXElementName::NamespacedName(_)
|
||||
| JSXElementName::ThisExpression(_) => None,
|
||||
JSXElementName::IdentifierReference(ident) => Some(ident),
|
||||
JSXElementName::MemberExpression(member_expr) => member_expr.get_identifier(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_identifier_name(&self) -> Option<Atom<'a>> {
|
||||
match self {
|
||||
Self::Identifier(id) => Some(id.as_ref().name.clone()),
|
||||
|
|
@ -37,6 +47,27 @@ impl<'a> JSXElementName<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a> JSXMemberExpression<'a> {
|
||||
pub fn get_identifier(&self) -> Option<&IdentifierReference<'a>> {
|
||||
self.object.get_identifier()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> JSXMemberExpressionObject<'a> {
|
||||
pub fn get_identifier(&self) -> Option<&IdentifierReference<'a>> {
|
||||
let mut object = self;
|
||||
loop {
|
||||
match object {
|
||||
JSXMemberExpressionObject::IdentifierReference(ident) => return Some(ident),
|
||||
JSXMemberExpressionObject::MemberExpression(member_expr) => {
|
||||
object = &member_expr.object;
|
||||
}
|
||||
JSXMemberExpressionObject::ThisExpression(_) => return None,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> fmt::Display for JSXMemberExpression<'a> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "{}.{}", self.object, self.property)
|
||||
|
|
|
|||
Loading…
Reference in a new issue