]> git.lizzy.rs Git - rust.git/commitdiff
Remove false positive attr compleitons
authorAleksey Kladov <aleksey.kladov@gmail.com>
Mon, 4 May 2020 14:48:50 +0000 (16:48 +0200)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Mon, 4 May 2020 14:48:50 +0000 (16:48 +0200)
crates/ra_ide/src/completion/complete_qualified_path.rs
crates/ra_ide/src/completion/complete_unqualified_path.rs

index aa56a5cd870311d45deaef28088552c1977b7378..d9ea92ef8df008ac502e6fa6343d0fb3e8157ea8 100644 (file)
@@ -2,16 +2,21 @@
 
 use hir::{Adt, HasVisibility, PathResolution, ScopeDef};
 use ra_syntax::AstNode;
+use rustc_hash::FxHashSet;
 use test_utils::tested_by;
 
 use crate::completion::{CompletionContext, Completions};
-use rustc_hash::FxHashSet;
 
 pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionContext) {
     let path = match &ctx.path_prefix {
         Some(path) => path.clone(),
-        _ => return,
+        None => return,
     };
+
+    if ctx.attribute_under_caret.is_some() {
+        return;
+    }
+
     let scope = ctx.scope();
     let context_module = scope.module();
 
@@ -1325,4 +1330,18 @@ fn foo() {
         "###
         );
     }
+
+    #[test]
+    fn dont_complete_attr() {
+        assert_debug_snapshot!(
+            do_reference_completion(
+                r"
+                mod foo { pub struct Foo; }
+                #[foo::<|>]
+                fn f() {}
+                "
+            ),
+            @r###"[]"###
+        )
+    }
 }
index a6a5568de0bf55dffcdb591a6ae352a54ed38efa..bd40af1cb2ed2bb81922596394f926bc366c7ac2 100644 (file)
@@ -8,9 +8,12 @@
 use ra_syntax::AstNode;
 
 pub(super) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionContext) {
-    if (!ctx.is_trivial_path && !ctx.is_pat_binding_or_const)
-        || ctx.record_lit_syntax.is_some()
+    if !(ctx.is_trivial_path || ctx.is_pat_binding_or_const) {
+        return;
+    }
+    if ctx.record_lit_syntax.is_some()
         || ctx.record_pat_syntax.is_some()
+        || ctx.attribute_under_caret.is_some()
     {
         return;
     }
@@ -1369,4 +1372,18 @@ fn f() -> m::E {
         "###
         )
     }
+
+    #[test]
+    fn dont_complete_attr() {
+        assert_debug_snapshot!(
+            do_reference_completion(
+                r"
+                struct Foo;
+                #[<|>]
+                fn f() {}
+                "
+            ),
+            @r###"[]"###
+        )
+    }
 }