#typescript #visual-studio-code #vscode-extensions
#машинописный текст #visual-studio-код #vscode-расширения
Вопрос:
Я впервые пытаюсь разработать расширение VS-кода, цель которого-запустить editor.action.triggerSuggest
его во второй раз, если текущий список предложений пуст. Это может быть связано с тем, что сервер фонового языка еще не завершил анализ документа. Грубо говоря, это то, что я хочу сделать, в псевдокоде:
trigger suggestions; if ( suggestions list has 0 elements ) { trigger suggestions; }
Однако я понятия не имею, как это реализовать suggestions list has 0 elements
. Документация по API расширения не помогла выяснить, сколько кандидатов в настоящее время находится в списке предложений.
Мое нынешнее решение было менее чем удовлетворительным. Я просто запускаю предложения во второй раз после короткого периода ожидания, но этот код плох, потому что он снова запускает предложения, даже если список предложений уже заполнен:
import * as vscode from 'vscode'; // Wait for ms milliseconds function delay(ms: number) { if (ms gt; 0) { return new Promise((resolve) =gt; setTimeout(resolve, ms)); } } async function multiSuggestionsCommand(interval: number = 300) { await vscode.commands.executeCommand('editor.action.triggerSuggest'); await delay(interval); await vscode.commands.executeCommand('editor.action.triggerSuggest'); } // Runs at extension activation export function activate(context: vscode.ExtensionContext) { console.log('Activated the SuggestionsMultiTrigger extension'); let triggerSuggestionCmd = vscode.commands.registerCommand( 'suggestions-multi-trigger.toggleSuggestions', multiSuggestionsCommand); context.subscriptions.push(triggerSuggestionCmd); } // Runs at extension deactivation export function deactivate() {}
Комментарии:
1. обновление предложений выполняется асинхронно, вы никогда не узнаете, останется ли список пустым, возможно, никогда не будет предложения о том, как часто вы запрашиваете список предложений