dalbit_core/modifiers/
remove_number_literals.rs1use darklua_core::{
2 nodes::{Block, DecimalNumber, Expression, NumberExpression},
3 process::{DefaultVisitor, NodeProcessor, NodeVisitor},
4 rules::{Context, FlawlessRule, RuleConfiguration, RuleConfigurationError, RuleProperties},
5};
6
7pub const REMOVE_NUMBER_LITERALS_MODIFIER_NAME: &str = "remove_number_literals";
8
9struct Processor {}
10
11impl NodeProcessor for Processor {
12 fn process_expression(&mut self, exp: &mut Expression) {
13 if let Expression::Number(num_exp) = exp {
14 match num_exp {
15 NumberExpression::Binary(binary) => {
16 let value = binary.compute_value();
17 *exp = DecimalNumber::new(value).into();
18 }
19 NumberExpression::Decimal(decimal) => {
20 let value = decimal.compute_value();
21 *exp = DecimalNumber::new(value).into();
22 }
23 _ => {}
24 }
25 }
26 }
27}
28
29#[derive(Default, Debug)]
30pub struct RemoveNumberLiterals {}
31
32impl FlawlessRule for RemoveNumberLiterals {
33 fn flawless_process(&self, block: &mut Block, _: &Context) {
34 let mut processor = Processor {};
35 DefaultVisitor::visit_block(block, &mut processor);
36 }
37}
38
39impl RuleConfiguration for RemoveNumberLiterals {
40 fn configure(&mut self, _: RuleProperties) -> Result<(), RuleConfigurationError> {
41 Ok(())
42 }
43
44 fn get_name(&self) -> &'static str {
45 REMOVE_NUMBER_LITERALS_MODIFIER_NAME
46 }
47
48 fn serialize_to_properties(&self) -> RuleProperties {
49 RuleProperties::new()
50 }
51}