Fix retain comments on matches (lambda rhs etc.)

ghc92
Lennart Spitzner 2023-04-17 09:58:09 +00:00
parent 0a76fe952c
commit 736c2a8d46
2 changed files with 57 additions and 61 deletions

View File

@ -250,19 +250,15 @@ layoutPatternBind
-> BriDocNumbered -> BriDocNumbered
-> LMatch GhcPs (LHsExpr GhcPs) -> LMatch GhcPs (LHsExpr GhcPs)
-> ToBriDocM BriDocNumbered -> ToBriDocM BriDocNumbered
layoutPatternBind funId binderDoc lmatch@(L _ match) = layoutPatternBind funId binderDoc lmatch@(L _ match) = do
docHandleComms lmatch $ do let Match epAnn matchCtx pats (GRHSs _ grhss whereBinds) = match
let pats = m_pats match
let (GRHSs _ grhss whereBinds) = m_grhss match
patDocs <- pats `forM` \p -> fmap return $ colsWrapPat =<< layoutPat p patDocs <- pats `forM` \p -> fmap return $ colsWrapPat =<< layoutPat p
let isInfix = isInfixMatch match let isInfix = isInfixMatch match
let matchEndLoc = case GHC.locA $ GHC.getLoc lmatch of let matchEndLoc = case GHC.locA $ GHC.getLoc lmatch of
GHC.RealSrcSpan s _ -> Just $ GHC.realSrcSpanEnd s GHC.RealSrcSpan s _ -> Just $ GHC.realSrcSpanEnd s
GHC.UnhelpfulSpan{} -> Nothing GHC.UnhelpfulSpan{} -> Nothing
mIdDoc <- case match of mIdDoc <- case matchCtx of
Match epAnn (FunRhs matchId _ _) _ _ -> FunRhs matchId _ _ -> fmap Just $ do
fmap Just
$ docHandleComms epAnn $ do
t <- lrdrNameToTextAnn matchId t <- lrdrNameToTextAnn matchId
let t' = fixPatternBindIdentifier match t let t' = fixPatternBindIdentifier match t
docLit t' docLit t'
@ -300,7 +296,7 @@ layoutPatternBind funId binderDoc lmatch@(L _ match) =
-- let mWhereArg = mWhereDocs <&> (,) (mkAnnKey lmatch) -- let mWhereArg = mWhereDocs <&> (,) (mkAnnKey lmatch)
let alignmentToken = if null pats then Nothing else funId let alignmentToken = if null pats then Nothing else funId
let hasComments = hasAnyCommentsBelow lmatch let hasComments = hasAnyCommentsBelow lmatch
docFlushCommsPost True matchEndLoc docHandleComms lmatch $ docHandleComms epAnn $ docFlushCommsPost True matchEndLoc
$ layoutPatternBindFinal $ layoutPatternBindFinal
alignmentToken alignmentToken
binderDoc binderDoc

View File

@ -55,10 +55,9 @@ layoutExpr lexpr@(L _ expr) = do
HsLit epAnn lit -> docHandleComms epAnn $ do HsLit epAnn lit -> docHandleComms epAnn $ do
allocateNode $ litBriDoc lit allocateNode $ litBriDoc lit
HsLam _ (MG _ (L _ [(L _ match)]) _) HsLam _ (MG _ (L _ [(L _ match)]) _)
| pats <- m_pats match | Match epAnn _matchCtx pats (GRHSs _ [lgrhs] llocals) <- match
, GRHSs _ [lgrhs] llocals <- m_grhss match
, EmptyLocalBinds{} <- llocals , EmptyLocalBinds{} <- llocals
, L _ (GRHS epAnn [] body) <- lgrhs , L _ (GRHS rhsEpAnn [] body) <- lgrhs
-> do -> do
patDocs <- zip (True : repeat False) pats `forM` \(isFirst, p) -> patDocs <- zip (True : repeat False) pats `forM` \(isFirst, p) ->
fmap return $ do fmap return $ do
@ -85,6 +84,7 @@ layoutExpr lexpr@(L _ expr) = do
shareDoc shareDoc
$ docAddBaseY BrIndentRegular $ docAddBaseY BrIndentRegular
$ docHandleComms epAnn $ docHandleComms epAnn
$ docHandleComms rhsEpAnn
$ layoutExpr body $ layoutExpr body
let funcPatternPartLine = docCols let funcPatternPartLine = docCols
ColCasePattern ColCasePattern