{-# LANGUAGE RecordWildCards #-}
module Test.Summary (genBuiltinSummaryMd) where
import qualified Data.Map as Map
import Config.Type
import Test.Util
genBuiltinSummaryMd :: BuiltinSummary -> String
genBuiltinSummaryMd builtins = unlines $
[ "# Built-in Hints"
, ""
, "This page is auto-generated from `cabal run hlint test -- --generate-summary`"
, "or `stack run hlint test -- --generate-summary`."
, ""
]
++ table builtins
table :: BuiltinSummary -> [String]
table builtins =
["<table>"]
++ row ["<th>Hint</th>", "<th>Severity</th>", "<th>Support Refactoring?</th>"]
++ Map.foldMapWithKey showHint builtins
++ ["</table>"]
row :: [String] -> [String]
row xs = ["<tr>"] ++ xs ++ ["</tr>"]
haskell :: String -> [String]
haskell s
| '\n' `elem` s = ["<pre>", s, "</pre>"]
| otherwise = ["<code>", s, "</code>", "<br>"]
showHint :: (String, Severity, Bool) -> BuiltinEx -> [String]
showHint (hint, sev, refact) BuiltinEx{..} = row1 ++ row2
where
row1 = row
[ "<td rowspan=2>" ++ hint ++ "</td>"
, "<td>" ++ show sev ++ "</td>"
, "<td>" ++ if refact then "Yes" else "No" ++ "</td>"
]
row2 = row example
example =
[ "<td colspan=2>"
, "Example:"
]
++ haskell builtinInp
++ ["Found:"]
++ haskell builtinFrom
++ ["Suggestion:"]
++ haskell to
++ ["</td>"]
to = case builtinTo of
Nothing -> ""
Just "" -> "Perhaps you should remove it."
Just s -> s