]> git.lizzy.rs Git - rust.git/blobdiff - crates/ide/src/display/navigation_target.rs
Replace more Name::to_string usages with Name::to_smol_str
[rust.git] / crates / ide / src / display / navigation_target.rs
index 82c53201408607c4b319257536a96676ccaa168a..b21998e0d2293f1762c2c0fa814ad4b1b3dcb27c 100644 (file)
@@ -14,7 +14,7 @@
 };
 use ide_db::{defs::Definition, RootDatabase};
 use syntax::{
-    ast::{self, NameOwner},
+    ast::{self, HasName},
     match_ast, AstNode, SmolStr, TextRange,
 };
 
@@ -90,9 +90,9 @@ pub fn focus_or_full_range(&self) -> TextRange {
     }
 
     pub(crate) fn from_module_to_decl(db: &RootDatabase, module: hir::Module) -> NavigationTarget {
-        let name = module.name(db).map(|it| it.to_string().into()).unwrap_or_default();
+        let name = module.name(db).map(|it| it.to_smol_str()).unwrap_or_default();
         if let Some(src) = module.declaration_source(db) {
-            let node = src.as_ref().map(|it| it.syntax());
+            let node = src.syntax();
             let full_range = node.original_file_range(db);
             let focus_range = src
                 .value
@@ -112,12 +112,6 @@ pub(crate) fn from_module_to_decl(db: &RootDatabase, module: hir::Module) -> Nav
         module.to_nav(db)
     }
 
-    #[cfg(test)]
-    pub(crate) fn assert_match(&self, expected: &str) {
-        let actual = self.debug_render();
-        test_utils::assert_eq_text!(expected.trim(), actual.trim(),);
-    }
-
     #[cfg(test)]
     pub(crate) fn debug_render(&self) -> String {
         let mut buf = format!(
@@ -139,12 +133,15 @@ pub(crate) fn debug_render(&self) -> String {
     /// Allows `NavigationTarget` to be created from a `NameOwner`
     pub(crate) fn from_named(
         db: &RootDatabase,
-        node: InFile<&dyn ast::NameOwner>,
+        node: InFile<&dyn ast::HasName>,
         kind: SymbolKind,
     ) -> NavigationTarget {
         let name = node.value.name().map(|it| it.text().into()).unwrap_or_else(|| "_".into());
-        let focus_range =
-            node.value.name().map(|it| node.with_value(it.syntax()).original_file_range(db).range);
+        let focus_range = node
+            .value
+            .name()
+            .and_then(|it| node.with_value(it.syntax()).original_file_range_opt(db))
+            .map(|it| it.range);
         let frange = node.map(|it| it.syntax()).original_file_range(db);
 
         NavigationTarget::from_syntax(frange.file_id, name, focus_range, frange.range, kind)
@@ -260,13 +257,13 @@ impl ToNavFromAst for hir::Trait {
 impl<D> TryToNav for D
 where
     D: HasSource + ToNavFromAst + Copy + HasAttrs + HirDisplay,
-    D::Ast: ast::NameOwner,
+    D::Ast: ast::HasName,
 {
     fn try_to_nav(&self, db: &RootDatabase) -> Option<NavigationTarget> {
         let src = self.source(db)?;
         let mut res = NavigationTarget::from_named(
             db,
-            src.as_ref().map(|it| it as &dyn ast::NameOwner),
+            src.as_ref().map(|it| it as &dyn ast::HasName),
             D::KIND,
         );
         res.docs = self.docs(db);
@@ -278,7 +275,7 @@ fn try_to_nav(&self, db: &RootDatabase) -> Option<NavigationTarget> {
 impl ToNav for hir::Module {
     fn to_nav(&self, db: &RootDatabase) -> NavigationTarget {
         let src = self.definition_source(db);
-        let name = self.name(db).map(|it| it.to_string().into()).unwrap_or_default();
+        let name = self.name(db).map(|it| it.to_smol_str()).unwrap_or_default();
         let (syntax, focus) = match &src.value {
             ModuleSource::SourceFile(node) => (node.syntax(), None),
             ModuleSource::Module(node) => {
@@ -295,10 +292,9 @@ impl TryToNav for hir::Impl {
     fn try_to_nav(&self, db: &RootDatabase) -> Option<NavigationTarget> {
         let src = self.source(db)?;
         let derive_attr = self.is_builtin_derive(db);
-        let frange = if let Some(item) = &derive_attr {
-            item.syntax().original_file_range(db)
-        } else {
-            src.as_ref().map(|it| it.syntax()).original_file_range(db)
+        let frange = match &derive_attr {
+            Some(item) => item.syntax().original_file_range(db),
+            None => src.syntax().original_file_range(db),
         };
         let focus_range = if derive_attr.is_some() {
             None
@@ -346,11 +342,11 @@ fn try_to_nav(&self, db: &RootDatabase) -> Option<NavigationTarget> {
 impl TryToNav for hir::MacroDef {
     fn try_to_nav(&self, db: &RootDatabase) -> Option<NavigationTarget> {
         let src = self.source(db)?;
-        let name_owner: &dyn ast::NameOwner = match &src.value {
+        let name_owner: &dyn ast::HasName = match &src.value {
             Either::Left(it) => it,
             Either::Right(it) => it,
         };
-        log::debug!("nav target {:#?}", name_owner.syntax());
+        tracing::debug!("nav target {:#?}", name_owner.syntax());
         let mut res = NavigationTarget::from_named(
             db,
             src.as_ref().with_value(name_owner),
@@ -403,7 +399,7 @@ fn to_nav(&self, db: &RootDatabase) -> NavigationTarget {
 
         let full_range = src.with_value(&node).original_file_range(db);
         let name = match self.name(db) {
-            Some(it) => it.to_string().into(),
+            Some(it) => it.to_smol_str(),
             None => "".into(),
         };
         let kind = if self.is_self(db) {
@@ -433,7 +429,7 @@ fn to_nav(&self, db: &RootDatabase) -> NavigationTarget {
         let FileRange { file_id, range } = src.with_value(node).original_file_range(db);
         let focus_range =
             src.value.lifetime().and_then(|lt| lt.lifetime_ident_token()).map(|lt| lt.text_range());
-        let name = self.name(db).to_string().into();
+        let name = self.name(db).to_smol_str();
         NavigationTarget {
             file_id,
             name,
@@ -463,7 +459,7 @@ fn try_to_nav(&self, db: &RootDatabase) -> Option<NavigationTarget> {
         .map(|it| it.syntax().text_range());
         Some(NavigationTarget {
             file_id: src.file_id.original_file(db),
-            name: self.name(db).to_string().into(),
+            name: self.name(db).to_smol_str(),
             kind: Some(SymbolKind::TypeParam),
             full_range,
             focus_range,
@@ -480,7 +476,7 @@ fn try_to_nav(&self, db: &RootDatabase) -> Option<NavigationTarget> {
         let full_range = src.value.syntax().text_range();
         Some(NavigationTarget {
             file_id: src.file_id.original_file(db),
-            name: self.name(db).to_string().into(),
+            name: self.name(db).to_smol_str(),
             kind: Some(SymbolKind::LifetimeParam),
             full_range,
             focus_range: Some(full_range),
@@ -497,7 +493,7 @@ fn try_to_nav(&self, db: &RootDatabase) -> Option<NavigationTarget> {
         let full_range = src.value.syntax().text_range();
         Some(NavigationTarget {
             file_id: src.file_id.original_file(db),
-            name: self.name(db).to_string().into(),
+            name: self.name(db).to_smol_str(),
             kind: Some(SymbolKind::ConstParam),
             full_range,
             focus_range: src.value.name().map(|n| n.syntax().text_range()),
@@ -528,6 +524,7 @@ pub(crate) fn description_from_symbol(db: &RootDatabase, symbol: &FileSymbol) ->
             ast::Static(it) => sema.to_def(&it).map(|it| it.display(db).to_string()),
             ast::RecordField(it) => sema.to_def(&it).map(|it| it.display(db).to_string()),
             ast::Variant(it) => sema.to_def(&it).map(|it| it.display(db).to_string()),
+            ast::Union(it) => sema.to_def(&it).map(|it| it.display(db).to_string()),
             _ => None,
         }
     }