我们尝试执行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的内部方法吗?有人建议我们在这里可以做什么吗?
答案 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
是否填充了对您有用的处理内容。