Skip to content

Commit

Permalink
Auto merge of rust-lang#12473 - yue4u:fix/no-enum-parens-in-use, r=Ve…
Browse files Browse the repository at this point in the history
…ykril

fix: avoid adding enum parens in use path

close rust-lang#12420
  • Loading branch information
bors committed Jun 10, 2022
2 parents e9d3fe0 + 11693da commit 0bbead9
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 10 deletions.
23 changes: 17 additions & 6 deletions crates/ide-completion/src/render/literal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use hir::{db::HirDatabase, Documentation, HasAttrs, StructKind};
use ide_db::SymbolKind;

use crate::{
context::{CompletionContext, PathCompletionCtx},
context::{CompletionContext, PathCompletionCtx, PathKind},
item::{Builder, CompletionItem},
render::{
compute_ref_match, compute_type_match,
Expand Down Expand Up @@ -50,9 +50,15 @@ fn render(
path: Option<hir::ModPath>,
) -> Option<Builder> {
let db = completion.db;
let kind = thing.kind(db);
let has_call_parens =
matches!(completion.path_context(), Some(PathCompletionCtx { has_call_parens: true, .. }));
let mut kind = thing.kind(db);
let should_add_parens = match completion.path_context() {
Some(PathCompletionCtx { has_call_parens: true, .. }) => false,
Some(PathCompletionCtx { kind: PathKind::Use | PathKind::Type { .. }, .. }) => {
cov_mark::hit!(no_parens_in_use_item);
false
}
_ => true,
};

let fields = thing.fields(completion)?;
let (qualified_name, short_qualified_name, qualified) = match path {
Expand All @@ -69,10 +75,10 @@ fn render(
let snippet_cap = ctx.snippet_cap();

let mut rendered = match kind {
StructKind::Tuple if !has_call_parens => {
StructKind::Tuple if should_add_parens => {
render_tuple_lit(db, snippet_cap, &fields, &qualified_name)
}
StructKind::Record if !has_call_parens => {
StructKind::Record if should_add_parens => {
render_record_lit(db, snippet_cap, &fields, &qualified_name)
}
_ => RenderedLiteral { literal: qualified_name.clone(), detail: qualified_name.clone() },
Expand All @@ -82,6 +88,11 @@ fn render(
rendered.literal.push_str("$0");
}

// only show name in label if not adding parens
if !should_add_parens {
kind = StructKind::Unit;
}

let mut item = CompletionItem::new(
CompletionItemKind::SymbolKind(thing.symbol_kind()),
ctx.source_range(),
Expand Down
4 changes: 2 additions & 2 deletions crates/ide-completion/src/tests/expression.rs
Original file line number Diff line number Diff line change
Expand Up @@ -600,8 +600,8 @@ fn func() {
}
"#,
expect![[r#"
fn variant fn() -> Enum
ev Variant(…) Variant
fn variant fn() -> Enum
ev Variant Variant
"#]],
);
}
Expand Down
4 changes: 2 additions & 2 deletions crates/ide-completion/src/tests/pattern.rs
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ fn foo() {
}
"#,
expect![[r#"
ev TupleVariant(…) TupleVariant
ev TupleVariant TupleVariant
"#]],
);
check_empty(
Expand All @@ -450,7 +450,7 @@ fn foo() {
}
"#,
expect![[r#"
ev RecordVariant {…} RecordVariant
ev RecordVariant RecordVariant
"#]],
);
}
Expand Down
22 changes: 22 additions & 0 deletions crates/ide-completion/src/tests/use_tree.rs
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,28 @@ impl Foo {
);
}

#[test]
fn enum_no_parens_in_qualified_use_tree() {
cov_mark::check!(no_parens_in_use_item);
cov_mark::check!(enum_plain_qualified_use_tree);
check(
r#"
use Foo::$0
enum Foo {
UnitVariant,
TupleVariant(),
RecordVariant {},
}
"#,
expect![[r#"
ev RecordVariant RecordVariant
ev TupleVariant TupleVariant
ev UnitVariant UnitVariant
"#]],
);
}

#[test]
fn self_qualified_use_tree() {
check(
Expand Down

0 comments on commit 0bbead9

Please sign in to comment.