|
1 | 1 | # Protols - Protobuf Language Server
|
2 | 2 |
|
3 |
| -[](https://crates.io/crates/protols) |
| 3 | +[](https://crates.io/crates/protols) |
4 | 4 | [](https://github.com/coder3101/protols/actions/workflows/ci.yml)
|
5 | 5 |
|
6 |
| -**Protols** is an open-source Language Server Protocol (LSP) for **proto** files, powered by the robust and efficient [tree-sitter](https://tree-sitter.github.io/tree-sitter/) parser. With Protols, you get powerful code assistance for protobuf files, including auto-completion, syntax diagnostics, and more. |
| 6 | +**Protols** is an open-source, feature-rich [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/) for **Protocol Buffers (proto)** files. Powered by the efficient [tree-sitter](https://tree-sitter.github.io/tree-sitter/) parser, Protols offers intelligent code assistance for protobuf development, including features like auto-completion, diagnostics, formatting, and more. |
7 | 7 |
|
8 |
| - |
| 8 | + |
9 | 9 |
|
10 | 10 | ## ✨ Features
|
11 | 11 |
|
12 |
| -- ✅ Code Completion |
13 |
| -- ✅ Diagnostics |
14 |
| -- ✅ Document Symbols |
15 |
| -- ✅ Code Formatting |
16 |
| -- ✅ Go to Definition |
17 |
| -- ✅ Hover Information |
18 |
| -- ✅ Rename Symbols |
19 |
| -- ✅ Find references |
| 12 | +- ✅ **Code Completion**: Auto-complete messages, enums, and keywords in your `.proto` files. |
| 13 | +- ✅ **Diagnostics**: Syntax errors detected with the tree-sitter parser. |
| 14 | +- ✅ **Document Symbols**: Navigate and view all symbols, including messages and enums. |
| 15 | +- ✅ **Code Formatting**: Format `.proto` files using `clang-format` for a consistent style. |
| 16 | +- ✅ **Go to Definition**: Jump to the definition of symbols like messages or enums. |
| 17 | +- ✅ **Hover Information**: Get detailed information and documentation on hover. |
| 18 | +- ✅ **Rename Symbols**: Rename protobuf symbols and propagate changes across the codebase. |
| 19 | +- ✅ **Find References**: Find where messages, enums, and fields are used throughout the codebase. |
20 | 20 |
|
21 |
| -## 🚀 Getting Started |
| 21 | +--- |
| 22 | + |
| 23 | +## Table of Contents |
| 24 | + |
| 25 | +- [Installation](#installation) |
| 26 | + - [For Neovim](#for-neovim) |
| 27 | + - [For Visual Studio Code](#for-visual-studio-code) |
| 28 | +- [Configuration](#configuration) |
| 29 | + - [Basic Configuration](#basic-configuration) |
| 30 | + - [Experimental Configuration](#experimental-configuration) |
| 31 | + - [Formatter Configuration](#formatter-configuration) |
| 32 | + - [Multiple Configuration Files](#multiple-configuration-files) |
| 33 | +- [Usage](#usage) |
| 34 | + - [Code Completion](#code-completion) |
| 35 | + - [Diagnostics](#diagnostics) |
| 36 | + - [Code Formatting](#code-formatting) |
| 37 | + - [Document Symbols](#document-symbols) |
| 38 | + - [Go to Definition](#go-to-definition) |
| 39 | + - [Hover Information](#hover-information) |
| 40 | + - [Rename Symbols](#rename-symbols) |
| 41 | + - [Find References](#find-references) |
| 42 | +- [Contributing](#contributing) |
| 43 | + - [Setting Up Locally](#setting-up-locally) |
| 44 | +- [License](#license) |
| 45 | + |
| 46 | +--- |
22 | 47 |
|
23 |
| -### Installation |
| 48 | +## 🚀 Installation |
24 | 49 |
|
25 |
| -#### For Neovim |
| 50 | +### For Neovim |
26 | 51 |
|
27 |
| -You can install [protols with mason.nvim](https://github.com/mason-org/mason-registry/blob/main/packages/protols/package.yaml) or directly from crates.io with: |
| 52 | +You can install **Protols** via [mason.nvim](https://github.com/mason-org/mason-registry/blob/main/packages/protols/package.yaml), or install it directly from [crates.io](https://crates.io/crates/protols): |
28 | 53 |
|
29 | 54 | ```bash
|
30 | 55 | cargo install protols
|
31 | 56 | ```
|
32 | 57 |
|
33 |
| -Then, configure it with [`nvim-lspconfig`](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#protols): |
| 58 | +Then, configure it in your `init.lua` using [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig): |
34 | 59 |
|
35 | 60 | ```lua
|
36 | 61 | require'lspconfig'.protols.setup{}
|
37 | 62 | ```
|
38 | 63 |
|
39 |
| -#### For Visual Studio Code |
| 64 | +### For Visual Studio Code |
| 65 | + |
| 66 | +If you're using Visual Studio Code, you can install the [Protobuf Language Support](https://marketplace.visualstudio.com/items?itemName=ianandhum.protobuf-support) extension, which uses this LSP under the hood. |
| 67 | + |
| 68 | +> **Note**: This extension is [open source](https://github.com/ianandhum/vscode-protobuf-support), but is not officially maintained by us. |
| 69 | +
|
| 70 | +--- |
| 71 | + |
| 72 | +## ⚙️ Configuration |
| 73 | + |
| 74 | +Protols is configured using a `protols.toml` file, which you can place in any directory. **Protols** will search for the closest configuration file by recursively traversing the parent directories. |
| 75 | + |
| 76 | +### Sample `protols.toml` |
| 77 | + |
| 78 | +```toml |
| 79 | +[config] # Base configuration; these are considered stable and should not change |
| 80 | +include_paths = ["foobar", "bazbaaz"] # Include paths to look for protofiles during parsing |
| 81 | +disable_parse_diagnostics = true # Disable diagnostics for parsing |
| 82 | + |
| 83 | +[config.experimental] # Experimental configuration; this should be considered unsafe and not fully tested |
| 84 | +use_protoc_diagnostics = true # Use diagnostics from protoc |
| 85 | + |
| 86 | +[formatter] # Formatter specific configuration |
| 87 | +clang_format_path = "/usr/bin/clang-format" # clang-format binary to execute in formatting |
| 88 | +``` |
| 89 | + |
| 90 | +### Configuration Sections |
| 91 | + |
| 92 | +#### Basic Configuration |
| 93 | + |
| 94 | +The `[config]` section contains stable settings that should generally remain unchanged. |
| 95 | + |
| 96 | +- `include_paths`: Directories to search for `.proto` files. |
| 97 | +- `disable_parse_diagnostics`: Set to `true` to disable diagnostics during parsing. |
| 98 | + |
| 99 | +#### Experimental Configuration |
| 100 | + |
| 101 | +The `[config.experimental]` section contains settings that are in development or not fully tested. |
40 | 102 |
|
41 |
| -You can use the [Protobuf Language Support](https://marketplace.visualstudio.com/items?itemName=ianandhum.protobuf-support) extension, which leverages this LSP under the hood. |
| 103 | +- `use_protoc_diagnostics`: Enable diagnostics from the `protoc` compiler when set to `true`. |
42 | 104 |
|
43 |
| -> **Note:** This extension is [open source](https://github.com/ianandhum/vscode-protobuf-support) but is not maintained by us. |
| 105 | +#### Formatter Configuration |
| 106 | + |
| 107 | +The `[formatter]` section allows configuration for code formatting. |
| 108 | + |
| 109 | +- `clang_format_path`: Specify the path to the `clang-format` binary. |
| 110 | + |
| 111 | +### Multiple Configuration Files |
| 112 | + |
| 113 | +You can place multiple `protols.toml` files across different directories. **Protols** will use the closest configuration file by searching up the directory tree. |
| 114 | + |
| 115 | +--- |
44 | 116 |
|
45 | 117 | ## 🛠️ Usage
|
46 | 118 |
|
| 119 | +Protols offers a rich set of features to enhance your `.proto` file editing experience. |
| 120 | + |
47 | 121 | ### Code Completion
|
48 | 122 |
|
49 |
| -Protols provides intelligent autocompletion for messages, enums, and proto3 keywords within the current package. |
| 123 | +**Protols** offers intelligent autocompletion for messages, enums, and proto3 keywords within the current package. Simply start typing, and Protols will suggest valid completions. |
50 | 124 |
|
51 | 125 | ### Diagnostics
|
52 | 126 |
|
53 |
| -Diagnostics are powered by the tree-sitter parser, which catches syntax errors but does not utilize `protoc` for more advanced error reporting. |
| 127 | +Syntax errors are caught by the tree-sitter parser, which highlights issues directly in your editor. For more advanced error reporting, the LSP can be configured to use `protoc` diagnostics. |
54 | 128 |
|
55 | 129 | ### Code Formatting
|
56 | 130 |
|
57 |
| -Formatting is enabled if [clang-format](https://clang.llvm.org/docs/ClangFormat.html) is available. You can control the [formatting style](https://clang.llvm.org/docs/ClangFormatStyleOptions.html) by placing a `.clang-format` file in the root of your workspace. Both document and range formatting are supported. |
| 131 | +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. |
58 | 132 |
|
59 | 133 | ### Document Symbols
|
60 | 134 |
|
61 |
| -Provides symbols for the entire document, including nested symbols, messages, and enums. |
| 135 | +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. |
62 | 136 |
|
63 | 137 | ### Go to Definition
|
64 | 138 |
|
65 |
| -Jump to the definition of any custom symbol, even across package boundaries. |
| 139 | +Jump directly to the definition of any custom symbol, including those in other files or packages. This feature works across package boundaries. |
66 | 140 |
|
67 | 141 | ### Hover Information
|
68 | 142 |
|
69 |
| -Displays comments and documentation for protobuf symbols on hover. Works seamlessly across package boundaries. |
| 143 | +Hover over any symbol to get detailed documentation and comments associated with it. This works seamlessly across different packages and namespaces. |
70 | 144 |
|
71 | 145 | ### Rename Symbols
|
72 | 146 |
|
73 |
| -Allows renaming of symbols like messages and enums, along with all their usages across packages. Currently, renaming fields within symbols is not supported directly. |
| 147 | +Rename symbols like messages or enums, and Propagate the changes throughout the codebase. Currently, field renaming within symbols is not supported. |
74 | 148 |
|
75 | 149 | ### Find References
|
76 | 150 |
|
77 |
| -Allows user defined types like messages and enums can be checked for references. Nested fields are completely supported. |
| 151 | +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. |
| 152 | + |
| 153 | +--- |
| 154 | + |
| 155 | +## 🤝 Contributing |
| 156 | + |
| 157 | +We welcome contributions from developers of all experience levels! To get started: |
| 158 | + |
| 159 | +1. **Fork** the repository and clone it to your local machine. |
| 160 | +2. Create a **new branch** for your feature or fix. |
| 161 | +3. Run the tests to ensure everything works as expected. |
| 162 | +4. **Open a pull request** with a detailed description of your changes. |
| 163 | + |
| 164 | +### Setting Up Locally |
| 165 | + |
| 166 | +1. Clone the repository: |
| 167 | + |
| 168 | + ```bash |
| 169 | + git clone https://github.com/coder3101/protols.git |
| 170 | + cd protols |
| 171 | + ``` |
| 172 | + |
| 173 | +2. Build and test the project: |
| 174 | + |
| 175 | + ```bash |
| 176 | + cargo build |
| 177 | + cargo test |
| 178 | + ``` |
78 | 179 |
|
79 | 180 | ---
|
80 | 181 |
|
81 |
| -Protols is designed to supercharge your workflow with **proto** files. We welcome contributions and feedback from the community! Feel free to check out the [repository](https://github.com/coder3101/protols) and join in on improving this tool! 🎉 |
| 182 | +## 📄 License |
| 183 | + |
| 184 | +This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for more details. |
| 185 | + |
| 186 | +--- |
0 commit comments