vscode 扩展中的可编辑虚拟文档

vscode Editable Virtual Documents in Extensions

我正在尝试使用 vscode 编写一个与我的后端服务交互的扩展。 我遇到的问题是我要编辑的“文档”实际上是嵌套的 JSON 文档。例如,我正在管理的顶级文档看起来像这样:

{
 'filename': 'My JSON info.exp',
 'filecontent': '{"this": "that"}'
}

我想在 vscode 中打开和编辑这些文件。 使用虚拟文档,我可以从自定义树中打开文档,并在以文件名命名的文档中显示文件内容。在我尝试编辑文档内容之前一直运行良好。

我想为文件内容提供一个编辑器,然后使用我的 API.

处理诸如保存自己之类的事情

我查看了 FileSystem Provider,但它看起来不像我正在寻找的东西,因为 uris 必须实际存在...我认为?

有什么提示或建议吗?

我正在尝试做与 Joplin 类似的事情 - 通过 REST 打开、编辑和保存笔记 API。

我不像你那么了解,但我通过扫描文档了解到虚拟文档是只读的。因此,我将我的内容放入 TextDocument 中以便对其进行编辑;我非常好奇是否有一种方法可以覆盖文档的 onSave() 来完成我们都在做的事情。

下面是我打开文本文档的操作;如果您能分享任何关于您的进展(或更好的代码)的见解,那就太好了。

  async openNote(item: Omit<FolderOrNote, 'item'> & { item: JoplinListNote }) {
    console.log('openNote: ', item.id, await 
      noteApi.get(item.id, [
        'id',
        'parent_id',
        'title',
        'is_todo',
        'todo_completed',
        'body'
      ]).then (
          note => {
            vscode.workspace.openTextDocument( {
              content: note.body,
              language: 'markdown'
            } ).then(
                doc => vscode.window.showTextDocument( doc )
            );
          }
        )
      )
  }

编辑:

进一步挖掘,看起来可能需要 CustomEditor。 CustomEditor 需要扩展来实现诸如加载和保存到模型中之类的事情,因为 VS Code 不知道如何处理原始数据。还有一个 CustomTextEditor,但它似乎绑定到本地文件系统。

这里有一段 YouTube 视频详细介绍了它: https://youtu.be/Dekn2MHy9Os?t=1147

示例代码如下: https://github.com/microsoft/vscode-extension-samples/tree/main/custom-editor-sample