typescript - VSCode uzantısındaki komut geri çağırması
VSCode'un Organize imports komutunu şöyle çalıştırmayı denedik: vscode.commands.executeCommand('editor.action.organizeImports') ve komut başarıyla çalıştı: bir test dosyasında importların sıralandığını ve dosyanın kaydedilmediğini görüyoruz.
İthalatları daha fazla biçimlendiren/sıralayan/düzenleyen bir uzantı yazmak istiyoruz, bu yüzden kodumuzu executeCommand'in bir geri çağrısında şöyle yazmak istedik:
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);
}
Ancak, editor.document.getText() aslında belgelerin VS Code'un Importları düzenle işlemini yapmadan önceki durumunu döndürür. Başka bir deyişle, sağladığımız geri arama VSCode'un Importları düzenle işleminden sonra yürütülmez.
Biz de bu öneriyi denedik, ama işe yaramıyor.
VSCode bir komutu yürüttükten sonra gerçek bir geri çağrı almak için bir yol var mı? Bu örneğe göre (VSCode ekibinden alınan) bunun mümkün olduğu görülüyor, ama bir nedenden dolayı bizim için çalışmıyor. Acaba bunun nedeni VSCode'un dahili bir metodunu çağırmamız mı? Burada ne yapabileceğimiz konusunda bir önerisi olan var mı?
Cevap #1
editor.action.organizeImports, executeCommand belgelerinde bir seçenek olarak listelenmemiş, bu yüzden sorunlarınızın kaynağı bu olabilir. vscode.commands.registerTextEditorCommand parametrelerini nasıl yeniden düzenleyeceğinizden emin değilim, ama fonksiyonunuzu async/await bir fonksiyona dönüştürmeyi deneyebilirsiniz:
export async function activate(context: vscode.ExtensionContext) {
...
await vscode.commands.executeCommand('editor.action.organizeImports');
const content: string = editor.document.getText();
...
}
Bu, vscode.commands.executeCommand(vscode.openFolder, args) kullandığımda başarılı bir şekilde çalışıyor. Daha sonra, const var=await vscode.commands.executeCommand('editor.action.organizeImports') ile deney yapabilir ve var'ın işlemek için sizin için faydalı herhangi bir şeyle doldurulup doldurulmadığını görebilirsiniz.
