Создать расширение vscode для (повторного) открытия редактора в новой папке - PullRequest
0 голосов
/ 15 апреля 2020

Я создаю анализатор текста, который в конечном итоге скомпилирует кучу текстовых файлов в HTML. Я хочу предоставить хороший опыт разработки, поэтому я создаю расширение vscode.

Я хочу предоставить создать новый проект опыт, где:

  1. Разработчики open vscode.
  2. Они запускают команду в моем расширении: New project.
  3. vscode показывает диалоговое окно с запросом о назначении файловой системы (где разместить новый проект) и имени новой папки. .
  4. Новая папка создается по указанному пути.
  5. vscode открывается в этой папке (как новое рабочее пространство).

Я понимаю, что это должно происходить внутри функции activate:

function activate(context) {
    context.subscriptions.push(
        vscode.commands.registerCommand("new", () => {
            // Ask for path and folder name
            // Create folder
            // Reopen VSCode in that folder!
        }),
    );
}

Я могу справиться с пунктами 3 и 4, но как мне достичь пункта 5? Какой API предоставляет vscode для повторного открытия редактора в определенном c месте в качестве рабочего пространства?


Попытки

Я пытался сделать это с помощью функции: updateWorkspaceFolders :

function activate(context) {
    context.subscriptions.push(
        vscode.commands.registerCommand("new", () => {
            // Other stuff...
            // Reopen VSCode in that folder!
            const wsfolders = vscode.workspace.workspaceFolders;
            const deleteCount = !wsfolders ? 0 : wsfolders.length;
            vscode.workspace.updateWorkspaceFolders(0, deleteCount,
              { uri: vscode.Uri.file("path/to/new/folder"), name: "New workspace" });
        }),
    );
}

Однако это выглядит странно при попытке выполнить какое-либо действие после открытия рабочей области. При использовании onDidChangeWorkspaceFolders создается впечатление, что событие вызывается несколько раз. Кроме того, код в зарегистрированном обработчике кажется жестоко прерванным. Так что это не выглядит приемлемым вариантом.

...