C# namespace annotation
This rule enforces that if a proto file for a public API surface sets
option csharp_namespace, that it uses language idiomatic conventions, as
mandated in AIP-191.
Details
This rule looks at each proto file, and complains if the csharp_namespace
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 csharp_namespace = "google.example.v1";
// Incorrect.
syntax = "proto3";
package google.example.v1;
option csharp_namespace = "Google::Example::V1";
Correct code for this rule:
// Correct.
syntax = "proto3";
package google.example.v1;
option csharp_namespace = "Google.Example.V1";
Versions with stability
Incorrect code for this rule:
// Incorrect.
syntax = "proto3";
package google.example.v1beta1;
option csharp_namespace = "Google.Example.V1beta1"; // Should be V1Beta1.
Correct code for this rule:
// Correct.
syntax = "proto3";
package google.example.v1beta1;
option csharp_namespace = "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::csharp-namespace=disabled
// aip.dev/not-precedent: We need to do this because reasons. --)
syntax = "proto3";
package google.example.v1;
option csharp_namespace = "google.example.v1";
View on GitHub