自動更新目錄和整合 LSP

軟體定義車輛 (SDV) 平台在程式碼集包含許多 VSIDL 目錄。CATALOG_UPDATE 檔案為每個目錄提供集中式設定,可自動更新及整合 IDE。

CATALOG_UPDATE 檔案的用途

CATALOG_UPDATE 檔案有兩個主要用途:

  1. 自動更新:如果編譯器或依附元件有所變更,regenerator 工具可透過這個檔案找出並重新編譯系統中的所有目錄。
  2. 支援語言伺服器通訊協定 (LSP):VSIDL 語言伺服器會使用這個檔案探索目錄根目錄,並解決依附元件。這項功能可啟用「前往定義」等功能,並為其他目錄中定義的型別提供自動完成和即時驗證功能。

設定目錄

如要為 VSIDL 目錄啟用自動更新和 LSP 支援,請在目錄的根目錄中建立 CATALOG_UPDATE 檔案。這個檔案是文字 protobuf 檔案。

目錄設定欄位

  • output_path (字串,選用):從目錄根目錄到應放置所產生中介軟體程式碼的目錄,相對路徑。
  • dependency_catalog_paths (重複字串):其他目錄目錄的相對路徑清單。LSP 伺服器會使用這些路徑來解析外部型別。
  • vsidlc_gen_args (字串,選用):傳遞至 vsidlc 的引數。LSP 伺服器會檢查這些項目,套用正確的驗證規則 (例如 "--apex")。
  • prebuilts_output_path (字串,選用):產生的執行階段設定預先建構路徑。
  • prebuilts_filegroup (字串,選用):預先建構的 Soong filegroup 名稱。

範例設定

# 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),確認變更與系統其餘部分相容。