about summary refs log tree commit diff
path: root/src/tools/rust-analyzer/crates/syntax
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2025-04-08 08:59:57 +0200
committerLukas Wirth <lukastw97@gmail.com>2025-04-08 09:21:32 +0200
commit112ca25a35c3eaef614749194b96b279ea6a6c70 (patch)
tree56b59802decdd7211a94305bbd32625b847c7780 /src/tools/rust-analyzer/crates/syntax
parentfb0dd6555dbcfe88b318e95b8b11ed15a67088ce (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.rs16
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
+}