Buf выпустила первый полноценный LSP-сервер для Protobuf

Buf выпустила первый полноценный LSP-сервер для Protobuf

Компания Buf объявила о выпуске первого полнофункционального production-grade LSP-сервера (Language Server Protocol) для Protobuf. LSP, стандартный протокол, через который редактор получает «умные» функции языка: переход к определению, автодополнение кода, поиск всех ссылок на символ и подсветку синтаксиса с учётом семантики. До этого релиза у Protobuf не было такой поддержки, какой давно пользуются другие популярные языки программирования; теперь она есть, и работает через Buf CLI. LSP-сервер встроен в Buf CLI. Для VSCode достаточно поставить расширение Buf, оно само подтянет установленный Buf CLI или поставит его при необходимости. В Neovim нужно поставить Buf CLI и настроить nvim-lspconfig вызовом lspconfig.buf_ls.setup{} (либо включить сервер строкой vim.lsp.enable('buf-lsp') в конфиге). Для любого другого редактора с поддержкой LSP достаточно, чтобы он запускал команду buf lsp serve. В основе сервера, переработанный компилятор-фронтенд Buf, protocompile: команда описывает его как полностью совместимый со стандартом и более быстрый и гибкий, чем protoc (без конкретных цифр сравнения). Для LSP Buf построила новый query-driven фронтенд с инкрементальной компиляцией, собственным AST и промежуточным представлением вместо FileDescriptorProto, это даёт более точную диагностику (пример из поста, корректное обнаружение дублирующегося модификатора repeated, которое protoc пропускает) и экономнее расходует память на больших workspace. По словам Buf, её компилятор настолько хорош, что даже Google использует его наряду с protoc в некоторых частях своей кодовой базы, без уточнения, в каких именно. LSP-сервер, часть более широкой экосистемы инструментов Buf вокруг Protobuf: сюда же входят Protobuf-ES (используется в Chromium), Protovalidate, ConnectRPC и Buf Schema Registry. Buf прямо говорит, что работа над LSP не закончена, и называет ближайшие планы: автоматическое исправление импортов, более тесная интеграция с buf.yaml (в том числе автоимпорт модулей), автодополнение и поиск ссылок для кастомных опций, автоматическое предложение номеров полей и enum-значений, а также отдельную поддержку Protovalidate вместе с подсветкой синтаксиса для CEL-выражений.

Ключевые факты

  • Buf выпустила первый полнофункциональный production-grade LSP-сервер для Protobuf, встроенный в Buf CLI
  • Поддержка есть в VSCode (расширение Buf), IntelliJ и Neovim (через nvim-lspconfig); в любом другом редакторе достаточно запустить команду buf lsp serve
  • LSP даёт переход к определению, автодополнение кода, поиск ссылок и подсветку синтаксиса с учётом семантики
  • В основе, новый query-driven компилятор protocompile с инкрементальной компиляцией и более точной диагностикой ошибок; Buf утверждает, что даже Google использует его наряду с protoc в части своей кодовой базы
  • Buf уже анонсировала следующие шаги: автоисправление импортов, более тесную интеграцию с buf.yaml, автодополнение для кастомных опций и поддержку Protovalidate/CEL

Почему это важно

Protobuf, один из самых распространённых языков описания схем данных и API (используется вместе с gRPC, ConnectRPC и другими инструментами), но до сих пор у него не было современной поддержки IDE, какая давно есть у большинства популярных языков программирования. LSP-сервер закрывает именно этот пробел: разработчики получают переход к определению, автодополнение, поиск ссылок и семантическую подсветку синтаксиса прямо в редакторе, без сторонних плагинов с неполной функциональностью.

Кому это важно

В первую очередь, разработчикам backend и API, которые пишут и поддерживают .proto-схемы: авторам gRPC- и ConnectRPC-сервисов, командам, использующим Buf Schema Registry и Protovalidate, и всем, кто работает с Protobuf в VSCode, IntelliJ или Neovim и раньше не имел полноценной поддержки языка в редакторе.

Как это применить

В VSCode достаточно поставить расширение Buf, оно само подхватит установленный Buf CLI или поставит его при необходимости. В Neovim нужно поставить Buf CLI, добавить nvim-lspconfig и вызвать lspconfig.buf_ls.setup{} (или включить сервер строкой vim.lsp.enable('buf-lsp') в конфиге). Для любого другого редактора с поддержкой LSP нужно, чтобы он запускал команду buf lsp serve, остальное берёт на себя Buf CLI.

Можно ли доверять

Buf, не новичок в экосистеме Protobuf: компания уже поддерживает Protobuf-ES (используется в Chromium), Protovalidate, ConnectRPC и Buf Schema Registry, а её компилятор-фронтенд protocompile, по словам компании, частично использует даже Google наряду с protoc. При этом заявления о том, что protocompile «быстрее и гибче» protoc, не подкреплены конкретными цифрами или бенчмарками, это качественная оценка самой компании. Автор поста в анонсе не назван, версия и дата релиза LSP-сервера тоже не указаны.

Риски и подводные камни

Инструмент требует установленного Buf CLI и в этом смысле привязывает разработку к экосистеме одной компании. Часть заявленных возможностей, автоисправление импортов, более тесная интеграция с buf.yaml, автодополнение для кастомных опций, автонумерация полей и enum, поддержка CEL для Protovalidate, на момент анонса ещё не реализована, а лишь запланирована. Утверждения о превосходстве над protoc по скорости и гибкости стоит воспринимать как маркетинговую оценку разработчика, а не как независимо проверенный результат.

«Теперь Protobuf впервые получил современную поддержку IDE, и всё это работает на базе Buf CLI.»

— Buf, в блоге компании