diff options
Diffstat (limited to 'src/tools/rust-analyzer/crates/syntax/src/hacks.rs')
-rw-r--r-- | src/tools/rust-analyzer/crates/syntax/src/hacks.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/tools/rust-analyzer/crates/syntax/src/hacks.rs b/src/tools/rust-analyzer/crates/syntax/src/hacks.rs new file mode 100644 index 000000000..a047f61fa --- /dev/null +++ b/src/tools/rust-analyzer/crates/syntax/src/hacks.rs @@ -0,0 +1,15 @@ +//! Things which exist to solve practial issues, but which shouldn't exist. +//! +//! Please avoid adding new usages of the functions in this module + +use crate::{ast, AstNode}; + +pub fn parse_expr_from_str(s: &str) -> Option<ast::Expr> { + let s = s.trim(); + let file = ast::SourceFile::parse(&format!("const _: () = {};", s)); + let expr = file.syntax_node().descendants().find_map(ast::Expr::cast)?; + if expr.syntax().text() != s { + return None; + } + Some(expr) +} |