diff --git a/src-literatetests/10-tests.blt b/src-literatetests/10-tests.blt index 1701b1d..0c1adfd 100644 --- a/src-literatetests/10-tests.blt +++ b/src-literatetests/10-tests.blt @@ -447,6 +447,24 @@ data Foo = Bar ABC --g ) +#test normal records on multi line indent policy left +-- brittany {lconfig_indentPolicy: IndentPolicyLeft } +data EnterpriseGrantsForCompanyResponse = EnterpriseGrantsForCompanyResponse + Types.Company + [EnterpriseGrantResponse] + +#test normal records on multi line indent policy free +-- brittany {lconfig_indentPolicy: IndentPolicyFree } +data EnterpriseGrantsForCompanyResponse = EnterpriseGrantsForCompanyResponse + Types.Company + [EnterpriseGrantResponse] + +#test normal records on multi line indent policy multiple +-- brittany {lconfig_indentPolicy: IndentPolicyMultiple } +data EnterpriseGrantsForCompanyResponse = EnterpriseGrantsForCompanyResponse + Types.Company + [EnterpriseGrantResponse] + ############################################################################### ############################################################################### diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/DataDecl.hs b/src/Language/Haskell/Brittany/Internal/Layouters/DataDecl.hs index 5dbb8db..2214478 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/DataDecl.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/DataDecl.hs @@ -266,11 +266,29 @@ docDeriving = docLit $ Text.pack "deriving" createDetailsDoc :: Text -> HsConDeclDetails GhcPs -> (ToBriDocM BriDocNumbered) createDetailsDoc consNameStr details = case details of - PrefixCon args -> docSeq - [ docLit consNameStr - , docSeparator - , docSeq $ List.intersperse docSeparator $ args <&> layoutType - ] + PrefixCon args -> do + indentPolicy <- mAsk <&> _conf_layout .> _lconfig_indentPolicy .> confUnpack + let + singleLine = docSeq + [ docLit consNameStr + , docSeparator + , docSeq $ List.intersperse docSeparator $ args <&> layoutType + ] + leftIndented = docSetParSpacing + . docAddBaseY BrIndentRegular + . docPar (docLit consNameStr) + . docLines + $ layoutType <$> args + multiIndented = docSetParSpacing + . docSetBaseAndIndent + . docPar (docLit consNameStr) + . docLines + $ layoutType + <$> args + case indentPolicy of + IndentPolicyLeft -> docAlt [singleLine, leftIndented] + IndentPolicyMultiple -> docAlt [singleLine, multiIndented] + IndentPolicyFree -> docAlt [singleLine, multiIndented] RecCon (L _ []) -> docEmpty #if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */ RecCon lRec@(L _ [lField@(L _ (ConDeclField _ext names t _))]) -> docSeq