Я создаю анализатор текста, который в конечном итоге скомпилирует кучу текстовых файлов в HTML. Я хочу предоставить хороший опыт разработки, поэтому я создаю расширение vscode.
Я хочу предоставить создать новый проект опыт, где:
- Разработчики open vscode.
- Они запускают команду в моем расширении:
New project
. - vscode показывает диалоговое окно с запросом о назначении файловой системы (где разместить новый проект) и имени новой папки. .
- Новая папка создается по указанному пути.
- 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
создается впечатление, что событие вызывается несколько раз. Кроме того, код в зарегистрированном обработчике кажется жестоко прерванным. Так что это не выглядит приемлемым вариантом.