replace usages of algo::generate with iter::successors from std

This commit is contained in:
Robin Freyler
2019-04-13 16:43:49 +02:00
parent 8887782c4a
commit 6aae0cf7fa
6 changed files with 17 additions and 24 deletions

View File

@@ -46,13 +46,3 @@ pub fn non_trivia_sibling(element: SyntaxElement, direction: Direction) -> Optio
pub fn find_covering_element(root: &SyntaxNode, range: TextRange) -> SyntaxElement {
root.0.covering_node(range).into()
}
// Replace with `std::iter::successors` in `1.34.0`
pub fn generate<T>(seed: Option<T>, step: impl Fn(&T) -> Option<T>) -> impl Iterator<Item = T> {
::itertools::unfold(seed, move |slot| {
slot.take().map(|curr| {
*slot = step(&curr);
curr
})
})
}

View File

@@ -1,8 +1,9 @@
use std::marker::PhantomData;
use std::{
marker::PhantomData,
iter::successors,
};
use crate::{
AstNode, SourceFile, SyntaxKind, SyntaxNode, TextRange,
algo::generate,
};
/// A pointer to a syntax node inside a file. It can be used to remember a
@@ -19,7 +20,7 @@ impl SyntaxNodePtr {
}
pub fn to_node(self, source_file: &SourceFile) -> &SyntaxNode {
generate(Some(source_file.syntax()), |&node| {
successors(Some(source_file.syntax()), |&node| {
node.children().find(|it| self.range.is_subrange(&it.range()))
})
.find(|it| it.range() == self.range && it.kind() == self.kind)

View File

@@ -10,6 +10,7 @@ use std::{
fmt::{self, Write},
any::Any,
borrow::Borrow,
iter::successors,
};
use ra_parser::ParseError;
@@ -195,7 +196,7 @@ impl SyntaxNode {
}
pub fn ancestors(&self) -> impl Iterator<Item = &SyntaxNode> {
crate::algo::generate(Some(self), |&node| node.parent())
successors(Some(self), |&node| node.parent())
}
pub fn descendants(&self) -> impl Iterator<Item = &SyntaxNode> {
@@ -213,7 +214,7 @@ impl SyntaxNode {
}
pub fn siblings(&self, direction: Direction) -> impl Iterator<Item = &SyntaxNode> {
crate::algo::generate(Some(self), move |&node| match direction {
successors(Some(self), move |&node| match direction {
Direction::Next => node.next_sibling(),
Direction::Prev => node.prev_sibling(),
})
@@ -224,7 +225,7 @@ impl SyntaxNode {
direction: Direction,
) -> impl Iterator<Item = SyntaxElement> {
let me: SyntaxElement = self.into();
crate::algo::generate(Some(me), move |el| match direction {
successors(Some(me), move |el| match direction {
Direction::Next => el.next_sibling_or_token(),
Direction::Prev => el.prev_sibling_or_token(),
})
@@ -373,7 +374,7 @@ impl<'a> SyntaxToken<'a> {
direction: Direction,
) -> impl Iterator<Item = SyntaxElement<'a>> {
let me: SyntaxElement = (*self).into();
crate::algo::generate(Some(me), move |el| match direction {
successors(Some(me), move |el| match direction {
Direction::Next => el.next_sibling_or_token(),
Direction::Prev => el.prev_sibling_or_token(),
})