【问题标题】:VSCode's command callback in an extensionVSCode 在扩展中的命令回调
【发布时间】:2019-02-02 13:52:07
【问题描述】:

我们尝试像这样执行 VSCode 的 Organize imports 命令:vscode.commands.executeCommand('editor.action.organizeImports') 并成功执行:在测试文件中,我们看到已订购导入,但文件未保存。

我们想编写一个扩展来进一步格式化/排序/排序导入,所以我们想在executeCommand 的回调中编写代码,如下所示:

export function activate(context: vscode.ExtensionContext) {
  const sortDisposable = vscode.commands.registerTextEditorCommand(SORT_EXTENSION_ID, (editor: vscode.TextEditor) => {
    // execute VS Code's Organize imports command
    return vscode.commands
      .executeCommand('editor.action.organizeImports')
      .then(_ => {
        const content: string = editor.document.getText();
        console.log(`contet`, content)
      }, _ => console.log(`failure`));
  });

  context.subscriptions.push(sortDisposable);
}

然而,editor.document.getText() 实际上是在 VS Code 的 Organize imports 组织导入之前返回文档的状态。 也就是说,我们提供的回调并没有在 VSCode 的Organize imports 之后执行。

我们也尝试过this suggestion,但还是不行。

在执行命令后,有没有办法从 VSCode 获得真正的回调?根据this sample(来自 VSCode 团队本身)的说法,这是可以做到的,但由于某种原因,它对我们不起作用。 是因为我们调用了 VSCode 的内部方法吗?有人有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    editor.action.organizeImports 未在 executeCommand 文档here 中列为选项,因此这可能是您的问题的根源。我不确定如何重构 vscode.commands.registerTextEditorCommand 参数,但您可以尝试将您的函数转换为 async/await 函数:

    export async function activate(context: vscode.ExtensionContext) {
      ...
        await vscode.commands.executeCommand('editor.action.organizeImports');
        const content: string = editor.document.getText();
      ...
    }
    

    当我使用vscode.commands.executeCommand(vscode.openFolder, args) 时,这可以成功。然后,您可以尝试使用const var = await vscode.commands.executeCommand('editor.action.organizeImports') 来查看var 是否填充了对您处理有用的任何内容。

    【讨论】:

    • 不幸的是,它不起作用。甚至没有调用 VSCode 的命令。
    猜你喜欢
    • 2019-06-21
    • 2018-09-07
    • 2019-08-28
    • 1970-01-01
    • 2016-02-20
    • 2017-05-24
    • 2019-07-09
    • 2019-09-20
    • 2019-11-13
    相关资源
    最近更新 更多