ezno_lib/transformers/
mod.rs1pub mod optimisations;
2
3use parser::{visiting::BlockItemMut, Declaration, Module, StatementOrDeclaration};
4
5pub struct ConstToLet;
6
7impl parser::visiting::VisitorMut<BlockItemMut<'_>, ()> for ConstToLet {
8 fn visit_mut(
9 &mut self,
10 item: &mut BlockItemMut,
11 _data: &mut (),
12 _chain: &parser::visiting::Chain,
13 ) {
14 if let BlockItemMut::StatementOrDeclaration(StatementOrDeclaration::Declaration(
15 Declaration::Variable(decl),
16 )) = item
17 {
18 if let parser::declarations::VariableDeclaration::ConstDeclaration {
19 declarations,
20 position,
21 } = decl
22 {
23 *decl = parser::declarations::VariableDeclaration::LetDeclaration {
24 declarations: declarations
25 .drain(..)
26 .map(|dec| parser::declarations::VariableDeclarationItem {
27 name: dec.name,
28 type_annotation: dec.type_annotation,
29 expression: Some(dec.expression),
30 position: dec.position,
31 })
32 .collect(),
33 position: *position,
34 };
35 }
36 }
37 }
38}
39
40pub fn filter_imports(m: &mut Module) {
42 m.items = m
43 .items
44 .drain(..)
45 .filter(|p| matches!(p, StatementOrDeclaration::Declaration(Declaration::Import(..))))
46 .collect();
47}