From 178d8e96b5c810f40e7dd282ab06bb25d1fc8a2a Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:43:36 +0300 Subject: [PATCH] use Source for StructField --- crates/ra_assists/src/fill_match_arms.rs | 4 ++-- crates/ra_hir/src/code_model.rs | 11 +++++++++-- crates/ra_hir/src/docs.rs | 2 +- crates/ra_ide_api/src/display/navigation_target.rs | 6 +++--- crates/ra_ide_api/src/hover.rs | 4 ++-- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/crates/ra_assists/src/fill_match_arms.rs b/crates/ra_assists/src/fill_match_arms.rs index 45e327cd4ae..0e08830d147 100644 --- a/crates/ra_assists/src/fill_match_arms.rs +++ b/crates/ra_assists/src/fill_match_arms.rs @@ -44,8 +44,8 @@ pub(crate) fn fill_match_arms(mut ctx: AssistCtx) -> Option name, FieldSource::Pos(_) => "_".to_string(), } diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index adb61a80403..4c121503e9e 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -346,13 +346,20 @@ pub enum FieldSource { Pos(TreeArc), } +impl HasSource for StructField { + type Ast = FieldSource; + fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + self.source_impl(db).into() + } +} + impl StructField { pub fn name(&self, db: &impl HirDatabase) -> Name { self.parent.variant_data(db).fields().unwrap()[self.id].name.clone() } - pub fn source(&self, db: &(impl DefDatabase + AstDatabase)) -> (HirFileId, FieldSource) { - self.source_impl(db) + pub fn source(&self, db: &(impl DefDatabase + AstDatabase)) -> Source { + self.source_impl(db).into() } pub fn ty(&self, db: &impl HirDatabase) -> Ty { diff --git a/crates/ra_hir/src/docs.rs b/crates/ra_hir/src/docs.rs index cbf7ae10b6d..ae82d55a53e 100644 --- a/crates/ra_hir/src/docs.rs +++ b/crates/ra_hir/src/docs.rs @@ -72,7 +72,7 @@ pub(crate) fn documentation_query( ) -> Option { match def { DocDef::Module(it) => docs_from_ast(&*it.declaration_source(db)?.1), - DocDef::StructField(it) => match it.source(db).1 { + DocDef::StructField(it) => match it.source(db).ast { FieldSource::Named(named) => docs_from_ast(&*named), FieldSource::Pos(..) => return None, }, diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index e5e1aa01139..efba122b17d 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -168,9 +168,9 @@ impl NavigationTarget { } pub(crate) fn from_field(db: &RootDatabase, field: hir::StructField) -> NavigationTarget { - let (file_id, field) = field.source(db); - let file_id = file_id.original_file(db); - match field { + let src = field.source(db); + let file_id = src.file_id.original_file(db); + match src.ast { FieldSource::Named(it) => { NavigationTarget::from_named(file_id, &*it, it.doc_comment_text(), it.short_label()) } diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 72328a72bcc..e43c1d8e586 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -102,8 +102,8 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let it = it.source(db).1; - if let hir::FieldSource::Named(it) = it { + let src = it.source(db); + if let hir::FieldSource::Named(it) = src.ast { res.extend(hover_text(it.doc_comment_text(), it.short_label())); } }