From 91c120ccea4f0cfef20fd4d918154c8152f83816 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 02:34:34 +0300 Subject: introduce Source struct --- crates/ra_hir/src/adt.rs | 9 ++++----- crates/ra_hir/src/code_model.rs | 18 +++++++++++++----- crates/ra_hir/src/docs.rs | 2 +- crates/ra_hir/src/generics.rs | 2 +- 4 files changed, 19 insertions(+), 12 deletions(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/adt.rs b/crates/ra_hir/src/adt.rs index 38ff1d6f6..36679e99b 100644 --- a/crates/ra_hir/src/adt.rs +++ b/crates/ra_hir/src/adt.rs @@ -59,8 +59,8 @@ impl StructData { db: &(impl DefDatabase + AstDatabase), struct_: Struct, ) -> Arc { - let (_, struct_def) = struct_.source(db); - Arc::new(StructData::new(&*struct_def)) + let src = struct_.source(db); + Arc::new(StructData::new(&*src.ast)) } } @@ -211,9 +211,8 @@ impl StructField { let es; let (file_id, struct_kind) = match self.parent { VariantDef::Struct(s) => { - let (file_id, source) = s.source(db); - ss = source; - (file_id, ss.kind()) + ss = s.source(db); + (ss.file_id, ss.ast.kind()) } VariantDef::EnumVariant(e) => { let (file_id, source) = e.source(db); diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 27850028b..3469da18a 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -20,6 +20,17 @@ use crate::{ type_ref::Mutability, }; +pub struct Source { + pub file_id: HirFileId, + pub ast: T, +} + +impl From<(HirFileId, T)> for Source { + fn from((file_id, ast): (HirFileId, T)) -> Self { + Source { file_id, ast } + } +} + /// hir::Crate describes a single crate. It's the main interface with which /// a crate's dependencies interact. Mostly, it should be just a proxy for the /// root module. @@ -354,11 +365,8 @@ pub struct Struct { } impl Struct { - pub fn source( - self, - db: &(impl DefDatabase + AstDatabase), - ) -> (HirFileId, TreeArc) { - self.id.source(db) + pub fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source> { + self.id.source(db).into() } pub fn module(self, db: &impl HirDatabase) -> Module { diff --git a/crates/ra_hir/src/docs.rs b/crates/ra_hir/src/docs.rs index 1b0f84de5..edd937901 100644 --- a/crates/ra_hir/src/docs.rs +++ b/crates/ra_hir/src/docs.rs @@ -76,7 +76,7 @@ pub(crate) fn documentation_query( FieldSource::Named(named) => docs_from_ast(&*named), FieldSource::Pos(..) => return None, }, - DocDef::Struct(it) => docs_from_ast(&*it.source(db).1), + DocDef::Struct(it) => docs_from_ast(&*it.source(db).ast), DocDef::Enum(it) => docs_from_ast(&*it.source(db).1), DocDef::EnumVariant(it) => docs_from_ast(&*it.source(db).1), DocDef::Static(it) => docs_from_ast(&*it.source(db).1), diff --git a/crates/ra_hir/src/generics.rs b/crates/ra_hir/src/generics.rs index b6c5e18d3..294a00721 100644 --- a/crates/ra_hir/src/generics.rs +++ b/crates/ra_hir/src/generics.rs @@ -69,7 +69,7 @@ impl GenericParams { let start = generics.parent_params.as_ref().map(|p| p.params.len()).unwrap_or(0) as u32; match def { GenericDef::Function(it) => generics.fill(&*it.source(db).1, start), - GenericDef::Struct(it) => generics.fill(&*it.source(db).1, start), + GenericDef::Struct(it) => generics.fill(&*it.source(db).ast, start), GenericDef::Union(it) => generics.fill(&*it.source(db).1, start), GenericDef::Enum(it) => generics.fill(&*it.source(db).1, start), GenericDef::Trait(it) => { -- cgit v1.2.3