mod code_block;
pub mod declaration;
mod expression;
mod include_statement;
mod module;
mod program;
mod return_statement;
mod use_statement;
pub use code_block::*;
pub use declaration::*;
pub use expression::*;
pub(crate) use include_statement::IncludeStatement;
pub use module::{ParseModule, ParseSubmodule};
pub use program::{ParseProgram, TreeType};
pub use return_statement::*;
pub use use_statement::{ImportType, UseStatement};
use sway_types::span::Span;
#[derive(Debug, Clone)]
pub struct ParseTree {
pub root_nodes: Vec<AstNode>,
pub span: Span,
}
#[derive(Debug, Clone)]
pub struct AstNode {
pub content: AstNodeContent,
pub span: Span,
}
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Clone)]
pub enum AstNodeContent {
UseStatement(UseStatement),
Declaration(Declaration),
Expression(Expression),
ImplicitReturnExpression(Expression),
IncludeStatement(IncludeStatement),
}
impl ParseTree {
pub(crate) fn exclude_tests(&mut self) {
self.root_nodes.retain(|node| !node.is_test());
}
}
impl AstNode {
pub(crate) fn is_test(&self) -> bool {
if let AstNodeContent::Declaration(decl) = &self.content {
decl.is_test()
} else {
false
}
}
}