diff options
Diffstat (limited to 'crates/ra_syntax/src/yellow/mod.rs')
-rw-r--r-- | crates/ra_syntax/src/yellow/mod.rs | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/crates/ra_syntax/src/yellow/mod.rs b/crates/ra_syntax/src/yellow/mod.rs index c621b1d6a..710320f47 100644 --- a/crates/ra_syntax/src/yellow/mod.rs +++ b/crates/ra_syntax/src/yellow/mod.rs | |||
@@ -53,15 +53,37 @@ impl<R: TreeRoot<RaTypes>> Hash for SyntaxNode<R> { | |||
53 | } | 53 | } |
54 | } | 54 | } |
55 | 55 | ||
56 | impl SyntaxNode<OwnedRoot> { | 56 | impl SyntaxNode { |
57 | pub(crate) fn new(green: GreenNode, errors: Vec<SyntaxError>) -> SyntaxNode { | 57 | pub(crate) fn new(green: GreenNode, errors: Vec<SyntaxError>) -> SyntaxNode { |
58 | SyntaxNode(::rowan::SyntaxNode::new(green, errors)) | 58 | SyntaxNode(::rowan::SyntaxNode::new(green, errors)) |
59 | } | 59 | } |
60 | } | 60 | } |
61 | impl<'a> SyntaxNode<RefRoot<'a>> { | 61 | |
62 | #[derive(Debug, Clone, Copy, PartialEq, Eq)] | ||
63 | pub enum Direction { | ||
64 | Next, | ||
65 | Prev, | ||
66 | } | ||
67 | |||
68 | impl<'a> SyntaxNodeRef<'a> { | ||
62 | pub fn leaf_text(self) -> Option<&'a SmolStr> { | 69 | pub fn leaf_text(self) -> Option<&'a SmolStr> { |
63 | self.0.leaf_text() | 70 | self.0.leaf_text() |
64 | } | 71 | } |
72 | pub fn ancestors(self) -> impl Iterator<Item=SyntaxNodeRef<'a>> { | ||
73 | ::algo::generate(Some(self), |&node| node.parent()) | ||
74 | } | ||
75 | pub fn descendants(self) -> impl Iterator<Item=SyntaxNodeRef<'a>> { | ||
76 | ::algo::walk::walk(self).filter_map(|event| match event { | ||
77 | ::algo::walk::WalkEvent::Enter(node) => Some(node), | ||
78 | ::algo::walk::WalkEvent::Exit(_) => None, | ||
79 | }) | ||
80 | } | ||
81 | pub fn siblings(self, direction: Direction) -> impl Iterator<Item=SyntaxNodeRef<'a>> { | ||
82 | ::algo::generate(Some(self), move |&node| match direction { | ||
83 | Direction::Next => node.next_sibling(), | ||
84 | Direction::Prev => node.prev_sibling(), | ||
85 | }) | ||
86 | } | ||
65 | } | 87 | } |
66 | 88 | ||
67 | impl<R: TreeRoot<RaTypes>> SyntaxNode<R> { | 89 | impl<R: TreeRoot<RaTypes>> SyntaxNode<R> { |