Compare commits

..

2 Commits

Author SHA1 Message Date
Taylor Fausak e03ab8425b
Merge pull request #377 from lspitzner/tfausak-patch-1
Announce end of maintenance
2022-11-11 12:13:28 -06:00
Taylor Fausak 420eac889e
Announce end of maintenance 2022-11-11 09:52:57 -06:00
3 changed files with 13 additions and 75 deletions

View File

@ -1,4 +1,11 @@
# brittany [![Hackage version](https://img.shields.io/hackage/v/brittany.svg?label=Hackage)](https://hackage.haskell.org/package/brittany) [![Stackage version](https://www.stackage.org/package/brittany/badge/lts?label=Stackage)](https://www.stackage.org/package/brittany) [![Build Status](https://secure.travis-ci.org/lspitzner/brittany.svg?branch=master)](http://travis-ci.org/lspitzner/brittany)
:warning:
This project is effectively unmaintained!
I ([@tfausak](https://github.com/tfausak)) would recommend switching to another formatter.
At time of writing (2022-11-11), I would suggest [Ormolu](https://github.com/tweag/ormolu).
Or if you prefer some configuration, I would suggest [Fourmolu](https://github.com/fourmolu/fourmolu).
haskell source code formatter
![Output sample](https://github.com/lspitzner/brittany/raw/master/brittany-sample.gif)

View File

@ -1,50 +1 @@
-- The spaces before commas are undesirable
test :: Proxy '[ 'True ]
test :: Proxy '[True]
test :: Proxy '[ 'True , False ]
test :: Proxy '[True , False]
test :: Proxy '[True , 'False]
test :: Proxy '[ 'True , 'False ]
test :: Proxy '[ 'Just 'True , False ]
test :: Proxy '[Just True , False]
test :: Proxy '[('True)]
test :: Proxy ('Just 'True)
test :: Proxy ('True)
test = Proxy @'[ 'True ]
test = Proxy @'[True]
test = Proxy @'[ 'True , False ]
test = Proxy @'[True , False]
test = Proxy @'[True , 'False]
test = Proxy @'[ 'True , 'False ]
test = Proxy @'[ 'Just 'True , False ]
test = Proxy @'[Just True , False]
test = Proxy @'[('True)]
test = Proxy @('Just 'True)
test = Proxy @('True)
test
:: Proxy '[-- comment
'True ]
test
:: Proxy '[-- comment
True]
test
:: Proxy '[{- comment -}
'True ]
test
:: Proxy '[{- comment -}
True]
test =
Proxy @'[-- comment
'True ]
test =
Proxy @'[-- comment
True]
test =
Proxy @'[{- comment -}
'True ]
test =
Proxy @'[{- comment -}
True]
test :: Proxy '[ 'True]

View File

@ -24,7 +24,7 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
HsTyVar _ promoted name -> do
t <- lrdrNameToTextAnnTypeEqualityIsSpecial name
case promoted of
IsPromoted -> docSeq [docTick, docWrapNode name $ docLit t]
IsPromoted -> docSeq [docSeparator, docTick, docWrapNode name $ docLit t]
NotPromoted -> docWrapNode name $ docLit t
HsForAllTy _ hsf (L _ (HsQualTy _ (L _ cntxts) typ2)) -> do
let bndrs = getBinders hsf
@ -522,25 +522,14 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
HsRecTy{} -> -- TODO
briDocByExactInlineOnly "HsRecTy{}" ltype
HsExplicitListTy _ _ typs -> do
-- `'['Foo]` isn't valid because it parses as a character. So if the list
-- starts with a promoted type var, we swap to `'[ 'Foo ]`.
let
sepIfHeadPromoted = case typs of
(L _ t) : _ | startsWithTick t -> docSeparator
_ -> docEmpty
-- When rendering on multiple lines, this causes commas to line up with the
-- opening bracket. Unfortunately it also adds unnecessary space when
-- rendering on a single line.
let specialCommaSep = appSep $ docLit $ Text.pack " ,"
typDocs <- docSharedWrapper layoutType `mapM` typs
hasComments <- hasAnyCommentsBelow ltype
let specialCommaSep = appSep $ docLit $ Text.pack " ,"
docAlt
[ docSeq
$ [docLit $ Text.pack "'[", sepIfHeadPromoted]
$ [docLit $ Text.pack "'["]
++ List.intersperse specialCommaSep (docForceSingleline <$> typDocs)
++ [sepIfHeadPromoted, docLit $ Text.pack "]"]
++ [docLit $ Text.pack "]"]
, case splitFirstLast typDocs of
FirstLastEmpty -> docSeq
[ docLit $ Text.pack "'["
@ -549,9 +538,7 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
FirstLastSingleton e -> docAlt
[ docSeq
[ docLit $ Text.pack "'["
, sepIfHeadPromoted
, docNodeAnnKW ltype (Just AnnOpenS) $ docForceSingleline e
, sepIfHeadPromoted
, docLit $ Text.pack "]"
]
, docSetBaseY $ docLines
@ -566,7 +553,7 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
FirstLast e1 ems eN -> runFilteredAlternative $ do
addAlternativeCond (not hasComments)
$ docSeq
$ [docLit $ Text.pack "'[", sepIfHeadPromoted]
$ [docLit $ Text.pack "'["]
++ List.intersperse
specialCommaSep
(docForceSingleline
@ -646,10 +633,3 @@ withoutSpecificity = fmap $ \case
UserTyVar a _ c -> UserTyVar a () c
KindedTyVar a _ c d -> KindedTyVar a () c d
XTyVarBndr a -> XTyVarBndr a
-- | Determine if the type starts with a tick mark (single quote) when rendered.
startsWithTick :: HsType pass -> Bool
startsWithTick = \case
HsTyVar _ IsPromoted _ -> True
HsAppTy _ (L _ t) _ -> startsWithTick t
_ -> False