toml_parse/tkn_tree/
walk.rs

1use rowan::WalkEvent;
2
3use super::syntax::{SyntaxElement, SyntaxNode, SyntaxToken};
4use super::TomlKind;
5
6pub fn walk(node: &SyntaxNode) -> impl Iterator<Item = SyntaxElement> {
7    node.preorder_with_tokens().filter_map(|event| match event {
8        WalkEvent::Enter(element) => Some(element),
9        WalkEvent::Leave(_) => None,
10    })
11}
12
13pub fn walk_tokens(node: &SyntaxNode) -> impl Iterator<Item = SyntaxToken> {
14    walk(node).filter_map(|element| match element {
15        SyntaxElement::Token(token) => Some(token),
16        _ => None,
17    })
18}
19pub fn walk_tokens_non_ws(node: &SyntaxNode) -> impl Iterator<Item = SyntaxToken> {
20    walk(node).filter_map(|element| match element {
21        SyntaxElement::Token(token) if token.kind() != TomlKind::Whitespace => Some(token),
22        _ => None,
23    })
24}