diff options
Diffstat (limited to 'crates/ide_completion/src/completions.rs')
-rw-r--r-- | crates/ide_completion/src/completions.rs | 18 |
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. | ||
220 | fn complete_enum_variants( | 212 | fn 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, |