on master help sign in
Make sure records are not on one line for field name suggestions
commite3f89728493381cf5c77af90b595613014e5fde6 authorEvan Czaplicki <evancz@users.noreply.github.com> dateTue 24 Apr 2018, 13:48 (9 years ago) parenta843469
2 files changed+27−7
compiler/src/Reporting/Error/Type.hs+2−2 compiler/src/Reporting/Render/Type.hs+25−5
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
978978toNearbyRecord localizer f fs ext =
979979 D.indent 4 $
980980 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)
982982 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))
984984
985985
986986fieldToDocs :: 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
66 , apply
77 , tuple
88 , record
9− , recordSnippet
9+ , vrecordSnippet
10+ , vrecord
1011 , srcToDoc
1112 , canToDoc
1213 )
1314 where
1415
1516
16−import qualified Data.Map as Map
1717import qualified Data.Maybe as Maybe
1818
1919import qualified AST.Source as Src
@@ -101,13 +101,33 @@ entryToDoc (fieldName, fieldType) =
101101 D.hang 4 (D.sep [ fieldName <+> ":", fieldType ])
102102
103103
104−recordSnippet :: (Doc, Doc) -> [(Doc, Doc)] -> Doc
105−recordSnippet entry entries =
104+vrecordSnippet :: (Doc, Doc) -> [(Doc, Doc)] -> Doc
105+vrecordSnippet entry entries =
106106 let
107107 field = "{" <+> entryToDoc entry
108108 fields = zipWith (<+>) (repeat ",") (map entryToDoc entries ++ ["..."])
109109 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+ ]
111131
112132
113133