module Hint.Comment(commentHint) where
import Hint.Type
import Data.Char
import Data.List
import Util
pragmas = words $
"LANGUAGE OPTIONS_GHC INCLUDE WARNING DEPRECATED MINIMAL INLINE NOINLINE INLINABLE " ++
"CONLIKE LINE SPECIALIZE SPECIALISE UNPACK NOUNPACK SOURCE"
commentHint :: Comment -> [Idea]
commentHint c@(Comment True span s)
| "#" `isSuffixOf` s && not ("#" `isPrefixOf` s) = [suggest "Fix pragma markup" c $ '#':s]
| name `elem` pragmas = [suggest "Use pragma syntax" c $ "# " ++ trim s ++ " #"]
where name = takeWhile (\x -> isAlphaNum x || x == '_') $ dropWhile isSpace s
commentHint _ = []
suggest :: String -> Comment -> String -> Idea
suggest msg (Comment typ pos s1) s2 = rawIdea Warning msg pos (f s1) (Just $ f s2) []
where f s = if typ then "{-" ++ s ++ "-}" else "--" ++ s