Language support: Protocol Buffers (.proto) — the contract layer gRPC codebases break on
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 静か
- 技術スタック
- typescript
- 領域
- tooling
調査の方向性
Start with CLAUDE.md, then compare the existing extractors in src/extraction/languages/*.ts with the codegraph-kernel work mentioned in #1326 and #1346 to determine the current layer for a new target. Check whether a newer on-ramp exists, since the issue says docs/ADDING-A-LANGUAGE.md and the /add-lang workflow are missing. Done means a supported protobuf extractor that connects contract definitions to generated symbols and passes the stated multi-repo, flow-prompt, and A/B validation.
索引モデルが issue の本文から書いたものです。
説明
Adding this to the pile in #648, but I think it sits a bit differently from the other entries there, so bear with me.
Protobuf isn't really a programming language request. In a gRPC codebase the .proto file is the interface between services — the Go, Dart and TS on either side of it is generated. So the boundary that matters most is the one part of the repo codegraph can't see.
What this looks like in practice. I run a Go microservice backend: 13 services, each owning its contracts in its own repo and pulling the ones it consumes through buf. 38 hand-written .proto files, 661 counting the vendored copies of other services' contracts.
Codegraph is genuinely good on the Go side — query Authorize gives me the definition in the staff service and every consumer in oms and pro-bff in one shot, which used to be a grep expedition. But ask it about the contract itself and it goes quiet:
query PlaceOrderRequestreturns two Go signatures that mention the type. The message definition, its fields, and the RPC that takes it aren't in the graph at all.- There's no way to get from a proto service definition to the Go method implementing it, or the other direction.
So a cross-service flow traces cleanly right up to the service boundary, then stops — and that's the hop where I actually needed help. It's the "partial coverage is worse than none" problem in CLAUDE.md, except the missing piece isn't dynamic dispatch, it's a whole file format.
What I think would be worth having, roughly in order of value:
service→rpc→ request/responsemessage→fieldas nodes and edges.- An edge from the generated symbol back to its proto definition, so the Go/Dart edges that already exist connect through the contract instead of dead-ending at it. This is the one that makes it worth doing at all — without it you get an isolated island of proto nodes next to the real graph.
importedges between proto files, which in a buf setup is what tells you which services depend on whose contracts.
Mature tree-sitter grammars for proto exist, and the shape is small and declarative — closer to the HCL/Terraform extractor than to a real language.
Two questions before I put work into a PR, because I couldn't answer them from the repo:
- Which layer should a new language target now?
src/extraction/languages/*.tsstill has 29 extractors, but the R7a/R7b work (#1326, #1346, and the walker series in July) moved a good chunk intocodegraph-kernel. I'd rather not write the TS one and find out it's the layer being retired. - Is there a current on-ramp doc? #85 and #648 both point at
docs/ADDING-A-LANGUAGE.mdand an/add-langworkflow, but the file 404s on main, #97 was closed unmerged, and there's no.claude/commands/.CLAUDE.mdcovers the architecture and the validation methodology, so I can work from that — just want to check I'm not missing something newer.
Happy to do the validation work the methodology asks for (small/medium/large repos, ≥3 flow prompts, A/B with ≥2 runs per arm on sonnet). I have a real proto-heavy codebase to test against, which I suspect is the harder thing to come by.
- 主要言語
- C
- スター
- 73.2k
- フォーク
- 4.7k
- 平均マージ
- 11時間 28分
- マージ済み PR(30日)
- 596
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
colbymchenry/codegraph のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
colbymchenry/codegraph#1900 · コメント 2 件 · リアクション 5 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
colbymchenry/codegraph#1700 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
colbymchenry/codegraph#1535 · コメント 2 件 · リアクション 2 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 63/100
colbymchenry/codegraph#1403 ·
メンテナーはふだん 1 日以内に返信
-
agent-target
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
colbymchenry/codegraph#649 · コメント 5 件 · リアクション 50 件 ·
メンテナーはふだん 1 日以内に返信
colbymchenry/codegraph の issue をすべて見る
似ている issue
-
TLS: a stale OpenSSL error makes non-blocking reads fail with "Resource temporarily unavailable"オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1〜3時間 初心者へのやさしさ 82/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
bigtreetech/BIGTREETECH-TouchScreenFirmware#3056 ·
メンテナーはふだん 1 日以内に返信
-
Allow pillow 13オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
[pico][astrocade] emu/apply.sh edits src/mame/midway/astrohome.cpp, which current MAME has in bally/オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 83/100
FujiNetWIFI/fujinet-firmware#2120 ·
メンテナーはふだん 1 日以内に返信