aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_fmt/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_fmt/src')
-rw-r--r--crates/ra_fmt/src/lib.rs29
1 files changed, 12 insertions, 17 deletions
diff --git a/crates/ra_fmt/src/lib.rs b/crates/ra_fmt/src/lib.rs
index 62e6fb9c1..85b7ce250 100644
--- a/crates/ra_fmt/src/lib.rs
+++ b/crates/ra_fmt/src/lib.rs
@@ -2,9 +2,8 @@
2//! 2//!
3use itertools::Itertools; 3use itertools::Itertools;
4use ra_syntax::{ 4use ra_syntax::{
5 AstNode, 5 SyntaxNode, SyntaxKind::*, SyntaxToken, SyntaxKind,
6 SyntaxNode, SyntaxKind::*, 6 ast::{self, AstNode, AstToken},
7 ast::{self, AstToken},
8 algo::generate, 7 algo::generate,
9}; 8};
10 9
@@ -15,26 +14,22 @@ pub fn reindent(text: &str, indent: &str) -> String {
15 14
16/// If the node is on the beginning of the line, calculate indent. 15/// If the node is on the beginning of the line, calculate indent.
17pub fn leading_indent(node: &SyntaxNode) -> Option<&str> { 16pub fn leading_indent(node: &SyntaxNode) -> Option<&str> {
18 for leaf in prev_leaves(node) { 17 for token in prev_tokens(node.first_token()?) {
19 if let Some(ws) = ast::Whitespace::cast(leaf) { 18 if let Some(ws) = ast::Whitespace::cast(token) {
20 let ws_text = ws.text(); 19 let ws_text = ws.text();
21 if let Some(pos) = ws_text.rfind('\n') { 20 if let Some(pos) = ws_text.rfind('\n') {
22 return Some(&ws_text[pos + 1..]); 21 return Some(&ws_text[pos + 1..]);
23 } 22 }
24 } 23 }
25 if leaf.leaf_text().unwrap().contains('\n') { 24 if token.text().contains('\n') {
26 break; 25 break;
27 } 26 }
28 } 27 }
29 None 28 None
30} 29}
31 30
32fn prev_leaves(node: &SyntaxNode) -> impl Iterator<Item = &SyntaxNode> { 31fn prev_tokens(token: SyntaxToken) -> impl Iterator<Item = SyntaxToken> {
33 generate(prev_leaf(node), |&node| prev_leaf(node)) 32 generate(token.prev_token(), |&token| token.prev_token())
34}
35
36fn prev_leaf(node: &SyntaxNode) -> Option<&SyntaxNode> {
37 generate(node.ancestors().find_map(SyntaxNode::prev_sibling), |it| it.last_child()).last()
38} 33}
39 34
40pub fn extract_trivial_expression(block: &ast::Block) -> Option<&ast::Expr> { 35pub fn extract_trivial_expression(block: &ast::Block) -> Option<&ast::Expr> {
@@ -52,20 +47,20 @@ pub fn extract_trivial_expression(block: &ast::Block) -> Option<&ast::Expr> {
52 Some(expr) 47 Some(expr)
53} 48}
54 49
55pub fn compute_ws(left: &SyntaxNode, right: &SyntaxNode) -> &'static str { 50pub fn compute_ws(left: SyntaxKind, right: SyntaxKind) -> &'static str {
56 match left.kind() { 51 match left {
57 L_PAREN | L_BRACK => return "", 52 L_PAREN | L_BRACK => return "",
58 L_CURLY => { 53 L_CURLY => {
59 if let USE_TREE = right.kind() { 54 if let USE_TREE = right {
60 return ""; 55 return "";
61 } 56 }
62 } 57 }
63 _ => (), 58 _ => (),
64 } 59 }
65 match right.kind() { 60 match right {
66 R_PAREN | R_BRACK => return "", 61 R_PAREN | R_BRACK => return "",
67 R_CURLY => { 62 R_CURLY => {
68 if let USE_TREE = left.kind() { 63 if let USE_TREE = left {
69 return ""; 64 return "";
70 } 65 }
71 } 66 }