diff options
Diffstat (limited to 'crates/ra_hir_def/src')
-rw-r--r-- | crates/ra_hir_def/src/lib.rs | 14 | ||||
-rw-r--r-- | crates/ra_hir_def/src/src.rs | 82 |
2 files changed, 9 insertions, 87 deletions
diff --git a/crates/ra_hir_def/src/lib.rs b/crates/ra_hir_def/src/lib.rs index d11b573e5..8ed1599ff 100644 --- a/crates/ra_hir_def/src/lib.rs +++ b/crates/ra_hir_def/src/lib.rs | |||
@@ -366,19 +366,7 @@ impl HasModule for AssocContainerId { | |||
366 | } | 366 | } |
367 | } | 367 | } |
368 | 368 | ||
369 | impl HasModule for FunctionLoc { | 369 | impl<N: AstNode> HasModule for AssocItemLoc<N> { |
370 | fn module(&self, db: &impl db::DefDatabase) -> ModuleId { | ||
371 | self.container.module(db) | ||
372 | } | ||
373 | } | ||
374 | |||
375 | impl HasModule for TypeAliasLoc { | ||
376 | fn module(&self, db: &impl db::DefDatabase) -> ModuleId { | ||
377 | self.container.module(db) | ||
378 | } | ||
379 | } | ||
380 | |||
381 | impl HasModule for ConstLoc { | ||
382 | fn module(&self, db: &impl db::DefDatabase) -> ModuleId { | 370 | fn module(&self, db: &impl db::DefDatabase) -> ModuleId { |
383 | self.container.module(db) | 371 | self.container.module(db) |
384 | } | 372 | } |
diff --git a/crates/ra_hir_def/src/src.rs b/crates/ra_hir_def/src/src.rs index 20200d1db..499375b80 100644 --- a/crates/ra_hir_def/src/src.rs +++ b/crates/ra_hir_def/src/src.rs | |||
@@ -2,94 +2,28 @@ | |||
2 | 2 | ||
3 | use hir_expand::InFile; | 3 | use hir_expand::InFile; |
4 | use ra_arena::map::ArenaMap; | 4 | use ra_arena::map::ArenaMap; |
5 | use ra_syntax::ast; | 5 | use ra_syntax::AstNode; |
6 | 6 | ||
7 | use crate::{ | 7 | use crate::{db::DefDatabase, AssocItemLoc, ItemLoc}; |
8 | db::DefDatabase, ConstLoc, EnumLoc, FunctionLoc, ImplLoc, StaticLoc, StructLoc, TraitLoc, | ||
9 | TypeAliasLoc, UnionLoc, | ||
10 | }; | ||
11 | 8 | ||
12 | pub trait HasSource { | 9 | pub trait HasSource { |
13 | type Value; | 10 | type Value; |
14 | fn source(&self, db: &impl DefDatabase) -> InFile<Self::Value>; | 11 | fn source(&self, db: &impl DefDatabase) -> InFile<Self::Value>; |
15 | } | 12 | } |
16 | 13 | ||
17 | impl HasSource for FunctionLoc { | 14 | impl<N: AstNode> HasSource for AssocItemLoc<N> { |
18 | type Value = ast::FnDef; | 15 | type Value = N; |
19 | 16 | ||
20 | fn source(&self, db: &impl DefDatabase) -> InFile<ast::FnDef> { | 17 | fn source(&self, db: &impl DefDatabase) -> InFile<N> { |
21 | let node = self.ast_id.to_node(db); | 18 | let node = self.ast_id.to_node(db); |
22 | InFile::new(self.ast_id.file_id, node) | 19 | InFile::new(self.ast_id.file_id, node) |
23 | } | 20 | } |
24 | } | 21 | } |
25 | 22 | ||
26 | impl HasSource for TypeAliasLoc { | 23 | impl<N: AstNode> HasSource for ItemLoc<N> { |
27 | type Value = ast::TypeAliasDef; | 24 | type Value = N; |
28 | 25 | ||
29 | fn source(&self, db: &impl DefDatabase) -> InFile<ast::TypeAliasDef> { | 26 | fn source(&self, db: &impl DefDatabase) -> InFile<N> { |
30 | let node = self.ast_id.to_node(db); | ||
31 | InFile::new(self.ast_id.file_id, node) | ||
32 | } | ||
33 | } | ||
34 | |||
35 | impl HasSource for ConstLoc { | ||
36 | type Value = ast::ConstDef; | ||
37 | |||
38 | fn source(&self, db: &impl DefDatabase) -> InFile<ast::ConstDef> { | ||
39 | let node = self.ast_id.to_node(db); | ||
40 | InFile::new(self.ast_id.file_id, node) | ||
41 | } | ||
42 | } | ||
43 | |||
44 | impl HasSource for StaticLoc { | ||
45 | type Value = ast::StaticDef; | ||
46 | |||
47 | fn source(&self, db: &impl DefDatabase) -> InFile<ast::StaticDef> { | ||
48 | let node = self.ast_id.to_node(db); | ||
49 | InFile::new(self.ast_id.file_id, node) | ||
50 | } | ||
51 | } | ||
52 | |||
53 | impl HasSource for ImplLoc { | ||
54 | type Value = ast::ImplBlock; | ||
55 | |||
56 | fn source(&self, db: &impl DefDatabase) -> InFile<ast::ImplBlock> { | ||
57 | let node = self.ast_id.to_node(db); | ||
58 | InFile::new(self.ast_id.file_id, node) | ||
59 | } | ||
60 | } | ||
61 | |||
62 | impl HasSource for TraitLoc { | ||
63 | type Value = ast::TraitDef; | ||
64 | |||
65 | fn source(&self, db: &impl DefDatabase) -> InFile<ast::TraitDef> { | ||
66 | let node = self.ast_id.to_node(db); | ||
67 | InFile::new(self.ast_id.file_id, node) | ||
68 | } | ||
69 | } | ||
70 | |||
71 | impl HasSource for StructLoc { | ||
72 | type Value = ast::StructDef; | ||
73 | |||
74 | fn source(&self, db: &impl DefDatabase) -> InFile<ast::StructDef> { | ||
75 | let node = self.ast_id.to_node(db); | ||
76 | InFile::new(self.ast_id.file_id, node) | ||
77 | } | ||
78 | } | ||
79 | |||
80 | impl HasSource for UnionLoc { | ||
81 | type Value = ast::UnionDef; | ||
82 | |||
83 | fn source(&self, db: &impl DefDatabase) -> InFile<ast::UnionDef> { | ||
84 | let node = self.ast_id.to_node(db); | ||
85 | InFile::new(self.ast_id.file_id, node) | ||
86 | } | ||
87 | } | ||
88 | |||
89 | impl HasSource for EnumLoc { | ||
90 | type Value = ast::EnumDef; | ||
91 | |||
92 | fn source(&self, db: &impl DefDatabase) -> InFile<ast::EnumDef> { | ||
93 | let node = self.ast_id.to_node(db); | 27 | let node = self.ast_id.to_node(db); |
94 | InFile::new(self.ast_id.file_id, node) | 28 | InFile::new(self.ast_id.file_id, node) |
95 | } | 29 | } |