diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2025-04-08 08:59:57 +0200 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2025-04-08 09:21:32 +0200 |
| commit | 112ca25a35c3eaef614749194b96b279ea6a6c70 (patch) | |
| tree | 56b59802decdd7211a94305bbd32625b847c7780 /src/tools/rust-analyzer/crates/syntax | |
| parent | fb0dd6555dbcfe88b318e95b8b11ed15a67088ce (diff) | |
fix(auto-import): Prefer imports of matching types for argument lists
Diffstat (limited to 'src/tools/rust-analyzer/crates/syntax')
| -rw-r--r-- | src/tools/rust-analyzer/crates/syntax/src/algo.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/tools/rust-analyzer/crates/syntax/src/algo.rs b/src/tools/rust-analyzer/crates/syntax/src/algo.rs index b618943dba1..3ab9c902625 100644 --- a/src/tools/rust-analyzer/crates/syntax/src/algo.rs +++ b/src/tools/rust-analyzer/crates/syntax/src/algo.rs @@ -116,3 +116,19 @@ pub fn neighbor<T: AstNode>(me: &T, direction: Direction) -> Option<T> { pub fn has_errors(node: &SyntaxNode) -> bool { node.children().any(|it| it.kind() == SyntaxKind::ERROR) } + +pub 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 +} |
