Unnamed repository; edit this file 'description' to name the repository.
hacky_block_expr_with_comments
Jeroen Vannevel 2022-01-22
parent 5d35e58 · commit 96ab4c6
-rw-r--r--crates/ide_assists/src/handlers/extract_function.rs4
-rw-r--r--crates/syntax/src/ast/make.rs17
2 files changed, 10 insertions, 11 deletions
diff --git a/crates/ide_assists/src/handlers/extract_function.rs b/crates/ide_assists/src/handlers/extract_function.rs
index 06195624ed..3160bd5293 100644
--- a/crates/ide_assists/src/handlers/extract_function.rs
+++ b/crates/ide_assists/src/handlers/extract_function.rs
@@ -1524,9 +1524,7 @@ fn make_body(
println!("element: {:?}", element);
}
- make::block_expr_full(elements, tail_expr)
-
- // make::block_expr(parent.statements().into_iter(), tail_expr)
+ make::hacky_block_expr_with_comments(elements, tail_expr)
}
};
diff --git a/crates/syntax/src/ast/make.rs b/crates/syntax/src/ast/make.rs
index 2d1e9ac05d..9498defb3f 100644
--- a/crates/syntax/src/ast/make.rs
+++ b/crates/syntax/src/ast/make.rs
@@ -329,17 +329,18 @@ pub fn block_expr(
ast_from_text(&format!("fn f() {}", buf))
}
-pub fn block_expr_full(
- stmts: impl IntoIterator<Item = crate::SyntaxElement>,
+/// Ideally this function wouldn't exist since it involves manual indenting.
+/// It differs from `make::block_expr` by also supporting comments.
+///
+/// FIXME: replace usages of this with the mutable syntax tree API
+pub fn hacky_block_expr_with_comments(
+ elements: impl IntoIterator<Item = crate::SyntaxElement>,
tail_expr: Option<ast::Expr>,
) -> ast::BlockExpr {
let mut buf = "{\n".to_string();
- for stmt in stmts.into_iter() {
- match stmt {
- rowan::NodeOrToken::Node(n) => {
- println!("Node: {:?}", n.text());
- format_to!(buf, " {}\n", n)
- }
+ for node_or_token in elements.into_iter() {
+ match node_or_token {
+ rowan::NodeOrToken::Node(n) => format_to!(buf, " {}\n", n),
rowan::NodeOrToken::Token(t) if t.kind() == SyntaxKind::COMMENT => {
format_to!(buf, " {}\n", t)
}