diff options
author | David Tolnay <dtolnay@gmail.com> | 2019-03-11 11:37:25 -0700 |
---|---|---|
committer | David Tolnay <dtolnay@gmail.com> | 2019-03-11 11:37:30 -0700 |
commit | 3d87040cb046027267098b792c32ed828602f33e (patch) | |
tree | da1ac0960545b41f2a933f32699485523355b9dc | |
parent | da486c64bb785b05a917409277d8502640700631 (diff) | |
download | remain-3d87040cb046027267098b792c32ed828602f33e.tar.gz |
Support struct and tuple struct patterns
-rw-r--r-- | src/check.rs | 8 |
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() } |