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