module Language.Haskell.HGrep.Internal.Data (
ParsedSource (..)
, ParseError (..)
, Query (..)
, Regex (..)
, compileRegex
, SearchResult (..)
, PrintOpts (..)
, defaultPrintOpts
, ColourOpts (..)
) where
import qualified Data.ByteString.Char8 as B8
import Language.Haskell.HGrep.Prelude
import qualified Language.Haskell.GHC.ExactPrint.Annotater as EA
import qualified Language.Haskell.GHC.ExactPrint.Types as ET
import qualified Text.Regex.PCRE.Heavy as PCRE
import qualified GHC
import qualified SrcLoc
newtype ParsedSource = ParsedSource {
unParsedSource :: (ET.Anns, GHC.Located (GHC.HsModule GHC.RdrName))
}
newtype ParseError = ParseError {
unParseError :: (SrcLoc.SrcSpan, [Char])
}
data Query =
MatchSimple [Char]
| MatchRegex Regex
deriving (Eq, Ord, Show)
newtype Regex = Regex {
unRegex :: PCRE.Regex
} deriving (Eq, Ord, Show)
compileRegex :: [Char] -> Either [Char] Regex
compileRegex str =
fmap Regex (PCRE.compileM (B8.pack str) [])
data SearchResult =
forall ast. EA.Annotate ast =>
SearchResult ET.Anns (SrcLoc.Located ast)
data PrintOpts = PrintOpts {
poColourOpts :: ColourOpts
} deriving (Eq, Ord, Show)
data ColourOpts =
DefaultColours
| NoColours
deriving (Eq, Ord, Show)
defaultPrintOpts :: PrintOpts
defaultPrintOpts =
PrintOpts {
poColourOpts = DefaultColours
}