dalbit_core/modifiers/
remove_number_literals.rs

1use 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}