@@ -10,11 +10,11 @@ import qualified Data.Set as Set
10import qualified AST.Expression.General as E
10import qualified AST.Expression.General as E
11import qualified AST.Expression.Canonical as Canonical
11import qualified AST.Expression.Canonical as Canonical
12import qualified AST.Helpers as Help
12import qualified AST.Helpers as Help
13−import qualified AST.Literal as L
14import qualified AST.Module as Module
13import qualified AST.Module as Module
15−import qualified AST.Pattern as P
14+import qualified AST.Pattern as Pattern
16import qualified AST.Variable as Var
15import qualified AST.Variable as Var
17import Elm.Utils ((|>))
16import Elm.Utils ((|>))
17+import Nitpick.Pattern (Pattern(..), fromCanonicalPattern)
18import qualified Reporting.Annotation as A
18import qualified Reporting.Annotation as A
19import qualified Reporting.Region as Region
19import qualified Reporting.Region as Region
20import qualified Reporting.Result as Result
20import qualified Reporting.Result as Result
@@ -35,42 +35,6 @@ patternMatches interfaces modul =
35 (Module.program body)
35 (Module.program body)
38−-- PATTERN MATCH DATA STRUCTURE
41− = Data Var.Canonical [Pattern]
43− | Alias String Pattern
47− | AnythingBut (Set.Set L.Literal)
51−fromCanonicalPattern :: P.CanonicalPattern -> Pattern
52−fromCanonicalPattern (A.A _ pattern) =
54− P.Data ctor patterns ->
55− Data ctor (map fromCanonicalPattern patterns)
60− P.Alias name pattern ->
61− Alias name (fromCanonicalPattern pattern)
74-- TAG DICT
38-- TAG DICT
76type TagDict =
40type TagDict =
@@ -116,8 +80,8 @@ toTagMapping adts =
116 |> Map.fromList
80 |> Map.fromList
119−lookupOtherCtors :: Var.Canonical -> TagDict -> [(Tag, Int)]
83+lookupOtherTags :: Var.Canonical -> TagDict -> [(Tag, Int)]
120−lookupOtherCtors (Var.Canonical home name) tagDict =
84+lookupOtherTags (Var.Canonical home name) tagDict =
121 case Map.lookup name =<< Map.lookup home tagDict of
85 case Map.lookup name =<< Map.lookup home tagDict of
122 Just otherTags ->
86 Just otherTags ->
123 otherTags
87 otherTags
@@ -144,7 +108,7 @@ checkExpression tagDict (A.A region expression) =
144 checkExpression tagDict
108 checkExpression tagDict
146 go2 a b =
110 go2 a b =
147− F.traverse_ go [a,b]
111+ go a <* go b
149 goPattern =
113 goPattern =
150 checkPatterns tagDict region
114 checkPatterns tagDict region
@@ -157,8 +121,7 @@ checkExpression tagDict (A.A region expression) =
157 Result.ok ()
121 Result.ok ()
159 E.Range low high ->
123 E.Range low high ->
161− <* go high
124+ go2 low high
163 E.ExplicitList listExprs ->
126 E.ExplicitList listExprs ->
164 F.traverse_ go listExprs
127 F.traverse_ go listExprs
@@ -232,7 +195,7 @@ checkExpression tagDict (A.A region expression) =
232checkPatterns
195checkPatterns
233 :: TagDict
196 :: TagDict
234 -> Region.Region
197 -> Region.Region
235− -> [P.CanonicalPattern]
198+ -> [Pattern.CanonicalPattern]
236 -> Result.Result Warning.Warning e ()
199 -> Result.Result Warning.Warning e ()
237checkPatterns tagDict region patterns =
200checkPatterns tagDict region patterns =
238 checkPatternsHelp tagDict region [Anything] patterns
201 checkPatternsHelp tagDict region [Anything] patterns
@@ -242,7 +205,7 @@ checkPatternsHelp
242 :: TagDict
205 :: TagDict
243 -> Region.Region
206 -> Region.Region
244 -> [Pattern]
207 -> [Pattern]
245− -> [P.CanonicalPattern]
208+ -> [Pattern.CanonicalPattern]
246 -> Result.Result Warning.Warning e ()
209 -> Result.Result Warning.Warning e ()
247checkPatternsHelp tagDict region unhandled patterns =
210checkPatternsHelp tagDict region unhandled patterns =
248 case (unhandled, patterns) of
211 case (unhandled, patterns) of
@@ -250,7 +213,7 @@ checkPatternsHelp tagDict region unhandled patterns =
250 return ()
213 return ()
252 (_:_, []) ->
215 (_:_, []) ->
253− Result.warn region Warning.InexhaustivePatternMatch
216+ Result.warn region (Warning.InexhaustivePatternMatch unhandled)
255 (_, pattern@(A.A localRegion _) : remainingPatterns) ->
218 (_, pattern@(A.A localRegion _) : remainingPatterns) ->
256 do newUnhandled <- filterPatterns tagDict localRegion pattern unhandled
219 do newUnhandled <- filterPatterns tagDict localRegion pattern unhandled
@@ -260,7 +223,7 @@ checkPatternsHelp tagDict region unhandled patterns =
260filterPatterns
223filterPatterns
261 :: TagDict
224 :: TagDict
262 -> Region.Region
225 -> Region.Region
263− -> P.CanonicalPattern
226+ -> Pattern.CanonicalPattern
264 -> [Pattern]
227 -> [Pattern]
265 -> Result.Result Warning.Warning e [Pattern]
228 -> Result.Result Warning.Warning e [Pattern]
266filterPatterns tagDict region pattern unhandled =
229filterPatterns tagDict region pattern unhandled =
@@ -370,7 +333,7 @@ complementData :: TagDict -> Var.Canonical -> [Pattern] -> [Pattern]
370complementData tagDict tag patterns =
333complementData tagDict tag patterns =
372 otherTags =
335 otherTags =
373− lookupOtherCtors tag tagDict
336+ lookupOtherTags tag tagDict
375 tagComplements =
338 tagComplements =
376 Maybe.mapMaybe (tagToPattern tag) otherTags
339 Maybe.mapMaybe (tagToPattern tag) otherTags