Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_db/src/syntax_helpers/node_ext.rs')
| -rw-r--r-- | crates/ide_db/src/syntax_helpers/node_ext.rs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/crates/ide_db/src/syntax_helpers/node_ext.rs b/crates/ide_db/src/syntax_helpers/node_ext.rs index c0f0529966..3d72045838 100644 --- a/crates/ide_db/src/syntax_helpers/node_ext.rs +++ b/crates/ide_db/src/syntax_helpers/node_ext.rs @@ -15,6 +15,13 @@ pub fn expr_as_name_ref(expr: &ast::Expr) -> Option<ast::NameRef> { } } +pub fn full_path_of_name_ref(name_ref: &ast::NameRef) -> Option<ast::Path> { + let mut ancestors = name_ref.syntax().ancestors(); + let _ = ancestors.next()?; // skip self + let _ = ancestors.next().filter(|it| ast::PathSegment::can_cast(it.kind()))?; // skip self + ancestors.take_while(|it| ast::Path::can_cast(it.kind())).last().and_then(ast::Path::cast) +} + pub fn block_as_lone_tail(block: &ast::BlockExpr) -> Option<ast::Expr> { block.statements().next().is_none().then(|| block.tail_expr()).flatten() } |