use oxc_ast::ast::*;
pub struct TopLevelStatementsStore<'a> {
stmts: Vec<Statement<'a>>,
}
impl<'a> TopLevelStatementsStore<'a> {
pub fn new() -> Self {
Self { stmts: vec![] }
}
pub fn insert_statement(&mut self, stmt: Statement<'a>) {
self.stmts.push(stmt);
}
pub fn insert_statements<I: IntoIterator<Item = Statement<'a>>>(&mut self, stmts: I) {
self.stmts.extend(stmts);
}
}
impl<'a> TopLevelStatementsStore<'a> {
pub(crate) fn insert_into_program(&mut self, program: &mut Program<'a>) {
if self.stmts.is_empty() {
return;
}
let index = program
.body
.iter()
.position(|stmt| !matches!(stmt, Statement::ImportDeclaration(_)))
.unwrap_or(program.body.len());
program.body.splice(index..index, self.stmts.drain(..));
}
}