2010-03-11 10:03:17 +00:00
|
|
|
module Check (checkSyntax) where
|
|
|
|
|
|
|
|
import Control.Applicative
|
|
|
|
import Data.Char
|
|
|
|
import Data.List
|
2010-03-11 13:39:07 +00:00
|
|
|
import Param
|
2010-03-11 10:03:17 +00:00
|
|
|
import System.IO
|
|
|
|
import System.Process
|
|
|
|
|
|
|
|
----------------------------------------------------------------
|
|
|
|
|
2010-03-11 13:39:07 +00:00
|
|
|
checkSyntax :: Options -> String -> IO String
|
|
|
|
checkSyntax opt file = do
|
|
|
|
(_,_,herr,_) <- runInteractiveProcess (ghc opt) ["--make","-Wall",file] Nothing Nothing
|
2010-03-11 10:03:17 +00:00
|
|
|
refine <$> hGetContents herr
|
|
|
|
where
|
|
|
|
refine = unfoldLines start . map (dropWhile isSpace) . filter (/="") . lines
|
|
|
|
start = (file `isPrefixOf`)
|
|
|
|
|
|
|
|
unfoldLines :: (String -> Bool) -> [String] -> String
|
2010-03-11 13:39:07 +00:00
|
|
|
unfoldLines _ [] = ""
|
|
|
|
unfoldLines p (x:xs) = x ++ unfold xs
|
2010-03-11 10:03:17 +00:00
|
|
|
where
|
|
|
|
unfold [] = "\n"
|
|
|
|
unfold (l:ls)
|
|
|
|
| p l = ('\n':l) ++ unfold ls
|
2010-03-11 10:12:15 +00:00
|
|
|
| otherwise = (' ' :l) ++ unfold ls
|