aboutsummaryrefslogtreecommitdiff
path: root/crates/ide_completion/src/completions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ide_completion/src/completions.rs')
-rw-r--r--crates/ide_completion/src/completions.rs18
1 files changed, 5 insertions, 13 deletions
diff --git a/crates/ide_completion/src/completions.rs b/crates/ide_completion/src/completions.rs
index aef70f26a..783305005 100644
--- a/crates/ide_completion/src/completions.rs
+++ b/crates/ide_completion/src/completions.rs
@@ -131,9 +131,6 @@ impl Completions {
131 func: hir::Function, 131 func: hir::Function,
132 local_name: Option<hir::Name>, 132 local_name: Option<hir::Name>,
133 ) { 133 ) {
134 if ctx.expects_type() {
135 return;
136 }
137 self.add_opt(render_fn(RenderContext::new(ctx), None, local_name, func)); 134 self.add_opt(render_fn(RenderContext::new(ctx), None, local_name, func));
138 } 135 }
139 136
@@ -175,9 +172,6 @@ impl Completions {
175 } 172 }
176 173
177 pub(crate) fn add_const(&mut self, ctx: &CompletionContext, constant: hir::Const) { 174 pub(crate) fn add_const(&mut self, ctx: &CompletionContext, constant: hir::Const) {
178 if ctx.expects_type() {
179 return;
180 }
181 self.add_opt(render_const(RenderContext::new(ctx), constant)); 175 self.add_opt(render_const(RenderContext::new(ctx), constant));
182 } 176 }
183 177
@@ -209,32 +203,30 @@ impl Completions {
209 variant: hir::Variant, 203 variant: hir::Variant,
210 local_name: Option<hir::Name>, 204 local_name: Option<hir::Name>,
211 ) { 205 ) {
212 if ctx.expects_type() {
213 return;
214 }
215 let item = render_variant(RenderContext::new(ctx), None, local_name, variant, None); 206 let item = render_variant(RenderContext::new(ctx), None, local_name, variant, None);
216 self.add(item); 207 self.add(item);
217 } 208 }
218} 209}
219 210
211/// Calls the callback for each variant of the provided enum with the path to the variant.
220fn complete_enum_variants( 212fn complete_enum_variants(
221 acc: &mut Completions, 213 acc: &mut Completions,
222 ctx: &CompletionContext, 214 ctx: &CompletionContext,
223 enum_data: hir::Enum, 215 enum_: hir::Enum,
224 cb: impl Fn(&mut Completions, &CompletionContext, hir::Variant, hir::ModPath), 216 cb: impl Fn(&mut Completions, &CompletionContext, hir::Variant, hir::ModPath),
225) { 217) {
226 let variants = enum_data.variants(ctx.db); 218 let variants = enum_.variants(ctx.db);
227 219
228 let module = if let Some(module) = ctx.scope.module() { 220 let module = if let Some(module) = ctx.scope.module() {
229 // Compute path from the completion site if available. 221 // Compute path from the completion site if available.
230 module 222 module
231 } else { 223 } else {
232 // Otherwise fall back to the enum's definition site. 224 // Otherwise fall back to the enum's definition site.
233 enum_data.module(ctx.db) 225 enum_.module(ctx.db)
234 }; 226 };
235 227
236 if let Some(impl_) = ctx.impl_def.as_ref().and_then(|impl_| ctx.sema.to_def(impl_)) { 228 if let Some(impl_) = ctx.impl_def.as_ref().and_then(|impl_| ctx.sema.to_def(impl_)) {
237 if impl_.self_ty(ctx.db).as_adt() == Some(hir::Adt::Enum(enum_data)) { 229 if impl_.self_ty(ctx.db).as_adt() == Some(hir::Adt::Enum(enum_)) {
238 for &variant in &variants { 230 for &variant in &variants {
239 let self_path = hir::ModPath::from_segments( 231 let self_path = hir::ModPath::from_segments(
240 hir::PathKind::Plain, 232 hir::PathKind::Plain,