2022-10-27 patch.crates-io が便利だ
twiq 実装メモ (37)
今朝は tonic-build で生成されたコードから一部のドキュメントコメントを削除しようとしていた。 prost_build::Config と tonic_build::Builder::compile_with_config で proto の message や field はなんとかなるものの service や rpc は tonic-build crate を修正しないとダメそう。
https://twitter.com/bouzuya/status/1585458763825401857
- crates:tonic-build で生成したコードは proto のコメントをドキュメントコメントとして含む
- ドキュメントコメントにあるコードブロックは
cargo test
でテストだと解釈されてしまう - 結果として生成したコードのコメントが原因のエラーが発生した
- 回避策 1: 別 crate としてコンパイルする (テストは動かさない)
- 回避策 2:
cargo test
でドキュメントのコメントを停止する (方法があるはず) - 回避策 3: tonic-build に手を入れてなんとかする
- 今回は回避策 3 を狙った
tonic-build の動作の調査。
- 調査したところ .proto のうち message やその field は crates:prost-build の Config の disable_comments (https://docs.rs/prost-build/0.11.1/prost_build/struct.Config.html#method.disable_comments) で制御できることが分かった
- また prost-build では service やその rpc の出力は制御しておらず、そこは crates:tonic-build の範囲だと分かった
- tonic-build には disable_comments に相当する設定がないことも分かった
- hyperium/tonic を fork して修正中 (明日もここから)
- ついでに tokio-rs/tonic の disable_comments のコメントの誤りを修正して Pull Request した (https://github.com/tokio-rs/prost/pull/738)
[patch.crates-io]
- 調査過程で知ったのだけど特定の crate を差し替えるには
[path.crates-io]
設定を使うと良い (https://doc.rust-lang.org/cargo/reference/overriding-dependencies.html)
『競技プログラミングの鉄則』 6.4 一手先を考える。区間スケジューリング問題。一手先の状況が最も良いものに持っていく貪欲法。
今日のコミット。