microcad_lang_parse/ast/
mod.rs1pub mod def;
5mod expression;
6mod literal;
7mod source;
8mod statement;
9mod ty;
10
11use microcad_lang_base::{Id, Span};
12
13pub use expression::*;
14pub use literal::*;
15pub use source::*;
16pub use statement::*;
17pub use ty::*;
18
19#[derive(Debug, PartialEq, Hash, Eq)]
21#[allow(missing_docs)]
22pub struct Identifier {
23 pub span: Span,
24 pub name: Id,
25}
26
27impl Dummy for Identifier {
28 fn dummy(span: Span) -> Self {
29 Self {
30 span,
31 name: Id::default(),
32 }
33 }
34}
35
36#[derive(Debug)]
38#[allow(missing_docs)]
39pub struct Program {
40 pub span: Span,
41 pub statements: StatementList,
42}
43
44#[derive(Debug, Clone, PartialEq)]
46pub struct Whitespace(pub String);
47
48#[derive(Debug, Clone, PartialEq)]
49#[allow(missing_docs)]
50#[non_exhaustive]
51pub enum ItemExtra {
52 Comment(Comment),
53 Whitespace(Whitespace),
54}
55
56#[derive(Clone, Debug, PartialEq, Default)]
58#[allow(missing_docs)]
59pub struct ItemExtras {
60 pub leading: LeadingExtras,
61 pub trailing: TrailingExtras,
62}
63
64#[derive(Debug, Clone, PartialEq, Default)]
66#[allow(missing_docs)]
67pub struct TrailingExtras(pub Vec<ItemExtra>);
68
69#[derive(Debug, Clone, PartialEq, Default)]
71#[allow(missing_docs)]
72pub struct LeadingExtras(pub Vec<ItemExtra>);
73
74pub(crate) trait Dummy {
78 fn dummy(span: Span) -> Self;
79}