Fix indentation for multiline Some-, toMap- and merge-expressions (#1377)

The loss of indentation for toMap and merge was due to
75e6cc5ca7. I have included Some for
consistency.

Fixes #1376.

Also improve format test failure messages
This commit is contained in:
Simon Jakobi 2019-10-04 00:59:42 +02:00 committed by mergify[bot]
parent 6bc182a08a
commit 7634ee740b
5 changed files with 48 additions and 26 deletions

View File

@ -1,4 +1,5 @@
{-# LANGUAGE CPP #-} {-# LANGUAGE CPP #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE RecordWildCards #-}
@ -837,22 +838,20 @@ prettyCharacterSet characterSet expression =
prettyApplicationExpression a0 prettyApplicationExpression a0
prettyApplicationExpression :: Pretty a => Expr Src a -> Doc Ann prettyApplicationExpression :: Pretty a => Expr Src a -> Doc Ann
prettyApplicationExpression a0 = case a0 of prettyApplicationExpression = \case
App {} -> result App a b -> f (prettyApplicationExpression a) [b]
Some {} -> result Some a -> f (builtin "Some") [a]
ToMap {} -> result ToMap a Nothing -> f (keyword "toMap") [a]
Merge {} -> result Merge a b Nothing -> f (keyword "merge") [a, b]
Note _ b -> prettyApplicationExpression b Note _ b -> prettyApplicationExpression b
_ -> prettyImportExpression a0 e -> prettyImportExpression e
where where
result = enclose' "" "" " " "" (reverse (docs a0)) f a bs =
enclose'
docs (App a b) = ( prettyImportExpression b, Pretty.indent 2 (prettyImportExpression b) ) : docs a "" "" " " ""
docs (Some a) = map duplicate [ prettyImportExpression a , builtin "Some" ] ( duplicate a
docs (ToMap a Nothing) = map duplicate [ prettyImportExpression a, keyword "toMap" ] : map (fmap (Pretty.indent 2) . duplicate . prettyImportExpression) bs
docs (Merge a b Nothing) = map duplicate [ prettyImportExpression b, prettyImportExpression a, keyword "merge" ] )
docs (Note _ b) = docs b
docs b = map duplicate [ prettyImportExpression b ]
prettyImportExpression :: Pretty a => Expr Src a -> Doc Ann prettyImportExpression :: Pretty a => Expr Src a -> Doc Ann
prettyImportExpression (Embed a) = prettyImportExpression (Embed a) =

View File

@ -61,6 +61,10 @@ formatTest characterSet prefix =
expectedText <- Text.IO.readFile outputFile expectedText <- Text.IO.readFile outputFile
let message = 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)

View File

@ -0,0 +1,5 @@
{ app = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff aaaaaaaaaaaaaaaaa
, some = Some aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
, merge = merge aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
, toMap = toMap aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
}

View File

@ -0,0 +1,14 @@
{ app =
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
aaaaaaaaaaaaaaaaa
, some =
Some
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
, merge =
merge
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
, toMap =
toMap
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
}

View File

@ -34,15 +34,15 @@ in defaults.Config
, dark_room = Some False , dark_room = Some False
, disclose = , disclose =
Some Some
( defaults.Disclose ( defaults.Disclose
⫽ { inventory = Some { prompt = True, default = True } ⫽ { inventory = Some { prompt = True, default = True }
, attributes = Some { prompt = True, default = False } , attributes = Some { prompt = True, default = False }
, monsters_killed = Some { prompt = False, default = True } , monsters_killed = Some { prompt = False, default = True }
, monsters_genocided = Some { prompt = False, default = False } , monsters_genocided = Some { prompt = False, default = False }
, conduct = Some { prompt = False, default = False } , conduct = Some { prompt = False, default = False }
, dungeon_overview = Some { prompt = False, default = False } , dungeon_overview = Some { prompt = False, default = False }
} }
) )
, dogname = Some "Cujo" , dogname = Some "Cujo"
, extmenu = Some False , extmenu = Some False
, fixinv = Some True , fixinv = Some True