aldrin_parser/ast/
comment.rs

1use crate::grammar::Rule;
2use crate::Span;
3use pest::iterators::Pair;
4
5#[derive(Debug, Clone)]
6pub struct Comment {
7    span: Span,
8    value: String,
9}
10
11impl Comment {
12    pub(crate) fn parse(pair: Pair<Rule>) -> Self {
13        assert_eq!(pair.as_rule(), Rule::comment);
14
15        Self {
16            span: Span::from_pair(&pair),
17            value: pair.as_str().to_owned(),
18        }
19    }
20
21    pub fn span(&self) -> Span {
22        self.span
23    }
24
25    pub fn span_inner(&self) -> Span {
26        let value = &self.value[2..];
27
28        Span {
29            start: self.span.start + 2 + value.starts_with(' ') as usize,
30            end: self.span.end - value.len() + value.trim_end().len(),
31        }
32    }
33
34    pub fn value(&self) -> &str {
35        &self.value
36    }
37
38    pub fn value_inner(&self) -> &str {
39        let value = &self.value[2..];
40        value.strip_prefix(' ').unwrap_or(value).trim_end()
41    }
42}