diff options
Diffstat (limited to 'crates/ra_editor/src')
-rw-r--r-- | crates/ra_editor/src/extend_selection.rs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/crates/ra_editor/src/extend_selection.rs b/crates/ra_editor/src/extend_selection.rs index e12346cb6..ab03a717e 100644 --- a/crates/ra_editor/src/extend_selection.rs +++ b/crates/ra_editor/src/extend_selection.rs | |||
@@ -43,17 +43,17 @@ pub(crate) fn extend(root: SyntaxNodeRef, range: TextRange) -> Option<TextRange> | |||
43 | } | 43 | } |
44 | 44 | ||
45 | fn extend_single_word_in_comment(leaf: SyntaxNodeRef, offset: TextUnit) -> Option<TextRange> { | 45 | fn extend_single_word_in_comment(leaf: SyntaxNodeRef, offset: TextUnit) -> Option<TextRange> { |
46 | let text : &str = leaf.leaf_text()?; | 46 | let text: &str = leaf.leaf_text()?; |
47 | let cursor_position: u32 = (offset - leaf.range().start()).into(); | 47 | let cursor_position: u32 = (offset - leaf.range().start()).into(); |
48 | 48 | ||
49 | let (before, after) = text.split_at(cursor_position as usize); | 49 | let (before, after) = text.split_at(cursor_position as usize); |
50 | let start_idx = before.rfind(char::is_whitespace)? as u32; | 50 | let start_idx = before.rfind(char::is_whitespace)? as u32; |
51 | let end_idx = after.find(char::is_whitespace)? as u32; | 51 | let end_idx = after.find(char::is_whitespace)? as u32; |
52 | 52 | ||
53 | let from : TextUnit = (start_idx + 1).into(); | 53 | let from: TextUnit = (start_idx + 1).into(); |
54 | let to : TextUnit = (cursor_position + end_idx).into(); | 54 | let to: TextUnit = (cursor_position + end_idx).into(); |
55 | 55 | ||
56 | Some(TextRange::from_to(from, to)) | 56 | Some(TextRange::from_to(from, to) + leaf.range().start()) |
57 | } | 57 | } |
58 | 58 | ||
59 | fn extend_ws(root: SyntaxNodeRef, ws: SyntaxNodeRef, offset: TextUnit) -> TextRange { | 59 | fn extend_ws(root: SyntaxNodeRef, ws: SyntaxNodeRef, offset: TextUnit) -> TextRange { |
@@ -219,5 +219,14 @@ fn main() { foo+<|>bar;} | |||
219 | r#"// foo bar b<|>az quxx"#, | 219 | r#"// foo bar b<|>az quxx"#, |
220 | &["baz", "// foo bar baz quxx"] | 220 | &["baz", "// foo bar baz quxx"] |
221 | ); | 221 | ); |
222 | do_check(r#" | ||
223 | impl S { | ||
224 | fn foo() { | ||
225 | // hel<|>lo world | ||
226 | } | ||
227 | } | ||
228 | "#, | ||
229 | &["hello", "// hello world"] | ||
230 | ); | ||
222 | } | 231 | } |
223 | } | 232 | } |