<div dir="ltr">Sorry for the delay - added it, see for example <a href="http://stuff.codereview.me/#../logs/Control.Monad.Skeleton.core?corpus=core-kythe&signature&line=41">http://stuff.codereview.me/#../logs/Control.Monad.Skeleton.core?corpus=core-kythe&signature&line=41</a>.<div><br></div><div>Note that the Haskell sources (reachable by following the 'generates' reverse edge from the Core) seem to have the empty corpus (for example <a href="http://stuff.codereview.me/#F.hs?corpus&signature&line=1">http://stuff.codereview.me/#F.hs?corpus&signature&line=1</a>).<div><br></div><div>(Also, one of the example entries had a serialization error, omitted that one).</div></div><div><br></div><div>Looks interesting! </div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-08-17 19:22 GMT+02:00 Matthew Pickering <span dir="ltr"><<a href="mailto:matthewtpickering@gmail.com" target="_blank">matthewtpickering@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br>
<br>
If anyone is interested in this and using it further I have been<br>
working on two improvements.<br>
<br>
1. A cross-referencer in the same style for the output of -ddump-simpl<br>
(which also links to the source code which produced the core).<br>
<br>
2. A nix function which builds and references all dependencies.<br>
<br>
They are both found in my core-kythe repo with instructions about how<br>
to use them.<br>
<br>
<a href="https://github.com/mpickering/core-kythe" rel="noreferrer" target="_blank">https://github.com/mpickering/<wbr>core-kythe</a><br>
<br>
You will need nix in order to use either of them but if you do it<br>
should be straightforward (albeit long in the first case!)<br>
<br>
I don't have a server to post examples to but Robin said he would when<br>
he got the chance.<br>
<br>
Matt<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On Tue, Jul 4, 2017 at 6:44 AM, Robin Palotai <<a href="mailto:palotai.robin@gmail.com">palotai.robin@gmail.com</a>> wrote:<br>
> FYI I added GHC 8.2.1-rc2 source to the index. Please tell if some source<br>
> you would be interested in is obviously missing. Thanks!<br>
><br>
> 2017-06-30 22:41 GMT+02:00 Robin Palotai <<a href="mailto:palotai.robin@gmail.com">palotai.robin@gmail.com</a>>:<br>
>><br>
>> Hello Matthew,<br>
>><br>
>> Please see inline<br>
>><br>
>> 2017-06-30 11:57 GMT+02:00 Matthew Pickering<br>
>> <<a href="mailto:matthewtpickering@gmail.com">matthewtpickering@gmail.com</a>>:<br>
>>><br>
>>> Hi Robin,<br>
>>><br>
>>> This looks really useful for developers.<br>
>>><br>
>>> 1. Would it be possible to provide a script which allows developers to<br>
>>> build this index for themselves easily?<br>
>><br>
>><br>
>> First, build and install the `ghc_kythe_wrapper` (instructions at<br>
>> <a href="https://github.com/google/haskell-indexer" rel="noreferrer" target="_blank">https://github.com/google/<wbr>haskell-indexer</a>).<br>
>><br>
>> Then build GHC with `make`, and capture the build log. Here's the hacky<br>
>> script I used:<br>
>> <a href="https://gist.github.com/robinp/222cf3a39cc19178ec8691522056d7fe" rel="noreferrer" target="_blank">https://gist.github.com/<wbr>robinp/<wbr>222cf3a39cc19178ec8691522056d7<wbr>fe</a><br>
>><br>
>> It filters the log and replaces GHC calls to call the wrapper, which emits<br>
>> Kythe entries.<br>
>><br>
>> Finally run `serve.sh` of the repo to postprocess and serve the entries<br>
>> through HTTP.<br>
>><br>
>> This is all pretty new, so feedback or questions welcome. If the method<br>
>> distills, could try to write a more formal guide.<br>
>><br>
>>><br>
>>> 2. Is it possible to use this tool to detect dead code? Functions<br>
>>> which are not used anywhere in the compiler.<br>
>><br>
>><br>
>> We'll get there eventually, but for now the emitted data is not<br>
>> fine-grained enough. The main missing piece is recording what are exported<br>
>> entities of a module (Kythe schema discussion in progress). Without this,<br>
>> unused locals (which anyway surface with -Wall) would be presented and<br>
>> noisy.<br>
>><br>
>> Also, one would probably need to postprocess the data a bit for this, like<br>
>> loading into a graph database or other ways.<br>
>><br>
>> Did you see <a href="https://github.com/ndmitchell/weeder" rel="noreferrer" target="_blank">https://github.com/ndmitchell/<wbr>weeder</a> by the way? Might work.<br>
>><br>
>>><br>
>>> 3. How are you pretty printing the output whilst retaining the source<br>
>>> formatting? I had a quick look at the source but I couldn't see where<br>
>>> the output was being produced.<br>
>>><br>
>><br>
>> The haskell-indexer-frontend-kythe emits Kythe (<a href="http://kythe.io" rel="noreferrer" target="_blank">http://kythe.io</a>) schema<br>
>> data. We just export the source offsets, and it's the Kythe postprocessing /<br>
>> serving pipeline that does all the formatting.<br>
>><br>
>>><br>
>>> Cheers,<br>
>>><br>
>>> Matt<br>
>>><br>
>>> On Fri, Jun 30, 2017 at 8:55 AM, Robin Palotai <<a href="mailto:palotai.robin@gmail.com">palotai.robin@gmail.com</a>><br>
>>> wrote:<br>
>>> > Hello GHC devs,<br>
>>> ><br>
>>> > I ran haskell-indexer [1] on the GHC 8.0.2 tarball, partly because I<br>
>>> > find<br>
>>> > myself reading GHC source from time to time while working on the<br>
>>> > indexer,<br>
>>> > and partly since it's fun.<br>
>>> ><br>
>>> > First, here you can click around [2] and find where beloved functions<br>
>>> > are<br>
>>> > called from:<br>
>>> ><br>
>>> > <a href="http://stuff.codereview.me/#ghc/compiler/hsSyn/HsBinds.hs?corpus&signature" rel="noreferrer" target="_blank">http://stuff.codereview.me/#<wbr>ghc/compiler/hsSyn/HsBinds.hs?<wbr>corpus&signature</a><br>
>>> > (scroll down a bit, imports are not linked yet).<br>
>>> ><br>
>>> > Second, the way I indexed was pretty simple. I took the output of<br>
>>> > `make`,<br>
>>> > replaced the ghc used with the ghc_kythe_wrapper, and filtered the<br>
>>> > lines<br>
>>> > which included '-c', since I noticed that those duplicate previous<br>
>>> > large<br>
>>> > compile lines. This only indexes the stage1 compilation AFAIU.<br>
>>> ><br>
>>> > Feel free to suggest a better way to tap into the compilations to get<br>
>>> > everything properly indexed (and possibly only once).<br>
>>> ><br>
>>> > Any comments welcome!<br>
>>> > Robin<br>
>>> ><br>
>>> > [1]: <a href="https://github.com/google/haskell-indexer" rel="noreferrer" target="_blank">https://github.com/google/<wbr>haskell-indexer</a><br>
>>> ><br>
>>> > [2]: TLDR UI quirks:<br>
>>> >   - Click the :: in top-left to navigate file tree<br>
>>> >   - Ctrl-Click (on linux) to go directly to definition (otherwise click<br>
>>> > stuff from bottom pane)<br>
>>> >   - Bottom pane often hides content, close it if stuck.<br>
>>> ><br>
>>> > ______________________________<wbr>_________________<br>
>>> > ghc-devs mailing list<br>
>>> > <a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
>>> > <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/ghc-devs</a><br>
>>> ><br>
>><br>
>><br>
><br>
</div></div></blockquote></div><br></div>