Remove false positive attr compleitons

This commit is contained in:
Aleksey Kladov 2020-05-04 16:48:50 +02:00
parent 8f4478390e
commit b211c5814e
2 changed files with 40 additions and 4 deletions

View file

@ -2,16 +2,21 @@
use hir::{Adt, HasVisibility, PathResolution, ScopeDef}; use hir::{Adt, HasVisibility, PathResolution, ScopeDef};
use ra_syntax::AstNode; use ra_syntax::AstNode;
use rustc_hash::FxHashSet;
use test_utils::tested_by; use test_utils::tested_by;
use crate::completion::{CompletionContext, Completions}; use crate::completion::{CompletionContext, Completions};
use rustc_hash::FxHashSet;
pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionContext) { pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionContext) {
let path = match &ctx.path_prefix { let path = match &ctx.path_prefix {
Some(path) => path.clone(), Some(path) => path.clone(),
_ => return, None => return,
}; };
if ctx.attribute_under_caret.is_some() {
return;
}
let scope = ctx.scope(); let scope = ctx.scope();
let context_module = scope.module(); let context_module = scope.module();
@ -1325,4 +1330,18 @@ mod tests {
"### "###
); );
} }
#[test]
fn dont_complete_attr() {
assert_debug_snapshot!(
do_reference_completion(
r"
mod foo { pub struct Foo; }
#[foo::<|>]
fn f() {}
"
),
@r###"[]"###
)
}
} }

View file

@ -8,9 +8,12 @@ use hir::{Adt, ModuleDef, Type};
use ra_syntax::AstNode; use ra_syntax::AstNode;
pub(super) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionContext) { pub(super) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionContext) {
if (!ctx.is_trivial_path && !ctx.is_pat_binding_or_const) if !(ctx.is_trivial_path || ctx.is_pat_binding_or_const) {
|| ctx.record_lit_syntax.is_some() return;
}
if ctx.record_lit_syntax.is_some()
|| ctx.record_pat_syntax.is_some() || ctx.record_pat_syntax.is_some()
|| ctx.attribute_under_caret.is_some()
{ {
return; return;
} }
@ -1369,4 +1372,18 @@ mod tests {
"### "###
) )
} }
#[test]
fn dont_complete_attr() {
assert_debug_snapshot!(
do_reference_completion(
r"
struct Foo;
#[<|>]
fn f() {}
"
),
@r###"[]"###
)
}
} }