1 //! Utilities for mapping between hir IDs and the surface syntax.
3 use hir_expand::InFile;
4 use ra_arena::map::ArenaMap;
5 use ra_syntax::AstNode;
7 use crate::{db::DefDatabase, AssocItemLoc, ItemLoc};
11 fn source(&self, db: &impl DefDatabase) -> InFile<Self::Value>;
14 impl<N: AstNode> HasSource for AssocItemLoc<N> {
17 fn source(&self, db: &impl DefDatabase) -> InFile<N> {
18 let node = self.ast_id.to_node(db);
19 InFile::new(self.ast_id.file_id, node)
23 impl<N: AstNode> HasSource for ItemLoc<N> {
26 fn source(&self, db: &impl DefDatabase) -> InFile<N> {
27 let node = self.ast_id.to_node(db);
28 InFile::new(self.ast_id.file_id, node)
32 pub trait HasChildSource {
35 fn child_source(&self, db: &impl DefDatabase) -> InFile<ArenaMap<Self::ChildId, Self::Value>>;