코드 인텔리전스

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

코드 인텔리전스는 다음과 같은 대화형 개발 환경(IDE)에서 일반적인 코드 탐색 기능을 추가합니다:

  • 타입 시그니처 및 기호 문서화.
  • 정의로 이동.

코드 인텔리전스는 GitLab에 내장되어 있으며 LSIF (Language Server Index Format)로 구동됩니다. 이는 미리 계산된 코드 인텔리전스 데이터에 대한 파일 형식입니다. GitLab은 프로젝트당 하나의 LSIF 파일을 처리하며, 코드 인텔리전스는 브랜치마다 다른 LSIF 파일을 지원하지 않습니다.

SCIP는 소스 코드를 인덱싱하기 위한 도구의 다음 진화입니다. 이를 통해 다음과 같은 코드 탐색 기능을 활용할 수 있습니다:

  • 정의로 이동
  • 참조 찾기

GitLab은 코드 인텔리전스를 위해 SCIP를 원래 지원하지 않습니다. 그러나 SCIP CLI를 사용하여 SCIP 도구로 생성된 인덱스를 LSIF 호환 파일로 변환할 수 있습니다. SCIP 지원에 대한 논의는 issue 412981을 참조하세요.

향후 코드 인텔리전스 향상에 대한 진행 상황은 epic 4212를 확인하세요.

코드 인텔리전스 구성

사전 요구사항:

귀하의 언어가 어떻게 가장 잘 지원되는지 보려면, Sourcegraph에서 권장하는 인덱서를 검토하세요.

CI/CD 구성 요소 사용하여

GitLab은 .gitlab-ci.yml 파일에서 코드 인텔리전스를 구성하기 위한 CI/CD 구성 요소를 제공합니다. 이 구성 요소는 다음 언어를 지원합니다:

  • Go 버전 1.21 이상.
  • TypeScript 또는 JavaScript.
  • Java 8, 11, 17 및 21.

구성 요소에 더 많은 언어를 기여하려면, 코드 인텔리전스 구성 요소 프로젝트에서 머지 요청을 열어주세요.

  1. 프로젝트의 .gitlab-ci.yml에 GitLab CI/CD 구성 요소를 추가하세요. 예를 들어, 이 작업은 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.yml에 GitLab CI/CD 작업을 추가하세요.

SCIP 인덱서를 사용하여
  1. .gitlab-ci.yml 구성에 작업을 추가하세요. 이 작업은 SCIP 인덱스를 생성하고 GitLab에서 사용하기 위해 LSIF로 변환합니다:

    "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 구성에 따라, 작업을 수동으로 실행해야 하거나 기존 파이프라인의 일부로 실행될 때까지 기다려야 할 수 있습니다.

LSIF 인덱서를 사용하여
  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 구성에 따라, 작업을 수동으로 실행해야 하거나 기존 파이프라인의 일부로 실행될 때까지 기다려야 할 수 있습니다.

note
GitLab은 코드 생성 작업에서 생성된 아티팩트를 100MB로 제한합니다. 이는 (ci_max_artifact_size_lsif) 아티팩트 응용 제한 때문입니다. 자체 관리 설치의 경우, 인스턴스 관리자가 이 값을 변경할 수 있습니다.

코드 인텔리전스 결과 보기

작업이 성공적으로 완료되면 코드 인텔리전스 정보를 보려면 저장소를 탐색하세요:

  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. 대화 상자에서 References를 선택하여 이 객체를 사용하는 파일 목록을 확인합니다.