on master help sign in
make regions for exposed types more precise

In fixing the error messages for documentation mistakes, I noticed that the underlines for types in `exposing` were including newlines. I made the types a bit more precise to fix this, so it needed changes in a couple places.

commit5387ae6a1a8a385556492b6f006168e74d0d1e32 authorEvan Czaplicki <evancz@users.noreply.github.com> dateTue 13 Aug 2019, 17:07 (7 years ago) parentb4058b7
7 files changed+54−47
compiler/src/AST/Source.hs+5−5 compiler/src/Canonicalize/Environment/Foreign.hs+7−7 compiler/src/Canonicalize/Module.hs+7−7 compiler/src/Elm/Compiler/Imports.hs+3−3 compiler/src/Elm/Kernel.hs+6−6 compiler/src/Parse/Module.hs+21−14 compiler/src/Reporting/Render/Type/Localizer.hs+5−5
compiler/src/AST/Source.hs+5−5
@@ -195,15 +195,15 @@ newtype Comment =
195195
196196data Exposing
197197 = Open
198− | Explicit [A.Located Exposed]
198+ | Explicit [Exposed]
199199
200200
201201data Exposed
202− = Lower Name
203− | Upper Name Privacy
204− | Operator Name
202+ = Lower (A.Located Name)
203+ | Upper (A.Located Name) Privacy
204+ | Operator A.Region Name
205205
206206
207207data Privacy
208− = Public
208+ = Public A.Region
209209 | Private
compiler/src/Canonicalize/Environment/Foreign.hs+7−7
@@ -207,11 +207,11 @@ addExposedValue
207207 -> Map.Map Name.Name (Env.Type, Env.Exposed Env.Ctor)
208208 -> Map.Map Name.Name I.Binop
209209 -> State
210− -> A.Located Src.Exposed
210+ -> Src.Exposed
211211 -> Result i w State
212−addExposedValue home vars types binops (State vs ts cs bs qvs qts qcs) (A.At region exposed) =
212+addExposedValue home vars types binops (State vs ts cs bs qvs qts qcs) exposed =
213213 case exposed of
214− Src.Lower name ->
214+ Src.Lower (A.At region name) ->
215215 case Map.lookup name vars of
216216 Just info ->
217217 Result.ok (State (Map.insertWith Map.union name info vs) ts cs bs qvs qts qcs)
@@ -219,7 +219,7 @@ addExposedValue home vars types binops (State vs ts cs bs qvs qts qcs) (A.At reg
219219 Nothing ->
220220 Result.throw (Error.ImportExposingNotFound region home name (Map.keys vars))
221221
222− Src.Upper name privacy ->
222+ Src.Upper (A.At region name) privacy ->
223223 case privacy of
224224 Src.Private ->
225225 case Map.lookup name types of
@@ -246,7 +246,7 @@ addExposedValue home vars types binops (State vs ts cs bs qvs qts qcs) (A.At reg
246246 Nothing ->
247247 Result.throw $ Error.ImportExposingNotFound region home name (Map.keys types)
248248
249− Src.Public ->
249+ Src.Public dotDotRegion ->
250250 case Map.lookup name types of
251251 Just (tipe, ctors) ->
252252 case tipe of
@@ -258,12 +258,12 @@ addExposedValue home vars types binops (State vs ts cs bs qvs qts qcs) (A.At reg
258258 Result.ok (State vs ts2 cs2 bs qvs qts qcs)
259259
260260 Env.Alias _ _ _ _ ->
261− Result.throw (Error.ImportOpenAlias region name)
261+ Result.throw (Error.ImportOpenAlias dotDotRegion name)
262262
263263 Nothing ->
264264 Result.throw (Error.ImportExposingNotFound region home name (Map.keys types))
265265
266− Src.Operator op ->
266+ Src.Operator region op ->
267267 case Map.lookup op binops of
268268 Just binop ->
269269 let
compiler/src/Canonicalize/Module.hs+7−7
@@ -236,11 +236,11 @@ checkExposed
236236 -> Map.Map Name.Name alias
237237 -> Map.Map Name.Name binop
238238 -> Can.Effects
239− -> A.Located Src.Exposed
239+ -> Src.Exposed
240240 -> Result i w (Dups.Dict (A.Located Can.Export))
241−checkExposed values unions aliases binops effects (A.At region exposed) =
241+checkExposed values unions aliases binops effects exposed =
242242 case exposed of
243− Src.Lower name ->
243+ Src.Lower (A.At region name) ->
244244 if Map.member name values then
245245 ok name region Can.ExportValue
246246 else
@@ -252,23 +252,23 @@ checkExposed values unions aliases binops effects (A.At region exposed) =
252252 Result.throw $ Error.ExportNotFound region Error.BadVar name $
253253 ports ++ Map.keys values
254254
255− Src.Operator name ->
255+ Src.Operator region name ->
256256 if Map.member name binops then
257257 ok name region Can.ExportBinop
258258 else
259259 Result.throw $ Error.ExportNotFound region Error.BadOp name $
260260 Map.keys binops
261261
262− Src.Upper name Src.Public ->
262+ Src.Upper (A.At region name) (Src.Public dotDotRegion) ->
263263 if Map.member name unions then
264264 ok name region Can.ExportUnionOpen
265265 else if Map.member name aliases then
266− Result.throw $ Error.ExportOpenAlias region name
266+ Result.throw $ Error.ExportOpenAlias dotDotRegion name
267267 else
268268 Result.throw $ Error.ExportNotFound region Error.BadType name $
269269 Map.keys unions ++ Map.keys aliases
270270
271− Src.Upper name Src.Private ->
271+ Src.Upper (A.At region name) Src.Private ->
272272 if Map.member name unions then
273273 ok name region Can.ExportUnionClosed
274274 else if Map.member name aliases then
compiler/src/Elm/Compiler/Imports.hs+3−3
@@ -49,14 +49,14 @@ closed =
4949
5050typeOpen :: Name.Name -> Src.Exposing
5151typeOpen name =
52− Src.Explicit [ A.At A.zero (Src.Upper name Src.Public) ]
52+ Src.Explicit [ Src.Upper (A.At A.zero name) (Src.Public A.zero) ]
5353
5454
5555typeClosed :: Name.Name -> Src.Exposing
5656typeClosed name =
57− Src.Explicit [ A.At A.zero (Src.Upper name Src.Private) ]
57+ Src.Explicit [ Src.Upper (A.At A.zero name) Src.Private ]
5858
5959
6060operator :: Name.Name -> Src.Exposing
6161operator op =
62− Src.Explicit [ A.At A.zero (Src.Operator op) ]
62+ Src.Explicit [ Src.Operator A.zero op ]
compiler/src/Elm/Kernel.hs+6−6
@@ -319,19 +319,19 @@ toNames exposing =
319319 map toName exposedList
320320
321321
322−toName :: A.Located Src.Exposed -> Name.Name
323−toName (A.At _ exposed) =
322+toName :: Src.Exposed -> Name.Name
323+toName exposed =
324324 case exposed of
325− Src.Lower name ->
325+ Src.Lower (A.At _ name) ->
326326 name
327327
328− Src.Upper name Src.Private ->
328+ Src.Upper (A.At _ name) Src.Private ->
329329 name
330330
331− Src.Upper _ Src.Public ->
331+ Src.Upper _ (Src.Public _) ->
332332 error "cannot have Maybe(..) syntax in kernel code header"
333333
334− Src.Operator _ ->
334+ Src.Operator _ _ ->
335335 error "cannot use binops in kernel code"
336336
337337
compiler/src/Parse/Module.hs+21−14
@@ -434,18 +434,18 @@ exposing =
434434 Space.chompAndCheckIndent E.ExposingSpace E.ExposingIndentEnd
435435 word1 0x29 {-)-} E.ExposingEnd
436436 return Src.Open
437− , do exposed <- addLocation chompExposed
437+ , do exposed <- chompExposed
438438 Space.chompAndCheckIndent E.ExposingSpace E.ExposingIndentEnd
439439 exposingHelp [exposed]
440440 ]
441441
442442
443−exposingHelp :: [A.Located Src.Exposed] -> Parser E.Exposing Src.Exposing
443+exposingHelp :: [Src.Exposed] -> Parser E.Exposing Src.Exposing
444444exposingHelp revExposed =
445445 oneOf E.ExposingEnd
446446 [ do word1 0x2C {-,-} E.ExposingEnd
447447 Space.chompAndCheckIndent E.ExposingSpace E.ExposingIndentValue
448− exposed <- addLocation chompExposed
448+ exposed <- chompExposed
449449 Space.chompAndCheckIndent E.ExposingSpace E.ExposingIndentEnd
450450 exposingHelp (exposed:revExposed)
451451 , do word1 0x29 {-)-} E.ExposingEnd
@@ -455,16 +455,21 @@ exposingHelp revExposed =
455455
456456chompExposed :: Parser E.Exposing Src.Exposed
457457chompExposed =
458− oneOf E.ExposingValue
459− [ Src.Lower <$> Var.lower E.ExposingValue
460− , do word1 0x28 {-(-} E.ExposingValue
461− op <- Symbol.operator E.ExposingOperator E.ExposingOperatorReserved
462− word1 0x29 {-)-} E.ExposingOperatorRightParen
463− return (Src.Operator op)
464− , do name <- Var.upper E.ExposingValue
465− Space.chompAndCheckIndent E.ExposingSpace E.ExposingIndentEnd
466− Src.Upper name <$> privacy
467− ]
458+ do start <- getPosition
459+ oneOf E.ExposingValue
460+ [ do name <- Var.lower E.ExposingValue
461+ end <- getPosition
462+ return $ Src.Lower $ A.at start end name
463+ , do word1 0x28 {-(-} E.ExposingValue
464+ op <- Symbol.operator E.ExposingOperator E.ExposingOperatorReserved
465+ word1 0x29 {-)-} E.ExposingOperatorRightParen
466+ end <- getPosition
467+ return $ Src.Operator (A.Region start end) op
468+ , do name <- Var.upper E.ExposingValue
469+ end <- getPosition
470+ Space.chompAndCheckIndent E.ExposingSpace E.ExposingIndentEnd
471+ Src.Upper (A.at start end name) <$> privacy
472+ ]
468473
469474
470475privacy :: Parser E.Exposing Src.Privacy
@@ -472,9 +477,11 @@ privacy =
472477 oneOfWithFallback
473478 [ do word1 0x28 {-(-} E.ExposingTypePrivacy
474479 Space.chompAndCheckIndent E.ExposingSpace E.ExposingTypePrivacy
480+ start <- getPosition
475481 word2 0x2E 0x2E {-..-} E.ExposingTypePrivacy
482+ end <- getPosition
476483 Space.chompAndCheckIndent E.ExposingSpace E.ExposingTypePrivacy
477484 word1 0x29 {-)-} E.ExposingTypePrivacy
478− return Src.Public
485+ return $ Src.Public (A.Region start end)
479486 ]
480487 Src.Private
compiler/src/Reporting/Render/Type/Localizer.hs+5−5
@@ -112,9 +112,9 @@ toExposing exposing =
112112 Only (foldr addType Set.empty exposedList)
113113
114114
115−addType :: A.Located Src.Exposed -> Set.Set Name.Name -> Set.Set Name.Name
116−addType (A.At _ exposed) types =
115+addType :: Src.Exposed -> Set.Set Name.Name -> Set.Set Name.Name
116+addType exposed types =
117117 case exposed of
118− Src.Lower _ -> types
119− Src.Upper name _ -> Set.insert name types
120− Src.Operator _ -> types
118+ Src.Lower _ -> types
119+ Src.Upper (A.At _ name) _ -> Set.insert name types
120+ Src.Operator _ _ -> types