expressionProviders
contributes.expressionProviders регистрирует провайдер языка выражений. Этот провайдер определяет, как интерпретируются выражения вроде {{Fetch Orders.summary.count}}, какие подсказки предлагать, пока пользователь вводит текст, и какие проблемы должны вызывать предупреждения. Редактор сам отрисовывает интерфейс — поле ввода, выпадающий список подсказок и диагностику — а провайдер лишь возвращает данные, которые нужны редактору.
{
"contributes": {
"expressionProviders": [
{
"id": "example",
"displayName": "{{…}}",
"description": "Ссылки на соседние nodes, ключи их выходов и секреты проекта",
"notations": ["workflow"]
}
]
}
}
| Поле | Обязательно | Что значит |
| --- | --- | --- |
| id | да | Поле содержит идентификатор, уникальный в пределах расширения. Тот же id передаётся в sdk.expressions.registerProvider. |
| displayName | да | Поле отображается там, где нужно назвать провайдер. |
| description | | Поле содержит строку о том, что покрывает язык. |
| notations | | Поле содержит нотации, которые обслуживает провайдер. Опустите поле для того, чтобы обслуживать все нотации.|
Манифест лишь объявляет, что провайдер существует. Платформа узнаёт о нём, как только расширение регистрируется, — это происходит до активации. Фактическая реализация провайдера прикрепляется при активации расширения:
export async function activate(context: ExtensionContext) {
context.subscriptions.push(
sdk.expressions.registerProvider('example', { suggest, diagnose, resolveRef }),
)
}
Пока реализация не прикреплена, поля просто работают как обычные литералы — никаких подсказок, никакой диагностики, при этом ничего не ломается.
Полный контракт suggest, diagnose и resolveRef с формой запроса, формой кандидата и таймаутом, который применяет платформа см. в справочнике SDK.