diff --git a/crates/ra_assists/src/add_missing_impl_members.rs b/crates/ra_assists/src/add_missing_impl_members.rs index 23c01e74762..046f53a8c70 100644 --- a/crates/ra_assists/src/add_missing_impl_members.rs +++ b/crates/ra_assists/src/add_missing_impl_members.rs @@ -110,7 +110,7 @@ fn resolve_target_trait_def( impl_block.target_trait().map(AstNode::syntax).and_then(ast::PathType::cast)?.path()?; match analyzer.resolve_path(db, &ast_path) { - Some(hir::PathResolution::Def(hir::ModuleDef::Trait(def))) => Some(def.source(db).1), + Some(hir::PathResolution::Def(hir::ModuleDef::Trait(def))) => Some(def.source(db).ast), _ => None, } } diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 20a8d7d8061..0a750b59004 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -528,6 +528,13 @@ pub struct EnumVariant { pub(crate) id: EnumVariantId, } +impl HasSource for EnumVariant { + type Ast = TreeArc; + fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source> { + self.source_impl(db) + } +} + impl EnumVariant { pub fn source( &self, @@ -886,12 +893,16 @@ pub struct Trait { pub(crate) id: TraitId, } +impl HasSource for Trait { + type Ast = TreeArc; + fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source> { + self.id.source(db).into() + } +} + impl Trait { - 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 DefDatabase) -> Module { diff --git a/crates/ra_hir/src/docs.rs b/crates/ra_hir/src/docs.rs index 1c6b4f2051f..0cb0c0db85f 100644 --- a/crates/ra_hir/src/docs.rs +++ b/crates/ra_hir/src/docs.rs @@ -83,7 +83,7 @@ pub(crate) fn documentation_query( DocDef::Const(it) => docs_from_ast(&*it.source(db).ast), DocDef::Function(it) => docs_from_ast(&*it.source(db).ast), DocDef::Union(it) => docs_from_ast(&*it.source(db).1), - DocDef::Trait(it) => docs_from_ast(&*it.source(db).1), + DocDef::Trait(it) => docs_from_ast(&*it.source(db).ast), DocDef::TypeAlias(it) => docs_from_ast(&*it.source(db).ast), DocDef::MacroDef(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 b7e255c1758..08d71175418 100644 --- a/crates/ra_hir/src/generics.rs +++ b/crates/ra_hir/src/generics.rs @@ -79,7 +79,7 @@ impl GenericParams { name: Name::self_type(), default: None, }); - generics.fill(&*it.source(db).1, start + 1); + generics.fill(&*it.source(db).ast, start + 1); } GenericDef::TypeAlias(it) => generics.fill(&*it.source(db).ast, start), GenericDef::ImplBlock(it) => generics.fill(&*it.source(db).1, start), diff --git a/crates/ra_hir/src/traits.rs b/crates/ra_hir/src/traits.rs index 967654e97e7..86dceb2e054 100644 --- a/crates/ra_hir/src/traits.rs +++ b/crates/ra_hir/src/traits.rs @@ -22,12 +22,12 @@ impl TraitData { db: &(impl DefDatabase + AstDatabase), tr: Trait, ) -> Arc { - let (file_id, node) = tr.source(db); - let name = node.name().map(|n| n.as_name()); + let src = tr.source(db); + let name = src.ast.name().map(|n| n.as_name()); let module = tr.module(db); - let ctx = LocationCtx::new(db, module, file_id); - let auto = node.is_auto(); - let items = if let Some(item_list) = node.item_list() { + let ctx = LocationCtx::new(db, module, src.file_id); + let auto = src.ast.is_auto(); + let items = if let Some(item_list) = src.ast.item_list() { item_list .impl_items() .map(|item_node| match item_node.kind() { diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index 19a64f30071..2e3e3863a5e 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -214,24 +214,8 @@ impl NavigationTarget { hir::ModuleDef::Union(it) => NavigationTarget::from_adt_def(db, it.into()), hir::ModuleDef::Const(it) => NavigationTarget::from_def_source(db, it), hir::ModuleDef::Static(it) => NavigationTarget::from_def_source(db, it), - hir::ModuleDef::EnumVariant(var) => { - let src = var.source(db); - NavigationTarget::from_named( - src.file_id.original_file(db), - &*src.ast, - src.ast.doc_comment_text(), - src.ast.short_label(), - ) - } - hir::ModuleDef::Trait(e) => { - let (file_id, node) = e.source(db); - NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), - ) - } + hir::ModuleDef::EnumVariant(it) => NavigationTarget::from_def_source(db, it), + hir::ModuleDef::Trait(it) => NavigationTarget::from_def_source(db, it), hir::ModuleDef::TypeAlias(it) => NavigationTarget::from_def_source(db, it), hir::ModuleDef::BuiltinType(..) => { return None; diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 237e1f4a109..c4004435cc4 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -124,16 +124,10 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option res.extend(from_def_source(db, it)), hir::ModuleDef::Union(it) => res.extend(from_def_source(db, it)), hir::ModuleDef::Enum(it) => res.extend(from_def_source(db, it)), - hir::ModuleDef::EnumVariant(it) => { - let src = it.source(db); - res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) - } + hir::ModuleDef::EnumVariant(it) => res.extend(from_def_source(db, it)), hir::ModuleDef::Const(it) => res.extend(from_def_source(db, it)), hir::ModuleDef::Static(it) => res.extend(from_def_source(db, it)), - hir::ModuleDef::Trait(it) => { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) - } + hir::ModuleDef::Trait(it) => res.extend(from_def_source(db, it)), hir::ModuleDef::TypeAlias(it) => res.extend(from_def_source(db, it)), hir::ModuleDef::BuiltinType(_) => { // FIXME: hover for builtin Type ?