Help us learn about your current experience with the documentation. Take the survey.

代码智能

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

代码智能添加了交互式开发环境(IDE)中常见的代码导航功能,包括:

  • 类型签名和符号文档。
  • 跳转到定义。

代码智能已内置在 GitLab 中,并由 LSIF(语言服务器索引格式)提供支持,这是一种用于预计算代码智能数据的文件格式。GitLab 每个项目处理一个 LSIF 文件,代码智能不支持每个分支使用不同的 LSIF 文件。

SCIP 是用于索引源代码的工具的下一代演进。你可以用它来支持代码导航功能,例如:

  • 跳转到定义
  • 查找引用

GitLab 不原生支持 SCIP 用于代码智能。但是,你可以使用 SCIP CLI 将使用 SCIP 工具生成的索引转换为 LSIF 兼容文件。有关原生 SCIP 支持的讨论,请参阅 issue 412981

有关即将推出的代码智能增强功能的进展,请参阅 epic 4212

配置代码智能

先决条件:

要了解你的语言如何获得最佳支持,请查看 Sourcegraph 推荐的索引器

使用 CI/CD 组件

GitLab 提供了一个 CI/CD 组件 来在你的 .gitlab-ci.yml 文件中配置代码智能。该组件支持以下语言:

  • Go 1.21 或更高版本。
  • TypeScript 或 JavaScript。
  • Java 8、11、17 和 21。
  • Python
  • .Net/C#

要为该组件贡献更多语言,请在 代码智能组件项目 中打开合并请求。

  1. 向项目的 .gitlab-ci.yml 添加 GitLab CI/CD 组件。例如,此作业为 golang 生成 LSIF 工件:

    include:
      - component: ${CI_SERVER_FQDN}/components/code-intelligence/golang-code-intel@v0.0.3
        inputs:
          golang_version: ${GO_VERSION}
  2. 有关 代码智能组件 的配置说明,请查看每种支持语言的 README

  3. 有关更多配置详情,请参阅 使用组件

为代码智能添加 CI/CD 作业

要为项目启用代码智能,请向项目的 .gitlab-ci.yml 添加 GitLab CI/CD 作业。

  1. 向你的 .gitlab-ci.yml 配置添加一个作业。此作业生成 SCIP 索引并将其转换为 LSIF 以便在 GitLab 中使用:

    "code_navigation":
       rules:
       - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH # 该作业只需要在默认分支上运行
       image: node:latest
       stage: test
       allow_failure: true # 推荐
       script:
          - npm install -g @sourcegraph/scip-typescript
          - npm install
          - scip-typescript index
          - |
             env \
             TAG="v0.4.0" \
             OS="$(uname -s | tr '[:upper:]' '[:lower:]')" \
             ARCH="$(uname -m | sed -e 's/x86_64/amd64/')" \
             bash -c 'curl --location "https://github.com/sourcegraph/scip/releases/download/$TAG/scip-$OS-$ARCH.tar.gz"' \
             | tar xzf - scip
          - chmod +x scip
          - ./scip convert --from index.scip --to dump.lsif
       artifacts:
          reports:
             lsif: dump.lsif
  2. 根据你的 CI/CD 配置,你可能需要手动运行该作业,或者等待它作为现有流水线的一部分运行。

  1. 向你的 .gitlab-ci.yml 配置添加一个作业(code_navigation)来生成索引:

    code_navigation:
       rules:
       - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH # 该作业只需要在默认分支上运行
      image: sourcegraph/lsif-go:v1
      allow_failure: true # 推荐
      script:
        - lsif-go
      artifacts:
        reports:
          lsif: dump.lsif
  2. 根据你的 CI/CD 配置,你可能需要手动运行该作业,或者等待它作为现有流水线的一部分运行。

GitLab 通过 (ci_max_artifact_size_lsif) 工件应用限制,将代码生成作业产生的工件限制为 200 MB。在 GitLab 自托管实例上,实例管理员可以更改此值。

查看代码智能结果

作业成功后,浏览你的仓库以查看代码智能信息:

  1. 在左侧边栏,选择 Search or go to 并找到你的项目。

  2. 选择 Code > Repository

  3. 转到你的仓库中的文件。如果你知道文件名,可以:

    • 输入 /~ 键盘快捷键打开文件查找器,然后输入文件名。
    • 在右上角,选择 Find file
  4. 指向代码行。该行上有代码智能信息的项会在下方显示虚线:

    Code intelligence

  5. 选择该项目以了解更多信息。

查找引用

使用代码智能查看对象的所有使用情况:

  1. 在左侧边栏,选择 Search or go to 并找到你的项目。

  2. 选择 Code > Repository

  3. 转到你的仓库中的文件。如果你知道文件名,可以:

    • 输入 /~ 键盘快捷键打开文件查找器,然后输入文件名。
    • 在右上角,选择 Find file
  4. 指向该对象,然后选择它。

  5. 在对话框中,选择:

    • Definition 查看该对象的定义。
    • References 查看使用该对象的文件列表。

    This variable is referenced twice in this project.