difftastic/test/corpus/patterns.txt

335 lines
8.9 KiB
Plaintext

================================================================================
Alternative patterns
================================================================================
val x = y match {
case 1 | a => b
case "c" | "d" | "e" => f
}
--------------------------------------------------------------------------------
(compilation_unit
(val_definition
(identifier)
(match_expression
(identifier)
(case_block
(case_clause
(alternative_pattern
(integer_literal)
(identifier))
(identifier))
(case_clause
(alternative_pattern
(alternative_pattern
(string)
(string))
(string))
(identifier))))))
================================================================================
Typed patterns
================================================================================
val x = y match {
case 1 : Int => 2
case a : B with C => d
case _: B | _: C => 3
case Object.Constant => 3
}
--------------------------------------------------------------------------------
(compilation_unit
(val_definition
(identifier)
(match_expression
(identifier)
(case_block
(case_clause
(typed_pattern
(integer_literal)
(type_identifier))
(integer_literal))
(case_clause
(typed_pattern
(identifier)
(compound_type
(type_identifier)
(type_identifier)))
(identifier))
(case_clause
(alternative_pattern
(typed_pattern
(wildcard)
(type_identifier))
(typed_pattern
(wildcard)
(type_identifier)))
(integer_literal))
(case_clause
(stable_identifier
(identifier)
(identifier))
(integer_literal))))))
================================================================================
Tuple patterns
================================================================================
val (a, b) = if (c) (d, e) else (f, g)
val x = y match {
case (A, B) => X
}
--------------------------------------------------------------------------------
(compilation_unit
(val_definition
(tuple_pattern
(identifier)
(identifier))
(if_expression
(parenthesized_expression
(identifier))
(tuple_expression
(identifier)
(identifier))
(tuple_expression
(identifier)
(identifier))))
(val_definition
(identifier)
(match_expression
(identifier)
(case_block
(case_clause
(tuple_pattern
(identifier)
(identifier))
(identifier))))))
================================================================================
Case class patterns
================================================================================
def showNotification(notification: Notification): String = {
notification match {
case Email(email, title, _) =>
s"You got an email from $email with title: $title"
case SMS(number, message) =>
s"You got an SMS from $number! Message: $message"
case VoiceRecording(name, link) =>
s"you received a Voice Recording from $name! Click the link to hear it: $link"
}
}
--------------------------------------------------------------------------------
(compilation_unit
(function_definition
(identifier)
(parameters
(parameter
(identifier)
(type_identifier)))
(type_identifier)
(block
(match_expression
(identifier)
(case_block
(case_clause
(case_class_pattern
(type_identifier)
(identifier)
(identifier)
(wildcard))
(interpolated_string_expression
(identifier)
(interpolated_string
(interpolation
(identifier))
(interpolation
(identifier)))))
(case_clause
(case_class_pattern
(type_identifier)
(identifier)
(identifier))
(interpolated_string_expression
(identifier)
(interpolated_string
(interpolation
(identifier))
(interpolation
(identifier)))))
(case_clause
(case_class_pattern
(type_identifier)
(identifier)
(identifier))
(interpolated_string_expression
(identifier)
(interpolated_string
(interpolation
(identifier))
(interpolation
(identifier))))))))))
================================================================================
Infix patterns
================================================================================
def first(x: Seq[Int]) = x match {
case e :+ _ => Some(e)
case _ => None
}
--------------------------------------------------------------------------------
(compilation_unit
(function_definition
(identifier)
(parameters
(parameter
(identifier)
(generic_type
(type_identifier)
(type_arguments
(type_identifier)))))
(match_expression
(identifier)
(case_block
(case_clause
(infix_pattern
(identifier)
(operator_identifier)
(wildcard))
(call_expression
(identifier)
(arguments
(identifier))))
(case_clause
(wildcard)
(identifier))))))
================================================================================
Capture patterns
================================================================================
val x = y match {
case a @ B(1) => a
case b @ C(d @ (e @ X, _: Y)) => e
case req @ (POST | GET) -> Root / "test" => 5
case Array(a: Type, _@_*) => y
}
--------------------------------------------------------------------------------
(compilation_unit
(val_definition
(identifier)
(match_expression
(identifier)
(case_block
(case_clause
(capture_pattern
(identifier)
(case_class_pattern
(type_identifier)
(integer_literal)))
(identifier))
(case_clause
(capture_pattern
(identifier)
(case_class_pattern
(type_identifier)
(capture_pattern
(identifier)
(tuple_pattern
(capture_pattern
(identifier)
(identifier))
(typed_pattern
(wildcard)
(type_identifier))))))
(identifier))
(case_clause
(infix_pattern
(infix_pattern
(capture_pattern
(identifier)
(tuple_pattern
(alternative_pattern
(identifier)
(identifier))))
(operator_identifier)
(identifier))
(operator_identifier)
(string))
(integer_literal))
(case_clause
(case_class_pattern
(type_identifier)
(typed_pattern
(identifier)
(type_identifier))
(repeat_pattern
(capture_pattern
(wildcard)
(wildcard))))
(identifier))))))
================================================================================
Quoted patterns (Scala 3 syntax)
================================================================================
def foo =
x match
case '{ $boolExpr } => Some(true)
case _ => None
--------------------------------------------------------------------------------
(compilation_unit
(function_definition
(identifier)
(indented_block
(match_expression
(identifier)
(indented_cases
(case_clause
(quote_expression
(identifier))
(call_expression
(identifier)
(arguments
(boolean_literal))))
(case_clause
(wildcard)
(identifier)))))))
================================================================================
Given pattern (Scala 3 syntax)
================================================================================
for
given Int <- Some(1)
yield ()
--------------------------------------------------------------------------------
(compilation_unit
(for_expression
(enumerators
(enumerator
(given_pattern
(type_identifier))
(call_expression
(identifier)
(arguments
(integer_literal)))))
(unit)))