module Grep(runGrep) where
import Hint.All
import Apply
import Config.Type
import HSE.All
import Control.Monad
import Data.List
import Util
import Idea
import qualified HsSyn as GHC
import qualified BasicTypes as GHC
import GHC.Util
import SrcLoc as GHC hiding (mkSrcSpan)
runGrep :: String -> ParseFlags -> [FilePath] -> IO ()
runGrep patt flags files = do
exp <- case parseExp patt of
ParseOk x -> return x
ParseFailed sl msg ->
exitMessage $ (if "Parse error" `isPrefixOf` msg then msg else "Parse error in pattern: " ++ msg) ++ "\n" ++
patt ++ "\n" ++
replicate (srcColumn sl - 1) ' ' ++ "^"
let scope = scopeCreate $ Module an Nothing [] [] []
let unit = GHC.noLoc $ GHC.ExplicitTuple GHC.noExt [] GHC.Boxed
let rule = hintRules [HintRule Suggestion "grep" scope exp (Tuple an Boxed []) Nothing []
(wrap mempty) (wrap unit) (wrap unit) Nothing]
forM_ files $ \file -> do
res <- parseModuleEx flags file Nothing
case res of
Left (ParseError sl msg ctxt) ->
print $ rawIdeaN Error (if "Parse error" `isPrefixOf` msg then msg else "Parse error: " ++ msg) (mkSrcSpan sl sl) ctxt Nothing []
Right m ->
forM_ (applyHints [] rule [m]) $ \i ->
print i{ideaHint="", ideaTo=Nothing}