2017-06-05 264 views
0

當使用Bazel來構建包含.proto文件的項目時,我們可以使用例如go_binarygo_proto_library規則來創建二進制文件。生成的二進制文件將按預期工作,但從.proto文件生成的代碼不在工作目錄中。Bazel構建,protobuf和代碼完成

因此,編輯器和IDE中的代碼完成將不起作用。更糟糕的是,他們經常會打印有關無效導入語句的錯誤。

這是一個使用協議緩衝區的示例,但可能還有其他類似的情況,例如使用第三方依賴關係。

這是如何處理的?

回答

1

我是工作在巴澤爾圍棋規則的工程師之一。不幸的是,我現在對你沒有很好的答案,但這個問題在我們的視線之內,Go團隊正在研究一個長期的常規解決方案。我在我們的GitHub倉庫上提交了bazelbuild/rules_go#512來跟蹤這個問題,當我們有更好的解決方案時,我會更新這個答案。

問題是Bazel將生成的代碼和其他工件存儲在其編輯器不知道的內部目錄中。我們正在設計和構建一個新的工作空間抽象機制,它將允許工具(編輯器,IDE,像guru這樣的工具)瞭解存儲庫中的所有源,生成文件,包,導入和其他元數據,而無需直接與Bazel集成或其他構建系統。

作爲臨時解決方法,請嘗試使用protoc手動生成.pb.go文件。您可以將這些文件檢入到存儲庫中,但不要將它們包含在BUILD文件中。這應該使編輯器和IDE意識到生成的文件,但編譯時仍然會生成新的最新版本。