dhall-lsp-server-1.0.13: src/Dhall/LSP/Backend/Formatting.hs
module Dhall.LSP.Backend.Formatting (formatExpr, formatExprWithHeader) where
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import Dhall.Core (Expr)
import Dhall.Parser (Header (..))
import Dhall.Pretty (CharacterSet (..))
import Dhall.Src (Src)
import qualified Data.Text.Prettyprint.Doc as Pretty
import qualified Data.Text.Prettyprint.Doc.Render.Text as Pretty
import qualified Dhall.Pretty
-- | Pretty-print the given Dhall expression.
formatExpr :: Pretty.Pretty b => Maybe CharacterSet -> Expr Src b -> Text
formatExpr chosenCharacterSet expr =
Pretty.renderStrict
. Dhall.Pretty.layout
$ Dhall.Pretty.prettyCharacterSet charSet expr
where
charSet = fromMaybe (Dhall.Pretty.detectCharacterSet expr) chosenCharacterSet
-- | Pretty-print the given Dhall expression, prepending the given a "header"
-- (usually consisting of comments and whitespace).
formatExprWithHeader :: Pretty.Pretty b => Maybe CharacterSet -> Expr Src b -> Header -> Text
formatExprWithHeader chosenCharacterSet expr (Header header) = Pretty.renderStrict
(Dhall.Pretty.layout doc)
where
charSet = fromMaybe (Dhall.Pretty.detectCharacterSet expr) chosenCharacterSet
doc =
Pretty.pretty header
<> Dhall.Pretty.prettyCharacterSet charSet expr
<> "\n"