javascript - Extensie VSCode folosește direct intrare în mai mulți pași


Vreau să folosesc intrarea în mai mulți pași direct, de exemplu utilizatorul alege F1 - și începe pașii pentru a alege obiecte.

În prezent am găsit următorul exemplu și am eliminat quickOpen și inputul de bază

https://github.com/microsoft/vscode-extension-samples/blob/master/quickinput-sample/src/extension.ts

import { window, commands, ExtensionContext } from 'vscode';
import { multiStepInput } from './multiStepInput';

export function activate(context: ExtensionContext) {
    context.subscriptions.push(commands.registerCommand('samples.quickInput', async () => {
        const options: { [key: string]: (context: ExtensionContext) => Promise<void> } = {
            multiStepInput,
        };
        const quickPick = window.createQuickPick();
        quickPick.items = Object.keys(options).map(label => ({ label }));
        quickPick.onDidChangeSelection(selection => {
            if (selection[0]) {
                options[selection[0].label](context)
                    .catch(console.error);
            }
        });
        quickPick.onDidHide(() => quickPick.dispose());
        quickPick.show();
    }));
}

Totuși, când pornesc extensia, primesc prima intrare de pas multiStepInput de ales, vreau să o evit și să încep direct de la opțiunile pentru a alege grupul de resurse (din exemplu). Cum pot face asta? Nu reușesc să omit primul pas (dummy) atunci când utilizatorul ar trebui să aleagă următorul.

    showQuickPick,
    showInputBox,
    multiStepInput,
    quickOpen,

Deoarece vreau să folosesc direct în mod explicit multiStepInput și să nu cer să fie ales

https://github.com/microsoft/vscode-extension-samples/blob/master/quickinput-sample/src/multiStepInput.ts#L24

Nu vreau să încep de aici

Vreau să încep de aici când utilizatorul folosește F1

Răspuns #1

În prezent, primele opțiuni sunt [multiStepInput]

const options = { multiStepInput }

Dacă nu doriți să afișați acel pas, setați options ca opțiunile pe care le doriți cu adevărat de tip QuickPickItem)

Ceva de genul acesta:

commands.registerCommand('samples.quickInput', async () => {
  const options = ['vscode-data-function', 'vscode-appservice-microservices', 'vscode-appservice-monitor', 'vscode-appservice-preview', 'vscode-appservice-prod'].map(label => ({label}));
  const quickPick = window.createQuickPick();
  quickPick.items = options;
  quickPick.onDidChangeSelection(([{label}]) => {
    window.showInformationMessage(label);
    quickPick.hide();
  });
  quickPick.show();
})

Înregistrare ecran

Actualizare Dacă vrei doar să sari peste prima introducere rapidă și să începi multiStepInput imediat, poți șterge tot restul codului din handler-ul comenzii și să folosești doar acesta

context.subscriptions.push(commands.registerCommand('samples.quickInput', async () => {
  multiStepInput(context);
}));

Care este echivalent cu

options[selection[0].label](context)

Pentru că options[selection[0].label] este multiStepInput atunci când multiStepInput este ales.