aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty/src/diagnostics/pattern/usefulness.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/hir_ty/src/diagnostics/pattern/usefulness.rs')
-rw-r--r--crates/hir_ty/src/diagnostics/pattern/usefulness.rs18
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;
9use rustc_hash::FxHashMap; 9use rustc_hash::FxHashMap;
10use smallvec::{smallvec, SmallVec}; 10use smallvec::{smallvec, SmallVec};
11 11
12use crate::{db::HirDatabase, InferenceResult, Ty}; 12use crate::{db::HirDatabase, InferenceResult, Interner, Ty};
13 13
14use super::{ 14use 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
19use self::{ 19use self::{
@@ -75,8 +75,18 @@ pub(super) struct PatCtxt<'a> {
75} 75}
76 76
77pub(crate) fn expand_pattern(pat: Pat) -> Pat { 77pub(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
81struct LiteralExpander;
82
83impl 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
82impl Pat { 92impl Pat {