mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-01 19:23:50 +00:00
adapt ide_api to the new API
This commit is contained in:
parent
ce2041252a
commit
aea1f95a66
@ -1,4 +1,4 @@
|
||||
use hir::{Ty, Def, AdtDef};
|
||||
use hir::{Ty, AdtDef};
|
||||
|
||||
use crate::completion::{CompletionContext, Completions, CompletionItem, CompletionItemKind};
|
||||
use crate::completion::completion_item::CompletionKind;
|
||||
@ -29,23 +29,21 @@ fn complete_fields(acc: &mut Completions, ctx: &CompletionContext, receiver: Ty)
|
||||
def_id, ref substs, ..
|
||||
} => {
|
||||
match def_id {
|
||||
AdtDef::Struct() => {}
|
||||
AdtDef::Def(def_id) => match def_id.resolve(ctx.db) {
|
||||
Def::Struct(s) => {
|
||||
for field in s.fields(ctx.db) {
|
||||
CompletionItem::new(
|
||||
CompletionKind::Reference,
|
||||
ctx.source_range(),
|
||||
field.name().to_string(),
|
||||
)
|
||||
.kind(CompletionItemKind::Field)
|
||||
.set_detail(field.ty(ctx.db).map(|ty| ty.subst(substs).to_string()))
|
||||
.add_to(acc);
|
||||
}
|
||||
AdtDef::Struct(s) => {
|
||||
for field in s.fields(ctx.db) {
|
||||
CompletionItem::new(
|
||||
CompletionKind::Reference,
|
||||
ctx.source_range(),
|
||||
field.name().to_string(),
|
||||
)
|
||||
.kind(CompletionItemKind::Field)
|
||||
.set_detail(field.ty(ctx.db).map(|ty| ty.subst(substs).to_string()))
|
||||
.add_to(acc);
|
||||
}
|
||||
// TODO unions
|
||||
_ => {}
|
||||
},
|
||||
}
|
||||
|
||||
// TODO unions
|
||||
AdtDef::Enum(_) => (),
|
||||
}
|
||||
}
|
||||
Ty::Tuple(fields) => {
|
||||
|
@ -26,26 +26,21 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) {
|
||||
.add_to(acc);
|
||||
}
|
||||
}
|
||||
|
||||
hir::ModuleDef::Def(def_id) => match def_id.resolve(ctx.db) {
|
||||
hir::Def::Enum(e) => {
|
||||
e.variants(ctx.db)
|
||||
.into_iter()
|
||||
.for_each(|(variant_name, variant)| {
|
||||
CompletionItem::new(
|
||||
CompletionKind::Reference,
|
||||
ctx.source_range(),
|
||||
variant_name.to_string(),
|
||||
)
|
||||
.kind(CompletionItemKind::EnumVariant)
|
||||
.set_documentation(variant.docs(ctx.db))
|
||||
.add_to(acc)
|
||||
});
|
||||
}
|
||||
_ => return,
|
||||
},
|
||||
|
||||
hir::ModuleDef::Function(_) => return,
|
||||
hir::ModuleDef::Enum(e) => {
|
||||
e.variants(ctx.db)
|
||||
.into_iter()
|
||||
.for_each(|(variant_name, variant)| {
|
||||
CompletionItem::new(
|
||||
CompletionKind::Reference,
|
||||
ctx.source_range(),
|
||||
variant_name.to_string(),
|
||||
)
|
||||
.kind(CompletionItemKind::EnumVariant)
|
||||
.set_documentation(variant.docs(ctx.db))
|
||||
.add_to(acc)
|
||||
});
|
||||
}
|
||||
hir::ModuleDef::Function(_) | hir::ModuleDef::Struct(_) | hir::ModuleDef::Def(_) => return,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -220,9 +220,9 @@ impl Builder {
|
||||
let (kind, docs) = match def {
|
||||
hir::ModuleDef::Module(_) => (CompletionItemKind::Module, None),
|
||||
hir::ModuleDef::Function(func) => return self.from_function(ctx, func),
|
||||
hir::ModuleDef::Struct(it) => (CompletionItemKind::Struct, it.docs(ctx.db)),
|
||||
hir::ModuleDef::Enum(it) => (CompletionItemKind::Enum, it.docs(ctx.db)),
|
||||
hir::ModuleDef::Def(def_id) => match def_id.resolve(ctx.db) {
|
||||
hir::Def::Struct(it) => (CompletionItemKind::Struct, it.docs(ctx.db)),
|
||||
hir::Def::Enum(it) => (CompletionItemKind::Enum, it.docs(ctx.db)),
|
||||
hir::Def::Trait(it) => (CompletionItemKind::Trait, it.docs(ctx.db)),
|
||||
hir::Def::Type(it) => (CompletionItemKind::TypeAlias, it.docs(ctx.db)),
|
||||
hir::Def::Const(it) => (CompletionItemKind::Const, it.docs(ctx.db)),
|
||||
|
@ -114,17 +114,23 @@ impl NavigationTarget {
|
||||
hir::ModuleDef::Function(func) => {
|
||||
return Some(NavigationTarget::from_function(db, func));
|
||||
}
|
||||
hir::ModuleDef::Struct(s) => {
|
||||
let (file_id, node) = s.source(db);
|
||||
return Some(NavigationTarget::from_named(
|
||||
file_id.original_file(db),
|
||||
&*node,
|
||||
));
|
||||
}
|
||||
hir::ModuleDef::Enum(e) => {
|
||||
let (file_id, node) = e.source(db);
|
||||
return Some(NavigationTarget::from_named(
|
||||
file_id.original_file(db),
|
||||
&*node,
|
||||
));
|
||||
}
|
||||
};
|
||||
|
||||
let res = match def {
|
||||
Def::Struct(s) => {
|
||||
let (file_id, node) = s.source(db);
|
||||
NavigationTarget::from_named(file_id.original_file(db), &*node)
|
||||
}
|
||||
Def::Enum(e) => {
|
||||
let (file_id, node) = e.source(db);
|
||||
NavigationTarget::from_named(file_id.original_file(db), &*node)
|
||||
}
|
||||
Def::EnumVariant(ev) => {
|
||||
let (file_id, node) = ev.source(db);
|
||||
NavigationTarget::from_named(file_id.original_file(db), &*node)
|
||||
|
Loading…
Reference in New Issue
Block a user