github.com/stackb/rules_proto@v0.0.0-20240221195024-5428336c51f1/pkg/protoc/rule_provider.go (about) 1 package protoc 2 3 import ( 4 "github.com/bazelbuild/bazel-gazelle/config" 5 "github.com/bazelbuild/bazel-gazelle/label" 6 "github.com/bazelbuild/bazel-gazelle/resolve" 7 "github.com/bazelbuild/bazel-gazelle/rule" 8 ) 9 10 // RuleProvider implementations are capable of providing a rule and import list 11 // to the gazelle GenerateArgs response. 12 type RuleProvider interface { 13 // Kind of rule e.g. 'proto_library' 14 Kind() string 15 // Name provides the name of the rule. 16 Name() string 17 // Rule provides the gazelle rule implementation. A list of other generating rules in 18 // the package are provided. 19 Rule(othergen ...*rule.Rule) *rule.Rule 20 // Resolve performs deps resolution, similar to the gazelle Resolver 21 // interface. Imports here are always the proto_library file .proto 22 // imports. 23 Resolve(c *config.Config, ix *resolve.RuleIndex, r *rule.Rule, imports []string, from label.Label) 24 // Imports implements part of the Resolver interface 25 Imports(c *config.Config, r *rule.Rule, file *rule.File) []resolve.ImportSpec 26 } 27 28 // FileVisitor is an optional interface for RuleProvider implementations. It 29 // will get called back with the rule.File of the package being visited by 30 // gazelle (it may be nil if no build file already exists). This exists to allow 31 // RuleProvider implementations to modify the file directly (e.g. adding 32 // additional load statements). 33 type FileVisitor interface { 34 VisitFile(*rule.File) *rule.File 35 }