The future of SCIP

We are excited to announce our transition to a community-driven open source project. While making this change, we reaffirm our deep commitment to remaining active members of the community.

Sourcegraph
Oh, not SICP.

... and not the solver for mixed integer (linear) programming (MI(L)P) and mixed integer nonlinear programming (MINLP):

> https://www.scipopt.org/

SCIP

damn that is a cute logo, what a miss for SCIP-code
Also not SCPI (Standard Commands for Programmable Instrumentation), widely used to control lab instruments and pronounced similarly ("skippy").
Secure Communications Interoperability Protocol - Wikipedia

There IS no… wait, wrong acronym.

The similar acronym appears to be intentional:

> Note on the name: SCIP is pronounced the same way as “skip” and it’s a recursive acronym that stands for “SCIP Code Intelligence Protocol.”

> SCIP is also a purposeful nod to SICP (Structure and Interpretation of Programs), a book about analyzing programs.

https://sourcegraph.com/blog/announcing-scip#:~:text=SCIP%20...

SCIP - a better code indexing format than LSIF | Sourcegraph Blog

We are excited to announce SCIP, a new indexing format that we are using at Sourcegraph to index programming languages to power code navigation features such as "Go to definition" and "Find references."

The git repo is here: https://github.com/scip-code/scip

Looks like it's defined using protocol buffers, with "rich Go and Rust bindings" and links to implementations for many other languages.

GitHub - scip-code/scip: SCIP Code Intelligence Protocol

SCIP Code Intelligence Protocol. Contribute to scip-code/scip development by creating an account on GitHub.

GitHub
I can’t speak for the Go bindings, but using the Rust crate has been pretty clean. Haven’t really felt the need to dip into deserializing raw .scip file in the time that I’ve been working with SCIP.
Something something powers go to definition… is this an implementation of an LSP server? Or a subset of what’s needed to implement LSP? A formerly proprietary alternative to LSP?

In its simplest form, it's just a dump of the code intelligence information from a static copy of the code. This can power an LSP, however, without additional logic wouldn't be able to handle a project under edit, since the locations won't match between the indexed state and the edited project state; So it lends itself well for something like Sourcegraph that already displays a static copy of the codebase.

Uber uses SCIP as part of the LSP implementation for our Java monorepo (Pieces of which we've [open-sourced](https://github.com/uber/scip-lsp)).
Standardizing on SCIP has helped us generalize tools to be independent of the compiler/language ecosystem (eg we could do call-stack-analysis on any project that exports valid SCIP; do feature flag cleanup; find refs/impls across a wider scope than most LSP servers can handle due to memory constraints).

GitHub - uber/scip-lsp

Contribute to uber/scip-lsp development by creating an account on GitHub.

GitHub