{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Ormolu.Printer
( printModule,
PrinterOpts (..),
)
where
import Data.Text (Text)
import qualified Data.Text as T
import Ormolu.Config
import Ormolu.Parser.Result
import Ormolu.Printer.Combinators
import Ormolu.Printer.Meat.Module
import Ormolu.Printer.SpanStream
import Ormolu.Processing.Common
printModule ::
[SourceSnippet] ->
PrinterOptsTotal ->
Text
printModule :: [SourceSnippet] -> PrinterOptsTotal -> Text
printModule [SourceSnippet]
snippets PrinterOptsTotal
printerOpts = [Text] -> Text
T.concat ([Text] -> Text)
-> ([SourceSnippet] -> [Text]) -> [SourceSnippet] -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SourceSnippet -> Text) -> [SourceSnippet] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap SourceSnippet -> Text
printSnippet ([SourceSnippet] -> Text) -> [SourceSnippet] -> Text
forall a b. (a -> b) -> a -> b
$ [SourceSnippet]
snippets
where
printSnippet :: SourceSnippet -> Text
printSnippet = \case
ParsedSnippet ParseResult {Bool
Int
[([RealLocated Comment], Pragma)]
Maybe (RealLocated Comment)
HsModule
EnumSet Extension
Anns
CommentStream
prIndent :: ParseResult -> Int
prExtensions :: ParseResult -> EnumSet Extension
prUseRecordDot :: ParseResult -> Bool
prCommentStream :: ParseResult -> CommentStream
prPragmas :: ParseResult -> [([RealLocated Comment], Pragma)]
prStackHeader :: ParseResult -> Maybe (RealLocated Comment)
prAnns :: ParseResult -> Anns
prParsedSource :: ParseResult -> HsModule
prIndent :: Int
prExtensions :: EnumSet Extension
prUseRecordDot :: Bool
prCommentStream :: CommentStream
prPragmas :: [([RealLocated Comment], Pragma)]
prStackHeader :: Maybe (RealLocated Comment)
prAnns :: Anns
prParsedSource :: HsModule
..} ->
Int -> Text -> Text
reindent Int
prIndent (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$
R ()
-> SpanStream
-> CommentStream
-> Anns
-> PrinterOptsTotal
-> Bool
-> EnumSet Extension
-> Text
runR
( Maybe (RealLocated Comment)
-> [([RealLocated Comment], Pragma)] -> HsModule -> R ()
p_hsModule
Maybe (RealLocated Comment)
prStackHeader
[([RealLocated Comment], Pragma)]
prPragmas
HsModule
prParsedSource
)
(HsModule -> SpanStream
forall a. Data a => a -> SpanStream
mkSpanStream HsModule
prParsedSource)
CommentStream
prCommentStream
Anns
prAnns
PrinterOptsTotal
printerOpts
Bool
prUseRecordDot
EnumSet Extension
prExtensions
RawSnippet Text
r -> Text
r