Code Intelligence

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

  • 类型签名和符号文档。
  • Go-to 定义。

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

SCIP 是索引源代码的下一代工具。您可以使用它来为代码导航功能提供支持,例如:

  • 跳转至定义
  • 查找引用

极狐GitLab 代码智能原生不支持 SCIP,你可以使用 SCIP CLI 将 SCIP 工具生成的索引转换为 LSIF 兼容文件。

配置

先决条件:

  • 你可以检查一下以确保能够和你项目的语言兼容的索引器具:
    • LSIF 索引器
    • SCIP 索引器

使用 CI/CD 组件

极狐GitLab 提供一个 CI/CD 组件,用于在你的 .gitlab-ci.yml 文件中配置代码智能。该组件支持下列语言:

  • Go 1.21 或以后版本。
  • TypeScript 或 JavaScript。
  • Java 8、11、17 和 21。
  1. 将极狐GitLab CI/CD 组件添加到您的 .gitlab-ci.yml 配置文件,例如:下面的作业会为 golang 生成 LSIF 文件:

    - 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/CD 作业到您的项目的 .gitlab-ci.yml 中。

::Tabs

:::TabTitle 使用 SCIP 索引器

  1. 为你的 .gitlab-ci.yml 添加一个作业。这个作业生成 SCIP 索引,然后将它转换为 LSIF,以便在极狐GitLab 中使用:

    "code_navigation":
       rules:
       - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH # the job only needs to run against the default branch
       image: node:latest
       stage: test
       allow_failure: true # recommended
       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 配置,你可能需要手动运行作业,或者等待它作为现有流水线的一部分运行。

:::TabTitle 使用 LSIF 索引器

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

    code_navigation:
       rules:
       - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH # the job only needs to run against the default branch
      image: sourcegraph/lsif-go:v1
      allow_failure: true # recommended
      script:
        - lsif-go
      artifacts:
        reports:
          lsif: dump.lsif
    
  2. 取决于你的 CI/CD 配置,你可能需要手动运行作业,或者等待它作为现有流水线的一部分运行。

::EndTabs

note 极狐GitLab 限制了代码生成作业生成的文件大小为 100 MB,这取决于(ci_max_artifact_size_lsif)的文件应用限制。在自主管理的安装中,管理员可以更改此值。

查看代码智能结果

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

  1. 在左侧侧边栏,选择 搜索或跳转 并找到你的项目。
  2. 选择 代码 > 仓库
  3. 去到你的仓库中的文件。如果你知道文件名,可以选择:
    • 输入 /~ 键盘快捷方式打开文件查找器,然后输入文件名。
    • 在右上角选择 查找文件
  4. 将鼠标指向代码行。在那里有来自代码智能的信息的项目显示一个点线:

    代码智能

  5. 选择项目以了解有关它的更多信息。

查找引用

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

  1. 在左侧侧边栏,选择 搜索或跳转 并找到你的项目。
  2. 选择 代码 > 仓库
  3. 去到你的仓库中的文件。如果你知道文件名,可以选择:
    • 输入 /~ 键盘快捷方式打开文件查找器,然后输入文件名。
    • 在右上角选择 查找文件
  4. 将鼠标指向对象,然后选择它。
  5. 在对话框中选择:
    • 定义 以查看此对象的定义。
    • 引用 以查看使用此对象的文件列表。

    This variable is referenced twice in this project.