gitlab-org--gitlab-foss/doc/user/project/code_intelligence.md

2.7 KiB

stage group info type
Create Source Code To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers reference

Code Intelligence

Introduced in GitLab 13.1.

Code Intelligence adds code navigation features common to interactive development environments (IDE), including:

  • Type signatures and symbol documentation.
  • Go-to definition.

Code Intelligence is built into GitLab and powered by LSIF (Language Server Index Format), a file format for precomputed code intelligence data.

Configuration

Enable code intelligence for a project by adding a GitLab CI/CD job to the project's .gitlab-ci.yml which will generate the LSIF artifact:

code_navigation:
  image: golang:1.14.0
  allow_failure: true # recommended
  script:
    - go get github.com/sourcegraph/lsif-go/cmd/lsif-go
    - lsif-go
  artifacts:
    reports:
      lsif: dump.lsif

The generated LSIF file must be less than 170MiB.

After the job succeeds, code intelligence data can be viewed while browsing the code:

Code intelligence

Find references

To find where a particular object is being used, you can see links to specific lines of code under the References tab:

Find references

Enable or disable find references

Find references is under development but ready for production use. It is deployed behind a feature flag that is enabled by default. GitLab administrators with access to the GitLab Rails console can opt to disable it for your instance.

To disable it:

Feature.disable(:code_navigation_references)

To enable it:

Feature.enable(:code_navigation_references)

Language support

Generating an LSIF file requires a language server indexer implementation for the relevant language.

Language Implementation
Go sourcegraph/lsif-go
JavaScript sourcegraph/lsif-node
TypeScript sourcegraph/lsif-node

View a complete list of available LSIF indexers on their website and refer to their documentation to see how to generate an LSIF file for your specific language.