@@ -31,7 +31,6 @@ module Hpack.Render (
3131, renderFlag
3232, renderSourceRepository
3333, renderDirectories
34- , formatDescription
3534#endif
3635) where
3736
@@ -46,7 +45,7 @@ import Control.Monad.Reader
4645import Hpack.Util
4746import Hpack.Config
4847import Hpack.Render.Hints
49- import Hpack.Render.Dsl hiding (sortFieldsBy )
48+ import Hpack.Render.Dsl hiding (RenderSettings ( .. ), defaultRenderSettings , sortFieldsBy )
5049import qualified Hpack.Render.Dsl as Dsl
5150
5251data RenderEnv = RenderEnv {
@@ -65,18 +64,24 @@ getPackageName = asks renderEnvPackageName
6564renderPackage :: [String ] -> Package -> String
6665renderPackage oldCabalFile = renderPackageWith settings headerFieldsAlignment formattingHintsFieldOrder formattingHintsSectionsFieldOrder
6766 where
68- FormattingHints {.. } = sniffFormattingHints oldCabalFile
67+ hints @ FormattingHints {.. } = sniffFormattingHints oldCabalFile
6968 headerFieldsAlignment = fromMaybe 16 formattingHintsAlignment
70- settings = formattingHintsRenderSettings
69+ settings = formattingHintsRenderSettings hints
7170
7271renderPackageWith :: RenderSettings -> Alignment -> [String ] -> [(String , [String ])] -> Package -> String
73- renderPackageWith settings headerFieldsAlignment existingFieldOrder sectionsFieldOrder Package {.. } = intercalate " \n " (unlines header : chunks)
72+ renderPackageWith RenderSettings { .. } headerFieldsAlignment existingFieldOrder sectionsFieldOrder Package {.. } = intercalate " \n " (unlines header : chunks)
7473 where
74+ settings :: Dsl. RenderSettings
75+ settings = Dsl. RenderSettings {
76+ renderSettingsEmptyLinesAsDot = packageCabalVersion < makeCabalVersion [3 ]
77+ , ..
78+ }
79+
7580 chunks :: [String ]
7681 chunks = map unlines . filter (not . null ) . map (render settings 0 ) $ sortStanzaFields sectionsFieldOrder stanzas
7782
7883 header :: [String ]
79- header = concatMap (render settings {renderSettingsFieldAlignment = headerFieldsAlignment} 0 ) packageFields
84+ header = concatMap (render settings {Dsl. renderSettingsFieldAlignment = headerFieldsAlignment} 0 ) packageFields
8085
8186 packageFields :: [Element ]
8287 packageFields = addVerbatim packageVerbatim . sortFieldsBy existingFieldOrder $
@@ -117,7 +122,7 @@ renderPackageWith settings headerFieldsAlignment existingFieldOrder sectionsFiel
117122 (" name" , Just packageName)
118123 , (" version" , Just packageVersion)
119124 , (" synopsis" , packageSynopsis)
120- , (" description" , (formatDescription packageCabalVersion headerFieldsAlignment <$> packageDescription) )
125+ , (" description" , packageDescription)
121126 , formatList " category" packageCategory
122127 , (" stability" , packageStability)
123128 , (" homepage" , packageHomepage)
@@ -139,9 +144,7 @@ renderPackageWith settings headerFieldsAlignment existingFieldOrder sectionsFiel
139144 formatValues values = guard (not $ null values) >> (Just $ intercalate separator values)
140145 where
141146 separator :: String
142- separator = " ,\n " ++ replicate n ' '
143- where
144- Alignment n = max headerFieldsAlignment (Alignment $ length field + 2 )
147+ separator = " ,\n "
145148
146149sortStanzaFields :: [(String , [String ])] -> [Element ] -> [Element ]
147150sortStanzaFields sectionsFieldOrder = go
@@ -151,33 +154,6 @@ sortStanzaFields sectionsFieldOrder = go
151154 Stanza name fields : xs | Just fieldOrder <- lookup name sectionsFieldOrder -> Stanza name (sortFieldsBy fieldOrder fields) : go xs
152155 x : xs -> x : go xs
153156
154- formatDescription :: CabalVersion -> Alignment -> String -> String
155- formatDescription cabalVersion (Alignment alignment) description = case map emptyLineToDot $ lines description of
156- x : xs -> intercalate " \n " (x : indent xs)
157- [] -> " "
158- where
159- n :: Int
160- n = max alignment (length (" description: " :: String ))
161-
162- indentation :: String
163- indentation = replicate n ' '
164-
165- emptyLineToDot :: String -> String
166- emptyLineToDot xs
167- | isEmptyLine xs && cabalVersion < makeCabalVersion [3 ] = " ."
168- | otherwise = xs
169-
170- indent :: [String ] -> [String ]
171- indent = map indentLine
172-
173- indentLine :: String -> String
174- indentLine xs
175- | isEmptyLine xs = " "
176- | otherwise = indentation ++ xs
177-
178- isEmptyLine :: String -> Bool
179- isEmptyLine = all isSpace
180-
181157renderSourceRepository :: SourceRepository -> Element
182158renderSourceRepository SourceRepository {.. } = Stanza " source-repository head" [
183159 Field " type" " git"
0 commit comments