{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}

-- | Pretty-printer for Haskell AST.
module Ormolu.Printer
  ( printSnippets,
    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

-- | Render several source snippets.
printSnippets ::
  -- | Result of parsing
  [SourceSnippet] ->
  PrinterOptsTotal ->
  -- | Resulting rendition
  Text
printSnippets :: [SourceSnippet] -> PrinterOptsTotal -> Text
printSnippets [SourceSnippet]
snippets PrinterOptsTotal
printerOpts = [Text] -> Text
T.concat forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap SourceSnippet -> Text
printSnippet forall a b. (a -> b) -> a -> b
$ [SourceSnippet]
snippets
  where
    printSnippet :: SourceSnippet -> Text
printSnippet = \case
      ParsedSnippet ParseResult {Int
[([RealLocated Comment], Pragma)]
Maybe (RealLocated Comment)
FixityMap
HsModule
EnumSet Extension
LazyFixityMap
SourceType
CommentStream
prIndent :: ParseResult -> Int
prFixityMap :: ParseResult -> LazyFixityMap
prFixityOverrides :: ParseResult -> FixityMap
prExtensions :: ParseResult -> EnumSet Extension
prCommentStream :: ParseResult -> CommentStream
prPragmas :: ParseResult -> [([RealLocated Comment], Pragma)]
prStackHeader :: ParseResult -> Maybe (RealLocated Comment)
prSourceType :: ParseResult -> SourceType
prParsedSource :: ParseResult -> HsModule
prIndent :: Int
prFixityMap :: LazyFixityMap
prFixityOverrides :: FixityMap
prExtensions :: EnumSet Extension
prCommentStream :: CommentStream
prPragmas :: [([RealLocated Comment], Pragma)]
prStackHeader :: Maybe (RealLocated Comment)
prSourceType :: SourceType
prParsedSource :: HsModule
..} ->
        Int -> Text -> Text
reindent Int
prIndent forall a b. (a -> b) -> a -> b
$
          R ()
-> SpanStream
-> CommentStream
-> PrinterOptsTotal
-> SourceType
-> EnumSet Extension
-> FixityMap
-> LazyFixityMap
-> Text
runR
            ( Maybe (RealLocated Comment)
-> [([RealLocated Comment], Pragma)] -> HsModule -> R ()
p_hsModule
                Maybe (RealLocated Comment)
prStackHeader
                [([RealLocated Comment], Pragma)]
prPragmas
                HsModule
prParsedSource
            )
            (forall a. Data a => a -> SpanStream
mkSpanStream HsModule
prParsedSource)
            CommentStream
prCommentStream
            PrinterOptsTotal
printerOpts
            SourceType
prSourceType
            EnumSet Extension
prExtensions
            FixityMap
prFixityOverrides
            LazyFixityMap
prFixityMap
      RawSnippet Text
r -> Text
r