Crossreferenced GHC 8.0.2

Matthew Pickering matthewtpickering at gmail.com
Thu Aug 17 17:22:49 UTC 2017


Hi all,

If anyone is interested in this and using it further I have been
working on two improvements.

1. A cross-referencer in the same style for the output of -ddump-simpl
(which also links to the source code which produced the core).

2. A nix function which builds and references all dependencies.

They are both found in my core-kythe repo with instructions about how
to use them.

https://github.com/mpickering/core-kythe

You will need nix in order to use either of them but if you do it
should be straightforward (albeit long in the first case!)

I don't have a server to post examples to but Robin said he would when
he got the chance.

Matt


On Tue, Jul 4, 2017 at 6:44 AM, Robin Palotai <palotai.robin at gmail.com> wrote:
> FYI I added GHC 8.2.1-rc2 source to the index. Please tell if some source
> you would be interested in is obviously missing. Thanks!
>
> 2017-06-30 22:41 GMT+02:00 Robin Palotai <palotai.robin at gmail.com>:
>>
>> Hello Matthew,
>>
>> Please see inline
>>
>> 2017-06-30 11:57 GMT+02:00 Matthew Pickering
>> <matthewtpickering at gmail.com>:
>>>
>>> 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 <palotai.robin at gmail.com>
>>> 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 at haskell.org
>>> > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>>> >
>>
>>
>


More information about the ghc-devs mailing list