use crate::syntax::readers::ruby;
use crate::syntax::SyntaxReader;
#[must_use]
pub fn dispatcher(node_type: &str) -> Option<SyntaxReader> {
match node_type {
"program" => Some(ruby::program::reader),
"integer" => Some(ruby::integer::reader),
"interpolation" => Some(ruby::interpolation::reader),
"false" | "true" => Some(ruby::boolean_literal::reader),
"nil" => Some(ruby::nil::reader),
"comment" => Some(ruby::comment::reader),
"regex" | "string" => Some(ruby::string_literal::reader),
"string_content" => Some(ruby::string_content::reader),
"constant" | "hash_key_symbol" | "identifier" | "instance_variable" | "simple_symbol" => {
Some(ruby::identifier::reader)
}
"subshell" => Some(ruby::subshell::reader),
"binary" => Some(ruby::binary_expression::reader),
"scope_resolution" => Some(ruby::scope_resolution::reader),
"element_reference" => Some(ruby::element_reference::reader),
"array" => Some(ruby::array_node::reader),
"call" => Some(ruby::call::reader),
"argument_list" => Some(ruby::argument_list::reader),
"body_statement" | "do" | "do_block" | "else" | "then" | "block" | "block_body" => {
Some(ruby::execution_block::reader)
}
"return" => Some(ruby::return_statement::reader),
"hash" => Some(ruby::hash::reader),
"assignment" => Some(ruby::assignment::reader),
"pair" => Some(ruby::pair::reader),
"module" => Some(ruby::module_definition::reader),
"method_parameters" => Some(ruby::method_parameters::reader),
"block_parameters" => Some(ruby::parameters::reader),
"block_parameter" | "hash_splat_parameter" | "optional_parameter" | "splat_parameter" => {
Some(ruby::parameter::reader)
}
"class" | "singleton_class" => Some(ruby::class_definition::reader),
"method" | "singleton_method" => Some(ruby::method_declaration::reader),
"elsif" | "if" => Some(ruby::if_conditional::reader),
"if_modifier" => Some(ruby::if_modifier::reader),
"unless_modifier" | "unless" => Some(ruby::unless::reader),
"while" | "while_modifier" => Some(ruby::while_statement::reader),
"for" => Some(ruby::for_statement::reader),
"begin" => Some(ruby::begin::reader),
"rescue_modifier" => Some(ruby::try_statement::reader),
"rescue" => Some(ruby::catch_declaration::reader),
"exception_variable" => Some(ruby::exception_variable::reader),
_ => None,
}
}
#[cfg(test)]
mod tests {
use super::dispatcher;
#[test]
#[allow(
clippy::too_many_lines,
reason = "one match arm per migrated c# node type; grows with the migration"
)]
fn maps_the_implemented_ruby_node_types() {
assert!(dispatcher("program").is_some());
assert!(dispatcher("integer").is_some());
assert!(dispatcher("interpolation").is_some());
assert!(dispatcher("false").is_some());
assert!(dispatcher("true").is_some());
assert!(dispatcher("nil").is_some());
assert!(dispatcher("comment").is_some());
assert!(dispatcher("regex").is_some());
assert!(dispatcher("string_content").is_some());
assert!(dispatcher("constant").is_some());
assert!(dispatcher("hash_key_symbol").is_some());
assert!(dispatcher("identifier").is_some());
assert!(dispatcher("instance_variable").is_some());
assert!(dispatcher("simple_symbol").is_some());
assert!(dispatcher("subshell").is_some());
assert!(dispatcher("binary").is_some());
assert!(dispatcher("scope_resolution").is_some());
assert!(dispatcher("element_reference").is_some());
assert!(dispatcher("array").is_some());
assert!(dispatcher("call").is_some());
assert!(dispatcher("argument_list").is_some());
assert!(dispatcher("body_statement").is_some());
assert!(dispatcher("do").is_some());
assert!(dispatcher("do_block").is_some());
assert!(dispatcher("else").is_some());
assert!(dispatcher("then").is_some());
assert!(dispatcher("block").is_some());
assert!(dispatcher("block_body").is_some());
assert!(dispatcher("return").is_some());
assert!(dispatcher("assignment").is_some());
assert!(dispatcher("pair").is_some());
assert!(dispatcher("module").is_some());
assert!(dispatcher("method_parameters").is_some());
assert!(dispatcher("block_parameters").is_some());
assert!(dispatcher("block_parameter").is_some());
assert!(dispatcher("hash_splat_parameter").is_some());
assert!(dispatcher("optional_parameter").is_some());
assert!(dispatcher("splat_parameter").is_some());
assert!(dispatcher("class").is_some());
assert!(dispatcher("singleton_class").is_some());
assert!(dispatcher("method").is_some());
assert!(dispatcher("singleton_method").is_some());
assert!(dispatcher("elsif").is_some());
assert!(dispatcher("if").is_some());
assert!(dispatcher("if_modifier").is_some());
assert!(dispatcher("unless_modifier").is_some());
assert!(dispatcher("unless").is_some());
assert!(dispatcher("while").is_some());
assert!(dispatcher("while_modifier").is_some());
assert!(dispatcher("for").is_some());
assert!(dispatcher("begin").is_some());
assert!(dispatcher("rescue_modifier").is_some());
assert!(dispatcher("rescue").is_some());
assert!(dispatcher("exception_variable").is_some());
}
}