/code-intel-extensions

Provides fuzzy code intelligence using ctags and text search

Primary LanguageTypeScript

Sourcegraph code intelligence extensions

Build status codecov

This repository contains the code for the Sourcegraph extensions that provide code intelligence. These extensions provide precise code intelligence via LSIF and Language Servers, and provides fuzzy code intelligence using a combination of ctags and search.

Repository structure

Development

  1. Run yarn

  2. Run yarn --cwd extensions/{go,typescript,template} run serve (pick one, template includes all others)

  3. Open up your Sourcegraph settings https://sourcegraph.com/users/you/settings and disable the language extensions you're developing:

    {
      ...
      "extensions": {
          "sourcegraph/cpp": false,
          ...
      }
    }
  4. Sideload the extension (hit OK on the alert to accept the default URL http://localhost:1234) on your Sourcegraph instance and refresh the page. Make sure you don't see two of the same language extension in the Ext menu.

Adding a language extension

  1. Add an entry to the shared/language-specs directory. For languages with a trivial configuration add a new entry (in alphabetical order) to languages.ts. Otherwise, add additional files following the existing examples.
  2. (optional, to enable jump to definition) Ensure the language is present in the command line arguments to universal-ctags https://github.com/sourcegraph/sourcegraph/blob/21efc6844838e773b9a8f4a7ba1d5628e8076984/cmd/symbols/internal/pkg/ctags/parser.go#L71
  3. Make sure there is a mapping entry for the languageID in https://github.com/sourcegraph/sourcegraph/blob/master/shared/src/languages.ts#L40
  4. Generate and publish the extension as described below.

Generating & publishing extensions

Typically you do not need to explicitly generate and publish extensions. By default, extensions are generated and published in BuildKite from the master branch.

If you need to manually generate/publish extensions, do so as follows:

Generate:

  • Specific template extensions: yarn run generate --languages=foo,bar
  • All known template extensions: yarn run generate

Publish:

  1. Ensure the src command-line tool is installed on your PATH, and environment variables are set:
    • SRC_ENDPOINT should be the URL of your instance.
    • SRC_ACCESS_TOKEN should contain an access token for your instance.
  2. Publish:
    • Specific template extensions: yarn run publish --languages=foo,bar
    • All the template extensions: yarn run publish
    • Go: yarn run publish:go
    • TypeScript: yarn run publish:typescript