use compactp_syntax::{SyntaxKind, SyntaxNode, SyntaxToken};
use rowan::NodeOrToken;
use crate::AstNode;
pub(crate) fn child_token(parent: &SyntaxNode, kind: SyntaxKind) -> Option<SyntaxToken> {
parent
.children_with_tokens()
.filter_map(NodeOrToken::into_token)
.find(|t| t.kind() == kind)
}
pub(crate) fn child_node<N: AstNode>(parent: &SyntaxNode) -> Option<N> {
parent.children().find_map(N::cast)
}
pub(crate) fn children_nodes<N: AstNode>(parent: &SyntaxNode) -> impl Iterator<Item = N> {
parent.children().filter_map(N::cast)
}