fluidattacks-blends-domain 0.41.0

Blends functional core: pure AST graph to syntax graph (no_std)
Documentation
use crate::syntax::readers::rust;
use crate::syntax::SyntaxReader;

pub fn dispatcher(node_type: &str) -> Option<SyntaxReader> {
    match node_type {
        // "=" => None,
        "arguments" => Some(rust::arguments::reader),
        // "array_expression" => None,
        // "assignment_expression" => None,
        // "abstract_type" => None,
        // "async_block" => None,
        "attribute_item" => Some(rust::attribute_item::reader),
        // "await_expression" => None,
        // "binary_expression" => None,
        // "block" => None,
        "block_comment" => Some(rust::block_comment::reader),
        "boolean_literal" => Some(rust::boolean_literal::reader),
        // "break_expression" => None,
        // "call_expression" => None,
        "char_literal" | "raw_string_literal" | "string_literal" => {
            Some(rust::string_literal::reader)
        }
        // "closure_expression" => None,
        // "closure_parameters" => None,
        // "compound_assignment_expr" => None,
        // "const_block" => None,
        // "const_item" => None,
        // "continue_expression" => None,
        // "declaration_list" => None,
        "doc_comment" | "line_comment" => Some(rust::comment::reader),
        // "dynamic_type" => None,
        "empty_statement" => Some(rust::empty_statement::reader),
        // "enum_item" => None,
        // "enum_variant" => None,
        // "enum_variant_list" => None,
        "extern_crate_declaration" => Some(rust::extern_crate_declaration::reader),
        // "expression_statement" => None,
        // "field_declaration" => None,
        // "field_declaration_list" => None,
        // "field_expression" => None,
        // "field_initializer" => None,
        // "field_initializer_list" => None,
        "float_literal" | "integer_literal" => Some(rust::number_literal::reader),
        // "for_expression" => None,
        // "function_item" => None,
        // "function_signature_item" => None,
        // "generic_function" => None,
        // "generic_type" => None,
        "identifier" | "self" | "shorthand_field_identifier" | "type_identifier" => {
            Some(rust::identifier::reader)
        } // not implemented with node builders
        // "if_expression" => None,
        // "impl_item" => None,
        // "index_expression" => None,
        "inner_attribute_item" => Some(rust::inner_attribute_item::reader),
        // "let_condition" => None,
        // "let_declaration" => None,
        // "loop_expression" => None,
        // "macro_definition" => None,
        // "macro_invocation" => None,
        // "match_arm" => None,
        // "mod_item" => None,
        // "match_block" => None,
        // "match_expression" => None,
        // "or_pattern" => None,
        // "parameter" => None,
        // "parameters" => None,
        // "parenthesized_expression" => None,
        // "range_expression" => None,
        // "ref_pattern" => None,
        // "reference_expression" => None,
        // "return_expression" => None,
        "scoped_identifier" | "scoped_type_identifier" => Some(rust::scoped_identifier::reader), // not implemented with node builders
        // "self_parameter" => None,
        // "shorthand_field_initializer" => None,
        // "slice_pattern" => None,
        "source_file" => Some(rust::source_file::reader),
        // "static_item" => None,
        // "struct_expression" => None,
        // "struct_item" => None,
        // "struct_pattern" => None,
        // "token_tree" => None,
        // "trait_bounds" => None,
        // "trait_item" => None,
        // "try_expression" => None,
        // "tuple_expression" => None,
        // "tuple_pattern" => None,
        // "tuple_struct_pattern" => None,
        // "type_arguments" => None,
        // "type_cast_expression" => None,
        // "type_item" => None,
        // "unary_expression" => None,
        // "union_item" => None,
        // "unsafe_block" => None,
        // "use_declaration" => None,
        // "while_expression" => None,
        _ => None,
    }
}

#[cfg(test)]
mod tests {
    use super::dispatcher;

    #[test]
    fn maps_the_implemented_rust_node_types() {
        assert!(dispatcher("source_file").is_some());
        assert!(dispatcher("boolean_literal").is_some());
        assert!(dispatcher("integer_literal").is_some());
        assert!(dispatcher("float_literal").is_some());
        assert!(dispatcher("string_literal").is_some());
        assert!(dispatcher("char_literal").is_some());
        assert!(dispatcher("raw_string_literal").is_some());
        assert!(dispatcher("identifier").is_some());
        assert!(dispatcher("self").is_some());
        assert!(dispatcher("shorthand_field_identifier").is_some());
        assert!(dispatcher("type_identifier").is_some());
        assert!(dispatcher("scoped_identifier").is_some());
        assert!(dispatcher("scoped_type_identifier").is_some());
        assert!(dispatcher("line_comment").is_some());
        assert!(dispatcher("block_comment").is_some());
        assert!(dispatcher("doc_comment").is_some());
        assert!(dispatcher("inner_attribute_item").is_some());
        assert!(dispatcher("attribute_item").is_some());
        assert!(dispatcher("extern_crate_declaration").is_some());
        assert!(dispatcher("empty_statement").is_some());
    }
}