]> git.lizzy.rs Git - rust.git/commitdiff
Don't use fake text range in original node search as is in completions
authorLukas Wirth <lukastw97@gmail.com>
Fri, 27 Aug 2021 13:10:42 +0000 (15:10 +0200)
committerLukas Wirth <lukastw97@gmail.com>
Fri, 27 Aug 2021 13:10:42 +0000 (15:10 +0200)
crates/ide_completion/src/patterns.rs
crates/ide_completion/src/tests.rs

index bcbd63b43adc261b455c83f2efd5c174fa53c5ff..6ceef0225a8c97596004801a7bc6512bed4eb3b3 100644 (file)
@@ -285,6 +285,7 @@ fn maximize_name_ref(name_ref: &ast::NameRef) -> SyntaxNode {
 }
 
 fn find_node_with_range<N: AstNode>(syntax: &SyntaxNode, range: TextRange) -> Option<N> {
+    let range = syntax.text_range().intersect(range)?;
     syntax.covering_element(range).ancestors().find_map(N::cast)
 }
 
index b8d60dfd2c3dbc398b6c5636c4b5007be77eb244..5ef6829a05cc1dab8a4f026857a2a4883227013d 100644 (file)
@@ -75,13 +75,13 @@ union Union { field: i32 }
     },
 };
 
-pub(crate) fn completion_list(code: &str) -> String {
-    completion_list_with_config(TEST_CONFIG, code)
+pub(crate) fn completion_list(ra_fixture: &str) -> String {
+    completion_list_with_config(TEST_CONFIG, ra_fixture)
 }
 
-fn completion_list_with_config(config: CompletionConfig, code: &str) -> String {
+fn completion_list_with_config(config: CompletionConfig, ra_fixture: &str) -> String {
     // filter out all but one builtintype completion for smaller test outputs
-    let items = get_all_items(config, code);
+    let items = get_all_items(config, ra_fixture);
     let mut bt_seen = false;
     let items = items
         .into_iter()
@@ -227,3 +227,26 @@ fn test_no_completions_required() {
     cov_mark::check!(no_completion_required);
     check_no_completion(r#"fn foo() { for i i$0 }"#);
 }
+
+#[test]
+fn regression_10042() {
+    completion_list(
+        r#"
+macro_rules! preset {
+    ($($x:ident)&&*) => {
+        {
+            let mut v = Vec::new();
+            $(
+                v.push($x.into());
+            )*
+            v
+        }
+    };
+}
+
+fn foo() {
+    preset!(foo$0);
+}
+"#,
+    );
+}