QuickDiff не использует панель управления источником, а применяется, когда в редакторе отображается любой файл с управлением источником.Поэтому вы не увидите никакого кода, соответствующего быстрой разнице, выполняющегося в результате выбора файлов в представлении управления исходным кодом, а скорее при активации другого файла в редакторе.Информация QuickDiff отображается в виде цветных полос на левой стороне исходного кода, указывающих, какой код изменился по сравнению с версией в системе контроля версий:
То же самое *Однако функцию 1008 *, используемую с QuickDiff, можно использовать для функций, упомянутых в вопросе (щелчок по файлу в представлении управления исходным кодом для отображения различий).Во-первых, вам нужно определить команду, на которую можно ссылаться, чтобы активировать это поведение в разделе package.json
contributes
в блоке commands
:
{
"command": "accurev.openDiffBasis",
"category": "AccuRev",
"title": "Open diff with basis",
"icon": {
"dark": "icons/dark/undo2.svg",
"light": "icons/light/undo2.svg"
}
},
Затем вам нужно зарегистрироватькоманда, часто выполняемая из extension.ts
с кодом, подобным следующему:
let diff = vscode.commands.registerCommand('accurev.openDiffBasis', async (file: vscode.Uri) => {
try {
let original = await repo.provideOriginalResource(file);
if (original !== null) {
let filename = vscode.workspace.asRelativePath(file);
vscode.commands.executeCommand('vscode.diff', original, file, `${repo.basisName}\\${filename} ↔ ${filename}`);
}
}
catch(err) {
getOutputChannel().appendLine(err);
}
});
Обратите внимание, что здесь используется provideOriginalResource, та же функция, которую QuickDiff неявно вызывает.Также обратите внимание, что вызов команды vscode.diff - это то, что фактически представляет средство просмотра diff, и может быть сделано в ответ на любое действие - это не просто неявная реакция.
Наконец, элементы, возвращаемые getResourceStates
, нуждаютсяреализовать интерфейс SourceControlResourceState, который позволяет привязать команду к каждому из них.Здесь команда diff может быть связана с выбором каждого элемента:
export class AccuRevFile implements vscode.SourceControlResourceState {
readonly resourceUri: vscode.Uri;
readonly command?: vscode.Command | undefined;
readonly decorations?: vscode.SourceControlResourceDecorations | undefined;
public readonly elementId: number;
constructor(uri: vscode.Uri, elementId: number, state: AccuRevState) {
this.resourceUri = uri;
this.decorations = state;
this.command = { title: "diff", command: "accurev.openDiffBasis", tooltip: "Diff against basis version", arguments: [uri]};
this.elementId = elementId;
}
}