microcad_lang/syntax/statement/
statement_list.rs

1// Copyright © 2025 The µcad authors <info@ucad.xyz>
2// SPDX-License-Identifier: AGPL-3.0-or-later
3
4//! Statement list syntax element.
5
6use crate::{src_ref::*, syntax::*};
7use derive_more::Deref;
8
9/// A list of statements.
10#[derive(Clone, Default, Deref)]
11pub struct StatementList(pub Vec<Statement>);
12
13impl std::fmt::Display for StatementList {
14    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15        for statement in self.iter() {
16            writeln!(f, "{statement}")?;
17        }
18        Ok(())
19    }
20}
21
22impl std::fmt::Debug for StatementList {
23    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24        for statement in self.iter() {
25            writeln!(f, "{statement:?}")?;
26        }
27        Ok(())
28    }
29}
30
31impl SrcReferrer for StatementList {
32    fn src_ref(&self) -> SrcRef {
33        if let (Some(first), Some(last)) = (self.first(), self.last()) {
34            SrcRef::merge(first, last)
35        } else {
36            SrcRef(None)
37        }
38    }
39}