@@ -55,6 +55,7 @@ import qualified Data.Text
5555import qualified Data.Text.IO
5656import qualified Data.Text.Prettyprint.Doc as Pretty
5757import qualified Data.Text.Prettyprint.Doc.Render.Terminal as Pretty
58+ import qualified Data.Text.Prettyprint.Doc.Render.Text as Pretty.Text
5859import qualified Dhall
5960import qualified Dhall.Binary
6061import qualified Dhall.Core
@@ -72,6 +73,7 @@ import qualified Dhall.TypeCheck
7273import qualified Dhall.Util
7374import qualified GHC.IO.Encoding
7475import qualified Options.Applicative
76+ import qualified System.AtomicWrite.Writer.LazyText as AtomicWrite.LazyText
7577import qualified System.Console.ANSI
7678import qualified System.Exit as Exit
7779import qualified System.IO
@@ -500,6 +502,12 @@ command (Options {..}) = do
500502
501503 renderDoc h doc
502504
505+ let writeDocToFile :: FilePath -> Doc ann -> IO ()
506+ writeDocToFile file doc = do
507+ let stream = Dhall.Pretty. layout (doc <> " \n " )
508+
509+ AtomicWrite.LazyText. atomicWriteFile file (Pretty.Text. renderLazy stream)
510+
503511 when (not $ ignoreSemanticCache mode) Dhall.Import. warnAboutMissingCaches
504512
505513 handle $ case mode of
@@ -534,8 +542,11 @@ command (Options {..}) = do
534542
535543 case output of
536544 StandardOutput -> render System.IO. stdout annotatedExpression
545+
537546 OutputFile file_ ->
538- System.IO. withFile file_ System.IO. WriteMode $ \ h -> render h annotatedExpression
547+ writeDocToFile
548+ file_
549+ (Dhall.Pretty. prettyCharacterSet characterSet annotatedExpression)
539550
540551 Resolve { resolveMode = Just Dot , .. } -> do
541552 expression <- getExpression file
@@ -666,23 +677,15 @@ command (Options {..}) = do
666677 Lint {.. } -> do
667678 (Header header, expression) <- getExpressionAndHeader inplace
668679
669- case inplace of
670- InputFile file -> do
671- let lintedExpression = Dhall.Lint. lint expression
680+ let lintedExpression = Dhall.Lint. lint expression
672681
673- let doc = Pretty. pretty header
674- <> Dhall.Pretty. prettyCharacterSet characterSet lintedExpression
682+ let doc = Pretty. pretty header
683+ <> Dhall.Pretty. prettyCharacterSet characterSet lintedExpression
675684
676- System.IO. withFile file System.IO. WriteMode (\ h -> do
677- renderDoc h doc )
678-
679- StandardInput -> do
680- let lintedExpression = Dhall.Lint. lint expression
681-
682- let doc = Pretty. pretty header
683- <> Dhall.Pretty. prettyCharacterSet characterSet lintedExpression
685+ case inplace of
686+ InputFile file -> writeDocToFile file doc
684687
685- renderDoc System.IO. stdout doc
688+ StandardInput -> renderDoc System.IO. stdout doc
686689
687690 Encode {.. } -> do
688691 expression <- getExpression file
0 commit comments