From 49fd6a5228bfb2200611e6a9a9b24d01368bb279 Mon Sep 17 00:00:00 2001 From: kjeremy Date: Thu, 9 Jan 2020 16:27:10 -0500 Subject: Split Declaration out into it's own type --- crates/ra_ide/src/lib.rs | 4 +- crates/ra_ide/src/references.rs | 100 +++++++++++++++++++++------------------- 2 files changed, 55 insertions(+), 49 deletions(-) diff --git a/crates/ra_ide/src/lib.rs b/crates/ra_ide/src/lib.rs index 837315ca7..4d8deb21c 100644 --- a/crates/ra_ide/src/lib.rs +++ b/crates/ra_ide/src/lib.rs @@ -75,7 +75,9 @@ pub use crate::{ inlay_hints::{InlayHint, InlayKind}, line_index::{LineCol, LineIndex}, line_index_utils::translate_offset_with_edit, - references::{Reference, ReferenceAccess, ReferenceKind, ReferenceSearchResult, SearchScope}, + references::{ + Declaration, Reference, ReferenceAccess, ReferenceKind, ReferenceSearchResult, SearchScope, + }, runnables::{Runnable, RunnableKind}, source_change::{FileSystemEdit, SourceChange, SourceFileEdit}, syntax_highlighting::HighlightedRange, diff --git a/crates/ra_ide/src/references.rs b/crates/ra_ide/src/references.rs index 5b8ed370c..2d20de1d0 100644 --- a/crates/ra_ide/src/references.rs +++ b/crates/ra_ide/src/references.rs @@ -37,11 +37,17 @@ pub use self::search_scope::SearchScope; #[derive(Debug, Clone)] pub struct ReferenceSearchResult { - declaration: NavigationTarget, - declaration_kind: ReferenceKind, + declaration: Declaration, references: Vec, } +#[derive(Debug, Clone)] +pub struct Declaration { + pub nav: NavigationTarget, + pub kind: ReferenceKind, + pub access: Option, +} + #[derive(Debug, Clone)] pub struct Reference { pub file_range: FileRange, @@ -62,10 +68,14 @@ pub enum ReferenceAccess { } impl ReferenceSearchResult { - pub fn declaration(&self) -> &NavigationTarget { + pub fn declaration(&self) -> &Declaration { &self.declaration } + pub fn decl_target(&self) -> &NavigationTarget { + &self.declaration.nav + } + pub fn references(&self) -> &[Reference] { &self.references } @@ -88,11 +98,11 @@ impl IntoIterator for ReferenceSearchResult { let mut v = Vec::with_capacity(self.len()); v.push(Reference { file_range: FileRange { - file_id: self.declaration.file_id(), - range: self.declaration.range(), + file_id: self.declaration.nav.file_id(), + range: self.declaration.nav.range(), }, - kind: self.declaration_kind, - access: None, + kind: self.declaration.kind, + access: self.declaration.access, }); v.append(&mut self.references); v.into_iter() @@ -139,15 +149,14 @@ pub(crate) fn find_all_refs( } }; + let declaration = Declaration { nav: declaration, kind: ReferenceKind::Other, access: None }; + let references = process_definition(db, def, name, search_scope) .into_iter() .filter(|r| search_kind == ReferenceKind::Other || search_kind == r.kind) .collect(); - Some(RangeInfo::new( - range, - ReferenceSearchResult { declaration, references, declaration_kind: ReferenceKind::Other }, - )) + Some(RangeInfo::new(range, ReferenceSearchResult { declaration, references })) } fn find_name<'a>( @@ -259,7 +268,7 @@ fn access_mode(kind: NameKind, name_ref: &ast::NameRef) -> Option String { + let mut s = format!("{} {:?}", self.nav.debug_render(), self.kind); + if let Some(access) = self.access { + s.push_str(&format!(" {:?}", access)); + } + s + } + + fn assert_match(&self, expected: &str) { + let actual = self.debug_render(); + test_utils::assert_eq_text!(expected.trim(), actual.trim(),); + } + } + impl Reference { fn debug_render(&self) -> String { let mut s = format!( -- cgit v1.2.3