fix(auto-import): Prefer imports of matching types for argument lists

This commit is contained in:
Lukas Wirth 2025-04-08 08:59:57 +02:00
parent 588948f267
commit 7255ef1375
9 changed files with 291 additions and 109 deletions

View file

@ -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()?,