14 releases (9 breaking)
Uses new Rust 2024
new 0.11.1 | Mar 26, 2025 |
---|---|
0.9.0 | Jan 4, 2025 |
0.8.0 | Dec 21, 2024 |
0.7.0 | Oct 24, 2024 |
0.3.0 | Jul 31, 2024 |
#15 in Text editors
389 downloads per month
125KB
3K
SLoC
Protols - Protobuf Language Server
Protols is an open-source, feature-rich Language Server Protocol (LSP) for Protocol Buffers (proto) files. Powered by the efficient tree-sitter parser, Protols offers intelligent code assistance for protobuf development, including features like auto-completion, diagnostics, formatting, and more.
✨ Features
- ✅ Code Completion: Auto-complete messages, enums, and keywords in your
.proto
files. - ✅ Diagnostics: Syntax errors, import error with tree-sitter and advanced diagnostics from
protoc
. - ✅ Document Symbols: Navigate and view all symbols, including messages and enums.
- ✅ Code Formatting: Format
.proto
files usingclang-format
for a consistent style. - ✅ Go to Definition: Jump to the definition of symbols like messages or enums and imports.
- ✅ Hover Information: Get detailed information and documentation on hover.
- ✅ Rename Symbols: Rename protobuf symbols and propagate changes across the codebase.
- ✅ Find References: Find where messages, enums, and fields are used throughout the codebase.
Table of Contents
🚀 Installation
For Neovim
You can install Protols via mason.nvim, or install it directly from crates.io:
cargo install protols
Then, configure it in your init.lua
using nvim-lspconfig:
require'lspconfig'.protols.setup{}
For Visual Studio Code
If you're using Visual Studio Code, you can install the Protobuf Language Support extension, which uses this LSP under the hood.
Note: This extension is open source, but is not officially maintained by us.
⚙️ Configuration
Protols is configured using a protols.toml
file, which you can place in any directory.
Sample protols.toml
[config]
include_paths = ["foobar", "bazbaaz"] # Include paths to look for protofiles during parsing
[config.path]
clang_format = "clang-format"
protoc = "protoc"
Configuration Sections
Basic Configuration
The [config]
section contains stable settings that should generally remain unchanged.
include_paths
: Directories to search for.proto
files. Absolute or relative to LSP workspace root. Worspace root is already included in include_paths
Path Configuration
The [config.path]
section contains path for various tools used by LSP.
clang_format
: Uses clang_format from this path for formattingprotoc
: Uses protoc from this path for diagnostics
🛠️ Usage
Protols offers a rich set of features to enhance your .proto
file editing experience.
Code Completion
Protols offers intelligent autocompletion for messages, enums, and proto3 keywords within the current package. Simply start typing, and Protols will suggest valid completions.
Diagnostics
Syntax errors are caught by the tree-sitter parser, which highlights issues directly in your editor. More advanced error reporting, is done by protoc
which runs after a file saved. You must have protoc
installed and added to your path or you can specify its path in the configuration above
Code Formatting
Format your .proto
files using clang-format
. To customize the formatting style, add a .clang-format
file to the root of your project. Both document and range formatting are supported.
Document Symbols
Protols provides a list of symbols in the current document, including nested symbols such as messages and enums. This allows for easy navigation and reference.
Go to Definition
Jump directly to the definition of any custom symbol or imports, including those in other files or packages. This feature works across package boundaries.
Hover Information
Hover over any symbol or imports to get detailed documentation and comments associated with it. This works seamlessly across different packages and namespaces.
Rename Symbols
Rename symbols like messages or enums, and Propagate the changes throughout the codebase. Currently, field renaming within symbols is not supported.
Find References
Find all references to user-defined types like messages or enums. Nested fields are fully supported, making it easier to track symbol usage across your project.
🤝 Contributing
We welcome contributions from developers of all experience levels! To get started:
- Fork the repository and clone it to your local machine.
- Create a new branch for your feature or fix.
- Run the tests to ensure everything works as expected.
- Open a pull request with a detailed description of your changes.
Setting Up Locally
-
Clone the repository:
git clone https://github.com/coder3101/protols.git cd protols
-
Build and test the project:
cargo build cargo test
📄 License
This project is licensed under the MIT License. See the LICENSE file for more details.
Dependencies
~15–28MB
~452K SLoC