Unify "(#", "#)" under single name, docParenHashL and docParenHashR

pull/186/head
Sergey Vinokurov 2018-09-18 09:12:35 +01:00
parent 6898d3ef44
commit 9755db1d05
No known key found for this signature in database
GPG Key ID: D6CD29530F98D6B8
5 changed files with 37 additions and 24 deletions

View File

@ -653,11 +653,12 @@ jaicyhHumzo btrKpeyiFej mava = do
#test unboxed-tuple and vanilla names
{-# LANGUAGE UnboxedTuples #-}
spanKey :: (# Int, Int #) -> (# Int, Int #)
spanKey = case foo of
(# bar, baz #) -> (# baz, bar #)
#test unboxed-tuple and hashed name
{-# LANGUAGE MagicHash, UnboxedTuples #-}
spanKey :: _ -> (# Int#, Int# #)
spanKey :: (# Int#, Int# #) -> (# Int#, Int# #)
spanKey = case foo of
(# bar#, baz# #) -> (# baz# +# bar#, bar# #)

View File

@ -50,7 +50,12 @@ module Language.Haskell.Brittany.Internal.LayouterBasics
, appSep
, docCommaSep
, docParenLSep
, docParenL
, docParenR
, docParenHashL
, docParenHashR
, docBracketL
, docBracketR
, docTick
, spacifyDocs
, briDocMToPPM
@ -530,11 +535,27 @@ docCommaSep :: ToBriDocM BriDocNumbered
docCommaSep = appSep $ docLit $ Text.pack ","
docParenLSep :: ToBriDocM BriDocNumbered
docParenLSep = appSep $ docLit $ Text.pack "("
docParenLSep = appSep docParenL
docParenL :: ToBriDocM BriDocNumbered
docParenL = docLit $ Text.pack "("
docParenR :: ToBriDocM BriDocNumbered
docParenR = docLit $ Text.pack ")"
docParenHashL :: ToBriDocM BriDocNumbered
docParenHashL = docSeq [docLit $ Text.pack "(#", docSeparator]
docParenHashR :: ToBriDocM BriDocNumbered
docParenHashR = docSeq [docSeparator, docLit $ Text.pack "#)"]
docBracketL :: ToBriDocM BriDocNumbered
docBracketL = docLit $ Text.pack "["
docBracketR :: ToBriDocM BriDocNumbered
docBracketR = docLit $ Text.pack "]"
docTick :: ToBriDocM BriDocNumbered
docTick = docLit $ Text.pack "'"

View File

@ -372,10 +372,7 @@ layoutExpr lexpr@(L _ expr) = do
hasComments <- hasAnyCommentsBelow lexpr
let (openLit, closeLit) = case boxity of
Boxed -> (docLit $ Text.pack "(", docLit $ Text.pack ")")
Unboxed ->
( docSeq [docLit $ Text.pack "(#", docSeparator]
, docSeq [docSeparator, docLit $ Text.pack "#)"]
)
Unboxed -> (docParenHashL, docParenHashR)
case splitFirstLast argDocs of
FirstLastEmpty -> docSeq
[ openLit

View File

@ -140,8 +140,8 @@ layoutPat lpat@(L _ pat) = docWrapNode lpat $ case pat of
-- (nestedpat1, nestedpat2, nestedpat3) -> expr
-- (#nestedpat1, nestedpat2, nestedpat3#) -> expr
case boxity of
Boxed -> wrapPatListy args "(" ")" False
Unboxed -> wrapPatListy args "(#" "#)" True
Boxed -> wrapPatListy args "()" docParenL docParenR
Unboxed -> wrapPatListy args "(##)" docParenHashL docParenHashR
AsPat asName asPat -> do
-- bind@nestedpat -> expr
wrapPatPrepend asPat (docLit $ lrdrNameToText asName <> Text.pack "@")
@ -172,7 +172,7 @@ layoutPat lpat@(L _ pat) = docWrapNode lpat $ case pat of
ListPat elems _ _ ->
-- [] -> expr1
-- [nestedpat1, nestedpat2, nestedpat3] -> expr2
wrapPatListy elems "[" "]" False
wrapPatListy elems "[]" docBracketL docBracketR
BangPat pat1 -> do
-- !nestedpat -> expr
wrapPatPrepend pat1 (docLit $ Text.pack "!")
@ -212,24 +212,18 @@ wrapPatPrepend pat prepElem = do
wrapPatListy
:: [Located (Pat GhcPs)]
-> String
-> String
-> Bool
-> ToBriDocM BriDocNumbered
-> ToBriDocM BriDocNumbered
-> ToBriDocM (Seq BriDocNumbered)
wrapPatListy elems start end padSeparators = do
wrapPatListy elems both start end = do
elemDocs <- Seq.fromList elems `forM` (layoutPat >=> colsWrapPat)
case Seq.viewl elemDocs of
Seq.EmptyL -> fmap Seq.singleton $ docLit $ Text.pack $ start ++ end
Seq.EmptyL -> fmap Seq.singleton $ docLit $ Text.pack both
x1 Seq.:< rest -> do
sDoc <- docLit $ Text.pack start
eDoc <- docLit $ Text.pack end
let sDoc' | padSeparators = docSeq [return sDoc, docSeparator]
| otherwise = return sDoc
eDoc' | padSeparators = docSeq [docSeparator, return eDoc]
| otherwise = return eDoc
sDoc'' <- sDoc'
eDoc'' <- eDoc'
sDoc <- start
eDoc <- end
rest' <- rest `forM` \bd -> docSeq
[ docCommaSep
, return bd
]
return $ (sDoc'' Seq.<| x1 Seq.<| rest') Seq.|> eDoc''
return $ (sDoc Seq.<| x1 Seq.<| rest') Seq.|> eDoc

View File

@ -407,8 +407,8 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
]
unboxedL = do
docs <- docSharedWrapper layoutType `mapM` typs
let start = docSeq [docLit $ Text.pack "(#", docSeparator]
end = docSeq [docSeparator, docLit $ Text.pack "#)"]
let start = docParenHashL
end = docParenHashR
docAlt
[ docSeq $ [start]
++ List.intersperse docCommaSep docs