parent
a348ae7fbc
commit
ccf2eb092f
|
@ -1042,6 +1042,21 @@ foo =
|
||||||
cccc = ()
|
cccc = ()
|
||||||
in foo
|
in foo
|
||||||
|
|
||||||
|
#test issue 52 a
|
||||||
|
|
||||||
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
|
v = A {a = 1, ..} where b = 2
|
||||||
|
|
||||||
|
#test issue 52 b
|
||||||
|
|
||||||
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
|
v = A {..} where b = 2
|
||||||
|
|
||||||
|
#test issue 52 c
|
||||||
|
|
||||||
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
|
v = A {a = 1, b = 2, c = 3}
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
|
@ -672,42 +672,103 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of
|
||||||
then return Nothing
|
then return Nothing
|
||||||
else Just <$> docSharedWrapper layoutExpr fExpr
|
else Just <$> docSharedWrapper layoutExpr fExpr
|
||||||
return $ (fieldl, lrdrNameToText lnameF, fExpDoc)
|
return $ (fieldl, lrdrNameToText lnameF, fExpDoc)
|
||||||
|
let line1 appender wrapper =
|
||||||
|
[ appender $ docLit $ Text.pack "{"
|
||||||
|
, docWrapNodePrior fd1l $ appSep $ docLit $ fd1n
|
||||||
|
, case fd1e of
|
||||||
|
Just x -> docSeq
|
||||||
|
[ appSep $ docLit $ Text.pack "="
|
||||||
|
, docWrapNodeRest fd1l $ wrapper $ x
|
||||||
|
]
|
||||||
|
Nothing -> docEmpty
|
||||||
|
]
|
||||||
|
let lineR wrapper = fdr <&> \(lfield, fText, fDoc) ->
|
||||||
|
[ docCommaSep
|
||||||
|
, appSep $ docLit $ fText
|
||||||
|
, case fDoc of
|
||||||
|
Just x -> docWrapNode lfield $ docSeq
|
||||||
|
[ appSep $ docLit $ Text.pack "="
|
||||||
|
, wrapper x
|
||||||
|
]
|
||||||
|
Nothing -> docEmpty
|
||||||
|
]
|
||||||
|
let lineN =
|
||||||
|
[ docNodeAnnKW lexpr (Just AnnOpenC) docEmpty
|
||||||
|
, docLit $ Text.pack "}"
|
||||||
|
]
|
||||||
docAlt
|
docAlt
|
||||||
[ docSetParSpacing
|
[ docSeq
|
||||||
|
$ [docNodeAnnKW lexpr Nothing $ nameDoc, docSeparator]
|
||||||
|
++ line1 id docForceSingleline
|
||||||
|
++ join (lineR docForceSingleline)
|
||||||
|
++ lineN
|
||||||
|
, docSetParSpacing
|
||||||
$ docAddBaseY BrIndentRegular
|
$ docAddBaseY BrIndentRegular
|
||||||
$ docPar
|
$ docPar
|
||||||
(docNodeAnnKW lexpr Nothing $ nameDoc)
|
(docNodeAnnKW lexpr Nothing $ nameDoc)
|
||||||
(docNonBottomSpacing $ docLines $ let
|
( docNonBottomSpacing
|
||||||
line1 = docCols ColRecUpdate
|
$ docLines
|
||||||
[ appSep $ docLit $ Text.pack "{"
|
$ [docCols ColRecUpdate $ line1 appSep (docAddBaseY BrIndentRegular)]
|
||||||
, docWrapNodePrior fd1l $ appSep $ docLit $ fd1n
|
++ (docCols ColRecUpdate <$> lineR (docAddBaseY BrIndentRegular))
|
||||||
, case fd1e of
|
++ [docSeq lineN]
|
||||||
Just x -> docSeq
|
)
|
||||||
[ appSep $ docLit $ Text.pack "="
|
|
||||||
, docWrapNodeRest fd1l $ docAddBaseY BrIndentRegular $ x
|
|
||||||
]
|
|
||||||
Nothing -> docEmpty
|
|
||||||
]
|
|
||||||
lineR = fdr <&> \(lfield, fText, fDoc) -> docCols ColRecUpdate
|
|
||||||
[ appSep $ docLit $ Text.pack ","
|
|
||||||
, appSep $ docLit $ fText
|
|
||||||
, case fDoc of
|
|
||||||
Just x -> docWrapNode lfield $ docSeq
|
|
||||||
[ appSep $ docLit $ Text.pack "="
|
|
||||||
, docAddBaseY BrIndentRegular x
|
|
||||||
]
|
|
||||||
Nothing -> docEmpty
|
|
||||||
]
|
|
||||||
lineN = docSeq
|
|
||||||
[ docNodeAnnKW lexpr (Just AnnOpenC) docEmpty
|
|
||||||
, docLit $ Text.pack "}"
|
|
||||||
]
|
|
||||||
in [line1] ++ lineR ++ [lineN])
|
|
||||||
-- TODO oneliner (?)
|
|
||||||
]
|
]
|
||||||
RecordCon lname _ _ (HsRecFields [] (Just 0)) -> do
|
RecordCon lname _ _ (HsRecFields [] (Just 0)) -> do
|
||||||
let t = lrdrNameToText lname
|
let t = lrdrNameToText lname
|
||||||
docWrapNode lname $ docLit $ t <> Text.pack " {..}"
|
docWrapNode lname $ docLit $ t <> Text.pack " {..}"
|
||||||
|
RecordCon lname _ _ (HsRecFields fs@(_:_) (Just dotdoti)) | dotdoti == length fs -> do
|
||||||
|
let nameDoc = docWrapNode lname $ docLit $ lrdrNameToText lname
|
||||||
|
((fd1l, fd1n, fd1e):fdr) <- fs `forM` \fieldl@(L _ (HsRecField (L _ (FieldOcc lnameF _)) fExpr pun)) -> do
|
||||||
|
fExpDoc <- if pun
|
||||||
|
then return Nothing
|
||||||
|
else Just <$> docSharedWrapper layoutExpr fExpr
|
||||||
|
return $ (fieldl, lrdrNameToText lnameF, fExpDoc)
|
||||||
|
let line1 appender wrapper =
|
||||||
|
[ appender $ docLit $ Text.pack "{"
|
||||||
|
, docWrapNodePrior fd1l $ appSep $ docLit $ fd1n
|
||||||
|
, case fd1e of
|
||||||
|
Just x -> docSeq
|
||||||
|
[ appSep $ docLit $ Text.pack "="
|
||||||
|
, docWrapNodeRest fd1l $ wrapper $ x
|
||||||
|
]
|
||||||
|
Nothing -> docEmpty
|
||||||
|
]
|
||||||
|
let lineR wrapper = fdr <&> \(lfield, fText, fDoc) ->
|
||||||
|
[ docCommaSep
|
||||||
|
, appSep $ docLit $ fText
|
||||||
|
, case fDoc of
|
||||||
|
Just x -> docWrapNode lfield $ docSeq
|
||||||
|
[ appSep $ docLit $ Text.pack "="
|
||||||
|
, wrapper x
|
||||||
|
]
|
||||||
|
Nothing -> docEmpty
|
||||||
|
]
|
||||||
|
let lineDot =
|
||||||
|
[ docCommaSep
|
||||||
|
, docLit $ Text.pack ".."
|
||||||
|
]
|
||||||
|
let lineN =
|
||||||
|
[ docNodeAnnKW lexpr (Just AnnOpenC) docEmpty
|
||||||
|
, docLit $ Text.pack "}"
|
||||||
|
]
|
||||||
|
docAlt
|
||||||
|
[ docSeq
|
||||||
|
$ [docNodeAnnKW lexpr Nothing $ nameDoc, docSeparator]
|
||||||
|
++ line1 id docForceSingleline
|
||||||
|
++ join (lineR docForceSingleline)
|
||||||
|
++ lineDot
|
||||||
|
++ lineN
|
||||||
|
, docSetParSpacing
|
||||||
|
$ docAddBaseY BrIndentRegular
|
||||||
|
$ docPar
|
||||||
|
(docNodeAnnKW lexpr Nothing $ nameDoc)
|
||||||
|
( docNonBottomSpacing
|
||||||
|
$ docLines
|
||||||
|
$ [docCols ColRecUpdate $ line1 appSep (docAddBaseY BrIndentRegular)]
|
||||||
|
++ (docCols ColRecUpdate <$> lineR (docAddBaseY BrIndentRegular))
|
||||||
|
++ [docSeq lineDot, docSeq lineN]
|
||||||
|
)
|
||||||
|
]
|
||||||
RecordCon{} ->
|
RecordCon{} ->
|
||||||
unknownNodeError "RecordCon with puns" lexpr
|
unknownNodeError "RecordCon with puns" lexpr
|
||||||
RecordUpd rExpr [] _ _ _ _ -> do
|
RecordUpd rExpr [] _ _ _ _ -> do
|
||||||
|
@ -755,7 +816,7 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of
|
||||||
Nothing -> docEmpty
|
Nothing -> docEmpty
|
||||||
]
|
]
|
||||||
lineR = rFr <&> \(lfield, fText, fDoc) -> docWrapNode lfield $ docCols ColRecUpdate
|
lineR = rFr <&> \(lfield, fText, fDoc) -> docWrapNode lfield $ docCols ColRecUpdate
|
||||||
[ appSep $ docLit $ Text.pack ","
|
[ docCommaSep
|
||||||
, appSep $ docLit $ fText
|
, appSep $ docLit $ fText
|
||||||
, case fDoc of
|
, case fDoc of
|
||||||
Just x -> docSeq [ appSep $ docLit $ Text.pack "="
|
Just x -> docSeq [ appSep $ docLit $ Text.pack "="
|
||||||
|
@ -785,7 +846,7 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of
|
||||||
Nothing -> docEmpty
|
Nothing -> docEmpty
|
||||||
]
|
]
|
||||||
lineR = rFr <&> \(lfield, fText, fDoc) -> docWrapNode lfield $ docCols ColRecUpdate
|
lineR = rFr <&> \(lfield, fText, fDoc) -> docWrapNode lfield $ docCols ColRecUpdate
|
||||||
[ appSep $ docLit $ Text.pack ","
|
[ docCommaSep
|
||||||
, appSep $ docLit $ fText
|
, appSep $ docLit $ fText
|
||||||
, case fDoc of
|
, case fDoc of
|
||||||
Just x -> docSeq [ appSep $ docLit $ Text.pack "="
|
Just x -> docSeq [ appSep $ docLit $ Text.pack "="
|
||||||
|
@ -829,7 +890,7 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of
|
||||||
docSeq
|
docSeq
|
||||||
[ docLit $ Text.pack "["
|
[ docLit $ Text.pack "["
|
||||||
, docForceSingleline e1Doc
|
, docForceSingleline e1Doc
|
||||||
, appSep $ docLit $ Text.pack ","
|
, docCommaSep
|
||||||
, appSep $ docForceSingleline e2Doc
|
, appSep $ docForceSingleline e2Doc
|
||||||
, docLit $ Text.pack "..]"
|
, docLit $ Text.pack "..]"
|
||||||
]
|
]
|
||||||
|
@ -850,7 +911,7 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of
|
||||||
docSeq
|
docSeq
|
||||||
[ docLit $ Text.pack "["
|
[ docLit $ Text.pack "["
|
||||||
, docForceSingleline e1Doc
|
, docForceSingleline e1Doc
|
||||||
, appSep $ docLit $ Text.pack ","
|
, docCommaSep
|
||||||
, appSep $ docForceSingleline e2Doc
|
, appSep $ docForceSingleline e2Doc
|
||||||
, appSep $ docLit $ Text.pack ".."
|
, appSep $ docLit $ Text.pack ".."
|
||||||
, docForceSingleline eNDoc
|
, docForceSingleline eNDoc
|
||||||
|
|
|
@ -96,6 +96,26 @@ layoutPat lpat@(L _ pat) = docWrapNode lpat $ case pat of
|
||||||
[ appSep $ docLit t
|
[ appSep $ docLit t
|
||||||
, docLit $ Text.pack "{..}"
|
, docLit $ Text.pack "{..}"
|
||||||
]
|
]
|
||||||
|
ConPatIn lname (RecCon (HsRecFields fs@(_:_) (Just dotdoti))) | dotdoti == length fs -> do
|
||||||
|
let t = lrdrNameToText lname
|
||||||
|
fds <- fs `forM` \(L _ (HsRecField (L _ (FieldOcc lnameF _)) fPat pun)) -> do
|
||||||
|
fExpDoc <- if pun
|
||||||
|
then return Nothing
|
||||||
|
else Just <$> docSharedWrapper layoutPat fPat
|
||||||
|
return $ (lrdrNameToText lnameF, fExpDoc)
|
||||||
|
fmap Seq.singleton $ docSeq
|
||||||
|
[ appSep $ docLit t
|
||||||
|
, appSep $ docLit $ Text.pack "{"
|
||||||
|
, docSeq $ fds >>= \case
|
||||||
|
(fieldName, Just fieldDoc) ->
|
||||||
|
[ appSep $ docLit $ fieldName
|
||||||
|
, appSep $ docLit $ Text.pack "="
|
||||||
|
, fieldDoc >>= colsWrapPat
|
||||||
|
, docCommaSep
|
||||||
|
]
|
||||||
|
(fieldName, Nothing) -> [docLit fieldName, docCommaSep]
|
||||||
|
, docLit $ Text.pack "..}"
|
||||||
|
]
|
||||||
TuplePat args boxity _ -> do
|
TuplePat args boxity _ -> do
|
||||||
case boxity of
|
case boxity of
|
||||||
Boxed -> wrapPatListy args "(" ")"
|
Boxed -> wrapPatListy args "(" ")"
|
||||||
|
|
Loading…
Reference in New Issue