1 //! Routines the parser uses to classify AST nodes 2 3 // Predicates on exprs and stmts that the pretty-printer and parser use 4 5 use crate::ast; 6 7 /// Does this expression require a semicolon to be treated 8 /// as a statement? The negation of this: 'can this expression 9 /// be used as a statement without a semicolon' -- is used 10 /// as an early-bail-out in the parser so that, for instance, 11 /// if true {...} else {...} 12 /// |x| 5 13 /// isn't parsed as (if true {...} else {...} | x) | 5 expr_requires_semi_to_be_stmt(e: &ast::Expr) -> bool14pub fn expr_requires_semi_to_be_stmt(e: &ast::Expr) -> bool { 15 !matches!( 16 e.kind, 17 ast::ExprKind::If(..) 18 | ast::ExprKind::Match(..) 19 | ast::ExprKind::Block(..) 20 | ast::ExprKind::While(..) 21 | ast::ExprKind::Loop(..) 22 | ast::ExprKind::ForLoop(..) 23 | ast::ExprKind::TryBlock(..) 24 ) 25 } 26