aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax/src/ast/edit.rs
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2019-10-22 18:10:17 +0100
committerGitHub <[email protected]>2019-10-22 18:10:17 +0100
commitba95de936df92b3901163249aed4e1bd769021df (patch)
treed41e817b741475cac2783bf8b6466acc54308472 /crates/ra_syntax/src/ast/edit.rs
parent2dffae6f35ce4b5824df881a5c190daabd3efd3c (diff)
parentfb215dc192005160c70d5026bea7bfd752033292 (diff)
Merge #1933
1933: Adds "replace with guarded return" assist r=matklad a=mikhail-m1 first draft for #1782. I'm pretty sure I missed something. Co-authored-by: Mikhail Modin <[email protected]>
Diffstat (limited to 'crates/ra_syntax/src/ast/edit.rs')
-rw-r--r--crates/ra_syntax/src/ast/edit.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/crates/ra_syntax/src/ast/edit.rs b/crates/ra_syntax/src/ast/edit.rs
index ea92284b8..47bdbb81a 100644
--- a/crates/ra_syntax/src/ast/edit.rs
+++ b/crates/ra_syntax/src/ast/edit.rs
@@ -284,6 +284,34 @@ impl IndentLevel {
284 .collect(); 284 .collect();
285 algo::replace_descendants(&node, &replacements) 285 algo::replace_descendants(&node, &replacements)
286 } 286 }
287
288 pub fn decrease_indent<N: AstNode>(self, node: N) -> N {
289 N::cast(self._decrease_indent(node.syntax().clone())).unwrap()
290 }
291
292 fn _decrease_indent(self, node: SyntaxNode) -> SyntaxNode {
293 let replacements: FxHashMap<SyntaxElement, SyntaxElement> = node
294 .descendants_with_tokens()
295 .filter_map(|el| el.into_token())
296 .filter_map(ast::Whitespace::cast)
297 .filter(|ws| {
298 let text = ws.syntax().text();
299 text.contains('\n')
300 })
301 .map(|ws| {
302 (
303 ws.syntax().clone().into(),
304 make::tokens::whitespace(
305 &ws.syntax()
306 .text()
307 .replace(&format!("\n{:1$}", "", self.0 as usize * 4), "\n"),
308 )
309 .into(),
310 )
311 })
312 .collect();
313 algo::replace_descendants(&node, &replacements)
314 }
287} 315}
288 316
289// FIXME: replace usages with IndentLevel above 317// FIXME: replace usages with IndentLevel above