プログラミング
ProtobufにLSPサポートが登場
Protobuf has LSP support. You're welcome (buf.build)
要約
Buf社は、Protobuf向けの初の本格的なLSP(Language Server Protocol)サーバーをリリースしました。これにより、VSCodeやNeovimなどのIDEで、コード補完、定義への移動、セマンティクスを考慮したシンタックスハイライトといったモダンな開発体験が可能になります。このLSPサーバーは、Buf CLIにバンドルされており、Protobuf開発の生産性を大幅に向上させることを目指しています。
全文翻訳
Bufは、Protobuf向けの初の本格的でプロダクショングレードのLSPサーバーを発表できることを誇りに思います。Language Server Protocolは、VSCode、IntelliJ、Neovimなどの使い慣れたIDEやテキストエディタに言語サポートを統合するための標準APIです。LSPサーバーは、定義への移動、コード補完、参照の検索、セマンティクスを考慮したシンタックスハイライトといった機能を支えるインテリジェンスを提供します。
今日まで、Protobufは他の主要なプログラミング言語が享受しているLSPサポートを欠いていました。私たちは自分たちの仕事を過大評価したくはありませんが、これはProtobuf開発にとってゲームチェンジャーです。Protobufは、Buf CLIによってすべてが強化され、初めてモダンなIDEサポートを手に入れました。
Bufでは、ライブラリやツールの確立されたエコシステムのおかげで、Protobufが最高のスキーマ言語であると信じています。Protobufはスマートな選択であるだけでなく、最も簡単な選択肢であるべきです。だからこそ、私たちはProtovalidate、ConnectRPC、Buf Schema RegistryといったProtobufエコシステムを完成させるツールのファミリーの一部として、Buf LSPサーバーをリリースしています。プロジェクトやユースケースに関わらず、Protobufでの開発は簡単で明白な選択であるべきです。
以下に、試す方法を示します。
Buf LSPのインストール
VSCodeは最も人気のあるグラフィカルエディタの1つであり、優れたLSPサポートを備えています(LSPはVSCodeから始まりました)。Buf LSPを使用するには、Buf拡張機能をインストールするだけです。これにより、インストール済みのBuf CLIのバージョンが自動的に使用されるか(LSPサーバーがバンドルされています)、必要に応じてインストールされます。
NeovimはBufエンジニアのお気に入りのエディタであり、Buf LSPもそれと素晴らしい連携をします。必要なのはBuf CLIをインストールし、NeovimをLSPサーバーとして使用するように設定することだけです。nvim-lspconfigリポジトリがインストールされていることを確認してください。これはデフォルトのLSP設定オプションを提供します。ここにある指示に従ってください。
.nvimrcにlspconfig.buf_ls.setup {}を追加します。
または、init.lua(またはお好みの他の設定ファイル)のどこかに以下を追加することもできます。
vim.lsp.config('buf-lsp', { cmd = { 'buf', 'lsp', 'serve' }, filetypes = { 'proto' }, root_markers = { 'buf.yaml', '.git' }, })
その後、.nvimrcでvim.lsp.enable('buf-lsp')を使用して有効にできます。ここからLSPとNeovimについてさらに学ぶことができます。
他のエディタを使用している場合は、まずLSP統合がどのように機能するかを見つけ、buf lsp serveコマンドを実行してサーバーを起動するようにしてください。
ツールの活用
BufはすでにProtobufコンパイラのフロントエンド(protocのようなプラグインを呼び出すファイル解析部分)を維持しており、これをprotocompileと呼んでいます。私たちの実装は完全に準拠しているだけでなく、protocよりもはるかに高速で柔軟性があります。私たちのコンパイラは非常に優れているため、Googleでさえその巨大なコードベースの一部の場所でprotocと並行して使用しています。
Buf LSPを構築するために、私たちはprotocompileを次のレベルに引き上げました。インクリメンタルコンパイルとより優れた診断を可能にする、まったく新しいクエリ駆動型のフロントエンドを開発しました。例えば、protocとは異なり、重複したrepeatedモディファイアを正しく診断します。
error: encountered more than one type modifier
--> testdata/parser/type/repeated.proto:23:14
|
23 | repeated repeated M x4 = 4;
| -------- ^^^^^^^^
help: consider removing this
|
|
first one is here
FileDescriptorProtoを使用するのではなく、これらのエラーを正確に診断するために新しいASTと中間表現を設計しました。その柔軟性により、Protobufに追加される新しい言語機能(2024年エディションの今後の機能など)を簡単に実装できます。また、メモリ効率も高いため、非常に大きなBufモジュールを含むワークスペースを処理できます。
私たちのコミットメント
Buf LSPに関する私たちの仕事はまだ終わっていません。私たちは常に診断機能を改善しており、LSPサーバーにもさらに多くの機能を追加する予定です。
インポートの自動修正機能の追加。
buf.yamlとのより緊密な統合(モジュールの自動インポートなど)。
カスタムオプションのコード補完と参照検索。
フィールド/列挙値の番号の自動提案。
CELスニペットのシンタックスハイライトを含む、専用のProtovalidateサポート。
Bufでは、Protobufで達成できることの限界を常に押し広げ、すべての人にスキーマ駆動開発を可能にします。
組織のデータに関する標準の実施を支援したい場合は、お問い合わせください。優れた開発者ツールの構築に情熱を注いでいる場合は、採用ページをご覧ください。