microcad_lang/syntax/statement/
statement_list.rs1use crate::syntax::*;
7use derive_more::Deref;
8use microcad_lang_base::{SrcRef, SrcReferrer};
9
10#[derive(Clone, Default, Deref)]
12pub struct StatementList(pub Vec<Statement>);
13
14impl std::fmt::Display for StatementList {
15 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
16 for statement in self.iter() {
17 writeln!(f, "{statement}")?;
18 }
19 Ok(())
20 }
21}
22
23impl std::fmt::Debug for StatementList {
24 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
25 for statement in self.iter() {
26 writeln!(f, "{statement:?}")?;
27 }
28 Ok(())
29 }
30}
31
32impl SrcReferrer for StatementList {
33 fn src_ref(&self) -> SrcRef {
34 if let (Some(first), Some(last)) = (self.first(), self.last()) {
35 SrcRef::merge(first, last)
36 } else {
37 SrcRef(None)
38 }
39 }
40}