Skip to main content

ezno_lib/transformers/
mod.rs

1pub 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
40// Removes non import statements
41pub 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}