Actualizaciones automáticas del catálogo e integración del LSP

La plataforma de vehículos definidos por software (SDV) contiene numerosos catálogos de VSIDL en toda la base de código. El archivo CATALOG_UPDATE proporciona una configuración centralizada para cada catálogo, lo que permite tanto las actualizaciones automáticas como la integración del IDE.

Función del archivo CATALOG_UPDATE

El archivo CATALOG_UPDATE tiene dos propósitos principales:

  1. Actualizaciones automatizadas: El archivo permite que la herramienta regenerator encuentre y vuelva a compilar todos los catálogos del sistema cuando cambia el compilador o las dependencias.
  2. Compatibilidad con el Protocolo de servidor de lenguaje (LSP): El servidor de lenguaje de VSIDL usa este archivo para descubrir la raíz del catálogo y resolver las dependencias. Esto habilita funciones como "Ir a la definición", autocompletado y validación en tiempo real para los tipos definidos en otros catálogos.

Configura un catálogo

Para habilitar las actualizaciones automáticas y la compatibilidad con LSP para un catálogo de VSIDL, crea un archivo CATALOG_UPDATE en el directorio raíz del catálogo. Este archivo es un archivo protobuf de texto.

Campos de configuración del catálogo

  • output_path (cadena, opcional): Es la ruta de acceso relativa desde la raíz del catálogo hasta el directorio en el que se debe colocar el código de middleware generado.
  • dependency_catalog_paths (cadena repetida): Es una lista de rutas relativas a otros directorios del catálogo. El servidor del LSP usa estas rutas para resolver tipos externos.
  • vsidlc_gen_args (cadena, opcional): Son los argumentos que se pasan a vsidlc. El servidor LSP los inspecciona para aplicar las reglas de validación correctas (por ejemplo, "--apex").
  • prebuilts_output_path (cadena, opcional): Es la ruta de acceso para los módulos precompilados de configuración del tiempo de ejecución generados.
  • prebuilts_filegroup (cadena, opcional): Es el nombre de filegroup de Soong para los elementos precompilados.

Configuración de ejemplo

# 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"

Por qué son necesarias las actualizaciones automáticas

Mantener manualmente el código generado para cada catálogo es problemático por varios motivos:

  1. Actualizaciones del compilador: Cuando el compilador se actualiza con correcciones de errores o funciones nuevas, se deben actualizar todos los archivos y el código generados que no estén cubiertos por un genrule en un archivo Android.bp para mantener la coherencia.
  2. Administración de dependencias: Los cambios en un catálogo base a menudo requieren que se regeneren los catálogos descendentes.
  3. Precisión: Las actualizaciones automáticas reducen el riesgo de errores humanos cuando se especifican rutas y dependencias.

Ejecuta la herramienta de regeneración

La herramienta regenerator recorre el árbol de directorios a partir de la raíz del SDV y busca archivos llamados exactamente CATALOG_UPDATE.

Para actualizar todos los catálogos configurados, haz lo siguiente:

  1. Compila la herramienta:

    m regenerator
    
  2. Ejecuta la herramienta:

    regenerator
    

    De manera opcional, puedes ejecutarlo de forma recursiva para un directorio específico: console regenerator --root /path/to/directory

La herramienta actualiza los archivos generados y realiza una compilación completa (m droid) para verificar que los cambios sean compatibles con el resto del sistema.