Автоматическое обновление каталога и интеграция с LSP

Платформа SDV содержит множество каталогов VSIDL в базе кода. Файл CATALOG_UPDATE обеспечивает централизованную конфигурацию для каждого каталога, позволяя выполнять автоматические обновления и интеграцию с IDE.

Роль файла CATALOG_UPDATE

Файл CATALOG_UPDATE служит двум основным целям:

  1. Автоматические обновления. Файл позволяет инструменту regenerator находить и перекомпилировать все каталоги в системе при изменении компилятора или зависимостей.
  2. Поддержка Language Server Protocol (LSP). Языковой сервер VSIDL использует этот файл, чтобы найти корневой каталог и разрешить зависимости. Это позволяет использовать такие функции, как "Перейти к определению", автозаполнение и проверка в реальном времени для типов, определенных в других каталогах.

Как настроить каталог

Чтобы включить автоматические обновления и поддержку LSP для каталога VSIDL, создайте файл CATALOG_UPDATE в корневом каталоге. Это файл text protobuf.

Поля конфигурации каталога

  • output_path (строка, необязательно) – относительный путь от корня каталога к каталогу, в котором должен быть размещен сгенерированный код промежуточного ПО.
  • dependency_catalog_paths (повторяющаяся строка) – список относительных путей к другим каталогам. Сервер LSP использует эти пути для разрешения внешних типов.
  • vsidlc_gen_args (строка, необязательно) – аргументы, передаваемые в vsidlc. Сервер LSP проверяет их, чтобы применить правильные правила проверки (например, "--apex").
  • prebuilts_output_path (string, необязательно) – путь к сгенерированным предварительным сборкам конфигурации среды выполнения.
  • prebuilts_filegroup (строка, необязательно): название filegroup Soong для предварительно собранных модулей.

Пример конфигурации

# proto-file: //system/software_defined_vehicle/tools/regenerator/proto/catalog.proto
# proto-message: Catalog

output_path: ".."
dependency_catalog_paths: "../../../../../automotive_services/diagnostics/vsidl/v1"
vsidlc_gen_args: "--apex"

Зачем нужны автоматические обновления

Поддерживать сгенерированный код для каждого каталога вручную проблематично по нескольким причинам:

  1. Обновления компилятора. Когда в компиляторе исправляются ошибки или появляются новые функции, весь сгенерированный код и файлы, не охваченные genrule в файле Android.bp, должны быть обновлены для обеспечения согласованности.
  2. Управление зависимостями. Изменения в базовом каталоге часто требуют повторного создания дочерних каталогов.
  3. Точность. Автоматические обновления снижают риск человеческой ошибки при указании путей и зависимостей.

Как запустить инструмент регенерации

Инструмент regenerator проходит по дереву каталогов, начиная с корневого каталога SDV, и ищет файлы с точным названием CATALOG_UPDATE.

Чтобы обновить все настроенные каталоги, выполните следующие действия:

  1. Создайте инструмент:

    m regenerator
    
  2. Запустите инструмент:

    regenerator
    

    При необходимости запустите ее рекурсивно для определенного каталога: console regenerator --root /path/to/directory

Инструмент обновляет сгенерированные файлы и выполняет полную сборку (m droid), чтобы проверить, совместимы ли изменения с остальной частью системы.