mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-26 20:09:19 +00:00
internal: Assume condition/iterable is missing if there is only a BlockExpr
This commit is contained in:
parent
b4d652aa40
commit
bf893d59b5
3 changed files with 40 additions and 4 deletions
|
@ -806,6 +806,19 @@ impl ast::GenericParamList {
|
|||
}
|
||||
}
|
||||
|
||||
impl ast::ForExpr {
|
||||
pub fn iterable(&self) -> Option<ast::Expr> {
|
||||
// If the iterable is a BlockExpr, check if the body is missing.
|
||||
// If it is assume the iterable is the expression that is missing instead.
|
||||
let mut exprs = support::children(self.syntax());
|
||||
let first = exprs.next();
|
||||
match first {
|
||||
Some(ast::Expr::BlockExpr(_)) => exprs.next().and(first),
|
||||
first => first,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ast::HasLoopBody for ast::ForExpr {
|
||||
fn loop_body(&self) -> Option<ast::BlockExpr> {
|
||||
let mut exprs = support::children(self.syntax());
|
||||
|
@ -815,6 +828,19 @@ impl ast::HasLoopBody for ast::ForExpr {
|
|||
}
|
||||
}
|
||||
|
||||
impl ast::WhileExpr {
|
||||
pub fn condition(&self) -> Option<ast::Expr> {
|
||||
// If the condition is a BlockExpr, check if the body is missing.
|
||||
// If it is assume the condition is the expression that is missing instead.
|
||||
let mut exprs = support::children(self.syntax());
|
||||
let first = exprs.next();
|
||||
match first {
|
||||
Some(ast::Expr::BlockExpr(_)) => exprs.next().and(first),
|
||||
first => first,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ast::HasLoopBody for ast::WhileExpr {
|
||||
fn loop_body(&self) -> Option<ast::BlockExpr> {
|
||||
let mut exprs = support::children(self.syntax());
|
||||
|
@ -835,3 +861,15 @@ impl From<ast::Adt> for ast::Item {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ast::IfExpr {
|
||||
pub fn condition(&self) -> Option<ast::Expr> {
|
||||
support::child(&self.syntax)
|
||||
}
|
||||
}
|
||||
|
||||
impl ast::MatchGuard {
|
||||
pub fn condition(&self) -> Option<ast::Expr> {
|
||||
support::child(&self.syntax)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue