diff --git a/dhall/src/Dhall/Pretty/Internal.hs b/dhall/src/Dhall/Pretty/Internal.hs index e0c8623..5eefb66 100644 --- a/dhall/src/Dhall/Pretty/Internal.hs +++ b/dhall/src/Dhall/Pretty/Internal.hs @@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-} +{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} @@ -837,22 +838,20 @@ prettyCharacterSet characterSet expression = prettyApplicationExpression a0 prettyApplicationExpression :: Pretty a => Expr Src a -> Doc Ann - prettyApplicationExpression a0 = case a0 of - App {} -> result - Some {} -> result - ToMap {} -> result - Merge {} -> result - Note _ b -> prettyApplicationExpression b - _ -> prettyImportExpression a0 + prettyApplicationExpression = \case + App a b -> f (prettyApplicationExpression a) [b] + Some a -> f (builtin "Some") [a] + ToMap a Nothing -> f (keyword "toMap") [a] + Merge a b Nothing -> f (keyword "merge") [a, b] + Note _ b -> prettyApplicationExpression b + e -> prettyImportExpression e where - result = enclose' "" "" " " "" (reverse (docs a0)) - - docs (App a b) = ( prettyImportExpression b, Pretty.indent 2 (prettyImportExpression b) ) : docs a - docs (Some a) = map duplicate [ prettyImportExpression a , builtin "Some" ] - docs (ToMap a Nothing) = map duplicate [ prettyImportExpression a, keyword "toMap" ] - docs (Merge a b Nothing) = map duplicate [ prettyImportExpression b, prettyImportExpression a, keyword "merge" ] - docs (Note _ b) = docs b - docs b = map duplicate [ prettyImportExpression b ] + f a bs = + enclose' + "" "" " " "" + ( duplicate a + : map (fmap (Pretty.indent 2) . duplicate . prettyImportExpression) bs + ) prettyImportExpression :: Pretty a => Expr Src a -> Doc Ann prettyImportExpression (Embed a) = diff --git a/dhall/tests/Dhall/Test/Format.hs b/dhall/tests/Dhall/Test/Format.hs index 6b548ed..6038c84 100644 --- a/dhall/tests/Dhall/Test/Format.hs +++ b/dhall/tests/Dhall/Test/Format.hs @@ -61,6 +61,10 @@ formatTest characterSet prefix = expectedText <- Text.IO.readFile outputFile let message = - "The formatted expression did not match the expected output" + "The formatted expression did not match the expected output\n" + <> "Expected:\n\n" <> Text.unpack expectedText <> "\n\n" + <> "Actual:\n\n" <> Text.unpack actualText <> "\n\n" + <> "Expected (show): " <> show expectedText <> "\n" + <> "Actual (show): " <> show actualText <> "\n" - Tasty.HUnit.assertEqual message expectedText actualText + Tasty.HUnit.assertBool message (actualText == expectedText) diff --git a/dhall/tests/format/applicationMultilineA.dhall b/dhall/tests/format/applicationMultilineA.dhall new file mode 100644 index 0000000..04521f1 --- /dev/null +++ b/dhall/tests/format/applicationMultilineA.dhall @@ -0,0 +1,5 @@ +{ app = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff aaaaaaaaaaaaaaaaa +, some = Some aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +, merge = merge aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +, toMap = toMap aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +} diff --git a/dhall/tests/format/applicationMultilineB.dhall b/dhall/tests/format/applicationMultilineB.dhall new file mode 100644 index 0000000..beef177 --- /dev/null +++ b/dhall/tests/format/applicationMultilineB.dhall @@ -0,0 +1,14 @@ +{ app = + ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + aaaaaaaaaaaaaaaaa +, some = + Some + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +, merge = + merge + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +, toMap = + toMap + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +} \ No newline at end of file diff --git a/dhall/tests/format/largeRecordB.dhall b/dhall/tests/format/largeRecordB.dhall index e8dd3bb..037c1b6 100644 --- a/dhall/tests/format/largeRecordB.dhall +++ b/dhall/tests/format/largeRecordB.dhall @@ -34,15 +34,15 @@ in defaults.Config , dark_room = Some False , disclose = Some - ( defaults.Disclose - ⫽ { inventory = Some { prompt = True, default = True } - , attributes = Some { prompt = True, default = False } - , monsters_killed = Some { prompt = False, default = True } - , monsters_genocided = Some { prompt = False, default = False } - , conduct = Some { prompt = False, default = False } - , dungeon_overview = Some { prompt = False, default = False } - } - ) + ( defaults.Disclose + ⫽ { inventory = Some { prompt = True, default = True } + , attributes = Some { prompt = True, default = False } + , monsters_killed = Some { prompt = False, default = True } + , monsters_genocided = Some { prompt = False, default = False } + , conduct = Some { prompt = False, default = False } + , dungeon_overview = Some { prompt = False, default = False } + } + ) , dogname = Some "Cujo" , extmenu = Some False , fixinv = Some True