mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
Correct completions in items tests
This commit is contained in:
parent
a9a77671f2
commit
2a48b53220
@ -69,6 +69,9 @@ pub(crate) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte
|
|||||||
|
|
||||||
if ctx.has_impl_or_trait_prev_sibling() {
|
if ctx.has_impl_or_trait_prev_sibling() {
|
||||||
add_keyword("where", "where ");
|
add_keyword("where", "where ");
|
||||||
|
if ctx.has_impl_prev_sibling() {
|
||||||
|
add_keyword("for", "for ");
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ctx.previous_token_is(T![unsafe]) {
|
if ctx.previous_token_is(T![unsafe]) {
|
||||||
|
@ -36,7 +36,11 @@ pub(crate) fn complete_expr_snippet(acc: &mut Completions, ctx: &CompletionConte
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn complete_item_snippet(acc: &mut Completions, ctx: &CompletionContext) {
|
pub(crate) fn complete_item_snippet(acc: &mut Completions, ctx: &CompletionContext) {
|
||||||
if !ctx.expects_item() || ctx.previous_token_is(T![unsafe]) || ctx.path_qual().is_some() {
|
if !ctx.expects_item()
|
||||||
|
|| ctx.previous_token_is(T![unsafe])
|
||||||
|
|| ctx.path_qual().is_some()
|
||||||
|
|| ctx.has_impl_or_trait_prev_sibling()
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ctx.has_visibility_prev_sibling() {
|
if ctx.has_visibility_prev_sibling() {
|
||||||
|
@ -6,7 +6,7 @@ use syntax::{ast, AstNode};
|
|||||||
use crate::{patterns::ImmediateLocation, CompletionContext, Completions};
|
use crate::{patterns::ImmediateLocation, CompletionContext, Completions};
|
||||||
|
|
||||||
pub(crate) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionContext) {
|
pub(crate) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionContext) {
|
||||||
if ctx.is_path_disallowed() || !ctx.is_trivial_path() {
|
if ctx.is_path_disallowed() || !ctx.is_trivial_path() || ctx.has_impl_or_trait_prev_sibling() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,6 +68,9 @@ pub(crate) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionC
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let add_resolution = match res {
|
let add_resolution = match res {
|
||||||
|
ScopeDef::ImplSelfType(_) => {
|
||||||
|
!ctx.previous_token_is(syntax::T![impl]) && !ctx.previous_token_is(syntax::T![for])
|
||||||
|
}
|
||||||
// Don't suggest attribute macros and derives.
|
// Don't suggest attribute macros and derives.
|
||||||
ScopeDef::MacroDef(mac) => mac.is_fn_like(),
|
ScopeDef::MacroDef(mac) => mac.is_fn_like(),
|
||||||
// no values in type places
|
// no values in type places
|
||||||
|
@ -305,6 +305,10 @@ impl<'a> CompletionContext<'a> {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn has_impl_prev_sibling(&self) -> bool {
|
||||||
|
matches!(self.prev_sibling, Some(ImmediatePrevSibling::ImplDefType))
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn has_visibility_prev_sibling(&self) -> bool {
|
pub(crate) fn has_visibility_prev_sibling(&self) -> bool {
|
||||||
matches!(self.prev_sibling, Some(ImmediatePrevSibling::Visibility))
|
matches!(self.prev_sibling, Some(ImmediatePrevSibling::Visibility))
|
||||||
}
|
}
|
||||||
|
@ -23,13 +23,45 @@ trait Trait {}
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn target_type_or_trait_in_impl_block() {
|
fn target_type_or_trait_in_impl_block() {
|
||||||
// FIXME: should not complete `Self`
|
|
||||||
check(
|
check(
|
||||||
r#"
|
r#"
|
||||||
impl My$0
|
impl Tra$0
|
||||||
|
"#,
|
||||||
|
expect![[r##"
|
||||||
|
tt Trait
|
||||||
|
en Enum
|
||||||
|
st Struct
|
||||||
|
md bar
|
||||||
|
ma foo!(…) #[macro_export] macro_rules! foo
|
||||||
|
ma foo!(…) #[macro_export] macro_rules! foo
|
||||||
|
bt u32
|
||||||
|
bt bool
|
||||||
|
bt u8
|
||||||
|
bt isize
|
||||||
|
bt u16
|
||||||
|
bt u64
|
||||||
|
bt u128
|
||||||
|
bt f32
|
||||||
|
bt i128
|
||||||
|
bt i16
|
||||||
|
bt str
|
||||||
|
bt i64
|
||||||
|
bt char
|
||||||
|
bt f64
|
||||||
|
bt i32
|
||||||
|
bt i8
|
||||||
|
bt usize
|
||||||
|
"##]],
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn target_type_in_trait_impl_block() {
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
impl Trait for Str$0
|
||||||
"#,
|
"#,
|
||||||
expect![[r##"
|
expect![[r##"
|
||||||
sp Self
|
|
||||||
tt Trait
|
tt Trait
|
||||||
en Enum
|
en Enum
|
||||||
st Struct
|
st Struct
|
||||||
@ -59,35 +91,22 @@ impl My$0
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn after_trait_name_in_trait_def() {
|
fn after_trait_name_in_trait_def() {
|
||||||
// FIXME: should only complete `where`
|
|
||||||
check(
|
check(
|
||||||
r"trait A $0",
|
r"trait A $0",
|
||||||
expect![[r##"
|
expect![[r#"
|
||||||
kw where
|
kw where
|
||||||
sn tmod (Test module)
|
"#]],
|
||||||
sn tfn (Test function)
|
|
||||||
sn macro_rules
|
|
||||||
md bar
|
|
||||||
ma foo!(…) #[macro_export] macro_rules! foo
|
|
||||||
ma foo!(…) #[macro_export] macro_rules! foo
|
|
||||||
"##]],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn after_trait_or_target_name_in_impl() {
|
fn after_trait_or_target_name_in_impl() {
|
||||||
// FIXME: should only complete `for` and `where`
|
|
||||||
check(
|
check(
|
||||||
r"impl A $0",
|
r"impl Trait $0",
|
||||||
expect![[r##"
|
expect![[r#"
|
||||||
kw where
|
kw where
|
||||||
sn tmod (Test module)
|
kw for
|
||||||
sn tfn (Test function)
|
"#]],
|
||||||
sn macro_rules
|
|
||||||
md bar
|
|
||||||
ma foo!(…) #[macro_export] macro_rules! foo
|
|
||||||
ma foo!(…) #[macro_export] macro_rules! foo
|
|
||||||
"##]],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user