on master help sign in
Make sure records are not on one line for field name suggestions
e3f8972Evan Czaplicki
compiler/src/Reporting/Error/Type.hs+2−2
@@ -978,9 +978,9 @@ toNearbyRecord :: L.Localizer -> (N.Name, T.Type) -> [(N.Name, T.Type)] -> T.Ext
978toNearbyRecord localizer f fs ext =
978toNearbyRecord localizer f fs ext =
979 D.indent 4 $
979 D.indent 4 $
980 if length fs <= 3 then
980 if length fs <= 3 then
981− RT.record (map (fieldToDocs localizer) (f:fs)) (extToDoc ext)
981+ RT.vrecord (map (fieldToDocs localizer) (f:fs)) (extToDoc ext)
982 else
982 else
983− RT.recordSnippet (fieldToDocs localizer f) (map (fieldToDocs localizer) (take 3 fs))
983+ RT.vrecordSnippet (fieldToDocs localizer f) (map (fieldToDocs localizer) (take 3 fs))
984
984
985
985
986fieldToDocs :: L.Localizer -> (N.Name, T.Type) -> (D.Doc, D.Doc)
986fieldToDocs :: L.Localizer -> (N.Name, T.Type) -> (D.Doc, D.Doc)
compiler/src/Reporting/Render/Type.hs+25−5
@@ -6,14 +6,14 @@ module Reporting.Render.Type
6 , apply
6 , apply
7 , tuple
7 , tuple
8 , record
8 , record
9− , recordSnippet
9+ , vrecordSnippet
10+ , vrecord
10 , srcToDoc
11 , srcToDoc
11 , canToDoc
12 , canToDoc
12 )
13 )
13 where
14 where
14
15
15
16
16−import qualified Data.Map as Map
17import qualified Data.Maybe as Maybe
17import qualified Data.Maybe as Maybe
18
18
19import qualified AST.Source as Src
19import qualified AST.Source as Src
@@ -101,13 +101,33 @@ entryToDoc (fieldName, fieldType) =
101 D.hang 4 (D.sep [ fieldName <+> ":", fieldType ])
101 D.hang 4 (D.sep [ fieldName <+> ":", fieldType ])
102
102
103
103
104−recordSnippet :: (Doc, Doc) -> [(Doc, Doc)] -> Doc
104+vrecordSnippet :: (Doc, Doc) -> [(Doc, Doc)] -> Doc
105−recordSnippet entry entries =
105+vrecordSnippet entry entries =
106 let
106 let
107 field = "{" <+> entryToDoc entry
107 field = "{" <+> entryToDoc entry
108 fields = zipWith (<+>) (repeat ",") (map entryToDoc entries ++ ["..."])
108 fields = zipWith (<+>) (repeat ",") (map entryToDoc entries ++ ["..."])
109 in
109 in
110− D.sep [ D.cat (field:fields), "}" ]
110+ D.vcat (field : fields ++ ["}"])
111+
112+
113+vrecord :: [(Doc, Doc)] -> Maybe Doc -> Doc
114+vrecord entries maybeExt =
115+ case (map entryToDoc entries, maybeExt) of
116+ ([], Nothing) ->
117+ "{}"
118+
119+ (fields, Nothing) ->
120+ D.vcat $
121+ zipWith (<+>) ("{" : repeat ",") fields ++ ["}"]
122+
123+ (fields, Just ext) ->
124+ D.vcat
125+ [ D.hang 4 $ D.vcat $
126+ [ "{" <+> ext
127+ , D.cat (zipWith (<+>) ("|" : repeat ",") fields)
128+ ]
129+ , "}"
130+ ]
111
131
112
132
113
133