Linter rulesProtobufpackage-naming

package-naming

Since 0.9.0

This rule checks whether the package name of a Protobuf file consists of lower_snake_case components separated by dots.

Rule Details

Package names such as acme.pet_store.v1 map cleanly to directories and to the package and namespace names of the generated code in every language.

The package-naming rule splits the package name at dots and checks that every component is lower_snake_case: it starts with a lower-case letter, and contains only lower-case letters, digits and single underscores, with no underscore at the end. If a component is not, the rule reports Package name '<name>' should be lower_snake_case components separated by dots, followed by a suggestion such as , e.g. 'acme.pet_store.v1' when converting the components gives a different name.

To build the suggestion, each component is split into words at underscores and other separators, at lower-to-upper case changes and before the last capital of an acronym (so that HTTPServer becomes http_server), and the words are joined in lower case with underscores.

Files without a package are not checked; see the package-defined rule.

Configuration

This rule has no options.

Examples

Good.

syntax = "proto3";

package acme.pet_store.v1;

message Pet {
  string name = 1;
}

Bad. The linter reports Package name 'Acme.PetStore.v1' should be lower_snake_case components separated by dots, e.g. 'acme.pet_store.v1'.

syntax = "proto3";

package Acme.PetStore.v1;

message Pet {
  string name = 1;
}

When Not to Use It

You may disable this rule if the package names are dictated by an existing API that you cannot rename.

Compatibility

This rule is compatible with proto3 files. proto2 and editions files are rejected by the reader and are not linted.

Related rules