aboutsummaryrefslogtreecommitdiff
path: root/crates/libeditor
diff options
context:
space:
mode:
Diffstat (limited to 'crates/libeditor')
-rw-r--r--crates/libeditor/src/extend_selection.rs20
-rw-r--r--crates/libeditor/tests/test.rs35
2 files changed, 34 insertions, 21 deletions
diff --git a/crates/libeditor/src/extend_selection.rs b/crates/libeditor/src/extend_selection.rs
index 171e40692..32873f491 100644
--- a/crates/libeditor/src/extend_selection.rs
+++ b/crates/libeditor/src/extend_selection.rs
@@ -17,18 +17,14 @@ pub(crate) fn extend(root: SyntaxNodeRef, range: TextRange) -> Option<TextRange>
17 return Some(leaf.range()); 17 return Some(leaf.range());
18 } 18 }
19 let ws = leaves.next()?; 19 let ws = leaves.next()?;
20// let ws_suffix = file.text().slice( 20 let ws_text = ws.leaf_text().unwrap();
21// TextRange::from_to(offset, ws.range().end()) 21 let range = TextRange::from_to(offset, ws.range().end()) - ws.range().start();
22// ); 22 let ws_suffix = &ws_text.as_str()[range];
23// if ws.text().contains("\n") && !ws_suffix.contains("\n") { 23 if ws_text.contains("\n") && !ws_suffix.contains("\n") {
24// if let Some(line_end) = file.text() 24 if let Some(node) = ws.next_sibling() {
25// .slice(TextSuffix::from(ws.range().end())) 25 return Some(node.range());
26// .find("\n") 26 }
27// { 27 }
28// let range = TextRange::from_len(ws.range().end(), line_end);
29// return Some(find_covering_node(file.root(), range).range());
30// }
31// }
32 return Some(ws.range()); 28 return Some(ws.range());
33 }; 29 };
34 let node = find_covering_node(root, range); 30 let node = find_covering_node(root, range);
diff --git a/crates/libeditor/tests/test.rs b/crates/libeditor/tests/test.rs
index a2e26003a..f8365949e 100644
--- a/crates/libeditor/tests/test.rs
+++ b/crates/libeditor/tests/test.rs
@@ -12,15 +12,32 @@ use libeditor::{
12 12
13#[test] 13#[test]
14fn test_extend_selection() { 14fn test_extend_selection() {
15 let file = file(r#"fn foo() { 15 fn do_check(before: &str, afters: &[&str]) {
16 1 + 1 16 let (cursor, before) = extract_cursor(before);
17} 17 let file = file(&before);
18"#); 18 let mut range = TextRange::offset_len(cursor, 0.into());
19 let range = TextRange::offset_len(18.into(), 0.into()); 19 for &after in afters {
20 let range = extend_selection(&file, range).unwrap(); 20 range = extend_selection(&file, range)
21 assert_eq!(range, TextRange::from_to(17.into(), 18.into())); 21 .unwrap();
22 let range = extend_selection(&file, range).unwrap(); 22 let actual = &before[range];
23 assert_eq!(range, TextRange::from_to(15.into(), 20.into())); 23 assert_eq!(after, actual);
24 }
25 }
26
27 do_check(
28 r#"fn foo() { <|>1 + 1 }"#,
29 &["1", "1 + 1", "{ 1 + 1 }"],
30 );
31
32 do_check(
33 r#"
34impl S {
35<|> fn foo() {
36
37 }
38}"#,
39 &["fn foo() {\n\n }"]
40 );
24} 41}
25 42
26#[test] 43#[test]