diff options
Diffstat (limited to 'crates/hir/src/has_source.rs')
-rw-r--r-- | crates/hir/src/has_source.rs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/crates/hir/src/has_source.rs b/crates/hir/src/has_source.rs index c77494152..04845037f 100644 --- a/crates/hir/src/has_source.rs +++ b/crates/hir/src/has_source.rs | |||
@@ -10,8 +10,8 @@ use hir_expand::InFile; | |||
10 | use syntax::ast; | 10 | use syntax::ast; |
11 | 11 | ||
12 | use crate::{ | 12 | use crate::{ |
13 | db::HirDatabase, Const, Enum, EnumVariant, Field, FieldSource, Function, ImplDef, MacroDef, | 13 | db::HirDatabase, Const, Enum, EnumVariant, Field, FieldSource, Function, ImplDef, |
14 | Module, Static, Struct, Trait, TypeAlias, TypeParam, Union, | 14 | LifetimeParam, MacroDef, Module, Static, Struct, Trait, TypeAlias, TypeParam, Union, |
15 | }; | 15 | }; |
16 | 16 | ||
17 | pub trait HasSource { | 17 | pub trait HasSource { |
@@ -110,8 +110,8 @@ impl HasSource for TypeAlias { | |||
110 | } | 110 | } |
111 | } | 111 | } |
112 | impl HasSource for MacroDef { | 112 | impl HasSource for MacroDef { |
113 | type Ast = ast::MacroCall; | 113 | type Ast = ast::MacroRules; |
114 | fn source(self, db: &dyn HirDatabase) -> InFile<ast::MacroCall> { | 114 | fn source(self, db: &dyn HirDatabase) -> InFile<ast::MacroRules> { |
115 | InFile { | 115 | InFile { |
116 | file_id: self.id.ast_id.expect("MacroDef without ast_id").file_id, | 116 | file_id: self.id.ast_id.expect("MacroDef without ast_id").file_id, |
117 | value: self.id.ast_id.expect("MacroDef without ast_id").to_node(db.upcast()), | 117 | value: self.id.ast_id.expect("MacroDef without ast_id").to_node(db.upcast()), |
@@ -132,3 +132,11 @@ impl HasSource for TypeParam { | |||
132 | child_source.map(|it| it[self.id.local_id].clone()) | 132 | child_source.map(|it| it[self.id.local_id].clone()) |
133 | } | 133 | } |
134 | } | 134 | } |
135 | |||
136 | impl HasSource for LifetimeParam { | ||
137 | type Ast = ast::LifetimeParam; | ||
138 | fn source(self, db: &dyn HirDatabase) -> InFile<Self::Ast> { | ||
139 | let child_source = self.id.parent.child_source(db.upcast()); | ||
140 | child_source.map(|it| it[self.id.local_id].clone()) | ||
141 | } | ||
142 | } | ||