InfoGrab DocsInfoGrab Docs

코드 인텔리전스 개발 가이드라인

GitLab의 내장 코드 인텔리전스가 LSIF를 기반으로 동작하는 방식과 아티팩트 업로드 흐름을 설명합니다.

이 문서는 코드 인텔리전스 의 설계를 설명합니다. GitLab에 내장된 코드 인텔리전스는 LSIF 를 기반으로 동작하며, CI job에서 프로젝트의 LSIF 문서를 생성하고, 데이터를 처리한 뒤 CI 아티팩트로 업로드하여 프로젝트 파일에 해당 정보를 표시하는 방식으로 구현됩니다. 다음은 LSIF 아티팩트 업로드에 대한 시퀀스 다이어그램입니다: %%{init: { "fontFamily": "GitLab Sans" }}%% sequenceDiagram accTitle: Sequence diagram for LSIF artifact uploads accDescr: The process of how Runner, Workhorse, Rails, and object storage work together to upload an artifact. participant Runner participant Workhorse participant Rails participant Object Storage Runner->>+Workhorse: POST /v4/jobs/:id/artifacts Workhorse->>+Rails: POST /:id/artifacts/authorize Rails-->>-Workhorse: Respond with ProcessLsif header Note right of Workhorse: Process LSIF file Workhorse->>+Object Storage: Put file Object Storage-->>-Workhorse: request results Workhorse->>+Rails: POST /:id/artifacts Rails-->>-Workhorse: request results Workhorse-->>-Runner: request results CI/CD job은 프로젝트 언어에 맞는 인덱서 를 사용하여 LSIF 형식의 문서(보통 dump.lsif )를 생성합니다. 이 형식은 메서드 또는 함수와 해당 정의(definition) 또는 참조(reference) 간의 상호 작용을 설명합니다 . 해당 문서는 LSIF 리포트 아티팩트로 저장되도록 표시됩니다. 아티팩트 저장 요청을 수신한 후, Workhorse는 GitLab Rails에 업로드 인가를 요청합니다. GitLab Rails는 아티팩트가 업로드될 수 있는지 유효성을 검사하고, LSIF 아티팩트를 처리할 수 있는 경우 ProcessLsif: true 헤더를 전송합니다. Workhorse는 LSIF 문서를 한 줄씩 읽어 프로젝트의 각 파일에 대한 코드 인텔리전스 데이터를 생성합니다. 출력 결과는 프로젝트 구조를 모방한 JSON 파일들의 압축(zip) 디렉터리입니다: 프로젝트: app controllers application_controller.rb models application.rb 생성된 데이터: app controllers application_controller.rb.json models application.rb.json 압축 디렉터리는 ZIP