mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-12-11 12:47:55 +00:00
97 lines
4.0 KiB
Go
97 lines
4.0 KiB
Go
/* Copyright 2018 The Bazel Authors. All rights reserved.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package language
|
|
|
|
import (
|
|
"github.com/bazelbuild/bazel-gazelle/internal/config"
|
|
"github.com/bazelbuild/bazel-gazelle/internal/resolve"
|
|
"github.com/bazelbuild/bazel-gazelle/internal/rule"
|
|
)
|
|
|
|
// Language describes an extension for Gazelle that provides support for
|
|
// a set of Bazel rules.
|
|
//
|
|
// Languages are used primarily by the fix and update commands. The order
|
|
// in which languages are used matters, since languages may depend on
|
|
// one another. For example, go depends on proto, since go_proto_libraries
|
|
// are generated from metadata stored in proto_libraries.
|
|
//
|
|
// A single instance of Language is created for each fix / update run. Some
|
|
// state may be stored in this instance, but stateless behavior is encouraged,
|
|
// especially since some operations may be concurrent in the future.
|
|
//
|
|
// Tasks languages are used for
|
|
//
|
|
// * Configuration (embedded interface config.Configurer). Languages may
|
|
// define command line flags and alter the configuration in a directory
|
|
// based on directives in build files.
|
|
//
|
|
// * Fixing deprecated usage of rules in build files.
|
|
//
|
|
// * Generating rules from source files in a directory.
|
|
//
|
|
// * Resolving library imports (embedded interface resolve.Resolver). For
|
|
// example, import strings like "github.com/foo/bar" in Go can be resolved
|
|
// into Bazel labels like "@com_github_foo_bar//:go_default_library".
|
|
//
|
|
// Tasks languages support
|
|
//
|
|
// * Generating load statements: languages list files and symbols that may
|
|
// be loaded.
|
|
//
|
|
// * Merging generated rules into existing rules: languages provide metadata
|
|
// that helps with rule matching, merging, and deletion.
|
|
type Language interface {
|
|
config.Configurer
|
|
resolve.Resolver
|
|
|
|
// Kinds returns a map of maps rule names (kinds) and information on how to
|
|
// match and merge attributes that may be found in rules of those kinds. All
|
|
// kinds of rules generated for this language may be found here.
|
|
Kinds() map[string]rule.KindInfo
|
|
|
|
// Loads returns .bzl files and symbols they define. Every rule generated by
|
|
// GenerateRules, now or in the past, should be loadable from one of these
|
|
// files.
|
|
Loads() []rule.LoadInfo
|
|
|
|
// GenerateRules extracts build metadata from source files in a directory.
|
|
// GenerateRules is called in each directory where an update is requested
|
|
// in depth-first post-order.
|
|
//
|
|
// c is the configuration for the current directory.
|
|
// dir is the absolute path to the directory to scan.
|
|
// rel is the relative path to the directory from the repository root.
|
|
// f is the build file. It may be nil. It should not be modified.
|
|
// subdirs is a list of subdirectory names.
|
|
// regularFiles is a list of normal files in the directory.
|
|
// genFiles is a list of generated files, found in outputs of rules.
|
|
// otherEmpty and otherGen are lists of empty and generated rules created
|
|
// by other languages processed before this language.
|
|
//
|
|
// empty is a list of empty rules that may be deleted after merge.
|
|
// gen is a list of generated rules that may be updated or added.
|
|
//
|
|
// Any non-fatal errors this function encounters should be logged using
|
|
// log.Print.
|
|
GenerateRules(c *config.Config, dir, rel string, f *rule.File, subdirs, regularFiles, genFiles []string, otherEmpty, otherGen []*rule.Rule) (empty, gen []*rule.Rule)
|
|
|
|
// Fix repairs deprecated usage of language-specific rules in f. This is
|
|
// called before the file is indexed. Unless c.ShouldFix is true, fixes
|
|
// that delete or rename rules should not be performed.
|
|
Fix(c *config.Config, f *rule.File)
|
|
}
|