The haskell-indexer package provides libs for preprocessing Haskell source code into a representation for easy entity cross-referencing, as well as a frontend for emitting entities for the Kythe indexing schema.
This is not an official Google product.
Download Stack from http://docs.haskellstack.org
If you want to use the Kythe frontend, download a Kythe release and unpack it.
tar xzf kythe-v0.0.26.tar.gz -C /opt/
rm -r /opt/kythe
ln -s /opt/kythe-v0.0.26 /opt/kythe
chmod -R 755 /opt/kythe/web/ui # It misses permission by default.
Version v0.0.26
is verified to work with Haskell indexer.
Download the latest Proto compiler 3 release, unpack it and place the binary in the PATH.
unzip -j protoc-*-linux-x86_64.zip bin/protoc -d /usr/local/bin/
If you use have Nix installed and you use
stack --nix
, you do not need to do this.
Use the following to build and run tests:
git clone --recursive https://github.com/google/haskell-indexer.git
cd haskell-indexer
# 8.17 -> GHC 8.0.2
# 6.30 -> GHC 7.10.3
export STACK_YAML=$(readlink -f stack-8.17.yaml)
stack build && stack test
# To test Kythe frontend:
pushd kythe-verification; stack install && ./test.sh; popd
To index a few packages and serve the index, run:
./build-stack.sh /tmp/logs mtlparse cpu
The script temporarily replaces the system GHC with
wrappers/stack-docker/fake-stack/ghc
script, does the indexing and serves the
built index at localhost:8080
.
If you get empty index, look at /tmp/logs/*.stderr
files about possible
indexing errors. Also make sure that you /tmp/logs/*.entries
files are not
empty. If they are, there was some trouble with indexing.
If you plan to use the Dockerized build feature of stack, please install Docker. It is also advised to set up a docker wrapper script by following the instructions at the stack Docker security section.
The docker image has all C library dependencies so it's possible to use it to
index the whole Stackage snapshot. See stack-build-docker.sh
for a
comprehensive example of indexing a stackage snapshot, and serving a Kythe
index.