【问题标题】:VS Code API - remote callsVS Code API - 远程调用
【发布时间】:2019-11-23 13:03:56
【问题描述】:

我目前正在结合代码生成项目研究 VS 代码扩展。虽然我知道 VS 代码 API 相当成熟,允许在扩展内操作文档,但我不知道如何在扩展之外执行此操作。

有没有办法在 vscode 之外远程执行 vs code JavaScript API,这反过来又会驱动 GUI。

我正在尝试弄清楚我是否可以执行以下任何操作:

  • 通过code cli 执行 API JavaScript 代码
  • 在扩展中运行 Web 服务器/套接字以监听来自外部系统的事件并相应地执行 JS API
  • 如果不是 socket/rest 服务器,我应该监听文件系统的变化并做出相应的反应吗?

基本上vs code的遥控驱动有哪些选项?

【问题讨论】:

    标签: visual-studio-code vscode-extensions vscode-remote


    【解决方案1】:

    我正在使用的编辑器扩展也遇到了类似的问题。

    我强烈建议在 VSCode API 之外监听文件更改。这样,您的大部分代码都不会绑定到特定的编辑器。我在使用名为 createFileSystemWatcher 的 VSCode API 时也遇到了更多困难,因为它没有捕获所有更改。

    激活后,使用文件观察程序库运行子进程。我建议使用 chokidar - 它与 VSCode 内部使用的库相同,但可以更广泛地访问 API。

    // get your workspace uri & root uri 
    const workspaceRoots = vscode.workspace.workspaceFolders
    if (!workspaceRoots || !workspaceRoots.length) {
      throw new Error('No workspace root path')
    }
    const workspaceRoot: vscode.WorkspaceFolder = workspaceRoots[0]
    const rootUri = vscode.workspace.getWorkspaceFolder(workspaceUri);
    
    // the action you want to trigger
    const command = vscode.commands.registerCommand('YOUR_CUSTOM_COMMAND', yourCustomFunction)
    
    // file watcher
    const fsWatcher = chokidar.watch('watcher_name', {
      cwd: rootUri.uri.path,
      interval: 1000,
    })
    
    // listen to any add/update/delete fs events
    fsWatcher.on('change', (path, event) => {
      vscode.commands.executeCommand('YOUR_CUSTOM_COMMAND')
    })
    

    在任何文件更改时,它都可以触发您选择的操作。

    【讨论】:

      【解决方案2】:

      如果 VS Code 扩展可以实现您所追求的一切,那么最简单的方法是让扩展由外部驱动。 VS Code 扩展在 node.js 环境中运行,因此它们可以start a http server、listen on a named pipe 或使用几乎任何其他机制与外界通信。

      您还可以查看 VS Code 对测试扩展的支持,因为测试也只使用标准 VS Code 扩展 API:https://code.visualstudio.com/api/working-with-extensions/testing-extension

      对于VS Code本身的开发,有一些automation scripts模拟用户动作。如果你真的需要,我相信你可以将这些脚本应用到你的用例中,但是我不能说它会做多少工作。如果 UI 发生变化,这些脚本也会中断。如果可能的话最好走扩展路线

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-15
        • 2017-07-20
        • 2021-03-17
        • 1970-01-01
        • 2021-01-25
        • 2021-01-10
        • 2021-11-17
        • 1970-01-01
        相关资源
        最近更新 更多