forked from ndmitchell/hlint
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGrep.hs
30 lines (26 loc) · 1.13 KB
/
Grep.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{-# LANGUAGE RecordWildCards #-}
module Grep(runGrep) where
import Language.Haskell.HLint2
import HSE.All
import Control.Monad
import Data.List
import Util
import Idea
runGrep :: String -> ParseFlags -> [FilePath] -> IO ()
runGrep pattern flags files = do
exp <- case parseExp pattern of
ParseOk x -> return x
ParseFailed sl msg ->
exitMessage $ (if "Parse error" `isPrefixOf` msg then msg else "Parse error in pattern: " ++ msg) ++ "\n" ++
pattern ++ "\n" ++
replicate (srcColumn sl - 1) ' ' ++ "^"
let scope = scopeCreate $ Module an Nothing [] [] []
let rule = hintRules [HintRule Warning "grep" scope exp (Tuple an Boxed []) Nothing []]
forM_ files $ \file -> do
res <- parseModuleEx flags file Nothing
case res of
Left (ParseError sl msg ctxt) ->
print $ rawIdea Warning (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}