on master help sign in
Make error messages prettier
3c05f53Evan Czaplicki
compiler/Type/State.hs+14−10
@@ -49,19 +49,23 @@ addError span message t1 t2 =
49 where
49 where
50 err = makeError <$> extraPretty t1 <*> extraPretty t2
50 err = makeError <$> extraPretty t1 <*> extraPretty t2
51
51
52− location =
53− case span of
52+ location = case span of
54− NoSpan msg -> if null msg then "" else ":\n\n " ++ msg
53+ NoSpan msg -> ""
55− Span p1 p2 msg -> lineNum ++ expr
54+ Span p1 p2 msg ->
56− where
57− lineNum = if line p1 == line p2 then "on line " ++ show (line p1)
55+ if line p1 == line p2 then " on line " ++ show (line p1)
58− else "between lines " ++ show (line p1) ++ " and " ++ show (line p2)
56+ else " between lines " ++ show (line p1) ++ " and " ++ show (line p2)
57+
59− expr = if null msg then "" else ":\n\n " ++ msg
58+ display msg = if null msg then "\n"
59+ else "\n" ++ unlines (map (" "++) $ lines msg)
60+
61+ src = case span of
62+ NoSpan msg -> display msg
63+ Span _ _ msg -> display msg
60
64
61 makeError pt1 pt2 =
65 makeError pt1 pt2 =
62− P.vcat [ P.text $ "Type error " ++ location
66+ P.vcat [ P.text $ "Type error" ++ location ++ ":"
63 , if null message then empty else P.vcat . map P.text $ lines message
67 , if null message then empty else P.vcat . map P.text $ lines message
64− , P.text " "
68+ , P.text src
65 , P.text " Expected Type:" <+> pt1
69 , P.text " Expected Type:" <+> pt1
66 , P.text " Actual Type:" <+> pt2 <> P.text "\n"
70 , P.text " Actual Type:" <+> pt2 <> P.text "\n"
67 ]
71 ]