Skip to content

Commit 40b2a19

Browse files
committed
Add break_newtypes flag. (haskell#342)
Default behavior remains the same, but when you set `break_newtypes` to `false` newtypes will be formatted on a single line.
1 parent 46abf79 commit 40b2a19

File tree

4 files changed

+16
-6
lines changed

4 files changed

+16
-6
lines changed

data/stylish-haskell.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ steps:
9090
# # Default: false
9191
# break_enums: false
9292
#
93+
# # Whether or not to break newtype types before `=` sign
94+
# #
95+
# # Default: true
96+
# break_newtypes: true
97+
#
9398
# # Whether or not to break single constructor data types before `=` sign
9499
# #
95100
# # Default: true

lib/Language/Haskell/Stylish/Config.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ parseRecords c o = Data.step
251251
<*> (o A..: "field_comment")
252252
<*> (o A..: "deriving")
253253
<*> (o A..:? "break_enums" A..!= False)
254+
<*> (o A..:? "break_newtypes" A..!= True)
254255
<*> (o A..:? "break_single_constructors" A..!= True)
255256
<*> (o A..: "via" >>= parseIndent)
256257
<*> (o A..:? "curried_context" A..!= False)

lib/Language/Haskell/Stylish/Step/Data.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ data Config = Config
6060
-- ^ Indent before @deriving@ lines (measured from column 0)
6161
, cBreakEnums :: !Bool
6262
-- ^ Break enums by newlines and follow the above rules
63+
, cBreakNewtypes :: !Bool
64+
-- ^ Break newtypes by newlines and follow the above rules
6365
, cBreakSingleConstructors :: !Bool
6466
-- ^ Break single constructors when enabled, e.g. @Indent 2@ will not cause newline after @=@
6567
, cVia :: !Indent
@@ -79,6 +81,7 @@ defaultConfig = Config
7981
, cFieldComment = 2
8082
, cDeriving = 4
8183
, cBreakEnums = True
84+
, cBreakNewtypes = True
8285
, cBreakSingleConstructors = False
8386
, cVia = Indent 4
8487
, cSortDeriving = True
@@ -155,6 +158,7 @@ putDataDecl cfg@Config {..} decl = do
155158
when (hasConstructors decl) do
156159
case (cEquals, cFirstField) of
157160
(_, Indent x) | isEnum decl && cBreakEnums -> newline >> spaces x
161+
(_, _) | if isNewtype decl then not cBreakNewtypes else singleConstructor decl && not cBreakSingleConstructors -> space
158162
(_, _)
159163
| not (isNewtype decl)
160164
, singleConstructor decl && not cBreakSingleConstructors ->

tests/Language/Haskell/Stylish/Step/Data/Tests.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,19 +1382,19 @@ case66 = assertSnippet (step indentIndentStyle) input input
13821382
]
13831383

13841384
sameSameStyle :: Config
1385-
sameSameStyle = Config SameLine SameLine 2 2 False True SameLine False True NoMaxColumns
1385+
sameSameStyle = Config SameLine SameLine 2 2 False True True SameLine False True NoMaxColumns
13861386

13871387
sameIndentStyle :: Config
1388-
sameIndentStyle = Config SameLine (Indent 2) 2 2 False True SameLine False True NoMaxColumns
1388+
sameIndentStyle = Config SameLine (Indent 2) 2 2 False True True SameLine False True NoMaxColumns
13891389

13901390
indentSameStyle :: Config
1391-
indentSameStyle = Config (Indent 2) SameLine 2 2 False True SameLine False True NoMaxColumns
1391+
indentSameStyle = Config (Indent 2) SameLine 2 2 False True True SameLine False True NoMaxColumns
13921392

13931393
indentIndentStyle :: Config
1394-
indentIndentStyle = Config (Indent 2) (Indent 2) 2 2 False True SameLine False True NoMaxColumns
1394+
indentIndentStyle = Config (Indent 2) (Indent 2) 2 2 False True True SameLine False True NoMaxColumns
13951395

13961396
indentIndentStyle4 :: Config
1397-
indentIndentStyle4 = Config (Indent 4) (Indent 4) 4 4 False True SameLine False True NoMaxColumns
1397+
indentIndentStyle4 = Config (Indent 4) (Indent 4) 4 4 False True True SameLine False True NoMaxColumns
13981398

13991399
sameSameNoSortStyle :: Config
1400-
sameSameNoSortStyle = Config SameLine SameLine 2 2 False True SameLine False False NoMaxColumns
1400+
sameSameNoSortStyle = Config SameLine SameLine 2 2 False True True SameLine False False NoMaxColumns

0 commit comments

Comments
 (0)