mirror of https://github.com/Wilfred/difftastic/
335 lines
8.9 KiB
Plaintext
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)))
|