A language server implementation for Protocol Buffers. Under active development; some features are still a work in progress.
- Document Formatting
- Full semantic token support
- (partial) Embedded CEL expression semantic tokens
- Document and workspace diagnostics
- Import links
- Find references/definition
- Types and enums
- Imports
- Options, extensions, and field references
- Inlay Hints
- Package names and prefixes
- Hover
- Types and enums
- Options, extensions, and field references
- Inlay Hints
- Package names and prefixes
- CEL tokens
- Code Actions & Refactors
- Identify and remove unused imports
- Add missing import for unresolved symbol
- Auto-fix imports on save
- Simplify repeated option declarations
- Simplify repeated message literal fields
- Simplify map literal fields
- Extract fields to new message
- Inline fields from message
- Renumber message fields
- Code Lens
- Generate file/package/workspace
- Inlay hints
- Extension types
- Resolved import paths
- Rename symbols
- Multi-workspace support
- Document symbols
- Workspace symbol query with fuzzy matching
- Completion:
- Message and enum types
- Extendee types
- Context-sensitive keywords
- Import paths
- Package names
- Message and field literals
- Field literal values
- Import resolution
- Local/relative paths
- Go module path lookup with inline sources
- Go module path lookup with missing proto sources synthesized from generated code
- Context-sensitive imports and pattern detection
- Import path lookup from existing generated Go code
- Fully interactive sources generated from well-known (or any other) descriptors
- Legacy compatibility
- gogoproto sources (k8s, etc.)
- proto2 sources
- Future compatibility
- Editions
- Code generator tools
- Built-in compiler with workspace context
- CLI support
- 'protols fmt'
- 'protols vet'
- 'protols rename'
- ...
- Interact with generated code
- Go to Generated Definition
- Find references
- Call hierarchy
- Cross-language rename
- Debugging tools
- AST viewer
- Wire message decoder ('protols decode')
- ...
- Editor support
- VSCode
- Neovim
- Clone this repo
- Build and install the protols binary:
go install ./cmd/protols
- Install
vsce
if you don't have it:npm install --global @vscode/vsce
- cd to editors/vscode, then run
vsce package
- Install the vsix plugin:
code --install-extension ./protols-vscode-<version>.vsix
This project is derived from bufbuild/protocompile and jhump/protoreflect. Thanks to the buf developers for their fantastic work.
Several packages in https://github.com/golang/tools are used to build the language server. A minimal subset of its lsp-related packages are maintained as a library at https://github.com/kralicky/tools-lite.