teo_parser/ast/
doc_comment.rs

1
2use serde::Serialize;
3use crate::ast::span::Span;
4use crate::format::Writer;
5use crate::impl_node_defaults;
6use crate::traits::write::Write;
7
8#[derive(Debug, Clone, Serialize, PartialEq, Eq, Hash)]
9pub struct DocComment {
10    pub(crate) span: Span,
11    pub(crate) path: Vec<usize>,
12    pub(crate) name: Option<String>,
13    pub(crate) desc: Option<String>,
14}
15
16impl_node_defaults!(DocComment);
17
18impl DocComment {
19
20    pub fn name(&self) -> Option<&str> {
21        self.name.as_ref().map(|n| n.as_str())
22    }
23
24    pub fn desc(&self) -> Option<&str> {
25        self.desc.as_ref().map(|n| n.as_str())
26    }
27}
28
29impl Write for DocComment {
30    fn write<'a>(&'a self, writer: &mut Writer<'a>) {
31        let mut contents = vec![];
32        if let Some(name) = self.name() {
33            contents.push("/// @name ");
34            contents.push(name);
35            contents.push("\n");
36        }
37        if let Some(desc) = self.desc() {
38            contents.push("/// ");
39            contents.push(desc);
40            contents.push("\n");
41        }
42        writer.write_contents(self, contents);
43
44    }
45}