diff options
author | Aleksey Kladov <[email protected]> | 2019-03-26 15:27:22 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-03-26 15:27:22 +0000 |
commit | 8f324773127c733b12d1c5ee98a3d9c6a5360db0 (patch) | |
tree | 4cc6186b417ae6cff6bec44f17ce53b1af574010 /crates/ra_hir/src/nameres/collector.rs | |
parent | 071a19537d4399fd04d1e9594ab7878502a12d21 (diff) |
more type safety
Diffstat (limited to 'crates/ra_hir/src/nameres/collector.rs')
-rw-r--r-- | crates/ra_hir/src/nameres/collector.rs | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/crates/ra_hir/src/nameres/collector.rs b/crates/ra_hir/src/nameres/collector.rs index b5f02ab80..39cadc94a 100644 --- a/crates/ra_hir/src/nameres/collector.rs +++ b/crates/ra_hir/src/nameres/collector.rs | |||
@@ -429,23 +429,24 @@ where | |||
429 | fn define_def(&mut self, def: &raw::DefData) { | 429 | fn define_def(&mut self, def: &raw::DefData) { |
430 | let module = Module { krate: self.def_collector.def_map.krate, module_id: self.module_id }; | 430 | let module = Module { krate: self.def_collector.def_map.krate, module_id: self.module_id }; |
431 | let ctx = LocationCtx::new(self.def_collector.db, module, self.file_id.into()); | 431 | let ctx = LocationCtx::new(self.def_collector.db, module, self.file_id.into()); |
432 | macro_rules! id { | 432 | |
433 | () => { | 433 | macro_rules! def { |
434 | AstItemDef::from_source_item_id_unchecked(ctx, def.source_item_id) | 434 | ($kind:ident, $ast_id:ident) => { |
435 | $kind { id: AstItemDef::from_ast_id(ctx, $ast_id) }.into() | ||
435 | }; | 436 | }; |
436 | } | 437 | } |
437 | let name = def.name.clone(); | 438 | let name = def.name.clone(); |
438 | let def: PerNs<ModuleDef> = match def.kind { | 439 | let def: PerNs<ModuleDef> = match def.kind { |
439 | raw::DefKind::Function => PerNs::values(Function { id: id!() }.into()), | 440 | raw::DefKind::Function(ast_id) => PerNs::values(def!(Function, ast_id)), |
440 | raw::DefKind::Struct => { | 441 | raw::DefKind::Struct(ast_id) => { |
441 | let s = Struct { id: id!() }.into(); | 442 | let s = def!(Struct, ast_id); |
442 | PerNs::both(s, s) | 443 | PerNs::both(s, s) |
443 | } | 444 | } |
444 | raw::DefKind::Enum => PerNs::types(Enum { id: id!() }.into()), | 445 | raw::DefKind::Enum(ast_id) => PerNs::types(def!(Enum, ast_id)), |
445 | raw::DefKind::Const => PerNs::values(Const { id: id!() }.into()), | 446 | raw::DefKind::Const(ast_id) => PerNs::values(def!(Const, ast_id)), |
446 | raw::DefKind::Static => PerNs::values(Static { id: id!() }.into()), | 447 | raw::DefKind::Static(ast_id) => PerNs::values(def!(Static, ast_id)), |
447 | raw::DefKind::Trait => PerNs::types(Trait { id: id!() }.into()), | 448 | raw::DefKind::Trait(ast_id) => PerNs::types(def!(Trait, ast_id)), |
448 | raw::DefKind::TypeAlias => PerNs::types(TypeAlias { id: id!() }.into()), | 449 | raw::DefKind::TypeAlias(ast_id) => PerNs::types(def!(TypeAlias, ast_id)), |
449 | }; | 450 | }; |
450 | let resolution = Resolution { def, import: None }; | 451 | let resolution = Resolution { def, import: None }; |
451 | self.def_collector.update(self.module_id, None, &[(name, resolution)]) | 452 | self.def_collector.update(self.module_id, None, &[(name, resolution)]) |