Skip to main content

microcad_lang/syntax/statement/
statement_list.rs

1// Copyright © 2025-2026 The µcad authors <info@microcad.xyz>
2// SPDX-License-Identifier: AGPL-3.0-or-later
3
4//! Statement list syntax element.
5
6use crate::syntax::*;
7use derive_more::Deref;
8use microcad_lang_base::{SrcRef, SrcReferrer};
9
10/// A list of statements.
11#[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}