tinymist_analysis/ty/
select.rs1use super::{Iface, IfaceChecker};
2use crate::ty::def::*;
3
4pub trait SelectChecker: TyCtx {
6 fn select(&mut self, sig: Iface, key: &Interned<str>, pol: bool);
8}
9
10impl Ty {
11 pub fn select(&self, key: &Interned<str>, pol: bool, checker: &mut impl SelectChecker) {
13 SelectKeyChecker(checker, key).ty(self, pol);
14 }
15}
16
17#[derive(BindTyCtx)]
19#[bind(0)]
20pub struct SelectKeyChecker<'a, T: TyCtx>(&'a mut T, &'a Interned<str>);
21
22impl<T: SelectChecker> SelectKeyChecker<'_, T> {
24 fn ty(&mut self, ty: &Ty, pol: bool) {
25 ty.iface_surface(pol, self)
26 }
27}
28
29impl<T: SelectChecker> IfaceChecker for SelectKeyChecker<'_, T> {
31 fn check(
32 &mut self,
33 iface: Iface,
34 _ctx: &mut super::IfaceCheckContext,
35 pol: bool,
36 ) -> Option<()> {
37 self.0.select(iface, self.1, pol);
38 Some(())
39 }
40}