//! Things which exist to solve practical issues, but which shouldn't exist. //! //! Please avoid adding new usages of the functions in this module use parser::Edition; use crate::{ast, AstNode}; pub fn parse_expr_from_str(s: &str, edition: Edition) -> Option { let s = s.trim(); let file = ast::SourceFile::parse( // Need a newline because the text may contain line comments. &format!("const _: () = ({s}\n);"), edition, ); let expr = file.syntax_node().descendants().find_map(ast::ParenExpr::cast)?; // Can't check the text because the original text may contain whitespace and comments. // Wrap in parentheses to better allow for verification. Of course, the real fix is // to get rid of this hack. expr.expr() }