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  }