protols 0.6.2

Language server for proto3 files
# Protols - Protobuf Language Server

[![Crates.io](https://img.shields.io/crates/v/protols.svg)](https://crates.io/crates/protols)
[![Build and Test](https://github.com/coder3101/protols/actions/workflows/ci.yml/badge.svg)](https://github.com/coder3101/protols/actions/workflows/ci.yml)

**Protols** is an open-source Language Server Protocol (LSP) for **proto3** 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.

![](./assets/protols.mov)

## ✨ Features

- ✅ Code Completion
- ✅ Diagnostics
- ✅ Document Symbols
- ✅ Code Formatting
- ✅ Go to Definition
- ✅ Hover Information
- ✅ Rename Symbols

## 🚀 Getting Started

### Installation

#### For Neovim

To install Protols, run:

```bash
cargo install protols
```

Then, configure it with [`nvim-lspconfig`](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#protols):

```lua
require'lspconfig'.protols.setup{}
```

#### For Visual Studio Code

You can use the [Protobuf Language Support](https://marketplace.visualstudio.com/items?itemName=ianandhum.protobuf-support) extension, which leverages this LSP under the hood.

> **Note:** This extension is [open source]https://github.com/ianandhum/vscode-protobuf-support but is not maintained by us.

## 🛠️ Usage

### Code Completion

Protols provides intelligent autocompletion for messages, enums, and proto3 keywords within the current package.

### Diagnostics

Diagnostics are powered by the tree-sitter parser, which catches syntax errors but does not utilize `protoc` for more advanced error reporting.

### Code Formatting

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.

### Document Symbols

Provides symbols for the entire document, including nested symbols, messages, and enums.

### Go to Definition

Jump to the definition of any custom symbol, even across package boundaries.

### Hover Information

Displays comments and documentation for protobuf symbols on hover. Works seamlessly across package boundaries.

### Rename Symbols

Allows renaming of symbols like messages and enums, along with all their usages across packages. Currently, renaming fields within symbols is not supported directly.

---

Protols is designed to supercharge your workflow with **proto3** 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! 🎉