Обратный вызов команды VSCode в расширении - PullRequest
0 голосов
/ 28 августа 2018

Мы попытались выполнить команду Organize imports VSCode следующим образом: 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 1010 * VS организовал импорт. Другими словами, обратный вызов, который мы предоставили, не выполняется после Organize imports.

VSCode.

Мы также попробовали это предложение , но оно не работает.

Есть ли способ получить истинный обратный вызов из VSCode после того, как он выполнил команду? Согласно этот пример (от самой команды VSCode) это можно сделать, но по некоторым причинам он не работает для нас. Это потому, что мы вызываем внутренний метод VSCode? У кого-нибудь есть предложение, что мы можем сделать здесь?

1 Ответ

0 голосов
/ 29 августа 2018

editor.action.organizeImports не указан в качестве опции в файле executeCommand здесь , так что это может быть источником ваших проблем. Я не уверен, как реорганизовать параметры 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 чем-нибудь полезным для вас.

...