fluidattacks-blends-domain 0.41.0

Blends functional core: pure AST graph to syntax graph (no_std)
Documentation
use crate::syntax::readers::php;
use crate::syntax::SyntaxReader;
#[must_use]
#[allow(
    clippy::too_many_lines,
    reason = "exhaustive 1:1 dispatch table: one arm per node label, nothing to extract"
)]
pub fn dispatcher(node_type: &str) -> Option<SyntaxReader> {
    match node_type {
        "program" => Some(php::program::reader),
        "boolean" => Some(php::boolean_literal::reader),
        "float" | "integer" => Some(php::number_literal::reader),
        "encapsed_string" | "string" => Some(php::string_literal::reader),
        "comment" => Some(php::comment::reader),
        "text_interpolation" => Some(php::text_interpolation::reader),
        "name" | "parent" | "self" => Some(php::identifier::reader),
        "null" => Some(php::reserved_word::reader),
        "class_constant_access_expression" => Some(php::constants_access::reader),
        "variable_name" => Some(php::variable_name::reader),
        "augmented_assignment_expression" | "binary_expression" => {
            Some(php::binary_expression::reader)
        }
        "unary_op_expression" => Some(php::unary_op_expression::reader),
        "update_expression" => Some(php::update_expression::reader),
        "=>" => Some(php::arrow::reader),
        "member_access_expression" => Some(php::member_access::reader),
        "scoped_property_access_expression" => Some(php::property_access::reader),
        "subscript_expression" => Some(php::subscript::reader),
        "object_creation_expression" => Some(php::object_creation::reader),
        "array_creation_expression" => Some(php::array_creation::reader),
        "pair" => Some(php::pair::reader),
        "arguments" => Some(php::argument_list::reader),
        "echo" => Some(php::echo_arguments::reader),
        "dynamic_variable_name" => Some(php::expression_statement::reader),
        "namespace_definition" => Some(php::namespace_definition::reader),
        "class_declaration" => Some(php::class_declaration::reader),
        "arrow_function" | "function_definition" | "method_declaration" => {
            Some(php::method_declaration::reader)
        }
        "anonymous_function" => Some(php::anon_method_declaration::reader),
        "simple_parameter" => Some(php::parameter::reader),
        "formal_parameters" => Some(php::parameter_list::reader),
        "property_declaration" => Some(php::variable_declaration::reader),
        "const_declaration" => Some(php::const_declaration::reader),
        "namespace_use_declaration" => Some(php::use_import::reader),
        "use_declaration" => Some(php::inner_use_import::reader),
        "include_expression"
        | "include_once_expression"
        | "require_expression"
        | "require_once_expression" => Some(php::import_statement::reader),
        "assignment_expression" => Some(php::assignment::reader),
        "while_statement" => Some(php::while_statement::reader),
        "for_statement" => Some(php::for_statement::reader),
        "foreach_statement" => Some(php::for_each_statement::reader),
        "switch_statement" => Some(php::switch_statement::reader),
        "switch_block" => Some(php::switch_block::reader),
        "default_statement" => Some(php::default_statement::reader),
        "case_statement" => Some(php::case_statement::reader),
        "break_statement" => Some(php::break_statement::reader),
        "continue_statement" => Some(php::continue_statement::reader),
        "return_statement" => Some(php::return_statement::reader),
        "throw_expression" => Some(php::throw_statement::reader),
        "try_statement" => Some(php::try_statement::reader),
        "catch_clause" => Some(php::catch_clause::reader),
        "compound_statement" | "declaration_list" => Some(php::execution_block::reader),
        "finally_clause" => Some(php::finally_clause::reader),
        "function_call_expression" | "member_call_expression" => {
            Some(php::method_invocation::reader)
        }
        "scoped_call_expression" => Some(php::scoped_invocation::reader),
        "echo_statement" | "exit_statement" | "print_intrinsic" => {
            Some(php::print_statement::reader)
        }
        "if_statement" | "else_if_clause" => Some(php::if_statement::reader),
        "argument" => Some(php::argument::reader),
        _ => None,
    }
}

#[cfg(test)]
mod tests {
    use super::dispatcher;
    #[test]
    #[allow(
        clippy::too_many_lines,
        reason = "one assertion per mapped node label, nothing to extract"
    )]
    fn maps_the_implemented_php_node_types() {
        assert!(dispatcher("program").is_some());
        assert!(dispatcher("boolean").is_some());
        assert!(dispatcher("float").is_some());
        assert!(dispatcher("integer").is_some());
        assert!(dispatcher("encapsed_string").is_some());
        assert!(dispatcher("string").is_some());
        assert!(dispatcher("comment").is_some());
        assert!(dispatcher("text_interpolation").is_some());
        assert!(dispatcher("name").is_some());
        assert!(dispatcher("parent").is_some());
        assert!(dispatcher("self").is_some());
        assert!(dispatcher("null").is_some());
        assert!(dispatcher("class_constant_access_expression").is_some());
        assert!(dispatcher("variable_name").is_some());
        assert!(dispatcher("augmented_assignment_expression").is_some());
        assert!(dispatcher("binary_expression").is_some());
        assert!(dispatcher("unary_op_expression").is_some());
        assert!(dispatcher("update_expression").is_some());
        assert!(dispatcher("=>").is_some());
        assert!(dispatcher("member_access_expression").is_some());
        assert!(dispatcher("scoped_property_access_expression").is_some());
        assert!(dispatcher("subscript_expression").is_some());
        assert!(dispatcher("object_creation_expression").is_some());
        assert!(dispatcher("array_creation_expression").is_some());
        assert!(dispatcher("pair").is_some());
        assert!(dispatcher("arguments").is_some());
        assert!(dispatcher("echo").is_some());
        assert!(dispatcher("dynamic_variable_name").is_some());
        assert!(dispatcher("namespace_definition").is_some());
        assert!(dispatcher("class_declaration").is_some());
        assert!(dispatcher("arrow_function").is_some());
        assert!(dispatcher("function_definition").is_some());
        assert!(dispatcher("method_declaration").is_some());
        assert!(dispatcher("anonymous_function").is_some());
        assert!(dispatcher("simple_parameter").is_some());
        assert!(dispatcher("formal_parameters").is_some());
        assert!(dispatcher("property_declaration").is_some());
        assert!(dispatcher("const_declaration").is_some());
        assert!(dispatcher("namespace_use_declaration").is_some());
        assert!(dispatcher("use_declaration").is_some());
        assert!(dispatcher("include_expression").is_some());
        assert!(dispatcher("include_once_expression").is_some());
        assert!(dispatcher("require_expression").is_some());
        assert!(dispatcher("require_once_expression").is_some());
        assert!(dispatcher("assignment_expression").is_some());
        assert!(dispatcher("while_statement").is_some());
        assert!(dispatcher("for_statement").is_some());
        assert!(dispatcher("foreach_statement").is_some());
        assert!(dispatcher("switch_statement").is_some());
        assert!(dispatcher("switch_block").is_some());
        assert!(dispatcher("default_statement").is_some());
        assert!(dispatcher("case_statement").is_some());
        assert!(dispatcher("break_statement").is_some());
        assert!(dispatcher("continue_statement").is_some());
        assert!(dispatcher("return_statement").is_some());
        assert!(dispatcher("throw_expression").is_some());
        assert!(dispatcher("try_statement").is_some());
        assert!(dispatcher("catch_clause").is_some());
        assert!(dispatcher("compound_statement").is_some());
        assert!(dispatcher("declaration_list").is_some());
        assert!(dispatcher("finally_clause").is_some());
        assert!(dispatcher("function_call_expression").is_some());
        assert!(dispatcher("member_call_expression").is_some());
        assert!(dispatcher("scoped_call_expression").is_some());
        assert!(dispatcher("echo_statement").is_some());
        assert!(dispatcher("exit_statement").is_some());
        assert!(dispatcher("print_intrinsic").is_some());
        assert!(dispatcher("if_statement").is_some());
        assert!(dispatcher("else_if_clause").is_some());
        assert!(dispatcher("argument").is_some());
    }
}