Protobuf 已支持 LSP。不客气

Hacker News Top 工具

摘要

Buf 宣布推出首个功能齐全、生产级的 Protobuf LSP 服务器,提供现代 IDE 支持,例如跳转到定义和代码补全,由 Buf CLI 驱动。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/16 21:45

# Protobuf终于支持LSP了。不客气。· Buf 来源:https://buf.build/blog/protobuf-lsp Buf荣幸地宣布,首个功能完备、生产级的Protobuf LSP服务器正式发布。 语言服务器协议(Language Server Protocol)是将语言支持集成到您喜爱的IDE或文本编辑器(如VSCode、IntelliJ或Neovim)中的标准API。LSP服务器提供智能功能,支持跳转到定义、代码补全、查找引用和语义感知的语法高亮。 此前,Protobuf缺乏其他主流编程语言享有的同等LSP支持。我们不想夸大自己的工作,但**这对Protobuf开发来说是个颠覆性变革**:Protobuf首次获得了现代IDE支持,全部由Buf CLI驱动。 在Buf,我们相信Protobuf是最优的模式语言,这得益于其成熟的库和工具生态系统。Protobuf不应仅仅是明智的选择,更应是便捷的选择。因此我们发布Buf LSP服务器,作为完善Protobuf生态系统工具家族的一部分,该家族还包括: - Protobuf-ES(已在Chromium中使用!) - Protovalidate - ConnectRPC - Buf Schema Registry 无论您的项目或用例如何,使用Protobuf开发都应是简单且*显而易见*的选择。 以下是试用指南! ## 安装Buf LSP ### VSCode VSCode是最受欢迎的图形化编辑器之一,拥有出色的LSP支持(LSP最初源于VSCode)。只需安装Buf扩展,即可使用Buf LSP。该扩展会自动调用您已安装的Buf CLI(内置LSP服务器),若未安装则会自动配置。 ### Neovim Neovim是Buf工程师最喜爱的编辑器,Buf LSP与其完美兼容。只需安装Buf CLI,并将Neovim配置为使用该LSP服务器即可。 1. 确保已安装`nvim-lspconfig`仓库,该仓库提供默认LSP配置选项。安装说明见此处。 2. 在`.nvimrc`中添加`lspconfig.buf_ls.setup {}`。 或在`init.lua`(或其他配置文件)中添加以下内容: ```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`更快速、更灵活。我们的编译器表现如此出色,以至于谷歌在其部分庞大代码库中已与`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 ``` 我们设计了新的AST与中间表示结构以精准诊断这类错误,取代原先基于`FileDescriptorProto`的方式。其灵活性使我们能轻松支持Protobuf新增的语言特性(例如即将推出的2024版编辑特性)。同时该结构内存高效,可处理包含超大Buf模块的工作区。 ## 未来规划 Buf LSP的开发永不止步。我们持续优化诊断功能,并计划为LSP服务器增添更多特性: - 将`import`语句作为自动修复项添加 - 与`buf.yaml`更深度集成(例如自动导入模块) - 为自定义选项实现代码补全与引用查找 - 自动建议字段/枚举编号 - 专项支持Protovalidate,包括CEL代码段的语法高亮 在Buf,我们始终致力于拓展Protobuf的能力边界,让所有人享受模式驱动开发的便利! 如需帮助规范组织数据标准,请联系我们了解Buf的解决方案。若热衷于构建卓越的开发者工具,请访问我们的招聘页面。

相似文章

protocolbuffers/protobuf

GitHub Trending (daily)

Protocol Buffers 是 Google 推出的语言无关、平台无关的数据交换格式。本 README 提供了协议编译器和运行时的安装说明与使用指南。

宣布 BABLR

Lobsters Hottest

宣布 BABLR,一个全新的通用解析器框架和基于API的软件开发平台,旨在将IDE范式从文本文件编辑转变为代码文档编辑。它包含一个与 Tree-sitter 竞争的解析器框架、一个与 ESTree 竞争的解析树格式 agAST,以及一种新的数据语言 CSTML。

Gobee:用Go编写eBPF程序,通过clang转译

Lobsters Hottest

Gobee是一个将Go的子集转译为BPF C的工具,允许开发者用Go而非C编写eBPF程序。它为用户空间生成类型化的Go绑定,并利用clang的后端进行编译。