

Srclib: A polyglot code analysis library - anant
https://srclib.org/

======
sqs
Thanks for posting this! I'm one of the original creators. It's still alpha,
so there will be bugs. But it can do some pretty cool and useful stuff already
in your editor (and it powers
[https://sourcegraph.com/](https://sourcegraph.com/)).

Anyone have feedback about how we're explaining the problem and solution, and
the first-run experience of using the editor plugins and the "src" tool? We
would LOVE to hear it so we can fix/improve it.

~~~
michaelmior
For a tool which is all about being language agnostic, I'm curious why you
went with Go struct definitions to define the formats instead of something
like JSON Schema[0].

[0] [http://json-schema.org/](http://json-schema.org/)

~~~
sqs
Simplicity and lack of time. :) We'd love to move to something more language-
agnostic for the schema definitions. If you're interested, we'd definitely
accept a patch.

~~~
michaelmior
Fair reasons :) I'm tied up for the next couple weeks, but I'll keep that in
mind for September!

------
comex
Based on reading some of the docs (can't check out the source on this phone),
looks like this has great potential; for a long time I've wanted something
better than cscope, and not limited to a single language, to use with vim.

My main concern is that any system based on scanning entire source files
offline is unlikely to have the same interactivity as IDEs. That is, if I type
a line of C++, I don't want clang to have to churn through the whole file and
any header files before the navigation updates...

~~~
sqs
Yeah, truly interactive editing and incremental updates are something that
srclib doesn't handle right now. We have some plans/prototypes around using
presentation compilers, lenient parsers, and a persistent "src" process to
provide the same kind of interactive editing support that IDEs have, but
there's nothing in srclib or any of the language analysis toolchains yet. We
are /pretty/ sure it'll be possible to get the kind of responsiveness you'd
want.

If you have time to take a look at how we've implemented the existing
toolchains and architecture, it'd be awesome if you wrote down any suggestions
you have for how we could implement interactive code assist.

------
tikhonj
Wow, this looks like an awesome project. As a pretty fanatic Emacs user who
doesn't much like IDEs, I've always wanted a nice editor-agnostic IDE
ecosystem that I could just plug into Emacs. I've seen language-specific
things, which are great but naturally linked to their language, and Emacs-
specific monstrosities like CEDET, but never anything trying to be truly
universal.

Very promising.

For some reason though, I can't help but mentally parse "Srclib" as "Scribd"
:/.

~~~
sqs
Thanks for the kind words! Please send feedback/complaints.

Re: the name "srclib", I was on the phone with our domain registrar when we
got srclib.org/com, and the rep referred to it as "Sr. Clib" (as in "Señor
Clib"). So that's stuck in our heads now. :)

------
josephschmoe
IIRC IntelliJ does some things like this:

1\. It's a polyglot IDE and open-source.

2\. Specialized tools for exporting to multiple languages/DSLs.

~~~
sqs
I wasn't able to find the source code for some of IntelliJ's dynamic language
support, like Python and Ruby. If it is indeed open source, I would love to
check it out.

IntelliJ is awesome. We're just trying to make something that isn't coupled to
a specific editor and is super non-monolithic. Our goal is for you to be able
to run a single command ("src") in a directory, or have your editor plugin (or
other kind of tool) invoke something like "src api describe --file FILE
--start-byte N", to tap into a fully analyzed database of the source code in a
package.

~~~
loevborg
That's a potentially very useful project, thanks so much for working on this!

------
jalanb
A couple of points on the website, [https://srclib.org/](https://srclib.org/)

1\. Can't find an actual Download link, even in the section called "Try it
now". Oh - turns out the download links are under "Docs", which is kinda
strange.

2\. Downloaded for Linux. Unzipped, ran, got

    
    
        $ ./src --help
        bash: ./src: cannot execute binary file
    

I wonder if the links are correct, as all three download links on the Docs
page
([https://srclib.org/gettingstarted/](https://srclib.org/gettingstarted/))
include the phrase "...?os=darwin&..."

~~~
sqs
Thanks for posting this.

Just fixed the download links.

What do you think of the new installation section on the homepage, at
[https://srclib.org/#install](https://srclib.org/#install)?

------
padator
related work:
[https://github.com/facebook/pfff](https://github.com/facebook/pfff) which
focused on languages srclib didn't. Also a polyglot source analysis library.

~~~
sqs
Yeah, pfff seems very cool. It seems that pfff has written parsers and type
inferencers for a variety of languages in OCaml. That is an impressive
achievement.

For srclib, we are way lazier. We try to use existing libraries (written in
the languages they target) for parsing, type checking/inference, dependency
resolution, etc. We hope that makes it easier for JavaScript hackers to hack
on srclib's JavaScript support, Python hackers to work on srclib's Python
support, etc.

~~~
padator
Yes, lately I've also tried to reuse existing "parsers" ... for instance I now
use existing libraries for the java bytecode, ocaml typed AST (.cmt) and clang
ASTs.

------
kovrik
Looks awesome!

Hope to see Vim plugin soon.

