Linter rulesProtobufenum-naming

enum-naming

Since 0.9.0

This rule checks whether the name of every enum of a Protobuf file is in PascalCase.

Rule Details

PascalCase enum names match the type naming conventions of most target languages, and are what the Protobuf style guide recommends. The enum-value-prefix rule derives the expected prefix of the values from the enum name.

The enum-naming rule checks every enum, including enums nested in messages, and reports Enum name '<name>' should be PascalCase for every name that is not in PascalCase. A name is in PascalCase when it starts with an upper-case letter and contains only letters and digits, such as PetOwner (acronyms such as HTTPServer are accepted).

When the name converted to PascalCase differs from the original and is itself valid, the message ends with a suggestion, for example , e.g. '<converted>'. To convert a name, it is split into words at underscores and other separators, at lower-to-upper case changes and before the last capital of an acronym, and the words are capitalized and joined, so pet_owner becomes PetOwner.

Configuration

This rule has no options.

Examples

Good.

syntax = "proto3";

package acme.pets.v1;

enum PetKind {
  PET_KIND_UNSPECIFIED = 0;
  PET_KIND_DOG = 1;
}

Bad. The linter reports Enum name 'pet_kind' should be PascalCase, e.g. 'PetKind'.

syntax = "proto3";

package acme.pets.v1;

enum pet_kind {
  PET_KIND_UNSPECIFIED = 0;
  PET_KIND_DOG = 1;
}

When Not to Use It

You may disable this rule if the names are part of an existing API that you cannot rename. To allow a single enum, add an // apigenie-lint-disable enum-naming comment to it.

Compatibility

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

Related rules