From 0ebf705a75bf0e1b2e712ca4d826d749abb5c940 Mon Sep 17 00:00:00 2001 From: Simon Jakobi Date: Thu, 5 Sep 2019 08:08:15 +0200 Subject: [PATCH] Strip leading whitespace (#1270) Fixes #1267. --- dhall/src/Dhall/Parser.hs | 5 ++++- dhall/tests/Dhall/Test/Format.hs | 5 +++-- dhall/tests/format/headerA.dhall | 4 ++++ dhall/tests/format/headerB.dhall | 3 +++ 4 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 dhall/tests/format/headerA.dhall create mode 100644 dhall/tests/format/headerB.dhall diff --git a/dhall/src/Dhall/Parser.hs b/dhall/src/Dhall/Parser.hs index 850ac2a..b6f26d2 100644 --- a/dhall/src/Dhall/Parser.hs +++ b/dhall/src/Dhall/Parser.hs @@ -26,6 +26,7 @@ import Dhall.Core import Dhall.Src (Src(..)) import Prelude hiding (const, pi) +import qualified Data.Char import qualified Data.Text import qualified Text.Megaparsec @@ -89,7 +90,7 @@ exprAndHeaderFromText -> Either ParseError (Text, Expr Src Import) exprAndHeaderFromText delta text = case result of Left errInfo -> Left (ParseError { unwrap = errInfo, input = text }) - Right (txt, r) -> Right (Data.Text.dropWhileEnd (/= '\n') txt, r) + Right (txt, r) -> Right (stripHeader txt, r) where parser = do (bytes, _) <- Text.Megaparsec.match whitespace @@ -98,3 +99,5 @@ exprAndHeaderFromText delta text = case result of return (bytes, r) result = Text.Megaparsec.parse (unParser parser) delta text + + stripHeader = Data.Text.dropWhile Data.Char.isSpace . Data.Text.dropWhileEnd (/= '\n') diff --git a/dhall/tests/Dhall/Test/Format.hs b/dhall/tests/Dhall/Test/Format.hs index ae2dca3..6b548ed 100644 --- a/dhall/tests/Dhall/Test/Format.hs +++ b/dhall/tests/Dhall/Test/Format.hs @@ -51,9 +51,10 @@ formatTest characterSet prefix = inputText <- Text.IO.readFile inputFile - expr <- Core.throws (Parser.exprFromText mempty inputText) + (header, expr) <- Core.throws (Parser.exprAndHeaderFromText mempty inputText) - let doc = Pretty.prettyCharacterSet characterSet expr + let doc = Doc.pretty header + <> Pretty.prettyCharacterSet characterSet expr let docStream = Doc.layoutSmart Pretty.layoutOpts doc let actualText = Doc.Render.Text.renderStrict docStream diff --git a/dhall/tests/format/headerA.dhall b/dhall/tests/format/headerA.dhall new file mode 100644 index 0000000..aafcbc6 --- /dev/null +++ b/dhall/tests/format/headerA.dhall @@ -0,0 +1,4 @@ + +{- bla -} + +True diff --git a/dhall/tests/format/headerB.dhall b/dhall/tests/format/headerB.dhall new file mode 100644 index 0000000..3922110 --- /dev/null +++ b/dhall/tests/format/headerB.dhall @@ -0,0 +1,3 @@ +{- bla -} + +True \ No newline at end of file