From f534d2132b90fca8c0646cc81f8a60fa20423fe1 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 2 Jan 2019 22:38:52 +0300 Subject: move some logic to navigation target --- crates/ra_analysis/src/lib.rs | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'crates/ra_analysis/src/lib.rs') diff --git a/crates/ra_analysis/src/lib.rs b/crates/ra_analysis/src/lib.rs index a01febf4e..8247914c0 100644 --- a/crates/ra_analysis/src/lib.rs +++ b/crates/ra_analysis/src/lib.rs @@ -222,21 +222,31 @@ impl Query { #[derive(Debug)] pub struct NavigationTarget { file_id: FileId, - symbol: FileSymbol, + name: SmolStr, + kind: SyntaxKind, + range: TextRange, } impl NavigationTarget { - pub fn name(&self) -> SmolStr { - self.symbol.name.clone() + fn from_symbol(file_id: FileId, symbol: FileSymbol) -> NavigationTarget { + NavigationTarget { + name: symbol.name.clone(), + kind: symbol.kind.clone(), + file_id, + range: symbol.node_range.clone(), + } + } + pub fn name(&self) -> &SmolStr { + &self.name } pub fn kind(&self) -> SyntaxKind { - self.symbol.kind + self.kind } pub fn file_id(&self) -> FileId { self.file_id } pub fn range(&self) -> TextRange { - self.symbol.node_range + self.range } } @@ -260,7 +270,8 @@ impl ReferenceResolution { } fn add_resolution(&mut self, file_id: FileId, symbol: FileSymbol) { - self.resolves_to.push(NavigationTarget { file_id, symbol }) + self.resolves_to + .push(NavigationTarget::from_symbol(file_id, symbol)) } } @@ -359,7 +370,7 @@ impl Analysis { pub fn symbol_search(&self, query: Query) -> Cancelable> { let res = symbol_index::world_symbols(&*self.db, query)? .into_iter() - .map(|(file_id, symbol)| NavigationTarget { file_id, symbol }) + .map(|(file_id, symbol)| NavigationTarget::from_symbol(file_id, symbol)) .collect(); Ok(res) } -- cgit v1.2.3 From 267a89bca2b606faafacfe69db7fda1ef27bb39f Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 2 Jan 2019 23:24:58 +0300 Subject: use LocalSyntaxPtr for file symbol --- crates/ra_analysis/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'crates/ra_analysis/src/lib.rs') diff --git a/crates/ra_analysis/src/lib.rs b/crates/ra_analysis/src/lib.rs index 8247914c0..69d6754d6 100644 --- a/crates/ra_analysis/src/lib.rs +++ b/crates/ra_analysis/src/lib.rs @@ -231,9 +231,9 @@ impl NavigationTarget { fn from_symbol(file_id: FileId, symbol: FileSymbol) -> NavigationTarget { NavigationTarget { name: symbol.name.clone(), - kind: symbol.kind.clone(), + kind: symbol.ptr.kind(), file_id, - range: symbol.node_range.clone(), + range: symbol.ptr.range(), } } pub fn name(&self) -> &SmolStr { -- cgit v1.2.3 From 03ea6bcbffd4ae3ac5289ff7d434450c219186a8 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 2 Jan 2019 23:35:51 +0300 Subject: use LocalPtr in navigation target --- crates/ra_analysis/src/lib.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'crates/ra_analysis/src/lib.rs') diff --git a/crates/ra_analysis/src/lib.rs b/crates/ra_analysis/src/lib.rs index 69d6754d6..343fd28bb 100644 --- a/crates/ra_analysis/src/lib.rs +++ b/crates/ra_analysis/src/lib.rs @@ -41,7 +41,7 @@ pub use ra_editor::{ pub use hir::FnSignatureInfo; pub use ra_db::{ - Canceled, Cancelable, FilePosition, FileRange, + Canceled, Cancelable, FilePosition, FileRange, LocalSyntaxPtr, CrateGraph, CrateId, SourceRootId, FileId, SyntaxDatabase, FilesDatabase }; @@ -225,6 +225,8 @@ pub struct NavigationTarget { name: SmolStr, kind: SyntaxKind, range: TextRange, + // Should be DefId ideally + ptr: Option, } impl NavigationTarget { @@ -234,6 +236,7 @@ impl NavigationTarget { kind: symbol.ptr.kind(), file_id, range: symbol.ptr.range(), + ptr: Some(symbol.ptr.clone()), } } pub fn name(&self) -> &SmolStr { -- cgit v1.2.3 From 8d6185350953391d0dd405cf790a69bb65d88a36 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 3 Jan 2019 12:57:30 +0300 Subject: docs --- crates/ra_analysis/src/lib.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'crates/ra_analysis/src/lib.rs') diff --git a/crates/ra_analysis/src/lib.rs b/crates/ra_analysis/src/lib.rs index 343fd28bb..61af676b2 100644 --- a/crates/ra_analysis/src/lib.rs +++ b/crates/ra_analysis/src/lib.rs @@ -1,6 +1,8 @@ -//! ra_analyzer crate is the brain of Rust analyzer. It relies on the `salsa` -//! crate, which provides and incremental on-demand database of facts. - +//! ra_analyzer crate provides "ide-centric" APIs for the rust-analyzer. What +//! powers this API are the `RootDatabase` struct, which defines a `salsa` +//! database, and the `ra_hir` crate, where majority of the analysis happens. +//! However, IDE specific bits of the analysis (most notably completion) happen +//! in this crate. macro_rules! ctry { ($expr:expr) => { match $expr { @@ -219,6 +221,11 @@ impl Query { } } +/// `NavigationTarget` represents and element in the editor's UI whihc you can +/// click on to navigate to a particular piece of code. +/// +/// Typically, a `NavigationTarget` corresponds to some element in the source +/// code, like a function or a struct, but this is not strictly required. #[derive(Debug)] pub struct NavigationTarget { file_id: FileId, -- cgit v1.2.3