mod expression;
mod literal;
mod source;
mod statement;
mod ty;
use microcad_lang_base::{Id, Span};
pub use expression::*;
pub use literal::*;
pub use source::*;
pub use statement::*;
pub use ty::*;
#[derive(Debug, PartialEq, Hash, Eq)]
#[allow(missing_docs)]
pub struct Identifier {
pub span: Span,
pub name: Id,
}
impl Dummy for Identifier {
fn dummy(span: Span) -> Self {
Self {
span,
name: Id::default(),
}
}
}
#[derive(Debug)]
#[allow(missing_docs)]
pub struct Program {
pub span: Span,
pub statements: StatementList,
}
#[derive(Clone, Debug, PartialEq, Default)]
#[allow(missing_docs)]
pub struct ItemExtras {
pub leading: LeadingExtras,
pub trailing: TrailingExtras,
}
#[derive(Debug, Clone, PartialEq, Default)]
#[allow(missing_docs)]
pub struct TrailingExtras(pub Vec<ItemExtra>);
#[derive(Debug, Clone, PartialEq, Default)]
#[allow(missing_docs)]
pub struct LeadingExtras(pub Vec<ItemExtra>);
#[derive(Debug, Clone, PartialEq)]
#[allow(missing_docs)]
#[non_exhaustive]
pub enum ItemExtra {
Comment(Comment),
Whitespace(String),
}
pub(crate) trait Dummy {
fn dummy(span: Span) -> Self;
}