From 33ff7b56ff353410e7bcb7aed27004d4f0a57d8e Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sun, 27 Jan 2019 20:50:57 +0100 Subject: Use the new Resolver API in completion --- .../ra_ide_api/src/completion/completion_item.rs | 44 +++++++++++++++------- 1 file changed, 31 insertions(+), 13 deletions(-) (limited to 'crates/ra_ide_api/src/completion/completion_item.rs') diff --git a/crates/ra_ide_api/src/completion/completion_item.rs b/crates/ra_ide_api/src/completion/completion_item.rs index d3bc14894..4101ce88a 100644 --- a/crates/ra_ide_api/src/completion/completion_item.rs +++ b/crates/ra_ide_api/src/completion/completion_item.rs @@ -1,5 +1,7 @@ -use hir::{Docs, Documentation}; -use ra_syntax::TextRange; +use hir::{Docs, Documentation, PerNs, Resolution}; +use ra_syntax::{ + TextRange, +}; use ra_text_edit::TextEdit; use test_utils::tested_by; @@ -48,6 +50,7 @@ pub enum CompletionItemKind { Trait, TypeAlias, Method, + TypeParam, } #[derive(Debug, PartialEq, Eq, Copy, Clone)] @@ -207,23 +210,38 @@ impl Builder { pub(super) fn from_resolution( mut self, ctx: &CompletionContext, - resolution: &hir::Resolution, + resolution: &PerNs, ) -> Builder { - let def = resolution.def.take_types().or(resolution.def.take_values()); + use hir::ModuleDef::*; + + let def = resolution + .as_ref() + .take_types() + .or(resolution.as_ref().take_values()); let def = match def { None => return self, Some(it) => it, }; let (kind, docs) = match def { - hir::ModuleDef::Module(it) => (CompletionItemKind::Module, it.docs(ctx.db)), - 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::EnumVariant(it) => (CompletionItemKind::EnumVariant, it.docs(ctx.db)), - hir::ModuleDef::Const(it) => (CompletionItemKind::Const, it.docs(ctx.db)), - hir::ModuleDef::Static(it) => (CompletionItemKind::Static, it.docs(ctx.db)), - hir::ModuleDef::Trait(it) => (CompletionItemKind::Trait, it.docs(ctx.db)), - hir::ModuleDef::Type(it) => (CompletionItemKind::TypeAlias, it.docs(ctx.db)), + Resolution::Def { def: Module(it) } => (CompletionItemKind::Module, it.docs(ctx.db)), + Resolution::Def { + def: Function(func), + } => return self.from_function(ctx, *func), + Resolution::Def { def: Struct(it) } => (CompletionItemKind::Struct, it.docs(ctx.db)), + Resolution::Def { def: Enum(it) } => (CompletionItemKind::Enum, it.docs(ctx.db)), + Resolution::Def { + def: EnumVariant(it), + } => (CompletionItemKind::EnumVariant, it.docs(ctx.db)), + Resolution::Def { def: Const(it) } => (CompletionItemKind::Const, it.docs(ctx.db)), + Resolution::Def { def: Static(it) } => (CompletionItemKind::Static, it.docs(ctx.db)), + Resolution::Def { def: Trait(it) } => (CompletionItemKind::Trait, it.docs(ctx.db)), + Resolution::Def { def: Type(it) } => (CompletionItemKind::TypeAlias, it.docs(ctx.db)), + Resolution::GenericParam { .. } => (CompletionItemKind::TypeParam, None), + Resolution::LocalBinding { .. } => (CompletionItemKind::Binding, None), + Resolution::SelfType { .. } => ( + CompletionItemKind::TypeParam, // (does this need its own kind?) + None, + ), }; self.kind = Some(kind); self.documentation = docs; -- cgit v1.2.3 From d571d26955148befd6986008a5112fff3a901c43 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Wed, 30 Jan 2019 22:41:44 +0100 Subject: Make the Resolution variants tuple variants --- .../ra_ide_api/src/completion/completion_item.rs | 28 ++++++++++------------ 1 file changed, 12 insertions(+), 16 deletions(-) (limited to 'crates/ra_ide_api/src/completion/completion_item.rs') diff --git a/crates/ra_ide_api/src/completion/completion_item.rs b/crates/ra_ide_api/src/completion/completion_item.rs index 4101ce88a..bada6a33b 100644 --- a/crates/ra_ide_api/src/completion/completion_item.rs +++ b/crates/ra_ide_api/src/completion/completion_item.rs @@ -223,22 +223,18 @@ impl Builder { Some(it) => it, }; let (kind, docs) = match def { - Resolution::Def { def: Module(it) } => (CompletionItemKind::Module, it.docs(ctx.db)), - Resolution::Def { - def: Function(func), - } => return self.from_function(ctx, *func), - Resolution::Def { def: Struct(it) } => (CompletionItemKind::Struct, it.docs(ctx.db)), - Resolution::Def { def: Enum(it) } => (CompletionItemKind::Enum, it.docs(ctx.db)), - Resolution::Def { - def: EnumVariant(it), - } => (CompletionItemKind::EnumVariant, it.docs(ctx.db)), - Resolution::Def { def: Const(it) } => (CompletionItemKind::Const, it.docs(ctx.db)), - Resolution::Def { def: Static(it) } => (CompletionItemKind::Static, it.docs(ctx.db)), - Resolution::Def { def: Trait(it) } => (CompletionItemKind::Trait, it.docs(ctx.db)), - Resolution::Def { def: Type(it) } => (CompletionItemKind::TypeAlias, it.docs(ctx.db)), - Resolution::GenericParam { .. } => (CompletionItemKind::TypeParam, None), - Resolution::LocalBinding { .. } => (CompletionItemKind::Binding, None), - Resolution::SelfType { .. } => ( + Resolution::Def(Module(it)) => (CompletionItemKind::Module, it.docs(ctx.db)), + Resolution::Def(Function(func)) => return self.from_function(ctx, *func), + Resolution::Def(Struct(it)) => (CompletionItemKind::Struct, it.docs(ctx.db)), + Resolution::Def(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)), + Resolution::Def(Trait(it)) => (CompletionItemKind::Trait, it.docs(ctx.db)), + Resolution::Def(Type(it)) => (CompletionItemKind::TypeAlias, it.docs(ctx.db)), + Resolution::GenericParam(..) => (CompletionItemKind::TypeParam, None), + Resolution::LocalBinding(..) => (CompletionItemKind::Binding, None), + Resolution::SelfType(..) => ( CompletionItemKind::TypeParam, // (does this need its own kind?) None, ), -- cgit v1.2.3