hgrep-0.1: README.md
# hgrep
Search Haskell source code from the command line.
Powered by ghc-exactprint.
## Usage
```haskell
$> hgrep
Usage: hgrep [-e|--regex] EXPRESSION [FILE]
```
`hgrep` requires an expression and a set of files to search across.
An expression can be one of
- The name of a type, e.g. `FooBar`
- The name of an expression, e.g. `foo`
- A regular expression (via the `-e` flag), e.g. `-e Foo$`
Each file will be parsed and searched. Results will be printed to the
console, with syntax highlighting where possible.
### Searching for top-level expressions
```haskell
$> hgrep main main/hgrep.hs
main/hgrep.hs:16:1-13
-- | Run the program.
main :: IO ()
main/hgrep.hs:(17,1)-(18:27)
main = do
putStrLn "Hello, world!"
```
### Searching for type declarations
```haskell
$> hgrep PrintOpts src/**/*.hs
src/Language/Haskell/HGrep/Internal/Data.hs:(40,1)-(42,28)
data PrintOpts = PrintOpts {
poColourOpts :: ColourOpts
} deriving (Eq, Ord, Show)
```
### Searching with a regular expression
```haskell
$> hgrep -e 'Opts$' src/**/*.hs
src/Language/Haskell/HGrep/Internal/Data.hs:(57,1)-(59,28)
data PrintOpts = PrintOpts {
poColourOpts :: ColourOpts
} deriving (Eq, Ord, Show)
src/Language/Haskell/HGrep/Internal/Data.hs:(61,1)-(64,26)
defaultPrintOpts :: PrintOpts
src/Language/Haskell/HGrep/Internal/Data.hs:(67,1)-(70,5)
defaultPrintOpts =
PrintOpts {
poColourOpts = DefaultColours
}
```