Comment

Comment by emmanueloga_

The kind of cross-reference SourceGraph provides is a must have for me after a few years of using a tool like it to understand big projects (I don't use SourceGraph, I use Grok/CodeSearch).

Google open sourced a version of Grok some time ago (https://kythe.io/). [1] A quick search also found this `OpenGrok` thing which I assume must be yet another generic indexer [2].

I wonder if there are other popular tools out there providing generic cross-referencing of code bases?

<SourceGraph>

I was trying to find the equivalent of this Kythe page (how to write an indexer)[6] on SourceGraph docs, after 20 minutes I was still confused. I wish there was more clarity on the different pieces of the system. At first I thought SourceGraph could create a cross reference index from an LSP server, but I guess makes more sense it is the order way around? (SG can talk to text editors via LSP).

It must be a lot of work to make integrate any single language with both SG or Kythe and LSP, perhaps there's some tools or methodologies to make this easier?

<Tangent>

I feel like language designers don't always think about building their implementations with ease of integration as a goal. I remember wanting to play with doing some AST transformations with both TypeScript and Dart (independently) and finding both languages made the task so hard and tedious. Mandatory remark: this is so easy with Lisp derivatives :-)

Things that a good language+ecosystem should have, IMO:

* Easy to retrieve and manipulate CST (for things like writing refactoring and querying tools, writing code formatters/pretty printers, etc). Many languages provide the syntax tree say, without comments, so it is hard to write a pretty printer.

* Documentation generator with cross-reference navigation.

* Play along nicely with generic build tools like Ninja [3].

* Good debugger and value-pretty-printer support (so I can just drop a breakpoint and print anything easily). And some sort of API to use the debugger programmatically or connect to a remote process.

* An LSP implementation [4], although it seems pretty much every popular language is getting one these days!

1: https://en.wikipedia.org/wiki/Google_Kythe

2: http://oracle.github.io/opengrok/

3: https://ninja-build.org/

4: https://langserver.org/

5: https://about.sourcegraph.com/docs/code-intelligence/

6: https://kythe.io/docs/schema/writing-an-indexer.html

<edit: line breaks>

Discussion

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton