aboutsummaryrefslogtreecommitdiff
path: root/crates/libeditor
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-08-17 17:54:08 +0100
committerAleksey Kladov <[email protected]>2018-08-17 17:54:08 +0100
commited7ae78c6fd9e508f6e959c6a164cf8481f6b377 (patch)
tree556e8d4daffefa64dcdc5db8e75299514a0e85e4 /crates/libeditor
parent41570f60bf268c97223a864b8aa11a339929f55a (diff)
ServerWorld
Diffstat (limited to 'crates/libeditor')
-rw-r--r--crates/libeditor/src/code_actions.rs10
-rw-r--r--crates/libeditor/tests/test.rs8
2 files changed, 9 insertions, 9 deletions
diff --git a/crates/libeditor/src/code_actions.rs b/crates/libeditor/src/code_actions.rs
index 6df64be12..4b2515835 100644
--- a/crates/libeditor/src/code_actions.rs
+++ b/crates/libeditor/src/code_actions.rs
@@ -71,13 +71,11 @@ fn non_trivia_sibling(node: SyntaxNodeRef, direction: Direction) -> Option<Synta
71 .find(|node| !node.kind().is_trivia()) 71 .find(|node| !node.kind().is_trivia())
72} 72}
73 73
74fn find_non_trivia_leaf(syntax: SyntaxNodeRef, offset: TextUnit) -> Option<SyntaxNodeRef> {
75 find_leaf_at_offset(syntax, offset)
76 .find(|leaf| !leaf.kind().is_trivia())
77}
78
79pub fn find_node<'a, N: AstNode<&'a SyntaxRoot>>(syntax: SyntaxNodeRef<'a>, offset: TextUnit) -> Option<N> { 74pub fn find_node<'a, N: AstNode<&'a SyntaxRoot>>(syntax: SyntaxNodeRef<'a>, offset: TextUnit) -> Option<N> {
80 let leaf = find_non_trivia_leaf(syntax, offset)?; 75 let leaves = find_leaf_at_offset(syntax, offset);
76 let leaf = leaves.clone()
77 .find(|leaf| !leaf.kind().is_trivia())
78 .or_else(|| leaves.right_biased())?;
81 ancestors(leaf) 79 ancestors(leaf)
82 .filter_map(N::cast) 80 .filter_map(N::cast)
83 .next() 81 .next()
diff --git a/crates/libeditor/tests/test.rs b/crates/libeditor/tests/test.rs
index df4cb65d1..cc4226710 100644
--- a/crates/libeditor/tests/test.rs
+++ b/crates/libeditor/tests/test.rs
@@ -1,11 +1,8 @@
1extern crate libeditor; 1extern crate libeditor;
2extern crate libsyntax2; 2extern crate libsyntax2;
3extern crate itertools;
4#[macro_use] 3#[macro_use]
5extern crate assert_eq_text; 4extern crate assert_eq_text;
6 5
7use std::fmt;
8use itertools::Itertools;
9use assert_eq_text::{assert_eq_dbg}; 6use assert_eq_text::{assert_eq_dbg};
10use libeditor::{ 7use libeditor::{
11 File, TextUnit, TextRange, ActionResult, CursorPosition, 8 File, TextUnit, TextRange, ActionResult, CursorPosition,
@@ -119,6 +116,11 @@ fn test_add_derive() {
119 |file, off| add_derive(file, off).map(|f| f()), 116 |file, off| add_derive(file, off).map(|f| f()),
120 ); 117 );
121 check_action( 118 check_action(
119 "struct Foo { <|> a: i32, }",
120 "#[derive(<|>)]\nstruct Foo { a: i32, }",
121 |file, off| add_derive(file, off).map(|f| f()),
122 );
123 check_action(
122 "#[derive(Clone)]\nstruct Foo { a: i32<|>, }", 124 "#[derive(Clone)]\nstruct Foo { a: i32<|>, }",
123 "#[derive(Clone<|>)]\nstruct Foo { a: i32, }", 125 "#[derive(Clone<|>)]\nstruct Foo { a: i32, }",
124 |file, off| add_derive(file, off).map(|f| f()), 126 |file, off| add_derive(file, off).map(|f| f()),