make various enums "inherit" from AdtDef

This commit is contained in:
Aleksey Kladov 2019-09-13 00:10:16 +03:00
parent d8b621cf26
commit 45117c6388
17 changed files with 156 additions and 121 deletions

View file

@ -1,4 +1,4 @@
use hir::{Either, Resolution};
use hir::{AdtDef, Either, Resolution};
use ra_syntax::AstNode;
use test_utils::tested_by;
@ -37,19 +37,14 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) {
acc.add_resolution(ctx, name.to_string(), &res.def.map(hir::Resolution::Def));
}
}
hir::ModuleDef::Enum(_)
| hir::ModuleDef::Struct(_)
| hir::ModuleDef::Union(_)
| hir::ModuleDef::TypeAlias(_) => {
if let hir::ModuleDef::Enum(e) = def {
hir::ModuleDef::AdtDef(_) | hir::ModuleDef::TypeAlias(_) => {
if let hir::ModuleDef::AdtDef(AdtDef::Enum(e)) = def {
for variant in e.variants(ctx.db) {
acc.add_enum_variant(ctx, variant);
}
}
let ty = match def {
hir::ModuleDef::Enum(e) => e.ty(ctx.db),
hir::ModuleDef::Struct(s) => s.ty(ctx.db),
hir::ModuleDef::Union(u) => u.ty(ctx.db),
hir::ModuleDef::AdtDef(adt) => adt.ty(ctx.db),
hir::ModuleDef::TypeAlias(a) => a.ty(ctx.db),
_ => unreachable!(),
};

View file

@ -15,7 +15,7 @@ pub(super) fn complete_pattern(acc: &mut Completions, ctx: &CompletionContext) {
_ => continue,
};
match def {
hir::ModuleDef::Enum(..)
hir::ModuleDef::AdtDef(hir::AdtDef::Enum(..))
| hir::ModuleDef::EnumVariant(..)
| hir::ModuleDef::Const(..)
| hir::ModuleDef::Module(..) => (),

View file

@ -67,9 +67,15 @@ impl Completions {
Resolution::Def(Function(func)) => {
return self.add_function_with_name(ctx, Some(local_name), *func);
}
Resolution::Def(Struct(it)) => (CompletionItemKind::Struct, it.docs(ctx.db)),
Resolution::Def(Union(it)) => (CompletionItemKind::Struct, it.docs(ctx.db)),
Resolution::Def(Enum(it)) => (CompletionItemKind::Enum, it.docs(ctx.db)),
Resolution::Def(AdtDef(hir::AdtDef::Struct(it))) => {
(CompletionItemKind::Struct, it.docs(ctx.db))
}
Resolution::Def(AdtDef(hir::AdtDef::Union(it))) => {
(CompletionItemKind::Struct, it.docs(ctx.db))
}
Resolution::Def(AdtDef(hir::AdtDef::Enum(it))) => {
(CompletionItemKind::Enum, it.docs(ctx.db))
}
Resolution::Def(EnumVariant(it)) => (CompletionItemKind::EnumVariant, it.docs(ctx.db)),
Resolution::Def(Const(it)) => (CompletionItemKind::Const, it.docs(ctx.db)),
Resolution::Def(Static(it)) => (CompletionItemKind::Static, it.docs(ctx.db)),

View file

@ -193,9 +193,7 @@ impl NavigationTarget {
let nav = match module_def {
hir::ModuleDef::Module(module) => NavigationTarget::from_module(db, module),
hir::ModuleDef::Function(func) => NavigationTarget::from_def_source(db, func),
hir::ModuleDef::Struct(it) => NavigationTarget::from_adt_def(db, it.into()),
hir::ModuleDef::Enum(it) => NavigationTarget::from_adt_def(db, it.into()),
hir::ModuleDef::Union(it) => NavigationTarget::from_adt_def(db, it.into()),
hir::ModuleDef::AdtDef(it) => NavigationTarget::from_adt_def(db, it),
hir::ModuleDef::Const(it) => NavigationTarget::from_def_source(db, it),
hir::ModuleDef::Static(it) => NavigationTarget::from_def_source(db, it),
hir::ModuleDef::EnumVariant(it) => NavigationTarget::from_def_source(db, it),

View file

@ -1,4 +1,4 @@
use hir::{HasSource, HirDisplay};
use hir::{AdtDef, HasSource, HirDisplay};
use ra_db::SourceDatabase;
use ra_syntax::{
algo::{
@ -129,9 +129,13 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
}
}
hir::ModuleDef::Function(it) => res.extend(from_def_source(db, it)),
hir::ModuleDef::Struct(it) => res.extend(from_def_source(db, it)),
hir::ModuleDef::Union(it) => res.extend(from_def_source(db, it)),
hir::ModuleDef::Enum(it) => res.extend(from_def_source(db, it)),
hir::ModuleDef::AdtDef(AdtDef::Struct(it)) => {
res.extend(from_def_source(db, it))
}
hir::ModuleDef::AdtDef(AdtDef::Union(it)) => {
res.extend(from_def_source(db, it))
}
hir::ModuleDef::AdtDef(AdtDef::Enum(it)) => res.extend(from_def_source(db, it)),
hir::ModuleDef::EnumVariant(it) => res.extend(from_def_source(db, it)),
hir::ModuleDef::Const(it) => res.extend(from_def_source(db, it)),
hir::ModuleDef::Static(it) => res.extend(from_def_source(db, it)),

View file

@ -107,9 +107,7 @@ pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRa
Some(AssocItem(hir::ImplItem::TypeAlias(_))) => "type",
Some(Def(hir::ModuleDef::Module(_))) => "module",
Some(Def(hir::ModuleDef::Function(_))) => "function",
Some(Def(hir::ModuleDef::Struct(_))) => "type",
Some(Def(hir::ModuleDef::Union(_))) => "type",
Some(Def(hir::ModuleDef::Enum(_))) => "type",
Some(Def(hir::ModuleDef::AdtDef(_))) => "type",
Some(Def(hir::ModuleDef::EnumVariant(_))) => "constant",
Some(Def(hir::ModuleDef::Const(_))) => "constant",
Some(Def(hir::ModuleDef::Static(_))) => "constant",