Refactor and Add missing docSharedWrapper
parent
f651d02898
commit
33f23a65ec
|
@ -71,12 +71,15 @@ layoutIE lie@(L _ ie) = docWrapNode lie $ case ie of
|
||||||
-- left to the caller since that is context sensitive
|
-- left to the caller since that is context sensitive
|
||||||
layoutAnnAndSepLLIEs :: (Located [LIE RdrName]) -> ToBriDocM [ToBriDocM BriDocNumbered]
|
layoutAnnAndSepLLIEs :: (Located [LIE RdrName]) -> ToBriDocM [ToBriDocM BriDocNumbered]
|
||||||
layoutAnnAndSepLLIEs llies@(L _ lies) = do
|
layoutAnnAndSepLLIEs llies@(L _ lies) = do
|
||||||
let makeIENode ie = docSeq [docCommaSep, ie]
|
let
|
||||||
layoutAnnAndSepLLIEs' ies = case ies of
|
makeIENode ie = docSeq [docCommaSep, ie]
|
||||||
[] -> []
|
layoutAnnAndSepLLIEs' ies = case splitFirstLast ies of
|
||||||
[ie] -> [docWrapNode llies $ ie]
|
FirstLastEmpty -> []
|
||||||
(ie:ies') -> ie:map makeIENode (List.init ies')
|
FirstLastSingleton ie -> [docWrapNodeRest llies $ ie]
|
||||||
++ [makeIENode $ docWrapNode llies $ List.last ies']
|
FirstLast ie1 ieMs ieN ->
|
||||||
|
[ie1]
|
||||||
|
++ map makeIENode ieMs
|
||||||
|
++ [makeIENode $ docWrapNodeRest llies $ ieN]
|
||||||
layoutAnnAndSepLLIEs' <$> mapM (docSharedWrapper layoutIE) lies
|
layoutAnnAndSepLLIEs' <$> mapM (docSharedWrapper layoutIE) lies
|
||||||
|
|
||||||
-- Builds a complete layout for the given located
|
-- Builds a complete layout for the given located
|
||||||
|
|
|
@ -46,13 +46,16 @@ layoutImport :: ToBriDoc ImportDecl
|
||||||
layoutImport limportD@(L _ importD) = docWrapNode limportD $ case importD of
|
layoutImport limportD@(L _ importD) = docWrapNode limportD $ case importD of
|
||||||
ImportDecl _ (L _ modName) pkg src safe q False as mllies -> do
|
ImportDecl _ (L _ modName) pkg src safe q False as mllies -> do
|
||||||
importCol <- mAsk <&> _conf_layout .> _lconfig_importColumn .> confUnpack
|
importCol <- mAsk <&> _conf_layout .> _lconfig_importColumn .> confUnpack
|
||||||
|
-- NB we don't need to worry about sharing in the below code
|
||||||
|
-- (docSharedWrapper etc.) because we do not use any docAlt nodes; all
|
||||||
|
-- "decisions" are made statically.
|
||||||
let
|
let
|
||||||
modNameT = Text.pack $ moduleNameString modName
|
modNameT = Text.pack $ moduleNameString modName
|
||||||
pkgNameT = Text.pack . prepPkg . sl_st <$> pkg
|
pkgNameT = Text.pack . prepPkg . sl_st <$> pkg
|
||||||
asT = Text.pack . moduleNameString . prepModName <$> as
|
asT = Text.pack . moduleNameString . prepModName <$> as
|
||||||
hiding = case mllies of
|
hiding = case mllies of
|
||||||
Just (h, _) -> h
|
Just (h, _) -> h
|
||||||
Nothing -> False
|
Nothing -> False
|
||||||
minQLength = length "import qualified "
|
minQLength = length "import qualified "
|
||||||
qLengthReal =
|
qLengthReal =
|
||||||
let qualifiedPart = if q then length "qualified " else 0
|
let qualifiedPart = if q then length "qualified " else 0
|
||||||
|
@ -76,37 +79,31 @@ layoutImport limportD@(L _ importD) = docWrapNode limportD $ case importD of
|
||||||
docEnsureIndent (BrIndentSpecial qLength) $ appSep $ docLit modNameT
|
docEnsureIndent (BrIndentSpecial qLength) $ appSep $ docLit modNameT
|
||||||
hidDoc =
|
hidDoc =
|
||||||
if hiding then appSep $ docLit $ Text.pack "hiding" else docEmpty
|
if hiding then appSep $ docLit $ Text.pack "hiding" else docEmpty
|
||||||
importHead = docSeq [importQualifiers, modNameD]
|
importHead = docSeq [importQualifiers, modNameD]
|
||||||
bindingsH = docParenLSep
|
bindingsD = case mllies of
|
||||||
bindingsT = [docSeq [docSeparator, docParenR]]
|
Nothing -> docSeq [docEmpty]
|
||||||
bindingsD = case mllies of
|
|
||||||
Nothing -> docSeq [docEmpty]
|
|
||||||
Just (_, llies) -> do
|
Just (_, llies) -> do
|
||||||
ieDs <- layoutAnnAndSepLLIEs llies
|
ieDs <- layoutAnnAndSepLLIEs llies
|
||||||
hasComments <- hasAnyCommentsBelow llies
|
hasComments <- hasAnyCommentsBelow llies
|
||||||
case ieDs of
|
docWrapNodeRest llies $ case ieDs of
|
||||||
-- ..[hiding].( )
|
-- ..[hiding].( )
|
||||||
[] -> do
|
[] -> if hasComments
|
||||||
if hasComments
|
then docPar
|
||||||
then
|
(docSeq [hidDoc, docParenLSep, docWrapNode llies docEmpty])
|
||||||
docWrapNodeRest llies $ docPar (docSeq [hidDoc, bindingsH, docWrapNode llies docEmpty]) $ docLines
|
docParenR
|
||||||
bindingsT
|
else docSeq [hidDoc, docParenLSep, docSeparator, docParenR]
|
||||||
else
|
|
||||||
docWrapNodeRest llies $ docSeq $ hidDoc : bindingsH : bindingsT
|
|
||||||
-- ..[hiding].( b )
|
-- ..[hiding].( b )
|
||||||
[ieD] -> do
|
[ieD] -> if hasComments
|
||||||
if hasComments
|
then docPar (docSeq [hidDoc, docParenLSep, ieD]) docParenR
|
||||||
then
|
else docSeq [hidDoc, docParenLSep, ieD, docSeparator, docParenR]
|
||||||
docWrapNodeRest llies $ docPar (docSeq [hidDoc, bindingsH, ieD ]) $ docLines $
|
|
||||||
bindingsT
|
|
||||||
else
|
|
||||||
docWrapNodeRest llies $ docSeq $ hidDoc : bindingsH : ieD : bindingsT
|
|
||||||
-- ..[hiding].( b
|
-- ..[hiding].( b
|
||||||
-- , b'
|
-- , b'
|
||||||
-- )
|
-- )
|
||||||
(ieD:ieDs') -> do
|
(ieD:ieDs') ->
|
||||||
docWrapNodeRest llies $ docPar (docSeq [hidDoc, docSetBaseY $ docSeq [bindingsH, ieD]])
|
docPar (docSeq [hidDoc, docSetBaseY $ docSeq [docParenLSep, ieD]])
|
||||||
$ docLines $ ieDs' ++ bindingsT
|
$ docLines
|
||||||
|
$ ieDs'
|
||||||
|
++ [docParenR]
|
||||||
bindingLine =
|
bindingLine =
|
||||||
docEnsureIndent (BrIndentSpecial (importCol - bindingCost)) bindingsD
|
docEnsureIndent (BrIndentSpecial (importCol - bindingCost)) bindingsD
|
||||||
case asT of
|
case asT of
|
||||||
|
|
|
@ -30,11 +30,12 @@ layoutModule lmod@(L _ mod') = do
|
||||||
HsModule Nothing _ imports _ _ _ -> docLines $ map layoutImport imports
|
HsModule Nothing _ imports _ _ _ -> docLines $ map layoutImport imports
|
||||||
HsModule (Just n) les imports _ _ _ -> do
|
HsModule (Just n) les imports _ _ _ -> do
|
||||||
let tn = Text.pack $ moduleNameString $ unLoc n
|
let tn = Text.pack $ moduleNameString $ unLoc n
|
||||||
(hasComments, es) <- case les of
|
(hasComments, exportsDoc) <- case les of
|
||||||
Nothing -> return (False, docEmpty)
|
Nothing -> return (False, docEmpty)
|
||||||
Just llies -> do
|
Just llies -> do
|
||||||
hasComments <- hasAnyCommentsBelow llies
|
hasComments <- hasAnyCommentsBelow llies
|
||||||
return (hasComments, layoutLLIEs llies)
|
exportsDoc <- docSharedWrapper layoutLLIEs llies
|
||||||
|
return (hasComments, exportsDoc)
|
||||||
docLines
|
docLines
|
||||||
$ docSeq
|
$ docSeq
|
||||||
[ docWrapNode lmod $ docEmpty
|
[ docWrapNode lmod $ docEmpty
|
||||||
|
@ -44,7 +45,7 @@ layoutModule lmod@(L _ mod') = do
|
||||||
( [ docSeq
|
( [ docSeq
|
||||||
[ appSep $ docLit $ Text.pack "module"
|
[ appSep $ docLit $ Text.pack "module"
|
||||||
, appSep $ docLit tn
|
, appSep $ docLit tn
|
||||||
, appSep $ docForceSingleline es
|
, appSep $ docForceSingleline exportsDoc
|
||||||
, docLit $ Text.pack "where"
|
, docLit $ Text.pack "where"
|
||||||
]
|
]
|
||||||
| not hasComments
|
| not hasComments
|
||||||
|
@ -54,7 +55,7 @@ layoutModule lmod@(L _ mod') = do
|
||||||
( docSeq
|
( docSeq
|
||||||
[appSep $ docLit $ Text.pack "module", docLit tn]
|
[appSep $ docLit $ Text.pack "module", docLit tn]
|
||||||
)
|
)
|
||||||
(docForceMultiline es)
|
(docForceMultiline exportsDoc)
|
||||||
, docLit $ Text.pack "where"
|
, docLit $ Text.pack "where"
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue