From b150965ed7994c679711bc807de301a12f5c7944 Mon Sep 17 00:00:00 2001 From: Mikhail Modin Date: Sun, 15 Mar 2020 21:23:18 +0000 Subject: Swtches to rust SSR query check --- crates/ra_syntax/src/ast/make.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'crates/ra_syntax/src/ast') diff --git a/crates/ra_syntax/src/ast/make.rs b/crates/ra_syntax/src/ast/make.rs index ae8829807..9f6f1cc53 100644 --- a/crates/ra_syntax/src/ast/make.rs +++ b/crates/ra_syntax/src/ast/make.rs @@ -112,10 +112,14 @@ pub fn expr_prefix(op: SyntaxKind, expr: ast::Expr) -> ast::Expr { let token = token(op); expr_from_text(&format!("{}{}", token, expr.syntax())) } -pub fn expr_from_text(text: &str) -> ast::Expr { +fn expr_from_text(text: &str) -> ast::Expr { ast_from_text(&format!("const C: () = {};", text)) } +pub fn try_expr_from_text(text: &str) -> Option { + try_ast_from_text(&format!("const C: () = {};", text)) +} + pub fn bind_pat(name: ast::Name) -> ast::BindPat { return from_text(name.text()); @@ -239,6 +243,16 @@ fn ast_from_text(text: &str) -> N { node } +fn try_ast_from_text(text: &str) -> Option { + let parse = SourceFile::parse(text); + let node = parse.tree().syntax().descendants().find_map(N::cast)?; + let node = node.syntax().clone(); + let node = unroot(node); + let node = N::cast(node).unwrap(); + assert_eq!(node.syntax().text_range().start(), 0.into()); + Some(node) +} + fn unroot(n: SyntaxNode) -> SyntaxNode { SyntaxNode::new_root(n.green().clone()) } -- cgit v1.2.3