minusone 0.3.9

A script deobfuscator
Documentation
use error::MinusOneResult;
use ps::Powershell;
use ps::Powershell::Type;
use rule::RuleMut;
use tree::{ControlFlow, NodeMut};

#[derive(Default)]
pub struct ParseType;

impl<'a> RuleMut<'a> for ParseType {
    type Language = Powershell;

    fn enter(
        &mut self,
        _node: &mut NodeMut<'a, Self::Language>,
        _flow: ControlFlow,
    ) -> MinusOneResult<()> {
        Ok(())
    }

    fn leave(
        &mut self,
        node: &mut NodeMut<'a, Self::Language>,
        _flow: ControlFlow,
    ) -> MinusOneResult<()> {
        let view = node.view();
        if view.kind() == "type_name" {
            node.set(Type(view.text()?.to_lowercase()));
        } else if view.kind() == "type_spec" {
            if let Some(type_identifier) = view.child(0) {
                if let Some(type_identifier_data) = type_identifier.data() {
                    node.set(type_identifier_data.clone())
                }
            }
        } else if view.kind() == "array_type_name" {
            if let Some(type_name) = view.child(0) {
                if let Some(Type(type_name_str)) = type_name.data() {
                    node.set(Type(type_name_str.to_string() + "[]"))
                }
            }
        }

        Ok(())
    }
}