]> git.lizzy.rs Git - rust.git/blobdiff - crates/ide/src/display/navigation_target.rs
Wrap remaining self/super/crate in Name{Ref}
[rust.git] / crates / ide / src / display / navigation_target.rs
index 4eecae697543f48f1c31a2c57d8c19ca0afcedb4..00e6012442bc69e0bb13e7a501685498fa6704ab 100644 (file)
@@ -400,24 +400,31 @@ fn try_to_nav(&self, db: &RootDatabase) -> Option<NavigationTarget> {
 impl ToNav for hir::Local {
     fn to_nav(&self, db: &RootDatabase) -> NavigationTarget {
         let src = self.source(db);
-        let node = match &src.value {
-            Either::Left(bind_pat) => {
-                bind_pat.name().map_or_else(|| bind_pat.syntax().clone(), |it| it.syntax().clone())
-            }
-            Either::Right(it) => it.syntax().clone(),
+        let (node, name) = match &src.value {
+            Either::Left(bind_pat) => (bind_pat.syntax().clone(), bind_pat.name()),
+            Either::Right(it) => (it.syntax().clone(), it.name()),
         };
+        let focus_range =
+            name.map(|it| src.with_value(&it.syntax().clone()).original_file_range(db).range);
+
         let full_range = src.with_value(&node).original_file_range(db);
         let name = match self.name(db) {
             Some(it) => it.to_string().into(),
             None => "".into(),
         };
-        let kind = if self.is_param(db) { SymbolKind::ValueParam } else { SymbolKind::Local };
+        let kind = if self.is_self(db) {
+            SymbolKind::SelfParam
+        } else if self.is_param(db) {
+            SymbolKind::ValueParam
+        } else {
+            SymbolKind::Local
+        };
         NavigationTarget {
             file_id: full_range.file_id,
             name,
             kind: Some(kind),
             full_range: full_range.range,
-            focus_range: None,
+            focus_range,
             container_name: None,
             description: None,
             docs: None,