]> git.lizzy.rs Git - rust.git/commitdiff
Remove confusing API
authorAleksey Kladov <aleksey.kladov@gmail.com>
Tue, 30 Jun 2020 11:27:13 +0000 (13:27 +0200)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Tue, 30 Jun 2020 11:29:53 +0000 (13:29 +0200)
crates/ra_ide/src/display/navigation_target.rs
crates/ra_ide/src/goto_implementation.rs
crates/rust-analyzer/src/handlers.rs
crates/rust-analyzer/src/to_proto.rs

index f8a46630460bb6ad1a75cf0b54ee7d83febdaf6d..8bf2428ed46e536d2c0472f22471cea61e92791a 100644 (file)
@@ -11,7 +11,7 @@
     TextRange,
 };
 
-use crate::{FileRange, FileSymbol};
+use crate::FileSymbol;
 
 use super::short_label::ShortLabel;
 
@@ -47,6 +47,19 @@ impl NavigationTarget {
     pub fn range(&self) -> TextRange {
         self.focus_range.unwrap_or(self.full_range)
     }
+    /// A "most interesting" range withing the `full_range`.
+    ///
+    /// Typically, `full_range` is the whole syntax node,
+    /// including doc comments, and `focus_range` is the range of the identifier.
+    pub fn focus_range(&self) -> Option<TextRange> {
+        self.focus_range
+    }
+    pub fn full_range(&self) -> TextRange {
+        self.full_range
+    }
+    pub fn file_id(&self) -> FileId {
+        self.file_id
+    }
 
     pub fn name(&self) -> &SmolStr {
         &self.name
@@ -60,19 +73,6 @@ pub fn kind(&self) -> SyntaxKind {
         self.kind
     }
 
-    pub fn file_id(&self) -> FileId {
-        self.file_id
-    }
-
-    // TODO: inconsistent
-    pub fn file_range(&self) -> FileRange {
-        FileRange { file_id: self.file_id, range: self.full_range }
-    }
-
-    pub fn full_range(&self) -> TextRange {
-        self.full_range
-    }
-
     pub fn docs(&self) -> Option<&str> {
         self.docs.as_deref()
     }
@@ -81,14 +81,6 @@ pub fn description(&self) -> Option<&str> {
         self.description.as_deref()
     }
 
-    /// A "most interesting" range withing the `full_range`.
-    ///
-    /// Typically, `full_range` is the whole syntax node,
-    /// including doc comments, and `focus_range` is the range of the identifier.
-    pub fn focus_range(&self) -> Option<TextRange> {
-        self.focus_range
-    }
-
     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();
         if let Some(src) = module.declaration_source(db) {
index 1882789c4aa98b6f13f5c85bacb6bd2c79885424..99a7022a4836648ab0b3683cadd83e7168b42f25 100644 (file)
@@ -76,7 +76,7 @@ fn impls_for_trait(
 mod tests {
     use ra_db::FileRange;
 
-    use crate::mock_analysis::{analysis_and_position, MockAnalysis};
+    use crate::mock_analysis::MockAnalysis;
 
     fn check(ra_fixture: &str) {
         let (mock, position) = MockAnalysis::with_files_and_position(ra_fixture);
index 0940fcc2875169c0edbda9a59674064a66146167..25bcd80af8c16c78092a9a2dc28a073984c33737 100644 (file)
@@ -330,11 +330,12 @@ pub(crate) fn handle_workspace_symbol(
     fn exec_query(snap: &GlobalStateSnapshot, query: Query) -> Result<Vec<SymbolInformation>> {
         let mut res = Vec::new();
         for nav in snap.analysis.symbol_search(query)? {
+            let container_name = nav.container_name().map(|v| v.to_string());
             let info = SymbolInformation {
                 name: nav.name().to_string(),
                 kind: to_proto::symbol_kind(nav.kind()),
-                location: to_proto::location(snap, nav.file_range())?,
-                container_name: nav.container_name().map(|v| v.to_string()),
+                location: to_proto::location_from_nav(snap, nav)?,
+                container_name,
                 deprecated: None,
             };
             res.push(info);
@@ -1213,8 +1214,8 @@ fn show_impl_command_link(
             let position = to_proto::position(&line_index, position.offset);
             let locations: Vec<_> = nav_data
                 .info
-                .iter()
-                .filter_map(|it| to_proto::location(snap, it.file_range()).ok())
+                .into_iter()
+                .filter_map(|nav| to_proto::location_from_nav(snap, nav).ok())
                 .collect();
             let title = implementation_title(locations.len());
             let command = show_references_command(title, &uri, position, locations);
index a03222ae96bd590a09850fd48c2af82415e83380..a0a58f689d5deda4686b677550692ed1094214e3 100644 (file)
@@ -446,6 +446,18 @@ pub(crate) fn location(
     Ok(loc)
 }
 
+/// Perefer using `location_link`, if the client has the cap.
+pub(crate) fn location_from_nav(
+    snap: &GlobalStateSnapshot,
+    nav: NavigationTarget,
+) -> Result<lsp_types::Location> {
+    let url = url(snap, nav.file_id());
+    let line_index = snap.analysis.file_line_index(nav.file_id())?;
+    let range = range(&line_index, nav.full_range());
+    let loc = lsp_types::Location::new(url, range);
+    Ok(loc)
+}
+
 pub(crate) fn location_link(
     snap: &GlobalStateSnapshot,
     src: Option<FileRange>,