diff options
author | Dawer <[email protected]> | 2021-05-08 19:06:17 +0100 |
---|---|---|
committer | Dawer <[email protected]> | 2021-05-31 20:03:47 +0100 |
commit | 9b841a9a044d9d71cece62a3e44880325bc15f78 (patch) | |
tree | 77f4bbfc18f8a678f8074d97683e6eb4a46066b8 /crates/hir_ty/src/diagnostics/pattern | |
parent | d7239e5ab4a3b88e9e79cc60d80eaf7300411e5a (diff) |
Expand binding patterns.
Diffstat (limited to 'crates/hir_ty/src/diagnostics/pattern')
-rw-r--r-- | crates/hir_ty/src/diagnostics/pattern/usefulness.rs | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/crates/hir_ty/src/diagnostics/pattern/usefulness.rs b/crates/hir_ty/src/diagnostics/pattern/usefulness.rs index 76dc4412f..ef2be7530 100644 --- a/crates/hir_ty/src/diagnostics/pattern/usefulness.rs +++ b/crates/hir_ty/src/diagnostics/pattern/usefulness.rs | |||
@@ -9,11 +9,11 @@ use once_cell::unsync::OnceCell; | |||
9 | use rustc_hash::FxHashMap; | 9 | use rustc_hash::FxHashMap; |
10 | use smallvec::{smallvec, SmallVec}; | 10 | use smallvec::{smallvec, SmallVec}; |
11 | 11 | ||
12 | use crate::{db::HirDatabase, InferenceResult, Ty}; | 12 | use crate::{db::HirDatabase, InferenceResult, Interner, Ty}; |
13 | 13 | ||
14 | use super::{ | 14 | use super::{ |
15 | deconstruct_pat::{Constructor, Fields, SplitWildcard}, | 15 | deconstruct_pat::{Constructor, Fields, SplitWildcard}, |
16 | Pat, PatId, PatKind, | 16 | Pat, PatId, PatKind, PatternFoldable, PatternFolder, |
17 | }; | 17 | }; |
18 | 18 | ||
19 | use self::{ | 19 | use self::{ |
@@ -75,8 +75,18 @@ pub(super) struct PatCtxt<'a> { | |||
75 | } | 75 | } |
76 | 76 | ||
77 | pub(crate) fn expand_pattern(pat: Pat) -> Pat { | 77 | pub(crate) fn expand_pattern(pat: Pat) -> Pat { |
78 | // TODO: LiteralExpander, it is about string literal patterns | 78 | LiteralExpander.fold_pattern(&pat) |
79 | pat | 79 | } |
80 | |||
81 | struct LiteralExpander; | ||
82 | |||
83 | impl PatternFolder for LiteralExpander { | ||
84 | fn fold_pattern(&mut self, pat: &Pat) -> Pat { | ||
85 | match (pat.ty.kind(&Interner), pat.kind.as_ref()) { | ||
86 | (_, PatKind::Binding { subpattern: Some(s), .. }) => s.fold_with(self), | ||
87 | _ => pat.super_fold_with(self), | ||
88 | } | ||
89 | } | ||
80 | } | 90 | } |
81 | 91 | ||
82 | impl Pat { | 92 | impl Pat { |