SCIP Code Intelligence Protocol

SCIP (pronounciation: “skip”) is a language-agnostic protocol for indexing source code, which can be used to power code navigation functionality such as Go to definition, Find references, and Find implementations.

This repository includes:

  • A protobuf schema for SCIP.
  • Rich Go bindings for SCIP: This includes many utility functions to help build tooling on top of SCIP.
  • Auto-generated bindings for TypeScript, Rust and Haskell.
  • The scip CLI makes SCIP indexes a breeze to work with.

If you’re interested in better understanding the motivation behind SCIP, check out the announcement blog post.

If you’re interested in writing a new indexer that emits SCIP, check out our documentation on how to write an indexer.

SCIP CLI reference

Usage:
  scip convert [--from=<path>] [--to=<path>]
  scip stats [--from=<path>]
  scip snapshot [--from=<path>] [--output=<path>]
  scip --version
  scip -h | --help

Options:
  --from=<path>   Input file for conversion [default: index.scip].
  --to=<path>     Output file for conversion [default: dump.lsif].
  --output=<path> Output directory [default: scip-snapshot].
  --version       Show version.
  -h --help       Show help text.

A single dash path ('-') for --from (--to) is interpreted as stdin (stdout).

The 'convert' subcommand currently only supports conversion from SCIP to LSIF.

Contributing

We welcome questions, suggestions as well as code and docs contributions.

For submitting contributions, check out Development.md to better understand project structure and common workflows.

Contributors should abide by the Sourcegraph Code of Conduct.

GitHub

View Github