Linter rulesProtobufimport-no-public
import-no-public
Since 0.9.0
This rule checks whether a Protobuf file uses import public.
Rule Details
A public import makes the declarations of the imported file visible to every file that imports the importing one. It is meant as a temporary measure when moving declarations between files, but it hides the real dependencies of the importers, and several code generators support it poorly or not at all.
The import-no-public rule reports Import '<import>' should not be public for every
import public statement.
Configuration
This rule has no options.
Examples
Good.
syntax = "proto3";
package acme.pets.v1;
import "google/protobuf/timestamp.proto";
message Pet {
string name = 1;
google.protobuf.Timestamp born_at = 2;
}
Bad. The linter reports Import 'google/protobuf/timestamp.proto' should not be public.
syntax = "proto3";
package acme.pets.v1;
import public "google/protobuf/timestamp.proto";
message Pet {
string name = 1;
google.protobuf.Timestamp born_at = 2;
}
When Not to Use It
You may disable this rule while moving declarations from one file to another, when a public
import keeps the existing importers working. To allow a single import, add an
// apigenie-lint-disable import-no-public comment to it.
Compatibility
This rule is compatible with proto3 files. proto2 and editions files are rejected by the reader and are not linted.