Skip to main content

moxy_token/span/
delim.rs

1use crate::Span;
2
3/// The opening and closing spans of a delimited token group.
4#[derive(Debug, Copy, Clone)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize))]
6pub struct DelimSpan {
7    open: Span,
8    close: Span,
9}
10
11impl Default for DelimSpan {
12    fn default() -> Self {
13        Self::new(Span::call_site(), Span::call_site())
14    }
15}
16
17// Equality ignores the spans so AST nodes embedding a `DelimSpan` (directly or
18// via a delimiter token) compare structurally.
19impl PartialEq for DelimSpan {
20    fn eq(&self, _: &Self) -> bool {
21        true
22    }
23}
24
25impl Eq for DelimSpan {}
26
27impl std::hash::Hash for DelimSpan {
28    fn hash<H: std::hash::Hasher>(&self, _: &mut H) {}
29}
30
31impl DelimSpan {
32    #[inline]
33    pub fn new(open: Span, close: Span) -> Self {
34        Self { open, close }
35    }
36
37    #[inline]
38    pub fn open(&self) -> Span {
39        self.open
40    }
41
42    #[inline]
43    pub fn close(&self) -> Span {
44        self.close
45    }
46
47    #[inline]
48    pub fn span(&self) -> Span {
49        self.open.join(self.close)
50    }
51}
52
53impl From<DelimSpan> for Span {
54    #[inline]
55    fn from(value: DelimSpan) -> Self {
56        value.span()
57    }
58}