pub enum Pattern {
Wildcard(Span),
Name(Ident),
Variant {
path: Option<Path>,
name: Ident,
fields: Vec<Pattern>,
span: Span,
},
Struct {
path: Option<Path>,
name: Ident,
fields: Vec<(Ident, Pattern)>,
span: Span,
},
Literal(Literal, Span),
Range {
start: Literal,
end: Literal,
span: Span,
},
}Expand description
A pattern (spec 2.3, M4 spec 2.5), in a match arm, an if let, or a
while let, nested to any depth. Not in Varyk, each V0001 from the
parser: guards (pattern if cond), alternatives (a | b), rest
patterns (..), and @ bindings.
Variants§
Wildcard(Span)
_: matches anything, binds nothing.
Name(Ident)
A bare name: matches anything and binds it. The parser cannot tell
this apart from a zero-argument variant written without its type
(None): the type checker decides against the matched value’s
type.
Variant
A variant, optionally reached through a type and a module, with its
values by position: Point, Some(p), Shape::Circle(p, q),
geo::Shape::Point. path’s last segment is always the type
(unlike an expression path, a pattern never calls anything, so
there is no bare-module case to weigh it against); any segments
before that are the module chain. span ends at the closing )
when there are parentheses, so Point() is told apart from
Point.
Struct
A variant or struct with named fields: Event::Click { x: 0, y }.
A shorthand field y is (y, Pattern::Name(y)).
Literal(Literal, Span)
A literal: an integer with an optional -, a string, true, or
false (and a float, which the checker rejects).
Range
start..=end, both ends included.