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