12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /* 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)
- }
|