Ruby package annotation

This rule enforces that if a proto file for a public API surface sets option ruby_package, that it uses language idiomatic conventions, as mandated in AIP-191.

Details

This rule looks at each proto file, and complains if the ruby_package file annotation uses anything other than upper camel case, or includes characters other than letters, numbers, and :.

It also ensures that versions with stability (e.g. V1beta1) are capitalized appropriately.

Examples

Case

Incorrect code for this rule:

// Incorrect.
syntax = "proto3";

package google.example.v1;

option ruby_package = "google::example::v1";  // Should be UpperCamelCase.
// Incorrect.
syntax = "proto3";

package google.example.v1;

option ruby_package = "Google.Example.V1";  // Separator should be `::`.

Correct code for this rule:

// Correct.
syntax = "proto3";

package google.example.v1;

option ruby_package = "Google::Example::V1";

Versions with stability

Incorrect code for this rule:

// Incorrect.
syntax = "proto3";

package google.example.v1beta1;

option ruby_package = "Google::Example::V1Beta1"; // Should be V1beta1.

Correct code for this rule:

// Correct.
syntax = "proto3";

package google.example.v1beta1;

option ruby_package = "Google::Example::V1beta1";

Known issues

This rule will improperly complain if it encounters an acronym. For example, it will complain about Google::Cloud::AutoML::V1, preferring AutoMl. This lint rule may be disabled in this case.

Disabling

If you need to violate this rule, use a comment at the top of the file. Remember to also include an aip.dev/not-precedent comment explaining why.

// (-- api-linter: core::0191::ruby-package=disabled
//     aip.dev/not-precedent: We need to do this because reasons. --)
syntax = "proto3";

package google.example.v1;

option ruby_package = "google::example::v1";