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 #test unboxed-tuple and vanilla names
{-# LANGUAGE UnboxedTuples #-} {-# LANGUAGE UnboxedTuples #-}
spanKey :: (# Int, Int #) -> (# Int, Int #)
spanKey = case foo of spanKey = case foo of
(# bar, baz #) -> (# baz, bar #) (# bar, baz #) -> (# baz, bar #)
#test unboxed-tuple and hashed name #test unboxed-tuple and hashed name
{-# LANGUAGE MagicHash, UnboxedTuples #-} {-# LANGUAGE MagicHash, UnboxedTuples #-}
spanKey :: _ -> (# Int#, Int# #) spanKey :: (# Int#, Int# #) -> (# Int#, Int# #)
spanKey = case foo of spanKey = case foo of
(# bar#, baz# #) -> (# baz# +# bar#, bar# #) (# bar#, baz# #) -> (# baz# +# bar#, bar# #)

View File

@ -50,7 +50,12 @@ module Language.Haskell.Brittany.Internal.LayouterBasics
, appSep , appSep
, docCommaSep , docCommaSep
, docParenLSep , docParenLSep
, docParenL
, docParenR , docParenR
, docParenHashL
, docParenHashR
, docBracketL
, docBracketR
, docTick , docTick
, spacifyDocs , spacifyDocs
, briDocMToPPM , briDocMToPPM
@ -530,11 +535,27 @@ docCommaSep :: ToBriDocM BriDocNumbered
docCommaSep = appSep $ docLit $ Text.pack "," docCommaSep = appSep $ docLit $ Text.pack ","
docParenLSep :: ToBriDocM BriDocNumbered docParenLSep :: ToBriDocM BriDocNumbered
docParenLSep = appSep $ docLit $ Text.pack "(" docParenLSep = appSep docParenL
docParenL :: ToBriDocM BriDocNumbered
docParenL = docLit $ Text.pack "("
docParenR :: ToBriDocM BriDocNumbered docParenR :: ToBriDocM BriDocNumbered
docParenR = docLit $ Text.pack ")" 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 :: ToBriDocM BriDocNumbered
docTick = docLit $ Text.pack "'" docTick = docLit $ Text.pack "'"

View File

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

View File

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