cairo_language_common/
syntax_ext.rs1use cairo_lang_syntax::node::SyntaxNode;
2use salsa::Database;
3
4pub trait SyntaxNodeExt {
5 fn for_each_terminal<'db>(&self, db: &'db dyn Database, callback: impl FnMut(&SyntaxNode<'db>))
7 where
8 Self: 'db;
9}
10
11impl<'a> SyntaxNodeExt for SyntaxNode<'a> {
12 fn for_each_terminal<'db>(
13 &self,
14 db: &'db dyn Database,
15 mut callback: impl FnMut(&SyntaxNode<'db>),
16 ) where
17 Self: 'db,
18 {
19 for_each_terminals_ex(self, db, &mut callback)
20 }
21}
22
23fn for_each_terminals_ex<'db>(
24 node: &SyntaxNode<'db>,
25 db: &'db dyn Database,
26 callback: &mut impl FnMut(&SyntaxNode<'db>),
27) {
28 if node.green_node(db).kind.is_terminal() {
29 callback(node);
30 return;
31 }
32
33 for child in node.get_children(db) {
34 for_each_terminals_ex(child, db, callback);
35 }
36}