aldrin_parser/ast/
comment.rs1use 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}