Сайт

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.