diff options
author | Aleksey Kladov <[email protected]> | 2020-04-24 22:40:41 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-04-25 10:59:18 +0100 |
commit | b1d5817dd18b7b5fc102a63b084b1ee7ff4f9996 (patch) | |
tree | e5d136c5ba4a6ba96aeeb423e6e3f64ca7cea3f9 /crates/ra_ide_db/src/line_index_utils.rs | |
parent | 27a7718880d93f55f905da606d108d3b3c682ab4 (diff) |
Convert code to text-size
Diffstat (limited to 'crates/ra_ide_db/src/line_index_utils.rs')
-rw-r--r-- | crates/ra_ide_db/src/line_index_utils.rs | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/crates/ra_ide_db/src/line_index_utils.rs b/crates/ra_ide_db/src/line_index_utils.rs index 2ebbabdc6..f050fe77f 100644 --- a/crates/ra_ide_db/src/line_index_utils.rs +++ b/crates/ra_ide_db/src/line_index_utils.rs | |||
@@ -1,20 +1,20 @@ | |||
1 | //! Code actions can specify desirable final position of the cursor. | 1 | //! Code actions can specify desirable final position of the cursor. |
2 | //! | 2 | //! |
3 | //! The position is specified as a `TextUnit` in the final file. We need to send | 3 | //! The position is specified as a `TextSize` in the final file. We need to send |
4 | //! it in `(Line, Column)` coordinate though. However, we only have a LineIndex | 4 | //! it in `(Line, Column)` coordinate though. However, we only have a LineIndex |
5 | //! for a file pre-edit! | 5 | //! for a file pre-edit! |
6 | //! | 6 | //! |
7 | //! Code in this module applies this "to (Line, Column) after edit" | 7 | //! Code in this module applies this "to (Line, Column) after edit" |
8 | //! transformation. | 8 | //! transformation. |
9 | 9 | ||
10 | use ra_syntax::{TextRange, TextUnit}; | 10 | use ra_syntax::{TextRange, TextSize}; |
11 | use ra_text_edit::{AtomTextEdit, TextEdit}; | 11 | use ra_text_edit::{AtomTextEdit, TextEdit}; |
12 | 12 | ||
13 | use crate::line_index::{LineCol, LineIndex, Utf16Char}; | 13 | use crate::line_index::{LineCol, LineIndex, Utf16Char}; |
14 | 14 | ||
15 | pub fn translate_offset_with_edit( | 15 | pub fn translate_offset_with_edit( |
16 | line_index: &LineIndex, | 16 | line_index: &LineIndex, |
17 | offset: TextUnit, | 17 | offset: TextSize, |
18 | text_edit: &TextEdit, | 18 | text_edit: &TextEdit, |
19 | ) -> LineCol { | 19 | ) -> LineCol { |
20 | let mut state = Edits::from_text_edit(&text_edit); | 20 | let mut state = Edits::from_text_edit(&text_edit); |
@@ -84,7 +84,7 @@ pub fn translate_offset_with_edit( | |||
84 | 84 | ||
85 | #[derive(Debug, Clone)] | 85 | #[derive(Debug, Clone)] |
86 | enum Step { | 86 | enum Step { |
87 | Newline(TextUnit), | 87 | Newline(TextSize), |
88 | Utf16Char(TextRange), | 88 | Utf16Char(TextRange), |
89 | } | 89 | } |
90 | 90 | ||
@@ -92,7 +92,7 @@ enum Step { | |||
92 | struct LineIndexStepIter<'a> { | 92 | struct LineIndexStepIter<'a> { |
93 | line_index: &'a LineIndex, | 93 | line_index: &'a LineIndex, |
94 | next_newline_idx: usize, | 94 | next_newline_idx: usize, |
95 | utf16_chars: Option<(TextUnit, std::slice::Iter<'a, Utf16Char>)>, | 95 | utf16_chars: Option<(TextSize, std::slice::Iter<'a, Utf16Char>)>, |
96 | } | 96 | } |
97 | 97 | ||
98 | impl LineIndexStepIter<'_> { | 98 | impl LineIndexStepIter<'_> { |
@@ -111,7 +111,7 @@ impl Iterator for LineIndexStepIter<'_> { | |||
111 | .as_mut() | 111 | .as_mut() |
112 | .and_then(|(newline, x)| { | 112 | .and_then(|(newline, x)| { |
113 | let x = x.next()?; | 113 | let x = x.next()?; |
114 | Some(Step::Utf16Char(TextRange::from_to(*newline + x.start, *newline + x.end))) | 114 | Some(Step::Utf16Char(TextRange::new(*newline + x.start, *newline + x.end))) |
115 | }) | 115 | }) |
116 | .or_else(|| { | 116 | .or_else(|| { |
117 | let next_newline = *self.line_index.newlines.get(self.next_newline_idx)?; | 117 | let next_newline = *self.line_index.newlines.get(self.next_newline_idx)?; |
@@ -129,7 +129,7 @@ impl Iterator for LineIndexStepIter<'_> { | |||
129 | #[derive(Debug)] | 129 | #[derive(Debug)] |
130 | struct OffsetStepIter<'a> { | 130 | struct OffsetStepIter<'a> { |
131 | text: &'a str, | 131 | text: &'a str, |
132 | offset: TextUnit, | 132 | offset: TextSize, |
133 | } | 133 | } |
134 | 134 | ||
135 | impl Iterator for OffsetStepIter<'_> { | 135 | impl Iterator for OffsetStepIter<'_> { |
@@ -140,15 +140,15 @@ impl Iterator for OffsetStepIter<'_> { | |||
140 | .char_indices() | 140 | .char_indices() |
141 | .filter_map(|(i, c)| { | 141 | .filter_map(|(i, c)| { |
142 | if c == '\n' { | 142 | if c == '\n' { |
143 | let next_offset = self.offset + TextUnit::from_usize(i + 1); | 143 | let next_offset = self.offset + TextSize::from_usize(i + 1); |
144 | let next = Step::Newline(next_offset); | 144 | let next = Step::Newline(next_offset); |
145 | Some((next, next_offset)) | 145 | Some((next, next_offset)) |
146 | } else { | 146 | } else { |
147 | let char_len = TextUnit::of_char(c); | 147 | let char_len = TextSize::of(c); |
148 | if char_len > TextUnit::from_usize(1) { | 148 | if char_len > TextSize::from_usize(1) { |
149 | let start = self.offset + TextUnit::from_usize(i); | 149 | let start = self.offset + TextSize::from_usize(i); |
150 | let end = start + char_len; | 150 | let end = start + char_len; |
151 | let next = Step::Utf16Char(TextRange::from_to(start, end)); | 151 | let next = Step::Utf16Char(TextRange::new(start, end)); |
152 | let next_offset = end; | 152 | let next_offset = end; |
153 | Some((next, next_offset)) | 153 | Some((next, next_offset)) |
154 | } else { | 154 | } else { |
@@ -157,7 +157,7 @@ impl Iterator for OffsetStepIter<'_> { | |||
157 | } | 157 | } |
158 | }) | 158 | }) |
159 | .next()?; | 159 | .next()?; |
160 | let next_idx = (next_offset - self.offset).to_usize(); | 160 | let next_idx: usize = (next_offset - self.offset).into(); |
161 | self.text = &self.text[next_idx..]; | 161 | self.text = &self.text[next_idx..]; |
162 | self.offset = next_offset; | 162 | self.offset = next_offset; |
163 | Some(next) | 163 | Some(next) |
@@ -195,7 +195,7 @@ impl<'a> Edits<'a> { | |||
195 | match self.edits.split_first() { | 195 | match self.edits.split_first() { |
196 | Some((next, rest)) => { | 196 | Some((next, rest)) => { |
197 | let delete = self.translate_range(next.delete); | 197 | let delete = self.translate_range(next.delete); |
198 | let diff = next.insert.len() as i64 - next.delete.len().to_usize() as i64; | 198 | let diff = next.insert.len() as i64 - usize::from(next.delete.len()) as i64; |
199 | self.current = Some(TranslatedEdit { delete, insert: &next.insert, diff }); | 199 | self.current = Some(TranslatedEdit { delete, insert: &next.insert, diff }); |
200 | self.edits = rest; | 200 | self.edits = rest; |
201 | } | 201 | } |
@@ -244,15 +244,15 @@ impl<'a> Edits<'a> { | |||
244 | } else { | 244 | } else { |
245 | let start = self.translate(range.start()); | 245 | let start = self.translate(range.start()); |
246 | let end = self.translate(range.end()); | 246 | let end = self.translate(range.end()); |
247 | TextRange::from_to(start, end) | 247 | TextRange::new(start, end) |
248 | } | 248 | } |
249 | } | 249 | } |
250 | 250 | ||
251 | fn translate(&self, x: TextUnit) -> TextUnit { | 251 | fn translate(&self, x: TextSize) -> TextSize { |
252 | if self.acc_diff == 0 { | 252 | if self.acc_diff == 0 { |
253 | x | 253 | x |
254 | } else { | 254 | } else { |
255 | TextUnit::from((x.to_usize() as i64 + self.acc_diff) as u32) | 255 | TextSize::from((usize::from(x) as i64 + self.acc_diff) as u32) |
256 | } | 256 | } |
257 | } | 257 | } |
258 | 258 | ||
@@ -271,29 +271,29 @@ impl<'a> Edits<'a> { | |||
271 | #[derive(Debug)] | 271 | #[derive(Debug)] |
272 | struct RunningLineCol { | 272 | struct RunningLineCol { |
273 | line: u32, | 273 | line: u32, |
274 | last_newline: TextUnit, | 274 | last_newline: TextSize, |
275 | col_adjust: TextUnit, | 275 | col_adjust: TextSize, |
276 | } | 276 | } |
277 | 277 | ||
278 | impl RunningLineCol { | 278 | impl RunningLineCol { |
279 | fn new() -> RunningLineCol { | 279 | fn new() -> RunningLineCol { |
280 | RunningLineCol { line: 0, last_newline: TextUnit::from(0), col_adjust: TextUnit::from(0) } | 280 | RunningLineCol { line: 0, last_newline: TextSize::from(0), col_adjust: TextSize::from(0) } |
281 | } | 281 | } |
282 | 282 | ||
283 | fn to_line_col(&self, offset: TextUnit) -> LineCol { | 283 | fn to_line_col(&self, offset: TextSize) -> LineCol { |
284 | LineCol { | 284 | LineCol { |
285 | line: self.line, | 285 | line: self.line, |
286 | col_utf16: ((offset - self.last_newline) - self.col_adjust).into(), | 286 | col_utf16: ((offset - self.last_newline) - self.col_adjust).into(), |
287 | } | 287 | } |
288 | } | 288 | } |
289 | 289 | ||
290 | fn add_line(&mut self, newline: TextUnit) { | 290 | fn add_line(&mut self, newline: TextSize) { |
291 | self.line += 1; | 291 | self.line += 1; |
292 | self.last_newline = newline; | 292 | self.last_newline = newline; |
293 | self.col_adjust = TextUnit::from(0); | 293 | self.col_adjust = TextSize::from(0); |
294 | } | 294 | } |
295 | 295 | ||
296 | fn adjust_col(&mut self, range: TextRange) { | 296 | fn adjust_col(&mut self, range: TextRange) { |
297 | self.col_adjust += range.len() - TextUnit::from(1); | 297 | self.col_adjust += range.len() - TextSize::from(1); |
298 | } | 298 | } |
299 | } | 299 | } |