2017-06-05 4 views
0

Wenn Sie Bazel verwenden, um ein Projekt zu erstellen, das .proto Dateien enthält, können wir beispielsweise go_binary und go_proto_library Regeln verwenden, um eine Binärdatei zu erstellen. Die generierte Binärdatei wird wie erwartet funktionieren, aber der aus den Dateien .proto generierte Code befindet sich nicht im Arbeitsverzeichnis.Bazel Build, Protobuf und Codevervollständigung

Als Ergebnis wird Code-Vervollständigung in Editoren und IDEs nicht funktionieren. Schlimmer noch, sie drucken oft Fehler bei ungültigen Importanweisungen.

Dies ist ein Beispiel, das Protokollpuffer verwendet, aber es gibt wahrscheinlich andere ähnliche Fälle, z. B. die Verwendung von Abhängigkeiten von Drittanbietern.

Wie wird das normalerweise gehandhabt?

Antwort

1

Ich bin einer der Ingenieure, die an den Go-Regeln für Bazel arbeiten. Leider habe ich momentan keine gute Antwort für Sie, aber dieses Problem ist auf unserem Radar und das Go-Team arbeitet an einer allgemeinen langfristigen Lösung. Ich habe bazelbuild/rules_go#512 auf unserem GitHub Repo abgelegt, um dieses Problem zu verfolgen, und ich werde diese Antwort aktualisieren, wenn wir eine bessere Lösung haben.

Das Problem ist Bazel speichert generierten Code und andere Artefakte in seinem eigenen internen Verzeichnis, die Editoren nicht bewusst sind. Wir entwerfen und erstellen einen neuen Abstraktionsmechanismus für Arbeitsbereiche, der es Tools (Editoren, IDEs, Tools wie Guru) ermöglicht, alle Quellen, generierten Dateien, Pakete, Importe und andere Metadaten in einem Repository zu verstehen, ohne direkt in Bazel integrieren zu müssen oder andere Build-Systeme.

Als temporäre Problemumgehung, versuchen Sie, die .pb.go-Dateien manuell mit Protokoll zu generieren. Sie können diese Dateien in Ihrem Repository prüfen, aber nicht in Ihre BUILD-Dateien aufnehmen. Dadurch sollten Editoren und IDEs auf die generierten Dateien aufmerksam gemacht werden, aber beim Kompilieren werden immer neue, aktuelle Versionen von ihnen erstellt.

Verwandte Themen