Fix nested user strings and add test

This commit is contained in:
Ellie Hermaszewska 2023-05-16 15:33:49 +08:00
parent 7838253a7a
commit e62d09c599
No known key found for this signature in database
2 changed files with 37 additions and 11 deletions

View File

@ -53,7 +53,7 @@ import qualified Data.Text as Text
import Error.Diagnose.Position
import Error.Diagnose.Style (Annotation (..))
import Prettyprinter (Doc, Pretty (..), align, annotate, colon, hardline, lbracket, rbracket, space, width, (<+>), reAnnotate)
import Prettyprinter.Internal (Doc (..))
import Prettyprinter.Internal (Doc (..), textSpaces)
import Data.Bool (bool)
type FileMap = HashMap FilePath (Array Int String)
@ -653,7 +653,8 @@ replaceLinesWith repl (Text _ s) =
in mconcat (List.intersperse repl lines)
replaceLinesWith repl (FlatAlt f d) = FlatAlt (replaceLinesWith repl f) (replaceLinesWith repl d)
replaceLinesWith repl (Cat c d) = Cat (replaceLinesWith repl c) (replaceLinesWith repl d)
replaceLinesWith repl (Nest n d) = Nest n (replaceLinesWith repl d)
-- We need to push the nesting past our line prefix
replaceLinesWith repl (Nest n d) = replaceLinesWith (repl <> pretty (textSpaces n)) d
replaceLinesWith repl (Union c d) = Union (replaceLinesWith repl c) (replaceLinesWith repl d)
replaceLinesWith repl (Column f) = Column (replaceLinesWith repl . f)
replaceLinesWith repl (Nesting f) = Nesting (replaceLinesWith repl . f)

View File

@ -5,12 +5,13 @@
#ifdef USE_AESON
import qualified Data.ByteString.Lazy as BS
import Error.Diagnose(diagnosticToJson)
#endif
import Data.HashMap.Lazy (HashMap)
import qualified Data.HashMap.Lazy as HashMap
import Error.Diagnose
( Marker (..),
Note (Hint),
Note (..),
Position (..),
Report(..),
addFile,
@ -20,12 +21,11 @@ import Error.Diagnose
printDiagnostic,
printDiagnostic',
stdout,
diagnosticToJson,
WithUnicode (..),
TabSize (..),
)
import System.IO (hPutStrLn)
import Prettyprinter (Doc, annotate, pretty, hsep, indent, vsep)
import Prettyprinter (Doc, annotate, pretty, hsep, indent, vsep, nest)
import Prettyprinter.Render.Terminal (AnsiStyle, Color (..), color, bold, italicized, underlined)
import Data.Traversable (mapAccumL)
import Data.Functor.Compose (Compose(..))
@ -85,7 +85,8 @@ main = do
]
customAnnReports =
[ colorfulReport,
indentedReport
indentedReport,
nestingReport
]
let diag = HashMap.foldlWithKey' addFile (foldl addReport def reports) files
@ -125,11 +126,10 @@ indentedReport =
Err
Nothing
("Indent..." <> indent 3 (vsep ["foo", "bar", "baz"]))
[(Position (1, 15) (1, 16) "test.zc", Maybe a)
,(Position (1, 11) (1, 12) "test.zc", This b)
,(Position (1, 5) (1, 10) "test.zc", Where c)
[ (Position (1, 15) (1, 16) "test.zc", Maybe a)
, (Position (1, 11) (1, 12) "test.zc", This b)
]
[]
[Note c]
where
a =
vsep
@ -145,7 +145,8 @@ indentedReport =
, "A man in hue, all “hues” in his controlling,"
, "Which steals mens eyes and womens souls amazeth."
]
c = vsep
c =
vsep
[ "And for a woman wert thou first created;"
, "Till Nature, as she wrought thee, fell a-doting,"
, "And by addition me of thee defeated,"
@ -154,6 +155,30 @@ indentedReport =
, indent 4 "Mine be thy love and thy loves use their treasure."
]
nestingReport :: Report (Doc AnsiStyle)
nestingReport =
Err
Nothing
(nest 4 $ vsep ["Nest...", "foo", "bar", "baz"])
[ (Position (1, 15) (1, 16) "test.zc", Maybe a)
]
[Note b]
where
a =
nest 3 $
vsep
[ "'What day is it?' asked Pooh."
, "'It's today,' squeaked Piglet."
, "'My favourite day,' said Pooh."
]
b =
foldr1 (\p q -> nest 2 (vsep [p, q]))
[ "It's a very funny thought that, if Bears were Bees,"
, "They'd build their nests at the bottom of trees."
, "And that being so (if the Bees were Bears),"
, "We shouldn't have to climb up all these stairs."
]
errorNoMarkersNoHints :: Report String
errorNoMarkersNoHints =
Err