aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/ast_editor.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_assists/src/ast_editor.rs')
-rw-r--r--crates/ra_assists/src/ast_editor.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/crates/ra_assists/src/ast_editor.rs b/crates/ra_assists/src/ast_editor.rs
index 7ef58aa8e..13ee82879 100644
--- a/crates/ra_assists/src/ast_editor.rs
+++ b/crates/ra_assists/src/ast_editor.rs
@@ -137,9 +137,32 @@ pub struct AstBuilder<N: AstNode> {
137} 137}
138 138
139impl AstBuilder<ast::NamedField> { 139impl AstBuilder<ast::NamedField> {
140 pub fn from_text(text: &str) -> TreeArc<ast::NamedField> { 140 fn from_text(text: &str) -> TreeArc<ast::NamedField> {
141 ast_node_from_file_text(&format!("fn f() {{ S {{ {}, }} }}", text)) 141 ast_node_from_file_text(&format!("fn f() {{ S {{ {}, }} }}", text))
142 } 142 }
143
144 pub fn from_pieces(name: &ast::NameRef, expr: Option<&ast::Expr>) -> TreeArc<ast::NamedField> {
145 match expr {
146 Some(expr) => Self::from_text(&format!("{}: {}", name.syntax(), expr.syntax())),
147 None => Self::from_text(&name.syntax().to_string()),
148 }
149 }
150}
151
152impl AstBuilder<ast::Expr> {
153 fn from_text(text: &str) -> TreeArc<ast::Expr> {
154 ast_node_from_file_text(&format!("fn f() {{ {}; }}", text))
155 }
156
157 pub fn unit() -> TreeArc<ast::Expr> {
158 Self::from_text("()")
159 }
160}
161
162impl AstBuilder<ast::NameRef> {
163 pub fn new(text: &str) -> TreeArc<ast::NameRef> {
164 ast_node_from_file_text(&format!("fn f() {{ {}; }}", text))
165 }
143} 166}
144 167
145fn ast_node_from_file_text<N: AstNode>(text: &str) -> TreeArc<N> { 168fn ast_node_from_file_text<N: AstNode>(text: &str) -> TreeArc<N> {