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/src/extend_selection.rs | |
parent | 27a7718880d93f55f905da606d108d3b3c682ab4 (diff) |
Convert code to text-size
Diffstat (limited to 'crates/ra_ide/src/extend_selection.rs')
-rw-r--r-- | crates/ra_ide/src/extend_selection.rs | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/crates/ra_ide/src/extend_selection.rs b/crates/ra_ide/src/extend_selection.rs index 753d2ef6a..9f329b5d3 100644 --- a/crates/ra_ide/src/extend_selection.rs +++ b/crates/ra_ide/src/extend_selection.rs | |||
@@ -9,7 +9,7 @@ use ra_syntax::{ | |||
9 | ast::{self, AstNode, AstToken}, | 9 | ast::{self, AstNode, AstToken}, |
10 | Direction, NodeOrToken, | 10 | Direction, NodeOrToken, |
11 | SyntaxKind::{self, *}, | 11 | SyntaxKind::{self, *}, |
12 | SyntaxNode, SyntaxToken, TextRange, TextUnit, TokenAtOffset, T, | 12 | SyntaxNode, SyntaxToken, TextRange, TextSize, TokenAtOffset, T, |
13 | }; | 13 | }; |
14 | 14 | ||
15 | use crate::FileRange; | 15 | use crate::FileRange; |
@@ -121,10 +121,10 @@ fn extend_tokens_from_range( | |||
121 | let mut first_token = skip_trivia_token(first_token, Direction::Next)?; | 121 | let mut first_token = skip_trivia_token(first_token, Direction::Next)?; |
122 | let mut last_token = skip_trivia_token(last_token, Direction::Prev)?; | 122 | let mut last_token = skip_trivia_token(last_token, Direction::Prev)?; |
123 | 123 | ||
124 | while !first_token.text_range().is_subrange(&original_range) { | 124 | while !original_range.contains_range(first_token.text_range()) { |
125 | first_token = skip_trivia_token(first_token.next_token()?, Direction::Next)?; | 125 | first_token = skip_trivia_token(first_token.next_token()?, Direction::Next)?; |
126 | } | 126 | } |
127 | while !last_token.text_range().is_subrange(&original_range) { | 127 | while !original_range.contains_range(last_token.text_range()) { |
128 | last_token = skip_trivia_token(last_token.prev_token()?, Direction::Prev)?; | 128 | last_token = skip_trivia_token(last_token.prev_token()?, Direction::Prev)?; |
129 | } | 129 | } |
130 | 130 | ||
@@ -161,8 +161,8 @@ fn extend_tokens_from_range( | |||
161 | .take_while(validate) | 161 | .take_while(validate) |
162 | .last()?; | 162 | .last()?; |
163 | 163 | ||
164 | let range = first.text_range().extend_to(&last.text_range()); | 164 | let range = first.text_range().cover(last.text_range()); |
165 | if original_range.is_subrange(&range) && original_range != range { | 165 | if range.contains_range(original_range) && original_range != range { |
166 | Some(range) | 166 | Some(range) |
167 | } else { | 167 | } else { |
168 | None | 168 | None |
@@ -176,7 +176,7 @@ fn shallowest_node(node: &SyntaxNode) -> SyntaxNode { | |||
176 | 176 | ||
177 | fn extend_single_word_in_comment_or_string( | 177 | fn extend_single_word_in_comment_or_string( |
178 | leaf: &SyntaxToken, | 178 | leaf: &SyntaxToken, |
179 | offset: TextUnit, | 179 | offset: TextSize, |
180 | ) -> Option<TextRange> { | 180 | ) -> Option<TextRange> { |
181 | let text: &str = leaf.text(); | 181 | let text: &str = leaf.text(); |
182 | let cursor_position: u32 = (offset - leaf.text_range().start()).into(); | 182 | let cursor_position: u32 = (offset - leaf.text_range().start()).into(); |
@@ -190,10 +190,10 @@ fn extend_single_word_in_comment_or_string( | |||
190 | let start_idx = before.rfind(non_word_char)? as u32; | 190 | let start_idx = before.rfind(non_word_char)? as u32; |
191 | let end_idx = after.find(non_word_char).unwrap_or_else(|| after.len()) as u32; | 191 | let end_idx = after.find(non_word_char).unwrap_or_else(|| after.len()) as u32; |
192 | 192 | ||
193 | let from: TextUnit = (start_idx + 1).into(); | 193 | let from: TextSize = (start_idx + 1).into(); |
194 | let to: TextUnit = (cursor_position + end_idx).into(); | 194 | let to: TextSize = (cursor_position + end_idx).into(); |
195 | 195 | ||
196 | let range = TextRange::from_to(from, to); | 196 | let range = TextRange::new(from, to); |
197 | if range.is_empty() { | 197 | if range.is_empty() { |
198 | None | 198 | None |
199 | } else { | 199 | } else { |
@@ -201,24 +201,24 @@ fn extend_single_word_in_comment_or_string( | |||
201 | } | 201 | } |
202 | } | 202 | } |
203 | 203 | ||
204 | fn extend_ws(root: &SyntaxNode, ws: SyntaxToken, offset: TextUnit) -> TextRange { | 204 | fn extend_ws(root: &SyntaxNode, ws: SyntaxToken, offset: TextSize) -> TextRange { |
205 | let ws_text = ws.text(); | 205 | let ws_text = ws.text(); |
206 | let suffix = TextRange::from_to(offset, ws.text_range().end()) - ws.text_range().start(); | 206 | let suffix = TextRange::new(offset, ws.text_range().end()) - ws.text_range().start(); |
207 | let prefix = TextRange::from_to(ws.text_range().start(), offset) - ws.text_range().start(); | 207 | let prefix = TextRange::new(ws.text_range().start(), offset) - ws.text_range().start(); |
208 | let ws_suffix = &ws_text.as_str()[suffix]; | 208 | let ws_suffix = &ws_text.as_str()[suffix]; |
209 | let ws_prefix = &ws_text.as_str()[prefix]; | 209 | let ws_prefix = &ws_text.as_str()[prefix]; |
210 | if ws_text.contains('\n') && !ws_suffix.contains('\n') { | 210 | if ws_text.contains('\n') && !ws_suffix.contains('\n') { |
211 | if let Some(node) = ws.next_sibling_or_token() { | 211 | if let Some(node) = ws.next_sibling_or_token() { |
212 | let start = match ws_prefix.rfind('\n') { | 212 | let start = match ws_prefix.rfind('\n') { |
213 | Some(idx) => ws.text_range().start() + TextUnit::from((idx + 1) as u32), | 213 | Some(idx) => ws.text_range().start() + TextSize::from((idx + 1) as u32), |
214 | None => node.text_range().start(), | 214 | None => node.text_range().start(), |
215 | }; | 215 | }; |
216 | let end = if root.text().char_at(node.text_range().end()) == Some('\n') { | 216 | let end = if root.text().char_at(node.text_range().end()) == Some('\n') { |
217 | node.text_range().end() + TextUnit::of_char('\n') | 217 | node.text_range().end() + TextSize::of('\n') |
218 | } else { | 218 | } else { |
219 | node.text_range().end() | 219 | node.text_range().end() |
220 | }; | 220 | }; |
221 | return TextRange::from_to(start, end); | 221 | return TextRange::new(start, end); |
222 | } | 222 | } |
223 | } | 223 | } |
224 | ws.text_range() | 224 | ws.text_range() |
@@ -270,13 +270,10 @@ fn extend_list_item(node: &SyntaxNode) -> Option<TextRange> { | |||
270 | .filter(|node| is_single_line_ws(node)) | 270 | .filter(|node| is_single_line_ws(node)) |
271 | .unwrap_or(delimiter_node); | 271 | .unwrap_or(delimiter_node); |
272 | 272 | ||
273 | return Some(TextRange::from_to(node.text_range().start(), final_node.text_range().end())); | 273 | return Some(TextRange::new(node.text_range().start(), final_node.text_range().end())); |
274 | } | 274 | } |
275 | if let Some(delimiter_node) = nearby_delimiter(delimiter, node, Direction::Prev) { | 275 | if let Some(delimiter_node) = nearby_delimiter(delimiter, node, Direction::Prev) { |
276 | return Some(TextRange::from_to( | 276 | return Some(TextRange::new(delimiter_node.text_range().start(), node.text_range().end())); |
277 | delimiter_node.text_range().start(), | ||
278 | node.text_range().end(), | ||
279 | )); | ||
280 | } | 277 | } |
281 | 278 | ||
282 | None | 279 | None |
@@ -286,10 +283,7 @@ fn extend_comments(comment: ast::Comment) -> Option<TextRange> { | |||
286 | let prev = adj_comments(&comment, Direction::Prev); | 283 | let prev = adj_comments(&comment, Direction::Prev); |
287 | let next = adj_comments(&comment, Direction::Next); | 284 | let next = adj_comments(&comment, Direction::Next); |
288 | if prev != next { | 285 | if prev != next { |
289 | Some(TextRange::from_to( | 286 | Some(TextRange::new(prev.syntax().text_range().start(), next.syntax().text_range().end())) |
290 | prev.syntax().text_range().start(), | ||
291 | next.syntax().text_range().end(), | ||
292 | )) | ||
293 | } else { | 287 | } else { |
294 | None | 288 | None |
295 | } | 289 | } |