Я пытаюсь добавить функцию в существующее расширение VSCode. В существующем коде есть класс MyConfigPath, содержащий член класса FlashControl, созданный в конструкторе MyConfigPath. Когда пользователь выбирает команду «Flash» в контекстном меню, вызывается метод flash() соответствующего объекта MyConfigPath. Этот метод начинается с:
Код: Выделить всё
public async flash(fw:string|undefined=undefined) {
let firmware:string
if (fw === undefined) {
const firmwares = this.getFirmwareSuggestions()
const _firmware:unknown = await this.selectFirmware(firmwares)
if (typeof _firmware !== "string") {
return
}
firmware = _firmware
} else {
firmware = fw
}
Вот метод selectFirmware() FlashControl:
Код: Выделить всё
private async selectFirmware(selections:Array) {
return new Promise((resolve) => {
const quickPick = vscode.window.createQuickPick();
quickPick.items = selections.map(choice => ({ label: choice }));
quickPick.title = 'Type or select FW. Acceptes wildcards (38.1.*), exact version and path to nvs:'
quickPick.onDidChangeValue(() => {
// INJECT user values into proposed values
if (!selections.includes(quickPick.value)) {
quickPick.items = [quickPick.value, ...selections].map(label => ({ label }))
}
})
quickPick.onDidAccept(() => {
const selection = quickPick.activeItems[0]
resolve(selection.label)
quickPick.hide()
})
quickPick.show();
})
// var firmware = await vscode.window.showQuickPick({prompt: "FW to flash to or path to nvs"});
}
Код: Выделить всё
public async flash()
{
let flasher : TestbedFlashControl = new TestbedFlashControl(this.fullPath);
log.info('Testbed firmware flash requested', true);
await flasher.flash();
}
Код: Выделить всё
public async flash()
{
log.info(`Testbed::FlashControl(): flash from firmware requested.`)
let firmware: string;
let fwChoices = this.getFirmwareSuggestions();
const _firmware:unknown = await this.selectFirmware(fwChoices);
if (typeof _firmware !== "string") {
return
}
firmware = _firmware
}
private async selectFirmware(selections:Array)
{
return new Promise((resolve) =>
{
const quickPick = vscode.window.createQuickPick();
quickPick.items = selections.map(choice => ({ label: choice }));
quickPick.title = 'Type or select FW. Acceptes wildcards (38.1.*), exact version and path to nvs:'
quickPick.onDidChangeValue(() => {
// INJECT user values into proposed values
if (!selections.includes(quickPick.value)) {
quickPick.items = [quickPick.value, ...selections].map(label => ({ label }))
}
})
quickPick.onDidAccept(() => {
const selection = quickPick.activeItems[0]
resolve(selection.label)
quickPick.hide()
})
quickPick.show();
})
// var firmware = await vscode.window.showQuickPick({prompt: "FW to flash to or path to nvs"});
}
Это мой первый опыт работы с JavaScript и TypeScript.
Подробнее здесь: https://stackoverflow.com/questions/798 ... -selection
Мобильная версия