Auto merge of #12901 - Veykril:completion-trait-expr, r=Veykril

fix: Don't complete marker traits in expression position

cc https://github.com/rust-lang/rust-analyzer/issues/12196
This commit is contained in:
bors 2022-07-28 15:51:30 +00:00
commit 32e640e2ba
4 changed files with 14 additions and 9 deletions

View file

@ -202,10 +202,21 @@ pub(crate) fn complete_expr_path(
}
}
}
ctx.process_all_names(&mut |name, def| {
if scope_def_applicable(def) {
acc.add_path_resolution(ctx, path_ctx, name, def);
ctx.process_all_names(&mut |name, def| match def {
ScopeDef::ModuleDef(hir::ModuleDef::Trait(t)) => {
let assocs = t.items_with_supertraits(ctx.db);
match &*assocs {
// traits with no assoc items are unusable as expressions since
// there is no associated item path that can be constructed with them
[] => (),
// FIXME: Render the assoc item with the trait qualified
&[_item] => acc.add_path_resolution(ctx, path_ctx, name, def),
// FIXME: Append `::` to the thing here, since a trait on its own won't work
[..] => acc.add_path_resolution(ctx, path_ctx, name, def),
}
}
_ if scope_def_applicable(def) => acc.add_path_resolution(ctx, path_ctx, name, def),
_ => (),
});
if is_func_update.is_none() {

View file

@ -1347,7 +1347,6 @@ fn main() {
fn main() []
fn foo() []
md core []
tt Sized []
"#]],
)
}
@ -1394,7 +1393,6 @@ fn main() {
fn main() []
fn foo() []
md core []
tt Sized []
"#]],
)
}
@ -1492,7 +1490,6 @@ fn main() {
fn &bar() [type]
fn foo() []
md core []
tt Sized []
"#]],
)
}

View file

@ -44,7 +44,6 @@ fn baz() {
st Record
st Tuple
st Unit
tt Trait
un Union
ev TupleV() TupleV(u32)
bt u32
@ -137,7 +136,6 @@ impl Unit {
st Record
st Tuple
st Unit
tt Trait
tp TypeParam
un Union
ev TupleV() TupleV(u32)

View file

@ -167,7 +167,6 @@ fn main() {
st Foo
st Foo {} Foo { foo1: u32, foo2: u32 }
tt Default
tt Sized
bt u32
kw crate::
kw self::