InfoGrab DocsInfoGrab Docs

코드 인텔리전스

요약

코드 인텔리전스는 대화형 개발 환경(IDE)에서 공통으로 제공하는 다음 기능을 추가합니다. 코드 인텔리전스는 GitLab에 내장되어 있으며, 사전 계산된 코드 인텔리전스 데이터를 위한 파일 형식인 LSIF(Language Server Index Format)로 동작합니다.

코드 인텔리전스는 대화형 개발 환경(IDE)에서 공통으로 제공하는 다음 기능을 추가합니다.

  • 타입 시그니처 및 심볼 문서.
  • 정의로 이동.

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

SCIP는 소스 코드를 인덱싱하는 도구의 차세대 형태입니다. 다음과 같은 기능을 구동하는 데 사용할 수 있습니다.

  • 정의로 이동
  • 참조 찾기

GitLab은 코드 인텔리전스를 위한 SCIP를 기본으로 지원하지 않습니다. 다만 SCIP CLI를 사용하여 SCIP 도구로 생성한 인덱스를 LSIF 호환 파일로 변환할 수 있습니다. SCIP 기본 지원에 대한 논의는 이슈 412981을 참고합니다.

향후 코드 인텔리전스 개선 진행 상황은 에픽 4212를 참고합니다.

GitLab은 코드 내비게이션도 제공합니다. 코드 내비게이션은 LSIF 파일 대신 GitLab Orbit이 코드에서 구축한 지식 그래프를 읽으므로 인덱서나 CI/CD job이 필요하지 않습니다.

코드 인텔리전스 구성#

사전 요구 사항:

사용하는 언어가 어떤 방식으로 가장 잘 지원되는지 확인하려면 Sourcegraph가 권장하는 인덱서를 검토합니다.

CI/CD 컴포넌트 사용#

히스토리
  • Python 지원이 GitLab 17.9에서 도입됨.
  • .Net/C# 지원이 GitLab 18.0에서 도입됨.

GitLab은 .gitlab-ci.yml 파일에서 코드 인텔리전스를 구성할 수 있도록 CI/CD 컴포넌트를 제공합니다. 이 컴포넌트는 다음 언어를 지원합니다.

  • Go 버전 1.21 이상.
  • TypeScript 또는 JavaScript.
  • Java 8, 11, 17, 21.
  • Python
  • .Net/C#

컴포넌트에 언어를 추가로 기여하려면 코드 인텔리전스 컴포넌트 프로젝트에서 머지 리퀘스트를 엽니다.

  1. 프로젝트의 .gitlab-ci.yml에 GitLab CI/CD 컴포넌트를 추가합니다. 예를 들어 다음 job은 Go용 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 job 추가#

프로젝트에서 코드 인텔리전스를 사용하려면 프로젝트의 .gitlab-ci.yml에 GitLab CI/CD job을 추가합니다.

  1. .gitlab-ci.yml 구성에 job을 추가합니다. 이 job은 SCIP 인덱스를 생성하고 GitLab에서 사용할 수 있도록 LSIF로 변환합니다.

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

  1. 인덱스를 생성하도록 .gitlab-ci.yml 구성에 job(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 구성에 따라 job을 수동으로 실행하거나 기존 파이프라인의 일부로 실행될 때까지 기다려야 할 수 있습니다.

Note

GitLab은 코드 생성 job이 만드는 아티팩트를 (ci_max_artifact_size_lsif) 아티팩트 애플리케이션 제한에 따라 200MB로 제한합니다. GitLab Self-Managed 인스턴스에서는 인스턴스 관리자가 이 값을 변경할 수 있습니다.

코드 인텔리전스 결과 보기#

job이 성공한 후 리포지터리를 탐색하여 코드 인텔리전스 정보를 확인합니다.

  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.

코드 인텔리전스

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

코드 인텔리전스는 대화형 개발 환경(IDE)에서 공통으로 제공하는 다음 기능을 추가합니다. 코드 인텔리전스는 GitLab에 내장되어 있으며, 사전 계산된 코드 인텔리전스 데이터를 위한 파일 형식인 LSIF(Language Server Index Format)로 동작합니다.

코드 인텔리전스는 대화형 개발 환경(IDE)에서 공통으로 제공하는 다음 기능을 추가합니다.

  • 타입 시그니처 및 심볼 문서.
  • 정의로 이동.

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

SCIP는 소스 코드를 인덱싱하는 도구의 차세대 형태입니다. 다음과 같은 기능을 구동하는 데 사용할 수 있습니다.

  • 정의로 이동
  • 참조 찾기

GitLab은 코드 인텔리전스를 위한 SCIP를 기본으로 지원하지 않습니다. 다만 SCIP CLI를 사용하여 SCIP 도구로 생성한 인덱스를 LSIF 호환 파일로 변환할 수 있습니다. SCIP 기본 지원에 대한 논의는 이슈 412981을 참고합니다.

향후 코드 인텔리전스 개선 진행 상황은 에픽 4212를 참고합니다.

GitLab은 코드 내비게이션도 제공합니다. 코드 내비게이션은 LSIF 파일 대신 GitLab Orbit이 코드에서 구축한 지식 그래프를 읽으므로 인덱서나 CI/CD job이 필요하지 않습니다.

코드 인텔리전스 구성#

사전 요구 사항:

사용하는 언어가 어떤 방식으로 가장 잘 지원되는지 확인하려면 Sourcegraph가 권장하는 인덱서를 검토합니다.

CI/CD 컴포넌트 사용#

히스토리
  • Python 지원이 GitLab 17.9에서 도입됨.
  • .Net/C# 지원이 GitLab 18.0에서 도입됨.

GitLab은 .gitlab-ci.yml 파일에서 코드 인텔리전스를 구성할 수 있도록 CI/CD 컴포넌트를 제공합니다. 이 컴포넌트는 다음 언어를 지원합니다.

  • Go 버전 1.21 이상.
  • TypeScript 또는 JavaScript.
  • Java 8, 11, 17, 21.
  • Python
  • .Net/C#

컴포넌트에 언어를 추가로 기여하려면 코드 인텔리전스 컴포넌트 프로젝트에서 머지 리퀘스트를 엽니다.

  1. 프로젝트의 .gitlab-ci.yml에 GitLab CI/CD 컴포넌트를 추가합니다. 예를 들어 다음 job은 Go용 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 job 추가#

프로젝트에서 코드 인텔리전스를 사용하려면 프로젝트의 .gitlab-ci.yml에 GitLab CI/CD job을 추가합니다.

  1. .gitlab-ci.yml 구성에 job을 추가합니다. 이 job은 SCIP 인덱스를 생성하고 GitLab에서 사용할 수 있도록 LSIF로 변환합니다.

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

  1. 인덱스를 생성하도록 .gitlab-ci.yml 구성에 job(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 구성에 따라 job을 수동으로 실행하거나 기존 파이프라인의 일부로 실행될 때까지 기다려야 할 수 있습니다.

Note

GitLab은 코드 생성 job이 만드는 아티팩트를 (ci_max_artifact_size_lsif) 아티팩트 애플리케이션 제한에 따라 200MB로 제한합니다. GitLab Self-Managed 인스턴스에서는 인스턴스 관리자가 이 값을 변경할 수 있습니다.

코드 인텔리전스 결과 보기#

job이 성공한 후 리포지터리를 탐색하여 코드 인텔리전스 정보를 확인합니다.

  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.