扩展中的VSCode的命令回调

时间:2018-08-28 02:27:38

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

我们尝试执行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获得真正的回调?根据{{​​3}}(来自VSCode团队本身)的说法,这是可行的,但由于某些原因,它对我们不起作用。 是因为我们正在调用VSCode的内部方法吗?有人建议我们在这里可以做什么吗?

1 个答案:

答案 0 :(得分:0)

editor.action.organizeImports在executeCommand docs here中未作为选项列出,因此这可能是问题的根源。我不确定如何重构vscode.commands.registerTextEditorCommand参数,但是您可以尝试将函数转换为异步/等待模式:

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是否填充了对您有用的处理内容。