From 407ebbc552fd9a8e73a9e46873ab834c54cea967 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 31 Jul 2018 13:49:03 +0300 Subject: More fool-proof API --- src/yellow/syntax.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'src/yellow/syntax.rs') diff --git a/src/yellow/syntax.rs b/src/yellow/syntax.rs index 58e8ab9b6..41dcf3761 100644 --- a/src/yellow/syntax.rs +++ b/src/yellow/syntax.rs @@ -6,8 +6,10 @@ use { TextRange, TextUnit, }; -pub trait TreeRoot: Deref + Clone {} +pub trait TreeRoot: Deref + Clone {} + impl TreeRoot for Arc {} + impl<'a> TreeRoot for &'a SyntaxRoot {} #[derive(Clone, Copy)] @@ -18,14 +20,13 @@ pub struct SyntaxNode> { red: ptr::NonNull, } -impl PartialEq> for SyntaxNode { +impl PartialEq> for SyntaxNode { fn eq(&self, other: &SyntaxNode) -> bool { self.red == other.red } } -impl Eq for SyntaxNode { -} +impl Eq for SyntaxNode {} pub type SyntaxNodeRef<'a> = SyntaxNode<&'a SyntaxRoot>; @@ -88,7 +89,7 @@ impl SyntaxNode { (0..n_children).map(move |i| { SyntaxNode { root: self.root.clone(), - red: red.nth_child(i), + red: red.get_child(i).unwrap(), } }) } @@ -109,12 +110,10 @@ impl SyntaxNode { let red = self.red(); let parent = self.parent()?; let next_sibling_idx = red.index_in_parent()? + 1; - if next_sibling_idx == parent.red().n_children() { - return None; - } + let sibling_red = parent.red().get_child(next_sibling_idx)?; Some(SyntaxNode { root: self.root.clone(), - red: parent.red().nth_child(next_sibling_idx), + red: sibling_red, }) } -- cgit v1.2.3