jvolkman / intellij-protobuf-editor

Protocol Buffers for IntelliJ-based IDEs
Apache License 2.0
122 stars 15 forks source link
grpc intellij protobuf protobuf-files protobuf3 protocol-buffers

Note: this plugin has moved to JetBrains

This plugin has been adopted by JetBrains and now lives primarly at https://github.com/JetBrains/intellij-plugins/tree/master/protobuf. Future releases will be bundled with certain versions of JetBrains' tools. As such, this repository likely won't see new updates. Issue tracking and other stuff is still in a bit of a transition phase.

Protocol Buffers support for IntelliJ

Run Tests Join the chat at https://gitter.im/intellij-protobuf-editor/community

IntelliJ plugin for editing Google Protocol Buffers. Features include:

Editor

This is a fork of google/intellij-protocol-buffer-editor which was released unsupported.

Installation

Install from the JetBrains plugin repository, or:

Building and Testing

This project uses Bazel.

To build protobuf-editor.jar:

bazel build //plugin

To run tests:

bazel test //...

Path Settings

By default, the collection of project source roots is used as the protobuf search path, and the protobuf descriptor and well-known type files are provided by the plugin JAR. These paths can be customized in the editor's language settings:

Settings

To customize:

Text Format

Protobuf Text Format is most commonly used to specify long-form option values in .proto files. For example, as seen in the GRPC ecosystem:

GRPC example

This plugin also supports standalone text format files with a .textproto or .pb. extension. Text formant by default does not provide a way to associate a file with its schema (a message in a .proto file). But the plugin supports the following comments in a text proto file:

# proto-file: path/to/file.proto
# proto-message: SomeMessage
# proto-import: path/to/file_with_extensions.proto
# proto-import: path/to/another_file_with_extensions.proto

foo: bar

Filenames are relative to configured roots (see Settings). The proto-message name is scoped relatively to the package declared in the proto-file file. proto-message follows the same resolution rules as type names in .proto files.