mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 12:19:15 +00:00
refactor(ast): simplify get_identifier_reference of TSType and TSTypeName (#8273)
This commit is contained in:
parent
c9cf593cd7
commit
aea95519db
3 changed files with 10 additions and 15 deletions
|
|
@ -25,19 +25,14 @@ impl<'a> TSType<'a> {
|
|||
///
|
||||
/// For qualified (i.e. namespaced) types, the left-most identifier is
|
||||
/// returned.
|
||||
///
|
||||
/// ```
|
||||
/// let ty = get_type_for("foo.bar.Baz"); // TSType::TSQualifiedName
|
||||
/// get_identifier_reference(&ty); // Some(IdentifierReference { name: "foo", .. })
|
||||
/// ```
|
||||
pub fn get_identifier_reference(&self) -> Option<IdentifierReference<'a>> {
|
||||
pub fn get_identifier_reference(&self) -> Option<&IdentifierReference<'a>> {
|
||||
match self {
|
||||
TSType::TSTypeReference(reference) => {
|
||||
Some(TSTypeName::get_first_name(&reference.type_name))
|
||||
Some(reference.type_name.get_identifier_reference())
|
||||
}
|
||||
TSType::TSQualifiedName(qualified) => Some(TSTypeName::get_first_name(&qualified.left)),
|
||||
TSType::TSQualifiedName(name) => Some(name.left.get_identifier_reference()),
|
||||
TSType::TSTypeQuery(query) => match &query.expr_name {
|
||||
TSTypeQueryExprName::IdentifierReference(ident) => Some((*ident).clone()),
|
||||
TSTypeQueryExprName::IdentifierReference(ident) => Some(ident),
|
||||
_ => None,
|
||||
},
|
||||
_ => None,
|
||||
|
|
@ -87,10 +82,10 @@ impl<'a> TSTypeName<'a> {
|
|||
/// type Foo = Bar; // -> Bar
|
||||
/// type Foo = Bar.Baz; // -> Bar
|
||||
/// ```
|
||||
pub fn get_first_name(name: &TSTypeName<'a>) -> IdentifierReference<'a> {
|
||||
match name {
|
||||
TSTypeName::IdentifierReference(name) => (*name).clone(),
|
||||
TSTypeName::QualifiedName(name) => TSTypeName::get_first_name(&name.left),
|
||||
pub fn get_identifier_reference(&self) -> &IdentifierReference<'a> {
|
||||
match self {
|
||||
TSTypeName::IdentifierReference(ident) => ident,
|
||||
TSTypeName::QualifiedName(name) => name.left.get_identifier_reference(),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ impl<'a> Visit<'a> for ScopeTree<'a> {
|
|||
|
||||
fn visit_ts_type_query(&mut self, ty: &TSTypeQuery<'a>) {
|
||||
if let Some(type_name) = ty.expr_name.as_ts_type_name() {
|
||||
let ident = TSTypeName::get_first_name(type_name);
|
||||
let ident = TSTypeName::get_identifier_reference(type_name);
|
||||
self.add_reference(ident.name.clone(), KindFlags::Value);
|
||||
} else {
|
||||
walk_ts_type_query(self, ty);
|
||||
|
|
|
|||
|
|
@ -344,7 +344,7 @@ fn is_simple_type(ts_type: &TSType) -> bool {
|
|||
| TSType::TSQualifiedName(_)
|
||||
| TSType::TSThisType(_) => true,
|
||||
TSType::TSTypeReference(node) => {
|
||||
let type_name = TSTypeName::get_first_name(&node.type_name);
|
||||
let type_name = TSTypeName::get_identifier_reference(&node.type_name);
|
||||
if type_name.name.as_str() == "Array" {
|
||||
if node.type_parameters.is_none() {
|
||||
return true;
|
||||
|
|
|
|||
Loading…
Reference in a new issue