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 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) =

View File

@ -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)

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
, 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