quickdiff不涉及源代码控制面板,而是在编辑器中显示任何源代码控制文件时应用。因此,在源代码管理视图中选择文件时,不会看到任何与diff相关的快速代码执行,而是在编辑器中激活其他文件时执行。QuickDiff信息显示为源代码左侧的彩色条,指示与源代码管理中的版本相比,哪些代码已更改:
相同的
provideOriginalResource
但是,使用QuasDIFF函数可以用于问题中提到的功能(单击源代码管理视图中的文件以显示差异)。首先,您需要定义一个可以引用的命令来激活该行为。
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接口,该接口允许将命令链接到每个命令。这是一个差异指令可以链接到每个项目的选择:
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;
}
}