aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model_api.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/code_model_api.rs')
-rw-r--r--crates/ra_hir/src/code_model_api.rs38
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)]
331pub struct Union {
332 pub(crate) id: StructId,
333}
334
335impl 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
360impl 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)]
329pub struct Enum { 367pub struct Enum {
330 pub(crate) id: EnumId, 368 pub(crate) id: EnumId,
331} 369}