boseiju/lexer/tokens/intermediates/
control_flow.rs

1#[derive(idris_derive::Idris)]
2#[derive(serde::Serialize, serde::Deserialize)]
3#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
4pub enum ControlFlow {
5    NewLine {
6        #[cfg(feature = "spanned_tree")]
7        span: crate::ability_tree::span::TreeSpan,
8    },
9    Comma {
10        #[cfg(feature = "spanned_tree")]
11        span: crate::ability_tree::span::TreeSpan,
12    },
13    Dot {
14        #[cfg(feature = "spanned_tree")]
15        span: crate::ability_tree::span::TreeSpan,
16    },
17    Colons {
18        #[cfg(feature = "spanned_tree")]
19        span: crate::ability_tree::span::TreeSpan,
20    },
21    LongDash {
22        #[cfg(feature = "spanned_tree")]
23        span: crate::ability_tree::span::TreeSpan,
24    },
25    Bullet {
26        #[cfg(feature = "spanned_tree")]
27        span: crate::ability_tree::span::TreeSpan,
28    },
29}
30
31#[cfg(feature = "spanned_tree")]
32impl ControlFlow {
33    pub fn span(&self) -> crate::ability_tree::span::TreeSpan {
34        match self {
35            Self::NewLine { span } => *span,
36            Self::Comma { span } => *span,
37            Self::Dot { span } => *span,
38            Self::Colons { span } => *span,
39            Self::LongDash { span } => *span,
40            Self::Bullet { span } => *span,
41        }
42    }
43}
44
45impl ControlFlow {
46    pub fn try_from_span(span: &crate::lexer::Span) -> Option<Self> {
47        match span.text {
48            "\n" => Some(ControlFlow::NewLine {
49                #[cfg(feature = "spanned_tree")]
50                span: span.into(),
51            }),
52            "," => Some(ControlFlow::Comma {
53                #[cfg(feature = "spanned_tree")]
54                span: span.into(),
55            }),
56            "." => Some(ControlFlow::Dot {
57                #[cfg(feature = "spanned_tree")]
58                span: span.into(),
59            }),
60            ":" => Some(ControlFlow::Colons {
61                #[cfg(feature = "spanned_tree")]
62                span: span.into(),
63            }),
64            "—" => Some(ControlFlow::LongDash {
65                #[cfg(feature = "spanned_tree")]
66                span: span.into(),
67            }),
68            "•" => Some(ControlFlow::Bullet {
69                #[cfg(feature = "spanned_tree")]
70                span: span.into(),
71            }),
72            _ => None,
73        }
74    }
75}