]> git.lizzy.rs Git - rust.git/blob - crates/ra_hir_def/src/src.rs
Reduce copy-paste some more
[rust.git] / crates / ra_hir_def / src / src.rs
1 //! Utilities for mapping between hir IDs and the surface syntax.
2
3 use hir_expand::InFile;
4 use ra_arena::map::ArenaMap;
5 use ra_syntax::AstNode;
6
7 use crate::{db::DefDatabase, AssocItemLoc, ItemLoc};
8
9 pub trait HasSource {
10     type Value;
11     fn source(&self, db: &impl DefDatabase) -> InFile<Self::Value>;
12 }
13
14 impl<N: AstNode> HasSource for AssocItemLoc<N> {
15     type Value = N;
16
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)
20     }
21 }
22
23 impl<N: AstNode> HasSource for ItemLoc<N> {
24     type Value = N;
25
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)
29     }
30 }
31
32 pub trait HasChildSource {
33     type ChildId;
34     type Value;
35     fn child_source(&self, db: &impl DefDatabase) -> InFile<ArenaMap<Self::ChildId, Self::Value>>;
36 }