Showcase.md: Update to hindent-5.2.1 results; Add haskell-formatter output
parent
eead525c16
commit
e83b4c94db
334
Showcase.md
334
Showcase.md
|
@ -140,215 +140,60 @@ 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.
|
||||||
briDoc' <-
|
= do
|
||||||
MultiRWSS.withMultiStateS BDEmpty $
|
briDoc' <-
|
||||||
do traceIfDumpConf "bridoc raw" _dconf_dump_bridoc_raw $
|
MultiRWSS.withMultiStateS BDEmpty $ do
|
||||||
briDocToDoc $ unwrapBriDocNumbered $ briDoc
|
traceIfDumpConf "bridoc raw" _dconf_dump_bridoc_raw $
|
||||||
-- bridoc transformation: remove alts
|
briDocToDoc $ unwrapBriDocNumbered $ briDoc
|
||||||
transformAlts
|
-- bridoc transformation: remove alts
|
||||||
briDoc >>=
|
transformAlts briDoc >>= mSet
|
||||||
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 <&> transformSimplifyFloating >>= mSet
|
||||||
mGet <&>
|
mGet >>=
|
||||||
transformSimplifyFloating >>=
|
traceIfDumpConf "bridoc post-floating" _dconf_dump_bridoc_simpl_floating .
|
||||||
mSet
|
briDocToDoc
|
||||||
mGet >>=
|
-- bridoc transformation: par removal
|
||||||
traceIfDumpConf
|
mGet <&> transformSimplifyPar >>= mSet
|
||||||
"bridoc post-floating"
|
mGet >>=
|
||||||
_dconf_dump_bridoc_simpl_floating .
|
traceIfDumpConf "bridoc post-par" _dconf_dump_bridoc_simpl_par .
|
||||||
briDocToDoc
|
briDocToDoc
|
||||||
-- bridoc transformation: par removal
|
-- bridoc transformation: float stuff in
|
||||||
mGet <&>
|
mGet <&> transformSimplifyColumns >>= mSet
|
||||||
transformSimplifyPar >>=
|
mGet >>=
|
||||||
mSet
|
traceIfDumpConf "bridoc post-columns" _dconf_dump_bridoc_simpl_columns .
|
||||||
mGet >>=
|
briDocToDoc
|
||||||
traceIfDumpConf "bridoc post-par" _dconf_dump_bridoc_simpl_par .
|
-- -- bridoc transformation: indent
|
||||||
briDocToDoc
|
mGet <&> transformSimplifyIndent >>= mSet
|
||||||
-- bridoc transformation: float stuff in
|
mGet >>=
|
||||||
mGet <&>
|
traceIfDumpConf "bridoc post-indent" _dconf_dump_bridoc_simpl_indent .
|
||||||
transformSimplifyColumns >>=
|
briDocToDoc
|
||||||
mSet
|
mGet >>=
|
||||||
mGet >>=
|
traceIfDumpConf "bridoc final" _dconf_dump_bridoc_final . briDocToDoc
|
||||||
traceIfDumpConf
|
-- -- convert to Simple type
|
||||||
"bridoc post-columns"
|
-- simpl <- mGet <&> transformToSimple
|
||||||
_dconf_dump_bridoc_simpl_columns .
|
-- return simpl
|
||||||
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 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
|
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_baseY = 0
|
||||||
, _lstate_curY = 0
|
, _lstate_curY = 0
|
||||||
, _lstate_indLevel = 0
|
, _lstate_indLevel = 0
|
||||||
|
@ -360,17 +205,84 @@ layoutBriDoc ast briDoc = do
|
||||||
, _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 $ ()
|
||||||
~~~~
|
~~~~
|
||||||
|
|
||||||
|
and haskell-formatter (version 1.0.0)
|
||||||
|
|
||||||
|
## `haskell-formatter` 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
|
||||||
|
-- first step: transform the briDoc.
|
||||||
|
= do 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