Visual Studio Code에서 GitLens의 끌어오기 요청 기능을 확장한 방법

GitLens Visual Studio Code용 놀라운 git-toolbelt 확장 기능은 최근 다른 VS Code 확장 기능을 사용자 인터페이스에 연결하는 기능을 추가했습니다.



특히 풀 리퀘스트를 생성하고 볼 수 있는 기능에 대한 추가 접점을 추가했습니다. 오픈 소스 VS Code 확장 프로그램( CodeStream )의 개발자로서 이것은 사용자가 풀 요청을 만들고 보는 방법과 관련하여 추가 선택권을 사용자에게 제공하는 좋은 방법인 것 같습니다.



다음은 기술적인 부분입니다!

CodeStream에서는 TypeScript를 사용하므로 GitLens API용 정의 파일이 필요합니다. @types/gitlens.d.ts에 저장했습니다.

import { Disposable } from "vscode";

export { Disposable } from "vscode";

export interface CreatePullRequestActionContext {
    readonly type: "createPullRequest";
    readonly branch: {
        readonly name: string;
        readonly remote?: {
            readonly name: string;
            readonly provider?: string;
            readonly url?: string;
        };
        readonly repoPath: string;
    };
}

export interface OpenPullRequestActionContext {
    readonly type: "openPullRequest";
    readonly pullRequest: {
        readonly id: string;
        readonly provider: string;
        readonly repoPath: string;
        readonly url: string;
    };
}

export type ActionContext = CreatePullRequestActionContext | OpenPullRequestActionContext;
export type Action<T extends ActionContext> = T["type"];

export interface ActionRunner {
    readonly label: string;

    run(context: ActionContext): void | Promise<void>;
}

export interface GitLensApi {
    registerActionRunner<T extends ActionContext>(
        action: Action<T>,
        runner: ActionRunner
    ): Disposable;
}


확장 프로그램activatefunction 내에서 이 통합을 생성할 수 있습니다. 아래에 우리가 마지막으로 수행한 것의 단순화된 버전을 추가했습니다. 주요 아이디어는 안정적인 버전의 GitLens 또는 내부자(일명 야간 버전)를 찾고 GitLens apiregisterActionProvider 메서드를 사용하여 "openPullRequest"및 "createPullRequest"연결을 수신하는 것입니다.

const gitLens = extensions.getExtension<Promise<GitLensApi>>("eamodio.gitlens") ||
extensions.getExtension<Promise<GitLensApi>>("eamodio.gitlens-insiders");
if (gitlens && gitlens.isActive) {
 const api: GitLensApi = await gitlens.exports;
 api.registerActionRunner("openPullRequest", {
  label: "CodeStream",
  run: function(context: OpenPullRequestActionContext) {
   console.log(context, "it worked!")
  }
 });
 api.registerActionRunner("createPullRequest", {
  label: "CodeStream",
  run: function(context: CreatePullRequestActionContext) {
   console.log(context, "it worked")
  }
 }); 
}


등록을 시도하기 전에 GitLens가 실제로 활성화되었는지 확인하고 싶었기 때문에 구현이 조금 더 복잡했습니다. 다른 확장 프로그램이 언제 활성화되는지 알 수 있는 좋은 방법이 없으므로 폴링 메커니즘을 사용했습니다. 코드의 주석에 언급된 바와 같이 VS Code 팀에 이 문제를 해결하기 위한 열린 문제가 있습니다.

당사의 완전한 솔루션은 GitHub의 CodeStream repo 또는 CodeStream 자체에서 찾을 수 있습니다.

CodeStream의 다음 버전에서 이 기능을 찾아보십시오!

좋은 웹페이지 즐겨찾기