================================= Tuple struct patterns ================================= match x { Some(x) => "some", std::None() => "none" } --- (source_file (match_expression (identifier) (match_block (match_arm (match_pattern (tuple_struct_pattern (identifier) (identifier))) (string_literal)) (match_arm (match_pattern (tuple_struct_pattern (scoped_identifier (identifier) (identifier)))) (string_literal))))) ================================= Reference patterns ================================= match x { A(ref x) => x.0, ref mut y => y, & mut z => z, } --- (source_file (match_expression (identifier) (match_block (match_arm (match_pattern (tuple_struct_pattern (identifier) (ref_pattern (identifier)))) (field_expression (identifier) (integer_literal))) (match_arm (match_pattern (ref_pattern (mut_pattern (mutable_specifier) (identifier)))) (identifier)) (match_arm (match_pattern (reference_pattern (mutable_specifier) (identifier))) (identifier))))) ================================= Struct patterns ================================= match x { Person{name, age} if age < 5 => ("toddler", name), Person{name: adult_name, age: _} => ("adult", adult_name), } --- (source_file (match_expression (identifier) (match_block (match_arm (match_pattern (struct_pattern (type_identifier) (field_pattern (shorthand_field_identifier)) (field_pattern (shorthand_field_identifier))) (binary_expression (identifier) (integer_literal))) (tuple_expression (string_literal) (identifier))) (match_arm (match_pattern (struct_pattern (type_identifier) (field_pattern (field_identifier) (identifier)) (field_pattern (field_identifier)))) (tuple_expression (string_literal) (identifier)))))) ================================= Ignored patterns ================================= match x { (a, ..) => a, B(..) => c, D::E{f: g, ..} => g } --- (source_file (match_expression (identifier) (match_block (match_arm (match_pattern (tuple_pattern (identifier) (remaining_field_pattern))) (identifier)) (match_arm (match_pattern (tuple_struct_pattern (identifier) (remaining_field_pattern))) (identifier)) (match_arm (match_pattern (struct_pattern (scoped_type_identifier (identifier) (type_identifier)) (field_pattern (field_identifier) (identifier)) (remaining_field_pattern))) (identifier))))) ================================= Captured patterns ================================= match x { a @ A(_) | b @ B(..) => a, a @ 1 ... 5 => a, Some(1 ... 5) => a, a @ b...c => a, a @ b..=c => a, } --- (source_file (match_expression (identifier) (match_block (match_arm (match_pattern (captured_pattern (identifier) (tuple_struct_pattern (identifier))) (captured_pattern (identifier) (tuple_struct_pattern (identifier) (remaining_field_pattern)))) (identifier)) (match_arm (match_pattern (captured_pattern (identifier) (range_pattern (integer_literal) (integer_literal)))) (identifier)) (match_arm (match_pattern (tuple_struct_pattern (identifier) (range_pattern (integer_literal) (integer_literal)))) (identifier)) (match_arm (match_pattern (captured_pattern (identifier) (range_pattern (identifier) (identifier)))) (identifier)) (match_arm (match_pattern (captured_pattern (identifier) (range_pattern (identifier) (identifier)))) (identifier)))))