microcad_lang/parse/
doc_block.rs1use crate::{parse::*, parser::*, syntax::DocBlock};
5use microcad_syntax::ast;
6
7impl FromAst for DocBlock {
8 type AstNode = ast::Comment;
9
10 fn from_ast(node: &Self::AstNode, context: &ParseContext) -> Result<Self, ParseError> {
11 let (summary, details) =
12 if let Some(line_num) = node.lines.iter().position(|line| line.trim().is_empty()) {
13 (
14 join_parts(&node.lines[0..line_num]),
15 Some(join_parts(&node.lines[line_num..])),
16 )
17 } else {
18 (node.lines.clone().join("\n"), None)
19 };
20
21 Ok(DocBlock {
22 summary,
23 details,
24 src_ref: context.src_ref(&node.span),
25 })
26 }
27}
28
29fn join_parts(parts: &[String]) -> String {
30 let mut result = String::with_capacity(64);
31 for part in parts {
32 result.push_str(part);
33 }
34 result
35}