aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_assists/src/add_impl.rs4
-rw-r--r--crates/ra_assists/src/ast_editor.rs2
-rw-r--r--crates/ra_assists/src/introduce_variable.rs5
-rw-r--r--crates/ra_fmt/src/lib.rs2
-rw-r--r--crates/ra_ide_api/src/display/short_label.rs7
-rw-r--r--crates/ra_ide_api/src/folding_ranges.rs2
-rw-r--r--crates/ra_ide_api/src/join_lines.rs2
-rw-r--r--crates/ra_ide_api/src/typing.rs2
-rw-r--r--crates/ra_syntax/src/syntax_text.rs16
9 files changed, 18 insertions, 24 deletions
diff --git a/crates/ra_assists/src/add_impl.rs b/crates/ra_assists/src/add_impl.rs
index 9a0cfb4e7..59ca88468 100644
--- a/crates/ra_assists/src/add_impl.rs
+++ b/crates/ra_assists/src/add_impl.rs
@@ -1,3 +1,5 @@
1use std::fmt::Write;
2
1use hir::db::HirDatabase; 3use hir::db::HirDatabase;
2use join_to_string::join; 4use join_to_string::join;
3use ra_syntax::{ 5use ra_syntax::{
@@ -17,7 +19,7 @@ pub(crate) fn add_impl(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
17 let mut buf = String::new(); 19 let mut buf = String::new();
18 buf.push_str("\n\nimpl"); 20 buf.push_str("\n\nimpl");
19 if let Some(type_params) = &type_params { 21 if let Some(type_params) = &type_params {
20 type_params.syntax().text().push_to(&mut buf); 22 write!(buf, "{}", type_params.syntax()).unwrap();
21 } 23 }
22 buf.push_str(" "); 24 buf.push_str(" ");
23 buf.push_str(name.text().as_str()); 25 buf.push_str(name.text().as_str());
diff --git a/crates/ra_assists/src/ast_editor.rs b/crates/ra_assists/src/ast_editor.rs
index 36235eb13..ab6c347ad 100644
--- a/crates/ra_assists/src/ast_editor.rs
+++ b/crates/ra_assists/src/ast_editor.rs
@@ -95,7 +95,7 @@ impl AstEditor<ast::NamedFieldList> {
95 position: InsertPosition<&'_ ast::NamedField>, 95 position: InsertPosition<&'_ ast::NamedField>,
96 field: &ast::NamedField, 96 field: &ast::NamedField,
97 ) { 97 ) {
98 let is_multiline = self.ast().syntax().text().contains('\n'); 98 let is_multiline = self.ast().syntax().text().contains_char('\n');
99 let ws; 99 let ws;
100 let space = if is_multiline { 100 let space = if is_multiline {
101 ws = tokens::WsBuilder::new(&format!( 101 ws = tokens::WsBuilder::new(&format!(
diff --git a/crates/ra_assists/src/introduce_variable.rs b/crates/ra_assists/src/introduce_variable.rs
index df6c58989..911de2d48 100644
--- a/crates/ra_assists/src/introduce_variable.rs
+++ b/crates/ra_assists/src/introduce_variable.rs
@@ -1,3 +1,5 @@
1use std::fmt::Write;
2
1use hir::db::HirDatabase; 3use hir::db::HirDatabase;
2use ra_syntax::{ 4use ra_syntax::{
3 ast::{self, AstNode}, 5 ast::{self, AstNode},
@@ -35,8 +37,7 @@ pub(crate) fn introduce_variable(mut ctx: AssistCtx<impl HirDatabase>) -> Option
35 buf.push_str("let var_name = "); 37 buf.push_str("let var_name = ");
36 TextUnit::of_str("let ") 38 TextUnit::of_str("let ")
37 }; 39 };
38 40 write!(buf, "{}", expr.syntax()).unwrap();
39 expr.syntax().text().push_to(&mut buf);
40 let full_stmt = ast::ExprStmt::cast(anchor_stmt.clone()); 41 let full_stmt = ast::ExprStmt::cast(anchor_stmt.clone());
41 let is_full_stmt = if let Some(expr_stmt) = &full_stmt { 42 let is_full_stmt = if let Some(expr_stmt) = &full_stmt {
42 Some(expr.syntax().clone()) == expr_stmt.expr().map(|e| e.syntax().clone()) 43 Some(expr.syntax().clone()) == expr_stmt.expr().map(|e| e.syntax().clone())
diff --git a/crates/ra_fmt/src/lib.rs b/crates/ra_fmt/src/lib.rs
index d6e895729..b09478d7a 100644
--- a/crates/ra_fmt/src/lib.rs
+++ b/crates/ra_fmt/src/lib.rs
@@ -36,7 +36,7 @@ fn prev_tokens(token: SyntaxToken) -> impl Iterator<Item = SyntaxToken> {
36 36
37pub fn extract_trivial_expression(block: &ast::Block) -> Option<ast::Expr> { 37pub fn extract_trivial_expression(block: &ast::Block) -> Option<ast::Expr> {
38 let expr = block.expr()?; 38 let expr = block.expr()?;
39 if expr.syntax().text().contains('\n') { 39 if expr.syntax().text().contains_char('\n') {
40 return None; 40 return None;
41 } 41 }
42 let non_trivial_children = block.syntax().children().filter(|it| match it.kind() { 42 let non_trivial_children = block.syntax().children().filter(|it| match it.kind() {
diff --git a/crates/ra_ide_api/src/display/short_label.rs b/crates/ra_ide_api/src/display/short_label.rs
index f926f631f..be499e485 100644
--- a/crates/ra_ide_api/src/display/short_label.rs
+++ b/crates/ra_ide_api/src/display/short_label.rs
@@ -1,3 +1,5 @@
1use std::fmt::Write;
2
1use ra_syntax::ast::{self, AstNode, NameOwner, TypeAscriptionOwner, VisibilityOwner}; 3use ra_syntax::ast::{self, AstNode, NameOwner, TypeAscriptionOwner, VisibilityOwner};
2 4
3pub(crate) trait ShortLabel { 5pub(crate) trait ShortLabel {
@@ -71,8 +73,7 @@ where
71 let mut buf = short_label_from_node(node, prefix)?; 73 let mut buf = short_label_from_node(node, prefix)?;
72 74
73 if let Some(type_ref) = node.ascribed_type() { 75 if let Some(type_ref) = node.ascribed_type() {
74 buf.push_str(": "); 76 write!(buf, ": {}", type_ref.syntax()).unwrap();
75 type_ref.syntax().text().push_to(&mut buf);
76 } 77 }
77 78
78 Some(buf) 79 Some(buf)
@@ -82,7 +83,7 @@ fn short_label_from_node<T>(node: &T, label: &str) -> Option<String>
82where 83where
83 T: NameOwner + VisibilityOwner, 84 T: NameOwner + VisibilityOwner,
84{ 85{
85 let mut buf = node.visibility().map(|v| format!("{} ", v.syntax().text())).unwrap_or_default(); 86 let mut buf = node.visibility().map(|v| format!("{} ", v.syntax())).unwrap_or_default();
86 buf.push_str(label); 87 buf.push_str(label);
87 buf.push_str(node.name()?.text().as_str()); 88 buf.push_str(node.name()?.text().as_str());
88 Some(buf) 89 Some(buf)
diff --git a/crates/ra_ide_api/src/folding_ranges.rs b/crates/ra_ide_api/src/folding_ranges.rs
index 9699000db..571d1c595 100644
--- a/crates/ra_ide_api/src/folding_ranges.rs
+++ b/crates/ra_ide_api/src/folding_ranges.rs
@@ -31,7 +31,7 @@ pub(crate) fn folding_ranges(file: &SourceFile) -> Vec<Fold> {
31 // Fold items that span multiple lines 31 // Fold items that span multiple lines
32 if let Some(kind) = fold_kind(element.kind()) { 32 if let Some(kind) = fold_kind(element.kind()) {
33 let is_multiline = match &element { 33 let is_multiline = match &element {
34 SyntaxElement::Node(node) => node.text().contains('\n'), 34 SyntaxElement::Node(node) => node.text().contains_char('\n'),
35 SyntaxElement::Token(token) => token.text().contains('\n'), 35 SyntaxElement::Token(token) => token.text().contains('\n'),
36 }; 36 };
37 if is_multiline { 37 if is_multiline {
diff --git a/crates/ra_ide_api/src/join_lines.rs b/crates/ra_ide_api/src/join_lines.rs
index fa998ebe1..7f25f2108 100644
--- a/crates/ra_ide_api/src/join_lines.rs
+++ b/crates/ra_ide_api/src/join_lines.rs
@@ -13,7 +13,7 @@ pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit {
13 let range = if range.is_empty() { 13 let range = if range.is_empty() {
14 let syntax = file.syntax(); 14 let syntax = file.syntax();
15 let text = syntax.text().slice(range.start()..); 15 let text = syntax.text().slice(range.start()..);
16 let pos = match text.find('\n') { 16 let pos = match text.find_char('\n') {
17 None => return TextEditBuilder::default().finish(), 17 None => return TextEditBuilder::default().finish(),
18 Some(pos) => pos, 18 Some(pos) => pos,
19 }; 19 };
diff --git a/crates/ra_ide_api/src/typing.rs b/crates/ra_ide_api/src/typing.rs
index 1747a529e..5a1cbcc49 100644
--- a/crates/ra_ide_api/src/typing.rs
+++ b/crates/ra_ide_api/src/typing.rs
@@ -75,7 +75,7 @@ pub fn on_eq_typed(file: &SourceFile, eq_offset: TextUnit) -> Option<TextEdit> {
75 if expr_range.contains(eq_offset) && eq_offset != expr_range.start() { 75 if expr_range.contains(eq_offset) && eq_offset != expr_range.start() {
76 return None; 76 return None;
77 } 77 }
78 if file.syntax().text().slice(eq_offset..expr_range.start()).contains('\n') { 78 if file.syntax().text().slice(eq_offset..expr_range.start()).contains_char('\n') {
79 return None; 79 return None;
80 } 80 }
81 } else { 81 } else {
diff --git a/crates/ra_syntax/src/syntax_text.rs b/crates/ra_syntax/src/syntax_text.rs
index f8ddff48e..652cb7a1e 100644
--- a/crates/ra_syntax/src/syntax_text.rs
+++ b/crates/ra_syntax/src/syntax_text.rs
@@ -57,25 +57,15 @@ impl SyntaxText {
57 } 57 }
58 } 58 }
59 59
60 pub fn push_to(&self, buf: &mut String) {
61 self.for_each_chunk(|chunk| buf.push_str(chunk))
62 }
63
64 pub fn to_string(&self) -> String {
65 let mut buf = String::new();
66 self.push_to(&mut buf);
67 buf
68 }
69
70 pub fn to_smol_string(&self) -> SmolStr { 60 pub fn to_smol_string(&self) -> SmolStr {
71 self.to_string().into() 61 self.to_string().into()
72 } 62 }
73 63
74 pub fn contains(&self, c: char) -> bool { 64 pub fn contains_char(&self, c: char) -> bool {
75 self.try_for_each_chunk(|chunk| if chunk.contains(c) { Err(()) } else { Ok(()) }).is_err() 65 self.try_for_each_chunk(|chunk| if chunk.contains(c) { Err(()) } else { Ok(()) }).is_err()
76 } 66 }
77 67
78 pub fn find(&self, c: char) -> Option<TextUnit> { 68 pub fn find_char(&self, c: char) -> Option<TextUnit> {
79 let mut acc: TextUnit = 0.into(); 69 let mut acc: TextUnit = 0.into();
80 let res = self.try_for_each_chunk(|chunk| { 70 let res = self.try_for_each_chunk(|chunk| {
81 if let Some(pos) = chunk.find(c) { 71 if let Some(pos) = chunk.find(c) {
@@ -158,7 +148,7 @@ impl fmt::Debug for SyntaxText {
158 148
159impl fmt::Display for SyntaxText { 149impl fmt::Display for SyntaxText {
160 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 150 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
161 fmt::Display::fmt(&self.to_string(), f) 151 self.try_for_each_chunk(|chunk| fmt::Display::fmt(chunk, f))
162 } 152 }
163} 153}
164 154