use crate::syntax::readers::c_sharp;
use crate::syntax::SyntaxReader;
#[must_use]
#[allow(
clippy::too_many_lines,
reason = "one match arm per migrated c# node type; grows with the migration"
)]
pub fn dispatcher(node_type: &str) -> Option<SyntaxReader> {
match node_type {
"accessor_declaration" => Some(c_sharp::accessor_declaration::reader),
"anonymous_object_creation_expression" => Some(c_sharp::anonymous_object_creation::reader),
"argument" | "attribute_argument" => Some(c_sharp::argument::reader),
"argument_list" | "attribute_argument_list" => Some(c_sharp::argument_list::reader),
"array_creation_expression" | "implicit_array_creation_expression" => {
Some(c_sharp::array_creation_expression::reader)
}
"arrow_expression_clause" => Some(c_sharp::arrow_expression_clause::reader),
"assignment_expression" => Some(c_sharp::assignment_expression::reader),
"attribute" => Some(c_sharp::attribute::reader),
"attribute_list" => Some(c_sharp::attribute_list::reader),
"binary_expression" => Some(c_sharp::binary_expression::reader),
"block" => Some(c_sharp::execution_block::reader),
"boolean_literal" => Some(c_sharp::boolean_literal::reader),
"bracketed_argument_list" => Some(c_sharp::bracketed_argument_list::reader),
"break_statement" => Some(c_sharp::break_statement::reader),
"cast_expression" => Some(c_sharp::cast_expression::reader),
"catch_clause" => Some(c_sharp::catch_clause::reader),
"catch_declaration" => Some(c_sharp::catch_declaration::reader),
"class_declaration" => Some(c_sharp::class_declaration::reader),
"character_literal" | "predefined_type" | "string_literal" | "verbatim_string_literal" => {
Some(c_sharp::string_literal::reader)
}
"comment" => Some(c_sharp::comment::reader),
"compilation_unit" => Some(c_sharp::compilation_unit::reader),
"conditional_access_expression" => Some(c_sharp::conditional_access_expression::reader),
"constructor_declaration" => Some(c_sharp::constructor_declaration::reader),
"continue_statement" => Some(c_sharp::continue_statement::reader),
"declaration_list" => Some(c_sharp::declaration_block::reader),
"do_statement" => Some(c_sharp::do_statement::reader),
"element_access_expression" => Some(c_sharp::element_access_expression::reader),
"element_binding_expression" => Some(c_sharp::element_binding_expression::reader),
"expression_statement" => Some(c_sharp::expression_statement::reader),
"field_declaration" | "variable_declaration" => Some(c_sharp::variable_declaration::reader),
"file_scoped_namespace_declaration" => {
Some(c_sharp::file_scoped_namespace_declaration::reader)
}
"finally_clause" => Some(c_sharp::finally_clause::reader),
"for_statement" => Some(c_sharp::for_statement::reader),
"foreach_statement" => Some(c_sharp::for_each_statement::reader),
"global_statement" => Some(c_sharp::global_statement::reader),
"identifier" => Some(c_sharp::identifier::reader),
"conditional_expression" | "if_statement" => Some(c_sharp::if_statement::reader),
"implicit_parameter" => Some(c_sharp::implicit_parameter::reader),
"initializer_expression" => Some(c_sharp::initializer_expression::reader),
"integer_literal" | "real_literal" => Some(c_sharp::number_literal::reader),
"interface_declaration" => Some(c_sharp::interface_declaration::reader),
"interpolated_string_expression" | "interpolation_brace" => {
Some(c_sharp::interpolated_string_expression::reader)
}
"interpolation" => Some(c_sharp::interpolation::reader),
"invocation_expression" => Some(c_sharp::invocation_expression::reader),
"lambda_expression" => Some(c_sharp::lambda_expression::reader),
"local_declaration_statement" => Some(c_sharp::local_declaration_statement::reader),
"local_function_statement" | "method_declaration" => {
Some(c_sharp::method_declaration::reader)
}
"member_access_expression" => Some(c_sharp::member_access_expression::reader),
"member_binding_expression" => Some(c_sharp::member_binding_expression::reader),
"namespace_declaration" => Some(c_sharp::namespace_declaration::reader),
"null_literal" => Some(c_sharp::null_literal::reader),
"object_creation_expression" => Some(c_sharp::object_creation_expression::reader),
"parameter" => Some(c_sharp::parameter::reader),
"parameter_list" => Some(c_sharp::parameter_list::reader),
"parenthesized_expression" => Some(c_sharp::parenthesized_expression::reader),
"postfix_unary_expression" => Some(c_sharp::postfix_unary_expression::reader),
"prefix_unary_expression" => Some(c_sharp::prefix_expression::reader),
"property_declaration" => Some(c_sharp::property_declaration::reader),
"return_statement" => Some(c_sharp::return_statement::reader),
"switch_body" => Some(c_sharp::switch_body::reader),
"switch_section" => Some(c_sharp::switch_section::reader),
"switch_statement" => Some(c_sharp::switch_statement::reader),
"this" => Some(c_sharp::this_node::reader),
"throw_statement" => Some(c_sharp::throw_statement::reader),
"try_statement" => Some(c_sharp::try_statement::reader),
"type_parameter_list" => Some(c_sharp::type_parameter_list::reader),
"typeof_expression" => Some(c_sharp::type_of_expression::reader),
"unary_expression" => Some(c_sharp::unary_expression::reader),
"using_directive" => Some(c_sharp::using_global_directive::reader),
"using_statement" => Some(c_sharp::using_statement::reader),
"while_statement" => Some(c_sharp::while_statement::reader),
_ => None,
}
}
#[cfg(test)]
mod tests {
use super::dispatcher;
#[test]
#[allow(
clippy::too_many_lines,
reason = "one assert per migrated c# node type; grows with the migration"
)]
fn maps_the_implemented_c_sharp_node_types() {
assert!(dispatcher("compilation_unit").is_some());
assert!(dispatcher("block").is_some());
assert!(dispatcher("declaration_list").is_some());
assert!(dispatcher("namespace_declaration").is_some());
assert!(dispatcher("class_declaration").is_some());
assert!(dispatcher("constructor_declaration").is_some());
assert!(dispatcher("interface_declaration").is_some());
assert!(dispatcher("method_declaration").is_some());
assert!(dispatcher("local_function_statement").is_some());
assert!(dispatcher("parameter_list").is_some());
assert!(dispatcher("parameter").is_some());
assert!(dispatcher("field_declaration").is_some());
assert!(dispatcher("variable_declaration").is_some());
assert!(dispatcher("local_declaration_statement").is_some());
assert!(dispatcher("expression_statement").is_some());
assert!(dispatcher("binary_expression").is_some());
assert!(dispatcher("unary_expression").is_some());
assert!(dispatcher("prefix_unary_expression").is_some());
assert!(dispatcher("postfix_unary_expression").is_some());
assert!(dispatcher("parenthesized_expression").is_some());
assert!(dispatcher("assignment_expression").is_some());
assert!(dispatcher("member_access_expression").is_some());
assert!(dispatcher("member_binding_expression").is_some());
assert!(dispatcher("conditional_access_expression").is_some());
assert!(dispatcher("cast_expression").is_some());
assert!(dispatcher("element_access_expression").is_some());
assert!(dispatcher("return_statement").is_some());
assert!(dispatcher("throw_statement").is_some());
assert!(dispatcher("while_statement").is_some());
assert!(dispatcher("try_statement").is_some());
assert!(dispatcher("typeof_expression").is_some());
assert!(dispatcher("type_parameter_list").is_some());
assert!(dispatcher("catch_clause").is_some());
assert!(dispatcher("finally_clause").is_some());
assert!(dispatcher("catch_declaration").is_some());
assert!(dispatcher("if_statement").is_some());
assert!(dispatcher("conditional_expression").is_some());
assert!(dispatcher("for_statement").is_some());
assert!(dispatcher("foreach_statement").is_some());
assert!(dispatcher("global_statement").is_some());
assert!(dispatcher("switch_statement").is_some());
assert!(dispatcher("switch_body").is_some());
assert!(dispatcher("switch_section").is_some());
assert!(dispatcher("do_statement").is_some());
assert!(dispatcher("break_statement").is_some());
assert!(dispatcher("continue_statement").is_some());
assert!(dispatcher("this").is_some());
assert!(dispatcher("attribute").is_some());
assert!(dispatcher("object_creation_expression").is_some());
assert!(dispatcher("using_statement").is_some());
assert!(dispatcher("using_directive").is_some());
assert!(dispatcher("argument").is_some());
assert!(dispatcher("attribute_argument").is_some());
assert!(dispatcher("argument_list").is_some());
assert!(dispatcher("bracketed_argument_list").is_some());
assert!(dispatcher("attribute_argument_list").is_some());
assert!(dispatcher("attribute_list").is_some());
assert!(dispatcher("array_creation_expression").is_some());
assert!(dispatcher("implicit_array_creation_expression").is_some());
assert!(dispatcher("anonymous_object_creation_expression").is_some());
assert!(dispatcher("accessor_declaration").is_some());
assert!(dispatcher("arrow_expression_clause").is_some());
assert!(dispatcher("element_binding_expression").is_some());
assert!(dispatcher("implicit_parameter").is_some());
assert!(dispatcher("initializer_expression").is_some());
assert!(dispatcher("interpolated_string_expression").is_some());
assert!(dispatcher("interpolation").is_some());
assert!(dispatcher("interpolation_brace").is_some());
assert!(dispatcher("file_scoped_namespace_declaration").is_some());
assert!(dispatcher("invocation_expression").is_some());
assert!(dispatcher("lambda_expression").is_some());
assert!(dispatcher("property_declaration").is_some());
assert!(dispatcher("identifier").is_some());
assert!(dispatcher("comment").is_some());
assert!(dispatcher("integer_literal").is_some());
assert!(dispatcher("real_literal").is_some());
assert!(dispatcher("boolean_literal").is_some());
assert!(dispatcher("null_literal").is_some());
assert!(dispatcher("string_literal").is_some());
assert!(dispatcher("verbatim_string_literal").is_some());
assert!(dispatcher("character_literal").is_some());
assert!(dispatcher("predefined_type").is_some());
}
#[test]
fn unmapped_node_types_have_no_reader() {
assert!(dispatcher("qualified_name").is_none());
assert!(dispatcher("").is_none());
}
}