mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 04:53:34 +00:00
Merge #10055
10055: fix: Don't use fake text range in original node search as is in completions r=Veykril a=Veykril Fixes https://github.com/rust-analyzer/rust-analyzer/issues/10042 bors r+ Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
This commit is contained in:
commit
12a36db71c
2 changed files with 28 additions and 4 deletions
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -75,13 +75,13 @@ pub(crate) const TEST_CONFIG: CompletionConfig = CompletionConfig {
|
|||
},
|
||||
};
|
||||
|
||||
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);
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue