diff options
Diffstat (limited to 'crates/ra_hir/src/code_model_api.rs')
-rw-r--r-- | crates/ra_hir/src/code_model_api.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index 0c4a80bfa..970b78412 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs | |||
@@ -71,6 +71,7 @@ pub enum ModuleDef { | |||
71 | Module(Module), | 71 | Module(Module), |
72 | Function(Function), | 72 | Function(Function), |
73 | Struct(Struct), | 73 | Struct(Struct), |
74 | Union(Union), | ||
74 | Enum(Enum), | 75 | Enum(Enum), |
75 | // Can't be directly declared, but can be imported. | 76 | // Can't be directly declared, but can be imported. |
76 | EnumVariant(EnumVariant), | 77 | EnumVariant(EnumVariant), |
@@ -83,6 +84,7 @@ impl_froms!( | |||
83 | ModuleDef: Module, | 84 | ModuleDef: Module, |
84 | Function, | 85 | Function, |
85 | Struct, | 86 | Struct, |
87 | Union, | ||
86 | Enum, | 88 | Enum, |
87 | EnumVariant, | 89 | EnumVariant, |
88 | Const, | 90 | Const, |
@@ -326,6 +328,42 @@ impl Docs for Struct { | |||
326 | } | 328 | } |
327 | 329 | ||
328 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | 330 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
331 | pub struct Union { | ||
332 | pub(crate) id: StructId, | ||
333 | } | ||
334 | |||
335 | impl Union { | ||
336 | pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StructDef>) { | ||
337 | self.id.source(db) | ||
338 | } | ||
339 | |||
340 | pub fn name(&self, db: &impl HirDatabase) -> Option<Name> { | ||
341 | db.struct_data(Struct { id: self.id }).name.clone() | ||
342 | } | ||
343 | |||
344 | pub fn module(&self, db: &impl HirDatabase) -> Module { | ||
345 | self.id.module(db) | ||
346 | } | ||
347 | |||
348 | // FIXME move to a more general type | ||
349 | /// Builds a resolver for type references inside this union. | ||
350 | pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { | ||
351 | // take the outer scope... | ||
352 | let r = self.module(db).resolver(db); | ||
353 | // ...and add generic params, if present | ||
354 | let p = self.generic_params(db); | ||
355 | let r = if !p.params.is_empty() { r.push_generic_params_scope(p) } else { r }; | ||
356 | r | ||
357 | } | ||
358 | } | ||
359 | |||
360 | impl Docs for Union { | ||
361 | fn docs(&self, db: &impl HirDatabase) -> Option<Documentation> { | ||
362 | docs_from_ast(&*self.source(db).1) | ||
363 | } | ||
364 | } | ||
365 | |||
366 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
329 | pub struct Enum { | 367 | pub struct Enum { |
330 | pub(crate) id: EnumId, | 368 | pub(crate) id: EnumId, |
331 | } | 369 | } |