mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-29 06:23:25 +00:00
fix: avoid adding enum parens in use
This commit is contained in:
parent
995a17fbd9
commit
11693dad88
4 changed files with 43 additions and 10 deletions
|
@ -4,7 +4,7 @@ use hir::{db::HirDatabase, Documentation, HasAttrs, StructKind};
|
||||||
use ide_db::SymbolKind;
|
use ide_db::SymbolKind;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
context::{CompletionContext, PathCompletionCtx},
|
context::{CompletionContext, PathCompletionCtx, PathKind},
|
||||||
item::{Builder, CompletionItem},
|
item::{Builder, CompletionItem},
|
||||||
render::{
|
render::{
|
||||||
compute_ref_match, compute_type_match,
|
compute_ref_match, compute_type_match,
|
||||||
|
@ -50,9 +50,15 @@ fn render(
|
||||||
path: Option<hir::ModPath>,
|
path: Option<hir::ModPath>,
|
||||||
) -> Option<Builder> {
|
) -> Option<Builder> {
|
||||||
let db = completion.db;
|
let db = completion.db;
|
||||||
let kind = thing.kind(db);
|
let mut kind = thing.kind(db);
|
||||||
let has_call_parens =
|
let should_add_parens = match completion.path_context() {
|
||||||
matches!(completion.path_context(), Some(PathCompletionCtx { has_call_parens: true, .. }));
|
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 fields = thing.fields(completion)?;
|
||||||
let (qualified_name, short_qualified_name, qualified) = match path {
|
let (qualified_name, short_qualified_name, qualified) = match path {
|
||||||
|
@ -69,10 +75,10 @@ fn render(
|
||||||
let snippet_cap = ctx.snippet_cap();
|
let snippet_cap = ctx.snippet_cap();
|
||||||
|
|
||||||
let mut rendered = match kind {
|
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)
|
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)
|
render_record_lit(db, snippet_cap, &fields, &qualified_name)
|
||||||
}
|
}
|
||||||
_ => RenderedLiteral { literal: qualified_name.clone(), detail: qualified_name.clone() },
|
_ => RenderedLiteral { literal: qualified_name.clone(), detail: qualified_name.clone() },
|
||||||
|
@ -82,6 +88,11 @@ fn render(
|
||||||
rendered.literal.push_str("$0");
|
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(
|
let mut item = CompletionItem::new(
|
||||||
CompletionItemKind::SymbolKind(thing.symbol_kind()),
|
CompletionItemKind::SymbolKind(thing.symbol_kind()),
|
||||||
ctx.source_range(),
|
ctx.source_range(),
|
||||||
|
|
|
@ -601,7 +601,7 @@ fn func() {
|
||||||
"#,
|
"#,
|
||||||
expect![[r#"
|
expect![[r#"
|
||||||
fn variant fn() -> Enum
|
fn variant fn() -> Enum
|
||||||
ev Variant(…) Variant
|
ev Variant Variant
|
||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -435,7 +435,7 @@ fn foo() {
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
expect![[r#"
|
expect![[r#"
|
||||||
ev TupleVariant(…) TupleVariant
|
ev TupleVariant TupleVariant
|
||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
check_empty(
|
check_empty(
|
||||||
|
@ -450,7 +450,7 @@ fn foo() {
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
expect![[r#"
|
expect![[r#"
|
||||||
ev RecordVariant {…} RecordVariant
|
ev RecordVariant RecordVariant
|
||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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]
|
#[test]
|
||||||
fn self_qualified_use_tree() {
|
fn self_qualified_use_tree() {
|
||||||
check(
|
check(
|
||||||
|
|
Loading…
Reference in a new issue