Compare commits

..

No commits in common. "5dda978304efff4955583c0cba3287205609eec6" and "e6956e9264ea775bfe7f78450714d9c90b68501f" have entirely different histories.

2 changed files with 18 additions and 42 deletions

View File

@ -13,7 +13,6 @@ module Language.Haskell.Brittany.Internal.S2_SplitModule
import Language.Haskell.Brittany.Internal.Prelude import Language.Haskell.Brittany.Internal.Prelude
import qualified Data.Generics as SYB import qualified Data.Generics as SYB
import qualified Data.List.Extra
import qualified Data.Map as Map import qualified Data.Map as Map
import qualified GHC import qualified GHC
import GHC ( AddEpAnn(AddEpAnn) import GHC ( AddEpAnn(AddEpAnn)
@ -92,42 +91,16 @@ extractDeclMap modul =
splitModuleDecls :: GHC.ParsedSource -> FinalList ModuleElement ExactPrint.Pos splitModuleDecls :: GHC.ParsedSource -> FinalList ModuleElement ExactPrint.Pos
splitModuleDecls lmod = do splitModuleDecls lmod = do
let let L moduleSpan modl = lmod
L moduleSpan modl = lmod HsModule _ _layout _name _exports _imports decls _ _ = modl
HsModule _ _layout _name _exports imports decls _ _ = modl (hsModAnn', finalComments) = case GHC.hsmodAnn modl of
(hsModAnn', finalComments) = case GHC.hsmodAnn modl of EpAnn a modAnns (EpaCommentsBalanced prior post) ->
EpAnn a modAnns (EpaCommentsBalanced prior post) -> (EpAnn a modAnns (EpaCommentsBalanced prior []), post)
(EpAnn a modAnns (EpaCommentsBalanced prior []), post) _ -> (GHC.hsmodAnn modl, [])
_ -> (GHC.hsmodAnn modl, []) moduleWithoutComments = L moduleSpan modl { GHC.hsmodAnn = hsModAnn'
(newImports, commsAfterImports) = case Data.List.Extra.unsnoc imports of , GHC.hsmodDecls = []
Just (allButLast, L (SrcSpanAnn epAnn s@(RealSrcSpan span _)) lastImp) -> }
case epAnn of lastSpan <- do
EpAnnNotUsed -> (imports, [])
EpAnn anch anns (EpaComments cs) ->
let
(keepImports, moveImports) =
partition
(\(L cAnch _) ->
GHC.srcSpanEndLine (anchor cAnch) <= GHC.srcSpanEndLine span
)
cs
newLastImport =
L (SrcSpanAnn (EpAnn anch anns (EpaComments keepImports)) s)
lastImp
in
( allButLast ++ [newLastImport]
, List.sortOn (\(L l _) -> l) moveImports
)
EpAnn anch anns (EpaCommentsBalanced cs1 cs2) ->
let newLastImport =
L (SrcSpanAnn (EpAnn anch anns (EpaComments cs1)) s) lastImp
in (allButLast ++ [newLastImport], List.sortOn (\(L l _) -> l) cs2)
_ -> ([], [])
moduleWithoutComments = L moduleSpan modl { GHC.hsmodAnn = hsModAnn'
, GHC.hsmodDecls = []
, GHC.hsmodImports = newImports
}
spanAfterImports <- do
finalYield $ MEExactModuleHead moduleWithoutComments finalYield $ MEExactModuleHead moduleWithoutComments
pure pure
$ maybe (0, 1) (ExactPrint.ss2posEnd) $ maybe (0, 1) (ExactPrint.ss2posEnd)
@ -138,14 +111,17 @@ splitModuleDecls lmod = do
EpAnnNotUsed -> error "unexpected EpAnnNotUsed" EpAnnNotUsed -> error "unexpected EpAnnNotUsed"
] ]
++ [ s | AddEpAnn _ (EpaSpan s) <- GHC.am_main $ GHC.anns hsModAnn' ] ++ [ s | AddEpAnn _ (EpaSpan s) <- GHC.am_main $ GHC.anns hsModAnn' ]
++ [ span ++ [ GHC.anchor a
| L (SrcSpanAnn _ (RealSrcSpan span _)) _ <- GHC.hsmodImports modl | L da _ <- GHC.hsmodImports modl
, L a _ <- case GHC.ann da of
EpAnn _ _ (EpaComments l ) -> l
EpAnn _ _ (EpaCommentsBalanced _ l) -> l
EpAnnNotUsed -> []
] ]
++ [ span ++ [ span
| L (SrcSpanAnn _ (GHC.RealSrcSpan span _)) _ <- GHC.hsmodImports modl | L (SrcSpanAnn _ (GHC.RealSrcSpan span _)) _ <- GHC.hsmodImports modl
] ]
spanBeforeDecls <- enrichComms spanAfterImports commsAfterImports spanAfterDecls <- enrichDecls lastSpan decls
spanAfterDecls <- enrichDecls spanBeforeDecls decls
enrichComms spanAfterDecls finalComments enrichComms spanAfterDecls finalComments
splitModuleStart splitModuleStart

View File

@ -494,7 +494,7 @@ createDetailsDoc consNameStr details = case details of
] ]
, docSeq , docSeq
[ docHandleComms posOpen $ docLitS "{" [ docHandleComms posOpen $ docLitS "{"
, docHandleComms epAnn docSeparator , docSeparator
, docSetBaseY $ docAddBaseY BrIndentRegular $ docPar , docSetBaseY $ docAddBaseY BrIndentRegular $ docPar
fName1 fName1
(docSeq [docLitS "::", docSeparator, fType1]) (docSeq [docLitS "::", docSeparator, fType1])