Skip to content

Commit 02c240f

Browse files
committed
Auto merge of rust-lang#12898 - Veykril:compl-pat-brace, r=Veykril
fix: Fix pattern completions adding unnecessary braces Fixes rust-lang/rust-analyzer#12852
2 parents 02f9ec4 + 7c59d7c commit 02c240f

File tree

4 files changed

+33
-9
lines changed

4 files changed

+33
-9
lines changed

crates/ide-completion/src/completions.rs

+11-2
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ impl Completions {
400400
) {
401401
if let PathCompletionCtx { kind: PathKind::Pat { pat_ctx }, .. } = path_ctx {
402402
cov_mark::hit!(enum_variant_pattern_path);
403-
self.add_variant_pat(ctx, pat_ctx, variant, local_name);
403+
self.add_variant_pat(ctx, pat_ctx, Some(path_ctx), variant, local_name);
404404
return;
405405
}
406406

@@ -484,12 +484,14 @@ impl Completions {
484484
&mut self,
485485
ctx: &CompletionContext<'_>,
486486
pattern_ctx: &PatternContext,
487+
path_ctx: Option<&PathCompletionCtx>,
487488
variant: hir::Variant,
488489
local_name: Option<hir::Name>,
489490
) {
490491
self.add_opt(render_variant_pat(
491492
RenderContext::new(ctx),
492493
pattern_ctx,
494+
path_ctx,
493495
variant,
494496
local_name.clone(),
495497
None,
@@ -504,7 +506,14 @@ impl Completions {
504506
path: hir::ModPath,
505507
) {
506508
let path = Some(&path);
507-
self.add_opt(render_variant_pat(RenderContext::new(ctx), pattern_ctx, variant, None, path));
509+
self.add_opt(render_variant_pat(
510+
RenderContext::new(ctx),
511+
pattern_ctx,
512+
None,
513+
variant,
514+
None,
515+
path,
516+
));
508517
}
509518

510519
pub(crate) fn add_struct_pat(

crates/ide-completion/src/completions/pattern.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ pub(crate) fn complete_pattern(
7474
hir::ModuleDef::Variant(variant)
7575
if refutable || single_variant_enum(variant.parent_enum(ctx.db)) =>
7676
{
77-
acc.add_variant_pat(ctx, pattern_ctx, variant, Some(name.clone()));
77+
acc.add_variant_pat(ctx, pattern_ctx, None, variant, Some(name.clone()));
7878
true
7979
}
8080
hir::ModuleDef::Adt(hir::Adt::Enum(e)) => refutable || single_variant_enum(e),

crates/ide-completion/src/render/pattern.rs

+19-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use itertools::Itertools;
66
use syntax::SmolStr;
77

88
use crate::{
9-
context::{ParamContext, ParamKind, PatternContext},
9+
context::{ParamContext, ParamKind, PathCompletionCtx, PatternContext},
1010
render::{
1111
variant::{format_literal_label, visible_fields},
1212
RenderContext,
@@ -42,6 +42,7 @@ pub(crate) fn render_struct_pat(
4242
pub(crate) fn render_variant_pat(
4343
ctx: RenderContext<'_>,
4444
pattern_ctx: &PatternContext,
45+
path_ctx: Option<&PathCompletionCtx>,
4546
variant: hir::Variant,
4647
local_name: Option<Name>,
4748
path: Option<&hir::ModPath>,
@@ -58,9 +59,23 @@ pub(crate) fn render_variant_pat(
5859
(name.to_smol_str(), name.escaped().to_smol_str())
5960
}
6061
};
61-
let kind = variant.kind(ctx.db());
62-
let label = format_literal_label(name.as_str(), kind);
63-
let pat = render_pat(&ctx, pattern_ctx, &escaped_name, kind, &visible_fields, fields_omitted)?;
62+
63+
let (label, pat) = match path_ctx {
64+
Some(PathCompletionCtx { has_call_parens: true, .. }) => (name, escaped_name.to_string()),
65+
_ => {
66+
let kind = variant.kind(ctx.db());
67+
let label = format_literal_label(name.as_str(), kind);
68+
let pat = render_pat(
69+
&ctx,
70+
pattern_ctx,
71+
&escaped_name,
72+
kind,
73+
&visible_fields,
74+
fields_omitted,
75+
)?;
76+
(label, pat)
77+
}
78+
};
6479

6580
Some(build_completion(ctx, label, pat, variant))
6681
}

crates/ide-completion/src/tests/pattern.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ fn foo() {
443443
}
444444
"#,
445445
expect![[r#"
446-
bn TupleVariant(…) TupleVariant($1)$0
446+
bn TupleVariant TupleVariant
447447
"#]],
448448
);
449449
check_empty(
@@ -458,7 +458,7 @@ fn foo() {
458458
}
459459
"#,
460460
expect![[r#"
461-
bn RecordVariant {…} RecordVariant { field$1 }$0
461+
bn RecordVariant RecordVariant
462462
"#]],
463463
);
464464
}

0 commit comments

Comments
 (0)