【问题标题】:VSCode extension API: simple local Quick DiffVSCode 扩展 API:简单的本地 Quick Diff
【发布时间】:2022-10-21 01:11:49
【问题描述】:

试图了解如何在我的语言扩展中实现简单的源代码控制管理。 与某些特殊文件相比,我需要显示单个文件的快速差异(我的扩展名不适用于文件夹)。
假设我有这个TextDocumentContentProviderQuickDiffProvider

class MyLangDocumentContentProvider implements vscode.TextDocumentContentProvider
{
    provideTextDocumentContent(uri: vscode.Uri)
    {
        return getFileText(uri); // returns text of provided file uri
    }
}

class MyLangRepository implements vscode.QuickDiffProvider
{
    provideOriginalResource(uri: vscode.Uri)
    {
        return getOriginalFileUri(uri); // returns uri of the special file to compare with
    }
}

然后在activate 扩展方法中初始化它们:

const docProvider = new MyLangDocumentContentProvider();
const gitSCM = vscode.scm.createSourceControl('git', 'Git');
gitSCM.quickDiffProvider = new MyLangRepository();
const workingTree = gitSCM.createResourceGroup('workingTree', 'Changes');
workingTree.resourceStates = [
    { resourceUri: vscode.window.activeTextEditor.document.uri }
];

然后我需要使用一些自定义 uri 方案调用registerTextDocumentContentProvider。那么为什么我需要自定义 uri 方案?我还应该做些什么来跟踪当前文件相对于特殊文件的更改?

我在看vscode-extension-samples/source-control-sample,但它看起来比我的情况更复杂。

感谢您的任何建议!

【问题讨论】:

    标签: version-control vscode-extensions


    【解决方案1】:

    尽管我的问题相当愚蠢,但让我在这里保存一些说明,我是如何做到的。

    1. 要使QuickDif 工作,您既不需要ResourceGroups 也不需要TextDocumentContentProvider,这是一个单独的功能。
    2. 如果您在构造函数中传递一些根目录,SourceControl(以及它的 quickDiffProvider)将起作用(没有我没有运气,我不需要它来实现我的目的)。

    【讨论】:

      猜你喜欢
      • 2023-02-14
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多