Create Showcase.md
parent
fab9aa2036
commit
beaf121b66
|
@ -0,0 +1,289 @@
|
|||
# brittany showcase
|
||||
|
||||
We will try to take the following module and try to fit it into 80 columns.
|
||||
|
||||
## input
|
||||
|
||||
~~~~ .hs
|
||||
-- 10 20 30 40 50 60 70 80
|
||||
module Language.Haskell.Brittany.BriLayouter
|
||||
( layoutBriDoc
|
||||
)
|
||||
where
|
||||
|
||||
|
||||
|
||||
layoutBriDoc :: Data.Data.Data ast => ast -> BriDocNumbered -> PPM ()
|
||||
layoutBriDoc ast briDoc = do
|
||||
-- first step: transform the briDoc.
|
||||
briDoc' <- MultiRWSS.withMultiStateS BDEmpty $ do
|
||||
traceIfDumpConf "bridoc raw" _dconf_dump_bridoc_raw $ briDocToDoc $ unwrapBriDocNumbered $ briDoc
|
||||
-- bridoc transformation: remove alts
|
||||
transformAlts briDoc >>= mSet
|
||||
mGet >>= traceIfDumpConf "bridoc post-alt" _dconf_dump_bridoc_simpl_alt . briDocToDoc
|
||||
-- bridoc transformation: float stuff in
|
||||
mGet <&> transformSimplifyFloating >>= mSet
|
||||
mGet >>= traceIfDumpConf "bridoc post-floating" _dconf_dump_bridoc_simpl_floating . briDocToDoc
|
||||
-- bridoc transformation: par removal
|
||||
mGet <&> transformSimplifyPar >>= mSet
|
||||
mGet >>= traceIfDumpConf "bridoc post-par" _dconf_dump_bridoc_simpl_par . briDocToDoc
|
||||
-- bridoc transformation: float stuff in
|
||||
mGet <&> transformSimplifyColumns >>= mSet
|
||||
mGet >>= traceIfDumpConf "bridoc post-columns" _dconf_dump_bridoc_simpl_columns . briDocToDoc
|
||||
-- -- bridoc transformation: indent
|
||||
mGet <&> transformSimplifyIndent >>= mSet
|
||||
mGet >>= traceIfDumpConf "bridoc post-indent" _dconf_dump_bridoc_simpl_indent . briDocToDoc
|
||||
mGet >>= traceIfDumpConf "bridoc final" _dconf_dump_bridoc_final . briDocToDoc
|
||||
-- -- convert to Simple type
|
||||
-- simpl <- mGet <&> transformToSimple
|
||||
-- return simpl
|
||||
|
||||
anns :: ExactPrint.Types.Anns <- mAsk
|
||||
let filteredAnns = filterAnns ast anns
|
||||
|
||||
let state = LayoutState
|
||||
{ _lstate_baseY = 0
|
||||
, _lstate_curY = 0
|
||||
, _lstate_indLevel = 0
|
||||
, _lstate_indLevelLinger = 0
|
||||
, _lstate_commentsPrior = extractCommentsPrior filteredAnns
|
||||
, _lstate_commentsPost = extractCommentsPost filteredAnns
|
||||
, _lstate_commentCol = Nothing
|
||||
, _lstate_addSepSpace = Nothing
|
||||
, _lstate_inhibitMTEL = False
|
||||
, _lstate_isNewline = NewLineStateInit
|
||||
}
|
||||
|
||||
state' <- MultiRWSS.withMultiStateS state $ layoutBriDocM briDoc'
|
||||
|
||||
let remainingComments = Map.elems (_lstate_commentsPrior state') ++ Map.elems (_lstate_commentsPost state')
|
||||
remainingComments `forM_` (mTell . (:[]) . LayoutErrorUnusedComment . show . fmap fst)
|
||||
|
||||
return $ ()
|
||||
~~~~
|
||||
|
||||
## brittany output
|
||||
|
||||
~~~~ .hs
|
||||
-- 10 20 30 40 50 60 70 80
|
||||
module Language.Haskell.Brittany.BriLayouter
|
||||
( layoutBriDoc
|
||||
)
|
||||
where
|
||||
|
||||
|
||||
|
||||
layoutBriDoc :: Data.Data.Data ast => ast -> BriDocNumbered -> PPM ()
|
||||
layoutBriDoc ast briDoc = do
|
||||
-- first step: transform the briDoc.
|
||||
briDoc' <- MultiRWSS.withMultiStateS BDEmpty $ do
|
||||
traceIfDumpConf "bridoc raw" _dconf_dump_bridoc_raw
|
||||
$ briDocToDoc
|
||||
$ unwrapBriDocNumbered
|
||||
$ briDoc
|
||||
-- bridoc transformation: remove alts
|
||||
transformAlts briDoc >>= mSet
|
||||
mGet
|
||||
>>= traceIfDumpConf "bridoc post-alt" _dconf_dump_bridoc_simpl_alt
|
||||
. briDocToDoc
|
||||
-- bridoc transformation: float stuff in
|
||||
mGet <&> transformSimplifyFloating >>= mSet
|
||||
mGet
|
||||
>>= traceIfDumpConf "bridoc post-floating"
|
||||
_dconf_dump_bridoc_simpl_floating
|
||||
. briDocToDoc
|
||||
-- bridoc transformation: par removal
|
||||
mGet <&> transformSimplifyPar >>= mSet
|
||||
mGet
|
||||
>>= traceIfDumpConf "bridoc post-par" _dconf_dump_bridoc_simpl_par
|
||||
. briDocToDoc
|
||||
-- bridoc transformation: float stuff in
|
||||
mGet <&> transformSimplifyColumns >>= mSet
|
||||
mGet
|
||||
>>= traceIfDumpConf "bridoc post-columns" _dconf_dump_bridoc_simpl_columns
|
||||
. briDocToDoc
|
||||
-- -- bridoc transformation: indent
|
||||
mGet <&> transformSimplifyIndent >>= mSet
|
||||
mGet
|
||||
>>= traceIfDumpConf "bridoc post-indent" _dconf_dump_bridoc_simpl_indent
|
||||
. briDocToDoc
|
||||
mGet
|
||||
>>= traceIfDumpConf "bridoc final" _dconf_dump_bridoc_final
|
||||
. briDocToDoc
|
||||
-- -- convert to Simple type
|
||||
-- simpl <- mGet <&> transformToSimple
|
||||
-- return simpl
|
||||
|
||||
anns :: ExactPrint.Types.Anns <- mAsk
|
||||
let filteredAnns = filterAnns ast anns
|
||||
|
||||
let state = LayoutState
|
||||
{ _lstate_baseY = 0
|
||||
, _lstate_curY = 0
|
||||
, _lstate_indLevel = 0
|
||||
, _lstate_indLevelLinger = 0
|
||||
, _lstate_commentsPrior = extractCommentsPrior filteredAnns
|
||||
, _lstate_commentsPost = extractCommentsPost filteredAnns
|
||||
, _lstate_commentCol = Nothing
|
||||
, _lstate_addSepSpace = Nothing
|
||||
, _lstate_inhibitMTEL = False
|
||||
, _lstate_isNewline = NewLineStateInit
|
||||
}
|
||||
|
||||
state' <- MultiRWSS.withMultiStateS state $ layoutBriDocM briDoc'
|
||||
|
||||
let remainingComments =
|
||||
Map.elems (_lstate_commentsPrior state')
|
||||
++ Map.elems (_lstate_commentsPost state')
|
||||
remainingComments
|
||||
`forM_` (mTell . (:[]) . LayoutErrorUnusedComment . show . fmap fst)
|
||||
|
||||
return $ ()
|
||||
~~~~
|
||||
|
||||
In contrast, let us look at Chris Done's `hindent` re-formatting results for the same input, with two different styles:
|
||||
|
||||
## hindent --style chris-done output
|
||||
|
||||
~~~~ .hs
|
||||
-- 10 20 30 40 50 60 70 80
|
||||
module Language.Haskell.Brittany.BriLayouter
|
||||
(layoutBriDoc)
|
||||
where
|
||||
|
||||
layoutBriDoc :: Data.Data.Data ast
|
||||
=> ast -> BriDocNumbered -> PPM ()
|
||||
layoutBriDoc ast briDoc =
|
||||
do
|
||||
-- first step: transform the briDoc.
|
||||
briDoc' <-
|
||||
MultiRWSS.withMultiStateS BDEmpty $
|
||||
do traceIfDumpConf "bridoc raw" _dconf_dump_bridoc_raw $
|
||||
briDocToDoc $ unwrapBriDocNumbered $ briDoc
|
||||
-- bridoc transformation: remove alts
|
||||
transformAlts briDoc >>=
|
||||
mSet
|
||||
mGet >>=
|
||||
traceIfDumpConf "bridoc post-alt" _dconf_dump_bridoc_simpl_alt .
|
||||
briDocToDoc
|
||||
-- bridoc transformation: float stuff in
|
||||
mGet <&>
|
||||
transformSimplifyFloating >>=
|
||||
mSet
|
||||
mGet >>=
|
||||
traceIfDumpConf "bridoc post-floating" _dconf_dump_bridoc_simpl_floating .
|
||||
briDocToDoc
|
||||
-- bridoc transformation: par removal
|
||||
mGet <&>
|
||||
transformSimplifyPar >>=
|
||||
mSet
|
||||
mGet >>=
|
||||
traceIfDumpConf "bridoc post-par" _dconf_dump_bridoc_simpl_par .
|
||||
briDocToDoc
|
||||
-- bridoc transformation: float stuff in
|
||||
mGet <&>
|
||||
transformSimplifyColumns >>=
|
||||
mSet
|
||||
mGet >>=
|
||||
traceIfDumpConf "bridoc post-columns" _dconf_dump_bridoc_simpl_columns .
|
||||
briDocToDoc
|
||||
-- -- bridoc transformation: indent
|
||||
mGet <&>
|
||||
transformSimplifyIndent >>=
|
||||
mSet
|
||||
mGet >>=
|
||||
traceIfDumpConf "bridoc post-indent" _dconf_dump_bridoc_simpl_indent .
|
||||
briDocToDoc
|
||||
mGet >>=
|
||||
traceIfDumpConf "bridoc final" _dconf_dump_bridoc_final .
|
||||
briDocToDoc
|
||||
-- -- convert to Simple type
|
||||
-- simpl <- mGet <&> transformToSimple
|
||||
-- return simpl
|
||||
anns :: ExactPrint.Types.Anns <- mAsk
|
||||
let filteredAnns = filterAnns ast anns
|
||||
let state =
|
||||
LayoutState {_lstate_baseY = 0
|
||||
,_lstate_curY = 0
|
||||
,_lstate_indLevel = 0
|
||||
,_lstate_indLevelLinger = 0
|
||||
,_lstate_commentsPrior =
|
||||
extractCommentsPrior filteredAnns
|
||||
,_lstate_commentsPost = extractCommentsPost filteredAnns
|
||||
,_lstate_commentCol = Nothing
|
||||
,_lstate_addSepSpace = Nothing
|
||||
,_lstate_inhibitMTEL = False
|
||||
,_lstate_isNewline = NewLineStateInit}
|
||||
state' <- MultiRWSS.withMultiStateS state $ layoutBriDocM briDoc'
|
||||
let remainingComments =
|
||||
Map.elems (_lstate_commentsPrior state') ++
|
||||
Map.elems (_lstate_commentsPost state')
|
||||
remainingComments `forM_`
|
||||
(mTell . (: []) . LayoutErrorUnusedComment . show . fmap fst)
|
||||
return $ ()
|
||||
~~~~
|
||||
|
||||
## hindent --style gibiansky output
|
||||
|
||||
note that it managed to garbage the first comment to `-- 10 20 30 40 50 60 70 80` which i replaced again afterwards.
|
||||
|
||||
~~~~ .hs
|
||||
-- 10 20 30 40 50 60 70 80
|
||||
module Language.Haskell.Brittany.BriLayouter (layoutBriDoc) where
|
||||
|
||||
layoutBriDoc :: Data.Data.Data ast => ast -> BriDocNumbered -> PPM ()
|
||||
layoutBriDoc ast briDoc = do
|
||||
-- first step: transform the briDoc.
|
||||
briDoc' <- MultiRWSS.withMultiStateS BDEmpty $ do
|
||||
traceIfDumpConf "bridoc raw" _dconf_dump_bridoc_raw $ briDocToDoc $ unwrapBriDocNumbered $ briDoc
|
||||
-- bridoc transformation: remove alts
|
||||
transformAlts briDoc >>= mSet
|
||||
mGet >>= traceIfDumpConf "bridoc post-alt"
|
||||
_dconf_dump_bridoc_simpl_alt . briDocToDoc
|
||||
-- bridoc transformation: float stuff in
|
||||
mGet <&> transformSimplifyFloating >>= mSet
|
||||
mGet >>= traceIfDumpConf "bridoc post-floating"
|
||||
_dconf_dump_bridoc_simpl_floating . briDocToDoc
|
||||
-- bridoc transformation: par removal
|
||||
mGet <&> transformSimplifyPar >>= mSet
|
||||
mGet >>= traceIfDumpConf "bridoc post-par"
|
||||
_dconf_dump_bridoc_simpl_par . briDocToDoc
|
||||
-- bridoc transformation: float stuff in
|
||||
mGet <&> transformSimplifyColumns >>= mSet
|
||||
mGet >>= traceIfDumpConf "bridoc post-columns"
|
||||
_dconf_dump_bridoc_simpl_columns . briDocToDoc
|
||||
-- -- bridoc transformation: indent
|
||||
mGet <&> transformSimplifyIndent >>= mSet
|
||||
mGet >>= traceIfDumpConf "bridoc post-indent"
|
||||
_dconf_dump_bridoc_simpl_indent . briDocToDoc
|
||||
mGet >>= traceIfDumpConf "bridoc final" _dconf_dump_bridoc_final . briDocToDoc
|
||||
-- -- convert to Simple type simpl <- mGet <&> transformToSimple return simpl
|
||||
anns :: ExactPrint.Types.Anns <- mAsk
|
||||
let filteredAnns = filterAnns ast anns
|
||||
|
||||
let state = LayoutState
|
||||
{ _lstate_baseY = 0
|
||||
, _lstate_curY = 0
|
||||
, _lstate_indLevel = 0
|
||||
, _lstate_indLevelLinger = 0
|
||||
, _lstate_commentsPrior = extractCommentsPrior filteredAnns
|
||||
, _lstate_commentsPost = extractCommentsPost filteredAnns
|
||||
, _lstate_commentCol = Nothing
|
||||
, _lstate_addSepSpace = Nothing
|
||||
, _lstate_inhibitMTEL = False
|
||||
, _lstate_isNewline = NewLineStateInit
|
||||
}
|
||||
|
||||
state' <- MultiRWSS.withMultiStateS state $ layoutBriDocM briDoc'
|
||||
|
||||
let remainingComments = Map.elems (_lstate_commentsPrior state') ++ Map.elems
|
||||
(_lstate_commentsPost
|
||||
state')
|
||||
remainingComments `forM_` (mTell .
|
||||
(: []) .
|
||||
LayoutErrorUnusedComment .
|
||||
show .
|
||||
fmap fst)
|
||||
|
||||
return $ ()
|
||||
~~~~
|
Loading…
Reference in New Issue