on master help sign in
Improve error pretty-printing
3e401fbDavid Raymond Christiansen
src/Idris/AbsSyntax.hs+5−4
@@ -641,13 +641,14 @@ isetPrompt p = do i <- getIState
641
641
642ihWarn :: Handle -> FC -> Doc OutputAnnotation -> Idris ()
642ihWarn :: Handle -> FC -> Doc OutputAnnotation -> Idris ()
643ihWarn h fc err = do i <- getIState
643ihWarn h fc err = do i <- getIState
644− err' <- iRender . fmap (fancifyAnnots i) $ err
645 case idris_outputmode i of
644 case idris_outputmode i of
646 RawOutput ->
645 RawOutput ->
647− runIO $
646+ do err' <- iRender . fmap (fancifyAnnots i) $
647+ text (show fc) <> colon <//> err
648− hPutStrLn h (show fc ++ ":" ++ displayDecorated (consoleDecorate i) err')
648+ runIO . hPutStrLn h $ displayDecorated (consoleDecorate i) err'
649 IdeSlave n ->
649 IdeSlave n ->
650+ do err' <- iRender . fmap (fancifyAnnots i) $ err
650− do let (str, spans) = displaySpans err'
651+ let (str, spans) = displaySpans err'
651 runIO . hPutStrLn h $
652 runIO . hPutStrLn h $
652 convSExp "warning" (fc_fname fc, fc_line fc, fc_column fc, str, spans) n
653 convSExp "warning" (fc_fname fc, fc_line fc, fc_column fc, str, spans) n
653
654
src/Idris/Delaborate.hs+3−3
@@ -220,13 +220,13 @@ pprintErr' i (Elaborating s n e) = text "When elaborating" <+> text s <>
220pprintErr' i (ProviderError msg) = text ("Type provider error: " ++ msg)
220pprintErr' i (ProviderError msg) = text ("Type provider error: " ++ msg)
221pprintErr' i (LoadingFailed fn e) = text "Loading" <+> text fn <+> text "failed:" <+> pprintErr' i e
221pprintErr' i (LoadingFailed fn e) = text "Loading" <+> text fn <+> text "failed:" <+> pprintErr' i e
222pprintErr' i (ReflectionError parts orig) =
222pprintErr' i (ReflectionError parts orig) =
223− let parts' = map (hsep . map showPart) parts in
223+ let parts' = map (fillSep . map showPart) parts in
224− vsep parts' <>
224+ align (fillSep parts') <>
225 if (opt_origerr (idris_options i))
225 if (opt_origerr (idris_options i))
226 then line <> line <> text "Original error:" <$> indented (pprintErr' i orig)
226 then line <> line <> text "Original error:" <$> indented (pprintErr' i orig)
227 else empty
227 else empty
228 where showPart :: ErrorReportPart -> Doc OutputAnnotation
228 where showPart :: ErrorReportPart -> Doc OutputAnnotation
229− showPart (TextPart str) = text str
229+ showPart (TextPart str) = fillSep . map text . words $ str
230 showPart (NamePart n) = annName n
230 showPart (NamePart n) = annName n
231 showPart (TermPart tm) = pprintTerm i (delab i tm)
231 showPart (TermPart tm) = pprintTerm i (delab i tm)
232 showPart (SubReport rs) = indented . hsep . map showPart $ rs
232 showPart (SubReport rs) = indented . hsep . map showPart $ rs