1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use rnode::{Visit, VisitWith};
use stc_ts_types::Type;
pub struct TypeFinder {
found: bool,
check: fn(&Type) -> bool,
}
impl TypeFinder {
pub fn find<N>(node: &N, check: fn(&Type) -> bool) -> bool
where
N: VisitWith<Self>,
{
let mut v = TypeFinder { found: false, check };
node.visit_with(&mut v);
v.found
}
}
impl Visit<Type> for TypeFinder {
fn visit(&mut self, ty: &Type) {
if self.found {
return;
}
if (self.check)(ty) {
self.found = true;
return;
}
ty.visit_children_with(self);
}
}