
Hello Matthew,
Please see inline
2017-06-30 11:57 GMT+02:00 Matthew Pickering
Hi Robin,
This looks really useful for developers.
1. Would it be possible to provide a script which allows developers to build this index for themselves easily?
First, build and install the `ghc_kythe_wrapper` (instructions at https://github.com/google/haskell-indexer). Then build GHC with `make`, and capture the build log. Here's the hacky script I used: https://gist.github.com/robinp/222cf3a39cc19178ec8691522056d7fe It filters the log and replaces GHC calls to call the wrapper, which emits Kythe entries. Finally run `serve.sh` of the repo to postprocess and serve the entries through HTTP. This is all pretty new, so feedback or questions welcome. If the method distills, could try to write a more formal guide.
2. Is it possible to use this tool to detect dead code? Functions which are not used anywhere in the compiler.
We'll get there eventually, but for now the emitted data is not fine-grained enough. The main missing piece is recording what are exported entities of a module (Kythe schema discussion in progress). Without this, unused locals (which anyway surface with -Wall) would be presented and noisy. Also, one would probably need to postprocess the data a bit for this, like loading into a graph database or other ways. Did you see https://github.com/ndmitchell/weeder by the way? Might work.
3. How are you pretty printing the output whilst retaining the source formatting? I had a quick look at the source but I couldn't see where the output was being produced.
The haskell-indexer-frontend-kythe emits Kythe (http://kythe.io) schema data. We just export the source offsets, and it's the Kythe postprocessing / serving pipeline that does all the formatting.
Cheers,
Matt
On Fri, Jun 30, 2017 at 8:55 AM, Robin Palotai
wrote: Hello GHC devs,
I ran haskell-indexer [1] on the GHC 8.0.2 tarball, partly because I find myself reading GHC source from time to time while working on the indexer, and partly since it's fun.
First, here you can click around [2] and find where beloved functions are called from: http://stuff.codereview.me/#ghc/compiler/hsSyn/HsBinds.hs? corpus&signature (scroll down a bit, imports are not linked yet).
Second, the way I indexed was pretty simple. I took the output of `make`, replaced the ghc used with the ghc_kythe_wrapper, and filtered the lines which included '-c', since I noticed that those duplicate previous large compile lines. This only indexes the stage1 compilation AFAIU.
Feel free to suggest a better way to tap into the compilations to get everything properly indexed (and possibly only once).
Any comments welcome! Robin
[1]: https://github.com/google/haskell-indexer
[2]: TLDR UI quirks: - Click the :: in top-left to navigate file tree - Ctrl-Click (on linux) to go directly to definition (otherwise click stuff from bottom pane) - Bottom pane often hides content, close it if stuck.
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs