toml_parse/tkn_tree/
walk.rs1use 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}