Showcase.md: Update to hindent-5.2.1 results; Add haskell-formatter output

pull/8/head
Lennart Spitzner 2016-09-04 22:20:49 +02:00 committed by GitHub
parent eead525c16
commit e83b4c94db
1 changed files with 123 additions and 211 deletions

View File

@ -140,69 +140,53 @@ layoutBriDoc ast briDoc = do
return $ () return $ ()
~~~~ ~~~~
In contrast, let us look at Chris Done's `hindent` (version `4.6.4`) re-formatting results for the same input, with three different styles: In contrast, let us look at Chris Done's `hindent` (version `5.2.1`) re-formatting results for the same input:
## `hindent --style johan-tibell` output ## `hindent` output
~~~~ .hs ~~~~ .hs
-- 10 20 30 40 50 60 70 80 -- 10 20 30 40 50 60 70 80
module Language.Haskell.Brittany.BriLayouter module Language.Haskell.Brittany.BriLayouter
(layoutBriDoc) ( layoutBriDoc
where ) where
layoutBriDoc layoutBriDoc
:: Data.Data.Data ast :: Data.Data.Data ast
=> ast -> BriDocNumbered -> PPM () => ast -> BriDocNumbered -> PPM ()
layoutBriDoc ast briDoc = do layoutBriDoc ast briDoc
-- first step: transform the briDoc. -- first step: transform the briDoc.
= do
briDoc' <- briDoc' <-
MultiRWSS.withMultiStateS BDEmpty $ MultiRWSS.withMultiStateS BDEmpty $ do
do traceIfDumpConf "bridoc raw" _dconf_dump_bridoc_raw $ traceIfDumpConf "bridoc raw" _dconf_dump_bridoc_raw $
briDocToDoc $ unwrapBriDocNumbered $ briDoc briDocToDoc $ unwrapBriDocNumbered $ briDoc
-- bridoc transformation: remove alts -- bridoc transformation: remove alts
transformAlts transformAlts briDoc >>= mSet
briDoc >>=
mSet
mGet >>= mGet >>=
traceIfDumpConf "bridoc post-alt" _dconf_dump_bridoc_simpl_alt . traceIfDumpConf "bridoc post-alt" _dconf_dump_bridoc_simpl_alt .
briDocToDoc briDocToDoc
-- bridoc transformation: float stuff in -- bridoc transformation: float stuff in
mGet <&> mGet <&> transformSimplifyFloating >>= mSet
transformSimplifyFloating >>=
mSet
mGet >>= mGet >>=
traceIfDumpConf traceIfDumpConf "bridoc post-floating" _dconf_dump_bridoc_simpl_floating .
"bridoc post-floating"
_dconf_dump_bridoc_simpl_floating .
briDocToDoc briDocToDoc
-- bridoc transformation: par removal -- bridoc transformation: par removal
mGet <&> mGet <&> transformSimplifyPar >>= mSet
transformSimplifyPar >>=
mSet
mGet >>= mGet >>=
traceIfDumpConf "bridoc post-par" _dconf_dump_bridoc_simpl_par . traceIfDumpConf "bridoc post-par" _dconf_dump_bridoc_simpl_par .
briDocToDoc briDocToDoc
-- bridoc transformation: float stuff in -- bridoc transformation: float stuff in
mGet <&> mGet <&> transformSimplifyColumns >>= mSet
transformSimplifyColumns >>=
mSet
mGet >>= mGet >>=
traceIfDumpConf traceIfDumpConf "bridoc post-columns" _dconf_dump_bridoc_simpl_columns .
"bridoc post-columns"
_dconf_dump_bridoc_simpl_columns .
briDocToDoc briDocToDoc
-- -- bridoc transformation: indent -- -- bridoc transformation: indent
mGet <&> mGet <&> transformSimplifyIndent >>= mSet
transformSimplifyIndent >>=
mSet
mGet >>= mGet >>=
traceIfDumpConf traceIfDumpConf "bridoc post-indent" _dconf_dump_bridoc_simpl_indent .
"bridoc post-indent"
_dconf_dump_bridoc_simpl_indent .
briDocToDoc briDocToDoc
mGet >>= mGet >>=
traceIfDumpConf "bridoc final" _dconf_dump_bridoc_final . traceIfDumpConf "bridoc final" _dconf_dump_bridoc_final . briDocToDoc
briDocToDoc
-- -- convert to Simple type -- -- convert to Simple type
-- simpl <- mGet <&> transformToSimple -- simpl <- mGet <&> transformToSimple
-- return simpl -- return simpl
@ -230,147 +214,75 @@ layoutBriDoc ast briDoc = do
return $ () return $ ()
~~~~ ~~~~
## `hindent --style chris-done` output and haskell-formatter (version 1.0.0)
~~~~ .hs ## `haskell-formatter` output
-- 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 ~~~~ .hs
-- 10 20 30 40 50 60 70 80 -- 10 20 30 40 50 60 70 80
module Language.Haskell.Brittany.BriLayouter (layoutBriDoc) where module Language.Haskell.Brittany.BriLayouter (layoutBriDoc) where
layoutBriDoc :: Data.Data.Data ast => ast -> BriDocNumbered -> PPM () layoutBriDoc :: Data.Data.Data ast => ast -> BriDocNumbered -> PPM ()
layoutBriDoc ast briDoc = do layoutBriDoc ast briDoc
-- first step: transform the briDoc. -- first step: transform the briDoc.
briDoc' <- MultiRWSS.withMultiStateS BDEmpty $ do = do briDoc' <- MultiRWSS.withMultiStateS BDEmpty $
traceIfDumpConf "bridoc raw" _dconf_dump_bridoc_raw $ briDocToDoc $ unwrapBriDocNumbered $ briDoc do traceIfDumpConf "bridoc raw" _dconf_dump_bridoc_raw $
briDocToDoc $ unwrapBriDocNumbered $ briDoc
-- bridoc transformation: remove alts -- bridoc transformation: remove alts
transformAlts briDoc >>= mSet transformAlts briDoc >>= mSet
mGet >>= traceIfDumpConf "bridoc post-alt" mGet >>=
_dconf_dump_bridoc_simpl_alt . briDocToDoc traceIfDumpConf "bridoc post-alt"
_dconf_dump_bridoc_simpl_alt
. briDocToDoc
-- bridoc transformation: float stuff in -- bridoc transformation: float stuff in
mGet <&> transformSimplifyFloating >>= mSet mGet <&> transformSimplifyFloating >>= mSet
mGet >>= traceIfDumpConf "bridoc post-floating" mGet >>=
_dconf_dump_bridoc_simpl_floating . briDocToDoc traceIfDumpConf "bridoc post-floating"
_dconf_dump_bridoc_simpl_floating
. briDocToDoc
-- bridoc transformation: par removal -- bridoc transformation: par removal
mGet <&> transformSimplifyPar >>= mSet mGet <&> transformSimplifyPar >>= mSet
mGet >>= traceIfDumpConf "bridoc post-par" mGet >>=
_dconf_dump_bridoc_simpl_par . briDocToDoc traceIfDumpConf "bridoc post-par"
_dconf_dump_bridoc_simpl_par
. briDocToDoc
-- bridoc transformation: float stuff in -- bridoc transformation: float stuff in
mGet <&> transformSimplifyColumns >>= mSet mGet <&> transformSimplifyColumns >>= mSet
mGet >>= traceIfDumpConf "bridoc post-columns" mGet >>=
_dconf_dump_bridoc_simpl_columns . briDocToDoc traceIfDumpConf "bridoc post-columns"
_dconf_dump_bridoc_simpl_columns
. briDocToDoc
-- -- bridoc transformation: indent -- -- bridoc transformation: indent
mGet <&> transformSimplifyIndent >>= mSet mGet <&> transformSimplifyIndent >>= mSet
mGet >>= traceIfDumpConf "bridoc post-indent" mGet >>=
_dconf_dump_bridoc_simpl_indent . briDocToDoc traceIfDumpConf "bridoc post-indent"
mGet >>= traceIfDumpConf "bridoc final" _dconf_dump_bridoc_final . briDocToDoc _dconf_dump_bridoc_simpl_indent
-- -- convert to Simple type simpl <- mGet <&> transformToSimple return simpl . briDocToDoc
mGet >>=
traceIfDumpConf "bridoc final" _dconf_dump_bridoc_final
. briDocToDoc
-- -- convert to Simple type
-- simpl <- mGet <&> transformToSimple
-- return simpl
anns :: ExactPrint.Types.Anns <- mAsk anns :: ExactPrint.Types.Anns <- mAsk
let filteredAnns = filterAnns ast anns let filteredAnns = filterAnns ast anns
let state
let state = LayoutState = LayoutState{_lstate_baseY = 0, _lstate_curY = 0,
{ _lstate_baseY = 0 _lstate_indLevel = 0, _lstate_indLevelLinger = 0,
, _lstate_curY = 0 _lstate_commentsPrior =
, _lstate_indLevel = 0 extractCommentsPrior filteredAnns,
, _lstate_indLevelLinger = 0 _lstate_commentsPost =
, _lstate_commentsPrior = extractCommentsPrior filteredAnns extractCommentsPost filteredAnns,
, _lstate_commentsPost = extractCommentsPost filteredAnns _lstate_commentCol = Nothing,
, _lstate_commentCol = Nothing _lstate_addSepSpace = Nothing,
, _lstate_addSepSpace = Nothing _lstate_inhibitMTEL = False,
, _lstate_inhibitMTEL = False _lstate_isNewline = NewLineStateInit}
, _lstate_isNewline = NewLineStateInit
}
state' <- MultiRWSS.withMultiStateS state $ layoutBriDocM briDoc' state' <- MultiRWSS.withMultiStateS state $ layoutBriDocM briDoc'
let remainingComments
let remainingComments = Map.elems (_lstate_commentsPrior state') ++ Map.elems = Map.elems (_lstate_commentsPrior state') ++
(_lstate_commentsPost Map.elems (_lstate_commentsPost state')
state') remainingComments `forM_`
remainingComments `forM_` (mTell . (mTell . (: []) . LayoutErrorUnusedComment . show . fmap fst)
(: []) .
LayoutErrorUnusedComment .
show .
fmap fst)
return $ () return $ ()
~~~~ ~~~~