Awesome
hgrep
Search Haskell source code from the command line.
Powered by ghc-exactprint.
Usage
$> 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.
Requirements
You can use cabal
or stack
to install, but you may need libpcre
. In case you don't have it:
Ubuntu
sudo apt update
sudo apt install libpcre3-dev
Fedora
sudo dnf update
sudo dnf install pcre-devel
NixOS / Nix Package Manager
nix-env -i pcre
Install
Stack
git clone https://github.com/thumphries/hgrep.git
cd !$
stack install
Cabal
git clone https://github.com/thumphries/hgrep.git
cd !$
cabal new-build
Mafia
git clone https://github.com/thumphries/hgrep.git
cd !$
mafia build
Nix
git clone https://github.com/thumphries/hgrep.git
cd !$
nix-build -E 'with import <nixpkgs> {}; haskellPackages.callCabal2nix "hgrep" ./. {}'
Searching for top-level expressions
$> 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
$> 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
$> 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
}