mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-11-18 11:20:36 +00:00
fix(auto-import): Prefer imports of matching types for argument lists
This commit is contained in:
parent
588948f267
commit
7255ef1375
9 changed files with 291 additions and 109 deletions
|
|
@ -7,7 +7,10 @@ use itertools::Either;
|
|||
use syntax::{
|
||||
AstNode, AstToken, Direction, NodeOrToken, SyntaxElement, SyntaxKind, SyntaxNode, SyntaxToken,
|
||||
T, TextRange, TextSize,
|
||||
algo::{self, ancestors_at_offset, find_node_at_offset, non_trivia_sibling},
|
||||
algo::{
|
||||
self, ancestors_at_offset, find_node_at_offset, non_trivia_sibling,
|
||||
previous_non_trivia_token,
|
||||
},
|
||||
ast::{
|
||||
self, AttrKind, HasArgList, HasGenericArgs, HasGenericParams, HasLoopBody, HasName,
|
||||
NameOrNameRef,
|
||||
|
|
@ -1813,22 +1816,6 @@ fn is_in_block(node: &SyntaxNode) -> bool {
|
|||
.unwrap_or(false)
|
||||
}
|
||||
|
||||
fn previous_non_trivia_token(e: impl Into<SyntaxElement>) -> Option<SyntaxToken> {
|
||||
let mut token = match e.into() {
|
||||
SyntaxElement::Node(n) => n.first_token()?,
|
||||
SyntaxElement::Token(t) => t,
|
||||
}
|
||||
.prev_token();
|
||||
while let Some(inner) = token {
|
||||
if !inner.kind().is_trivia() {
|
||||
return Some(inner);
|
||||
} else {
|
||||
token = inner.prev_token();
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
fn next_non_trivia_token(e: impl Into<SyntaxElement>) -> Option<SyntaxToken> {
|
||||
let mut token = match e.into() {
|
||||
SyntaxElement::Node(n) => n.last_token()?,
|
||||
|
|
|
|||
|
|
@ -371,6 +371,17 @@ fn foo() {
|
|||
"#,
|
||||
expect![[r#"ty: Foo, name: ?"#]],
|
||||
);
|
||||
check_expected_type_and_name(
|
||||
r#"
|
||||
struct Foo { field: u32 }
|
||||
fn foo() {
|
||||
Foo {
|
||||
..self::$0
|
||||
}
|
||||
}
|
||||
"#,
|
||||
expect!["ty: ?, name: ?"],
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue