aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-01-08 18:50:04 +0000
committerAleksey Kladov <[email protected]>2019-01-08 18:50:04 +0000
commitf553837c1ca30a52bf5091689c21d3c3e3362395 (patch)
tree79dbabf6137e6aaf64d494f57a7cecbf397237bc /crates/ra_syntax
parentc9e42fcf245be16958dca6571e4bccc6c29199df (diff)
upstream text-utils to text_unit
Diffstat (limited to 'crates/ra_syntax')
-rw-r--r--crates/ra_syntax/Cargo.toml2
-rw-r--r--crates/ra_syntax/src/text_utils.rs10
-rw-r--r--crates/ra_syntax/src/yellow/syntax_text.rs14
3 files changed, 6 insertions, 20 deletions
diff --git a/crates/ra_syntax/Cargo.toml b/crates/ra_syntax/Cargo.toml
index eea0e251a..7c8e5b696 100644
--- a/crates/ra_syntax/Cargo.toml
+++ b/crates/ra_syntax/Cargo.toml
@@ -14,7 +14,7 @@ itertools = "0.8.0"
14drop_bomb = "0.1.4" 14drop_bomb = "0.1.4"
15parking_lot = "0.7.0" 15parking_lot = "0.7.0"
16rowan = "0.2.0" 16rowan = "0.2.0"
17text_unit = "0.1.5" 17text_unit = "0.1.6"
18ra_text_edit = { path = "../ra_text_edit" } 18ra_text_edit = { path = "../ra_text_edit" }
19 19
20[dev-dependencies] 20[dev-dependencies]
diff --git a/crates/ra_syntax/src/text_utils.rs b/crates/ra_syntax/src/text_utils.rs
index 417d43e1b..7aaf4c223 100644
--- a/crates/ra_syntax/src/text_utils.rs
+++ b/crates/ra_syntax/src/text_utils.rs
@@ -1,15 +1,5 @@
1use crate::TextRange; 1use crate::TextRange;
2 2
3pub fn intersect(r1: TextRange, r2: TextRange) -> Option<TextRange> {
4 let start = r1.start().max(r2.start());
5 let end = r1.end().min(r2.end());
6 if start <= end {
7 Some(TextRange::from_to(start, end))
8 } else {
9 None
10 }
11}
12
13pub fn replace_range(mut text: String, range: TextRange, replace_with: &str) -> String { 3pub fn replace_range(mut text: String, range: TextRange, replace_with: &str) -> String {
14 let start = u32::from(range.start()) as usize; 4 let start = u32::from(range.start()) as usize;
15 let end = u32::from(range.end()) as usize; 5 let end = u32::from(range.end()) as usize;
diff --git a/crates/ra_syntax/src/yellow/syntax_text.rs b/crates/ra_syntax/src/yellow/syntax_text.rs
index 31db0fdab..08dbe57a2 100644
--- a/crates/ra_syntax/src/yellow/syntax_text.rs
+++ b/crates/ra_syntax/src/yellow/syntax_text.rs
@@ -1,10 +1,6 @@
1use std::{fmt, ops}; 1use std::{fmt, ops};
2 2
3use ra_text_edit::text_utils::contains_offset_nonstrict; 3use crate::{SyntaxNode, TextRange, TextUnit};
4use crate::{
5 text_utils::intersect,
6 SyntaxNode, TextRange, TextUnit,
7};
8 4
9#[derive(Clone)] 5#[derive(Clone)]
10pub struct SyntaxText<'a> { 6pub struct SyntaxText<'a> {
@@ -23,7 +19,7 @@ impl<'a> SyntaxText<'a> {
23 let range = self.range; 19 let range = self.range;
24 self.node.descendants().filter_map(move |node| { 20 self.node.descendants().filter_map(move |node| {
25 let text = node.leaf_text()?; 21 let text = node.leaf_text()?;
26 let range = intersect(range, node.range())?; 22 let range = range.intersection(&node.range())?;
27 let range = range - node.range().start(); 23 let range = range - node.range().start();
28 Some(&text[range]) 24 Some(&text[range])
29 }) 25 })
@@ -92,13 +88,13 @@ pub trait SyntaxTextSlice: fmt::Debug {
92 88
93impl SyntaxTextSlice for TextRange { 89impl SyntaxTextSlice for TextRange {
94 fn restrict(&self, range: TextRange) -> Option<TextRange> { 90 fn restrict(&self, range: TextRange) -> Option<TextRange> {
95 intersect(*self, range) 91 self.intersection(&range)
96 } 92 }
97} 93}
98 94
99impl SyntaxTextSlice for ops::RangeTo<TextUnit> { 95impl SyntaxTextSlice for ops::RangeTo<TextUnit> {
100 fn restrict(&self, range: TextRange) -> Option<TextRange> { 96 fn restrict(&self, range: TextRange) -> Option<TextRange> {
101 if !contains_offset_nonstrict(range, self.end) { 97 if !range.contains_inclusive(self.end) {
102 return None; 98 return None;
103 } 99 }
104 Some(TextRange::from_to(range.start(), self.end)) 100 Some(TextRange::from_to(range.start(), self.end))
@@ -107,7 +103,7 @@ impl SyntaxTextSlice for ops::RangeTo<TextUnit> {
107 103
108impl SyntaxTextSlice for ops::RangeFrom<TextUnit> { 104impl SyntaxTextSlice for ops::RangeFrom<TextUnit> {
109 fn restrict(&self, range: TextRange) -> Option<TextRange> { 105 fn restrict(&self, range: TextRange) -> Option<TextRange> {
110 if !contains_offset_nonstrict(range, self.start) { 106 if !range.contains_inclusive(self.start) {
111 return None; 107 return None;
112 } 108 }
113 Some(TextRange::from_to(self.start, range.end())) 109 Some(TextRange::from_to(self.start, range.end()))