aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Tolnay <dtolnay@gmail.com>2019-03-11 11:37:25 -0700
committerDavid Tolnay <dtolnay@gmail.com>2019-03-11 11:37:30 -0700
commit3d87040cb046027267098b792c32ed828602f33e (patch)
treeda1ac0960545b41f2a933f32699485523355b9dc
parentda486c64bb785b05a917409277d8502640700631 (diff)
downloadremain-3d87040cb046027267098b792c32ed828602f33e.tar.gz
Support struct and tuple struct patterns
-rw-r--r--src/check.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/check.rs b/src/check.rs
index dfb22e0..281c052 100644
--- a/src/check.rs
+++ b/src/check.rs
@@ -51,7 +51,9 @@ impl IntoPath for Arm {
let segments = match pat {
Pat::Wild(pat) => vec![Ident::from(pat.underscore_token)],
- Pat::Path(pat) => pat.path.segments.into_iter().map(|seg| seg.ident).collect(),
+ Pat::Path(pat) => idents_of_path(pat.path),
+ Pat::Struct(pat) => idents_of_path(pat.path),
+ Pat::TupleStruct(pat) => idents_of_path(pat.path),
Pat::Ident(ref pat) if is_just_ident(pat) => vec![pat.ident.clone()],
other => {
let msg = "unsupported by #[remain::sorted]";
@@ -63,6 +65,10 @@ impl IntoPath for Arm {
}
}
+fn idents_of_path(path: syn::Path) -> Vec<Ident> {
+ path.segments.into_iter().map(|seg| seg.ident).collect()
+}
+
fn is_just_ident(pat: &PatIdent) -> bool {
pat.by_ref.is_none() && pat.mutability.is_none() && pat.subpat.is_none()
}