boseiju/lexer/tokens/intermediates/
control_flow.rs1#[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}