protobuf-language-server
A language server implementation for Google Protocol Buffers
I created this tool primarily to streamline my own workflow. While some implementations might not be optimal and the features may feel incomplete, it serves my needs well enough as it is. That said, if you've got a better solution in mind, I'd be happy to switch to yours.
Rust Version: https://github.com/lasorda/protobuf-lsp
installation
Build binary
go clean -modcache
go install github.com/lasorda/protobuf-language-server@master
Add it to your PATH
Configure vim/nvim
Using coc.nvim, add it to :CocConfig
"languageserver": {
"proto" :{
"command": "protobuf-language-server",
"filetypes": ["proto", "cpp"],
"settings": {
"additional-proto-dirs": [ ]
}
}
}
Using lsp-config.nvim
local configs = require('lspconfig.configs')
local util = require('lspconfig.util')
configs.protobuf_language_server = {
default_config = {
cmd = { 'path/to/protobuf-language-server' },
filetypes = { 'proto', 'cpp' },
root_dir = util.root_pattern('.git'),
single_file_support = true,
settings = {
["additional-proto-dirs"] = [
]
},
}
}
local lspconfig = require('lspconfig')
lspconfig.protobuf_language_server.setup {
}
if you use vscode, see vscode-extension/README.md
features
- Parsing document symbols
- Go to definition
- Find references
- Symbol definition on hover
- Format file with clang-format
- Code completion
- Jump from protobuf's cpp header to proto define (only global message and enum)