Gazelle build file generator
============================

.. All external links are here
.. _a gazelle extension: https://github.com/bazel-contrib/rules_jvm/tree/main/java/gazelle
.. _Kotlin Support: https://github.com/aspect-build/aspect-cli/blob/main/gazelle/kotlin/
.. _JavaScript and TypeScript Support: https://github.com/aspect-build/aspect-cli/blob/main/gazelle/js/
.. _Architecture of Gazelle: Design.rst
.. _Repository rules: repository.md
.. _go_repository: repository.md#go_repository
.. _fix: #fix-and-update
.. _update: #fix-and-update
.. _Avoiding conflicts with proto rules: https://github.com/bazelbuild/rules_go/blob/master/proto/core.rst#avoiding-conflicts
.. _gazelle rule: #bazel-rule
.. _doublestar.Match: https://github.com/bmatcuk/doublestar#match
.. _Extending Gazelle: extend.md
.. _extended: `Extending Gazelle`_
.. _gazelle_binary: extend.md#gazelle_binary
.. _import_prefix: https://docs.bazel.build/versions/master/be/protocol-buffer.html#proto_library.import_prefix
.. _strip_import_prefix: https://docs.bazel.build/versions/master/be/protocol-buffer.html#proto_library.strip_import_prefix
.. _buildozer: https://github.com/bazelbuild/buildtools/tree/master/buildozer
.. _Go Release Policy: https://golang.org/doc/devel/release.html#policy
.. _bazel-go-discuss: https://groups.google.com/forum/#!forum/bazel-go-discuss
.. _#bazel on Go Slack: https://gophers.slack.com/archives/C1SCQE54N
.. _#go on Bazel Slack: https://bazelbuild.slack.com/archives/CDBP88Z0D
.. _#514: https://github.com/bazelbuild/rules_python/pull/514
.. _#1030: https://github.com/bazelbuild/bazel-gazelle/issues/1030
.. _rules_jvm: https://github.com/bazel-contrib/rules_jvm
.. _rules_python: https://github.com/bazelbuild/rules_python
.. _rules_r: https://github.com/grailbio/rules_r
.. _rules_haskell: https://github.com/tweag/rules_haskell
.. _rules_nodejs_gazelle: https://github.com/benchsci/rules_nodejs_gazelle
.. _bazel-skylib: https://github.com/bazelbuild/bazel-skylib
.. _bazel_skylib/gazelle/bzl: https://github.com/bazelbuild/bazel-skylib/tree/master/gazelle/bzl
.. _gazelle_cabal: https://github.com/tweag/gazelle_cabal
.. _gazelle_haskell_modules: https://github.com/tweag/gazelle_haskell_modules
.. _stackb/rules_proto: https://github.com/stackb/rules_proto
.. _Open a PR: https://github.com/bazelbuild/bazel-gazelle/edit/master/README.rst
.. _Bazel Slack: https://slack.bazel.build
.. _rules_swift_package_manager: https://github.com/cgrindel/rules_swift_package_manager
.. _gazelle_rust: https://github.com/Calsign/gazelle_rust
.. _rules_rust: https://github.com/bazelbuild/rules_rust

.. role:: cmd(code)
.. role:: flag(code)
.. role:: direc(code)
.. role:: kbd
.. role:: param(kbd)
.. role:: type(emphasis)
.. role:: value(code)
.. |mandatory| replace:: **mandatory value**
.. End of directives

Gazelle is a build file generator for Bazel projects. It can create new
BUILD.bazel files for a project that follows language conventions, and it can
update existing build files to include new sources, dependencies, and
options. Gazelle natively supports Go and protobuf, and it may be extended_
to support new languages and custom rule sets.

Gazelle may be run by Bazel using the `gazelle rule`_, or it may be installed
and run as a command line tool. Gazelle can also generate build files for
external repositories as part of the `go_repository`_ rule.

*Gazelle is under active development. Its interface and the rules it generates
may change. Gazelle is not an official Google product.*

Mailing list: `bazel-go-discuss`_

Slack: `#go on Bazel Slack`_, `#bazel on Go Slack`_

*rules_go and Gazelle are getting community maintainers! If you are a regular
user of either project and are interested in helping out with development,
code reviews, and issue triage, please drop by our Slack channels (linked above)
and say hello!*

.. contents:: **Contents**
  :depth: 2

**See also:**

* `Architecture of Gazelle`_
* `Repository rules`_

  * `go_repository`_

* `Extending Gazelle`_
* `Avoiding conflicts with proto rules`_

Supported languages
-------------------

Gazelle can generate Bazel BUILD files for many languages:

* Go

  Go supported is included here in bazel-gazelle, see below.

* Haskell

  Tweag's `rules_haskell`_ has two extensions: `gazelle_cabal`_, for generating rules from Cabal files
  and `gazelle_haskell_modules`_ for even more fine-grained build definitions.

* Java

  bazel-contrib's `rules_jvm`_ extensions include `a gazelle extension`_ for
  generating ``java_library``, ``java_binary``, ``java_test``, and ``java_test_suite`` rules.

* JavaScript / TypeScript

  Aspect provides `JavaScript and TypeScript Support`_ in aspect-cli (also usable separately).

  BenchSci's `rules_nodejs_gazelle`_ supports generating `ts_project`, `js_library`, `jest_test`,
  and `web_asset` rules, and is able to support module bundlers like Webpack and Next.js


* Kotlin

  Aspect Build provides some `Kotlin Support`_ in the repo of their aspect-cli (also usable separately).
  Still under development, please check the README for currently available features.

* Protocol Buffers

  Support for the `proto_library` rule, as well as `go_proto_library` is in this repository, see below.
  Other language-specific proto rules are not supported here.
  `stackb/rules_proto`_ is a good resource for these rules.

* Python

  `rules_python`_ has an extension for generating ``py_library``, ``py_binary``, and ``py_test`` rules.

* R

  `rules_r`_ has an extension for generating rules for R package builds and tests.

* Rust

  `gazelle_rust`_ is an extension for generating `rules_rust`_ targets.

* Starlark

  `bazel-skylib`_ has an extension for generating ``bzl_library`` rules. See `bazel_skylib/gazelle/bzl`_.

* Swift

  `rules_swift_package_manager`_ has an extension for generating ``swift_library``, ``swift_binary``, and
  ``swift_test`` rules. It also includes facilities for resolving, downloading and building external Swift
  packages for a Bazel workspace.

If you know of an extension which could be linked here, please `open a PR`_!

More languages can be added by `Extending Gazelle`_.
Chat with us in the ``#gazelle`` channel on `Bazel Slack`_ if you'd like to discuss your design.

If you've written your own extension, please consider open-sourcing it for
use by the rest of the community.
Note that such extensions belong in a language-specific repository, not in bazel-gazelle.
See discussion in `#1030`_.

Setup
-----

Running Gazelle with Bazel
~~~~~~~~~~~~~~~~~~~~~~~~~~

To use Gazelle in a new project, add the ``bazel_gazelle`` repository and its
dependencies to your WORKSPACE file and call ``gazelle_dependencies``. It
should look like this:

.. code:: bzl

    load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

    http_archive(
        name = "io_bazel_rules_go",
        integrity = "sha256-M6zErg9wUC20uJPJ/B3Xqb+ZjCPn/yxFF3QdQEmpdvg=",
        urls = [
            "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
            "https://github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
        ],
    )

    http_archive(
        name = "bazel_gazelle",
        integrity = "sha256-12v3pg/YsFBEQJDfooN6Tq+YKeEWVhjuNdzspcvfWNU=",
        urls = [
            "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz",
            "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz",
        ],
    )


    load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
    load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository")

    ############################################################
    # Define your own dependencies here using go_repository.
    # Else, dependencies declared by rules_go/gazelle will be used.
    # The first declaration of an external repository "wins".
    ############################################################

    go_rules_dependencies()

    go_register_toolchains(version = "1.20.5")

    gazelle_dependencies()

``gazelle_dependencies`` supports optional argument ``go_env`` (dict-mapping)
to set project specific go environment variables. If you are using a
`WORKSPACE.bazel` file, you will need to specify that using:

.. code:: bzl

    gazelle_dependencies(go_repository_default_config = "//:WORKSPACE.bazel")

Add the code below to the BUILD or BUILD.bazel file in the root directory
of your repository.

**Important:** For Go projects, replace the string after ``prefix`` with
the portion of your import path that corresponds to your repository.

.. code:: bzl

  load("@bazel_gazelle//:def.bzl", "gazelle")

  # gazelle:prefix github.com/example/project
  gazelle(name = "gazelle")

After adding this code, you can run Gazelle with Bazel.

.. code::

  $ bazel run //:gazelle

This will generate new BUILD.bazel files for your project. You can run the same
command in the future to update existing BUILD.bazel files to include new source
files or options.

You can write other ``gazelle`` rules to run alternate commands like ``update-repos``.

.. code:: bzl

  gazelle(
      name = "gazelle-update-repos",
      args = [
          "-from_file=go.mod",
          "-to_macro=deps.bzl%go_dependencies",
          "-prune",
      ],
      command = "update-repos",
  )

You can also pass additional arguments to Gazelle after a ``--`` argument.

.. code::

  $ bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=deps.bzl%go_dependencies

After running ``update-repos``, you might want to run ``bazel run //:gazelle`` again, as the
``update-repos`` command can affect the output of a normal run of Gazelle.

To verify that all BUILD files are update-to-date, you can use the ``gazelle_test`` rule.

.. code:: bzl

  load("@bazel_gazelle//:def.bzl", "gazelle_test")

  gazelle_test(
      name = "gazelle_test",
      workspace = "//:BUILD.bazel", # a file in the workspace root, where the gazelle will be run
  )

However, please note that gazelle_test cannot be cached.

Running Gazelle with Go
~~~~~~~~~~~~~~~~~~~~~~~

If you have a Go toolchain installed, you can install Gazelle with the
command below:

.. code::

  go install github.com/bazelbuild/bazel-gazelle/cmd/gazelle@latest

Make sure to re-run this command to upgrade Gazelle whenever you upgrade
rules_go in your repository.

To generate BUILD.bazel files in a new project, run the command below, replacing
the prefix with the portion of your import path that corresponds to your
repository.

.. code::

  gazelle -go_prefix github.com/example/project

Most of Gazelle's command-line arguments can be expressed as special comments
in build files. See Directives_ below. You may want to copy this line into
your root build files to avoid having to type ``-go_prefix`` every time.

.. code:: bzl

  # gazelle:prefix github.com/example/project

Compatibility with Go
---------------------

Gazelle is compatible with supported releases of Go, per the
`Go Release Policy`_. The Go Team officially supports the current and previous
minor releases. Older releases are not supported and don't receive bug fixes
or security updates.

Gazelle may use language and library features from the oldest supported release.

Compatibility with rules_go
---------------------------

Gazelle generates build files that use features in newer versions of
``rules_go``. Newer versions of Gazelle *may* generate build files that work
with older versions of ``rules_go``, but check the table below to ensure
you're using a compatible version.

+---------------------+------------------------------+------------------------------+
| **Gazelle version** | **Minimum rules_go version** | **Maximum rules_go version** |
+=====================+==============================+==============================+
| 0.8                 | 0.8                          | n/a                          |
+---------------------+------------------------------+------------------------------+
| 0.9                 | 0.9                          | n/a                          |
+---------------------+------------------------------+------------------------------+
| 0.10                | 0.9                          | 0.11                         |
+---------------------+------------------------------+------------------------------+
| 0.11                | 0.11                         | 0.24                         |
+---------------------+------------------------------+------------------------------+
| 0.12                | 0.11                         | 0.24                         |
+---------------------+------------------------------+------------------------------+
| 0.13                | 0.13                         | 0.24                         |
+---------------------+------------------------------+------------------------------+
| 0.14                | 0.13                         | 0.24                         |
+---------------------+------------------------------+------------------------------+
| 0.15                | 0.13                         | 0.24                         |
+---------------------+------------------------------+------------------------------+
| 0.16                | 0.13                         | 0.24                         |
+---------------------+------------------------------+------------------------------+
| 0.17                | 0.13                         | 0.24                         |
+---------------------+------------------------------+------------------------------+
| 0.18                | 0.19                         | 0.24                         |
+---------------------+------------------------------+------------------------------+
| 0.19                | 0.19                         | 0.24                         |
+---------------------+------------------------------+------------------------------+
| 0.20                | 0.20                         | 0.24                         |
+---------------------+------------------------------+------------------------------+
| 0.21                | 0.20                         | 0.24                         |
+---------------------+------------------------------+------------------------------+
| 0.22                | 0.20                         | 0.24                         |
+---------------------+------------------------------+------------------------------+
| 0.23                | 0.26                         | 0.28                         |
+---------------------+------------------------------+------------------------------+
| 0.24                | 0.29                         | 0.40                         |
+---------------------+------------------------------+------------------------------+
| 0.25                | 0.29                         | 0.40                         |
+---------------------+------------------------------+------------------------------+
| 0.26                | 0.29                         | 0.40                         |
+---------------------+------------------------------+------------------------------+
| 0.27                | 0.29                         | 0.40                         |
+---------------------+------------------------------+------------------------------+
| 0.28                | 0.35                         | 0.40                         |
+---------------------+------------------------------+------------------------------+
| 0.29                | 0.35                         | 0.40                         |
+---------------------+------------------------------+------------------------------+
| 0.30                | 0.35                         | 0.40                         |
+---------------------+------------------------------+------------------------------+
| 0.31                | 0.35                         | 0.40                         |
+---------------------+------------------------------+------------------------------+
| 0.32                | **0.41**                     | n/a                          |
+---------------------+------------------------------+------------------------------+
| 0.33                | 0.41                         | n/a                          |
+---------------------+------------------------------+------------------------------+
| 0.34                | 0.41                         | n/a                          |
+---------------------+------------------------------+------------------------------+
| 0.35                | 0.41                         | n/a                          |
+---------------------+------------------------------+------------------------------+
| 0.36                | 0.41                         | n/a                          |
+---------------------+------------------------------+------------------------------+
| 0.37                | 0.41                         | n/a                          |
+---------------------+------------------------------+------------------------------+

Usage
-----

Command line
~~~~~~~~~~~~

.. code::

  gazelle <command> [flags...] [package-dirs...]

The first argument to Gazelle may be one of the commands below. If no command
is specified, ``update`` is assumed. The remaining arguments are specific
to each command and are documented below.

update_
  Scans sources files, then generates and updates build files.

fix_
  Same as the ``update`` command, but it also fixes deprecated usage of rules.

update-repos_
  Adds and updates repository rules in the WORKSPACE file.

Bazel rule
~~~~~~~~~~

Gazelle may be run via a rule. See `Running Gazelle with Bazel`_ for setup
instructions. This rule builds Gazelle and generates a wrapper script that
executes Gazelle with baked-in set of arguments. You can run this script
with ``bazel run``, or you can copy it into your workspace and run it directly.

The following attributes are available on the ``gazelle`` rule.

+----------------------+---------------------+--------------------------------------+
| **Name**             | **Type**            | **Default value**                    |
+======================+=====================+======================================+
| :param:`gazelle`     | :type:`label`       | :value:`@bazel_gazelle//cmd/gazelle` |
+----------------------+---------------------+--------------------------------------+
| The `gazelle_binary`_ rule that builds Gazelle. You can substitute a modified     |
| version of Gazelle with this. See `Extending Gazelle`_.                           |
+----------------------+---------------------+--------------------------------------+
| :param:`external`    | :type:`string`      | :value:`external`                    |
+----------------------+---------------------+--------------------------------------+
| The method for resolving unknown imports to Bazel dependencies. May be            |
| :value:`external`, :value:`static` or :value:`vendored`.                          |
| See `Dependency resolution`_.                                                     |
+----------------------+---------------------+--------------------------------------+
| :param:`build_tags`  | :type:`string_list` | :value:`[]`                          |
+----------------------+---------------------+--------------------------------------+
| The list of Go build tags that Gazelle should consider to always be true.         |
+----------------------+---------------------+--------------------------------------+
| :param:`prefix`      | :type:`string`      | :value:`""`                          |
+----------------------+---------------------+--------------------------------------+
| The import path that corresponds to the repository root directory.                |
|                                                                                   |
| Note: It's usually better to write a directive like                               |
| ``# gazelle:prefix example.com/repo`` in your build file instead of setting       |
| this attribute.                                                                   |
+----------------------+---------------------+--------------------------------------+
| :param:`extra_args`  | :type:`string_list` | :value:`[]`                          |
+----------------------+---------------------+--------------------------------------+
| A list of extra command line arguments passed to Gazelle.  Note that              |
| ``extra_args`` are suppressed by extra command line args (e.g.                    |
| ``bazel run //:gazelle -- subdir``).                                              |
| See https://github.com/bazelbuild/bazel-gazelle/issues/536 for explanation.       |
+----------------------+---------------------+--------------------------------------+
| :param:`command`     | :type:`string`      | :value:`update`                      |
+----------------------+---------------------+--------------------------------------+
| The Gazelle command to use. May be :value:`fix`, :value:`update` or               |
| :value:`update-repos`.                                                            |
+----------------------+---------------------+--------------------------------------+

``fix`` and ``update``
~~~~~~~~~~~~~~~~~~~~~~

The ``update`` command is the most common way of running Gazelle. Gazelle
scans sources in directories throughout the repository, then creates and updates
build files.

The ``fix`` command does everything ``update`` does, but it also fixes
deprecated usage of rules, analogous to ``go fix``. For example, ``cgo_library``
will be consolidated with ``go_library``. This command may delete or rename
rules, so it's not on by default. See `Fix command transformations`_
for details.

Both commands accept a list of directories to process as positional arguments.
If no directories are specified, Gazelle will process the current directory.
Subdirectories will be processed recursively.

The following flags are accepted:

+-------------------------------------------------------------------+----------------------------------------+
| **Name**                                                          | **Default value**                      |
+===================================================================+========================================+
| :flag:`-build_file_name file1,file2,...`                          | :value:`BUILD.bazel,BUILD`             |
+-------------------------------------------------------------------+----------------------------------------+
| Comma-separated list of file names. Gazelle recognizes these files as Bazel                                |
| build files. New files will use the first name in this list. Use this if                                   |
| your project contains non-Bazel files named ``BUILD`` (or ``build`` on                                     |
| case-insensitive file systems).                                                                            |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-build_tags tag1,tag2`                                     |                                        |
+-------------------------------------------------------------------+----------------------------------------+
| List of Go build tags Gazelle will consider to be true. Gazelle applies                                    |
| constraints when generating Go rules. It assumes certain tags are true on                                  |
| certain platforms (for example, ``amd64,linux``). It assumes all Go release                                |
| tags are true (for example, ``go1.8``). It considers other tags to be false                                |
| (for example, ``ignore``). This flag overrides that behavior.                                              |
|                                                                                                            |
| Bazel may still filter sources with these tags. Use                                                        |
| ``bazel build --define gotags=foo,bar`` to set tags at build time.                                         |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-exclude pattern`                                          |                                        |
+-------------------------------------------------------------------+----------------------------------------+
| Prevents Gazelle from processing a file or directory if the given                                          |
| `doublestar.Match`_ pattern matches. If the pattern refers to a source file,                               |
| Gazelle won't include it in any rules. If the pattern refers to a directory,                               |
| Gazelle won't recurse into it.                                                                             |
|                                                                                                            |
| This option may be repeated. Patterns must be slash-separated, relative to the                             |
| repository root. This is equivalent to the ``# gazelle:exclude pattern``                                   |
| directive.                                                                                                 |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-external external|static|vendored`                        | :value:`external`                      |
+-------------------------------------------------------------------+----------------------------------------+
| Determines how Gazelle resolves import paths that cannot be resolve in the                                 |
| current repository. May be :value:`external`, :value:`static` or :value:`vendored`. See                    |
| `Dependency resolution`_.                                                                                  |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-index true|false`                                         | :value:`true`                          |
+-------------------------------------------------------------------+----------------------------------------+
| Determines whether Gazelle should index the libraries in the current repository and whether it             |
| should use the index to resolve dependencies. If this is switched off, Gazelle would rely on               |
| ``# gazelle:prefix`` directive or ``-go_prefix`` flag to resolve dependencies.                             |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-go_grpc_compiler`                                         | ``@io_bazel_rules_go//proto:go_grpc``  |
+-------------------------------------------------------------------+----------------------------------------+
| The protocol buffers compiler to use for building go bindings for gRPC. May be repeated.                   |
|                                                                                                            |
| See `Predefined plugins`_ for available options; commonly used options include                             |
| ``@io_bazel_rules_go//proto:gofast_grpc`` and ``@io_bazel_rules_go//proto:gogofaster_grpc``.               |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-go_naming_convention`                                     |                                        |
+-------------------------------------------------------------------+----------------------------------------+
| Controls the names of generated Go targets. Equivalent to the                                              |
| ``# gazelle:go_naming_convention`` directive. See details in                                               |
| `Directives`_ below.                                                                                       |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-go_naming_convention_external`                            |                                        |
+-------------------------------------------------------------------+----------------------------------------+
| Controls the default naming convention used when resolving libraries in                                    |
| external repositories with unknown naming conventions. Equivalent to the                                   |
| ``# gazelle:go_naming_convention_external`` directive.                                                     |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-go_prefix example.com/repo`                               |                                        |
+-------------------------------------------------------------------+----------------------------------------+
| A prefix of import paths for libraries in the repository that corresponds to                               |
| the repository root. Equivalent to setting the ``# gazelle:prefix`` directive                              |
| in the root BUILD.bazel file or the ``prefix`` attribute of the ``gazelle`` rule. If                       |
| neither of those are set, this option is mandatory.                                                        |
|                                                                                                            |
| This prefix is used to determine whether an import path refers to a library                                |
| in the current repository or an external dependency.                                                       |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-go_proto_compiler`                                        | ``@io_bazel_rules_go//proto:go_proto`` |
+-------------------------------------------------------------------+----------------------------------------+
| The protocol buffers compiler to use for building go bindings. May be repeated.                            |
|                                                                                                            |
| See `Predefined plugins`_ for available options; commonly used options include                             |
| ``@io_bazel_rules_go//proto:gofast_proto`` and ``@io_bazel_rules_go//proto:gogofaster_proto``.             |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-known_import example.com`                                 |                                        |
+-------------------------------------------------------------------+----------------------------------------+
| Skips import path resolution for a known domain. May be repeated.                                          |
|                                                                                                            |
| When Gazelle resolves an import path to an external dependency, it attempts                                |
| to discover the remote repository root over HTTP. Gazelle skips this                                       |
| discovery step for a few well-known domains with predictable structure, like                               |
| golang.org and github.com. This flag specifies additional domains to skip,                                 |
| which is useful in situations where the lookup would fail for some reason.                                 |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-mode fix|print|diff`                                      | :value:`fix`                           |
+-------------------------------------------------------------------+----------------------------------------+
| Method for emitting merged build files.                                                                    |
|                                                                                                            |
| In ``fix`` mode, Gazelle writes generated and merged files to disk. In                                     |
| ``print`` mode, it prints them to stdout. In ``diff`` mode, it prints a                                    |
| unified diff.                                                                                              |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-proto default|file|package|legacy|disable|disable_global` | :value:`default`                       |
+-------------------------------------------------------------------+----------------------------------------+
| Determines how Gazelle should generate rules for .proto files. See details                                 |
| in `Directives`_ below.                                                                                    |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-proto_group group`                                        | :value:`""`                            |
+-------------------------------------------------------------------+----------------------------------------+
| Determines the proto option Gazelle uses to group .proto files into rules                                  |
| when in ``package`` mode. See details in `Directives`_ below.                                              |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-proto_import_prefix path`                                 |                                        |
+-------------------------------------------------------------------+----------------------------------------+
| Sets the `import_prefix`_ attribute of generated ``proto_library`` rules.                                  |
| This adds a prefix to the string used to import ``.proto`` files listed in                                 |
| the ``srcs`` attribute of generated rules. Equivalent to the                                               |
| ``# gazelle:proto_import_prefix`` directive. See details in `Directives`_ below.                           |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-repo_root dir`                                            |                                        |
+-------------------------------------------------------------------+----------------------------------------+
| The root directory of the repository. Gazelle normally infers this to be the                               |
| directory containing the WORKSPACE file.                                                                   |
|                                                                                                            |
| Gazelle will not process packages outside this directory.                                                  |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-lang lang1,lang2,...`                                     | :value:`""`                            |
+-------------------------------------------------------------------+----------------------------------------+
| Selects languages for which to compose and index rules.                                                    |
|                                                                                                            |
| By default, all languages that this Gazelle was built with are processed.                                  |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-cpuprofile filename`                                      | :value:`""`                            |
+-------------------------------------------------------------------+----------------------------------------+
| If specified, gazelle uses [runtime/pprof](https://pkg.go.dev/runtime/pprof#StartCPUProfile) to collect    |
| CPU profiling information from the command and save it to the given file.                                  |
|                                                                                                            |
| By default, this is disabled                                                                               |
+-------------------------------------------------------------------+----------------------------------------+
| :flag:`-memprofile filename`                                      | :value:`""`                            |
+-------------------------------------------------------------------+----------------------------------------+
| If specified, gazelle uses [runtime/pprof](https://pkg.go.dev/runtime/pprof#WriteHeapProfile) to collect   |
| memory a profile information from the command and save it to a file.                                       |
|                                                                                                            |
| By default, this is disabled                                                                               |
+-------------------------------------------------------------------+----------------------------------------+

.. _Predefined plugins: https://github.com/bazelbuild/rules_go/blob/master/proto/core.rst#predefined-plugins

``update-repos``
~~~~~~~~~~~~~~~~

The ``update-repos`` command updates repository rules.  It can write the rules
to either the WORKSPACE (by default) or a .bzl file macro function.  It can be
used to add new repository rules or update existing rules to the specified
version. It can also import repository rules from a ``go.mod`` or a ``go.work``
file.

WARNING: This command is mainly used for managing external Go dependencies in Bazel's WORKSPACE mode.
For managing external Go dependencies in Bazel's BzlMod mode, please check: https://github.com/bazelbuild/rules_go/blob/master/docs/go/core/bzlmod.md#external-dependencies

.. code:: bash

  # Add or update a repository to latest version by import path
  $ gazelle update-repos example.com/new/repo

  # Add or update a repository to specified version/commit by import path
  $ gazelle update-repos example.com/new/repo@v1.3.1

  # Import repositories from go.mod
  $ gazelle update-repos -from_file=go.mod

  # Import repositories from go.work
  $ gazelle update-repos -from_file=go.work

  # Import repositories from go.mod and update macro
  $ gazelle update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories

  # Import repositories from go.work and update macro
  $ gazelle update-repos -from_file=go.work -to_macro=repositories.bzl%go_repositories

The following flags are accepted:

+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| **Name**                                                                                                 | **Default value**                            |
+==========================================================================================================+==============================================+
| :flag:`-from_file lock-file`                                                                             |                                              |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| Import repositories from a file as `go_repository`_ rules. These rules will be added to the bottom of the WORKSPACE file or merged with existing rules. |
|                                                                                                                                                         |
| The lock file format is inferred from the file name. ``go.mod`` and ``go.work`` are all supported.                                                      |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| :flag:`-repo_root dir`                                                                                   |                                              |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| The root directory of the repository. Gazelle normally infers this to be the directory containing the WORKSPACE file.                                   |
|                                                                                                                                                         |
| Gazelle will not process packages outside this directory.                                                                                               |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| :flag:`-to_macro macroFile%defName`                                                                      |                                              |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| Tells Gazelle to write new repository rules into a .bzl macro function rather than the WORKSPACE file.                                                  |
|                                                                                                                                                         |
| The ``repository_macro`` directive should be added to the WORKSPACE in order for future Gazelle calls to recognize the repos defined in the macro file. |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| :flag:`-prune true|false`                                                                                | :value:`false`                               |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| When true, Gazelle will remove `go_repository`_ rules that no longer have equivalent repos in the ``go.mod`` file.                                      |
|                                                                                                                                                         |
| This flag can only be used with ``-from_file``.                                                                                                         |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| :flag:`-build_directives arg1,arg2,...`                                                                  |                                              |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| Sets the ``build_directives attribute`` for the generated `go_repository`_ rule(s).                                                                     |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| :flag:`-build_external external|vendored`                                                                |                                              |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| Sets the ``build_external`` attribute for the generated `go_repository`_ rule(s).                                                                       |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| :flag:`-build_extra_args arg1,arg2,...`                                                                  |                                              |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| Sets the ``build_extra_args attribute`` for the generated `go_repository`_ rule(s).                                                                     |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| :flag:`-build_file_generation auto|on|off|clean`                                                         |                                              |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| Sets the ``build_file_generation`` attribute for the generated `go_repository`_ rule(s).                                                                |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| :flag:`-build_file_names file1,file2,...`                                                                |                                              |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| Sets the ``build_file_name`` attribute for the generated `go_repository`_ rule(s).                                                                      |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| :flag:`-build_file_proto_mode default|package|legacy|disable|disable_global`                             |                                              |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| Sets the ``build_file_proto_mode`` attribute for the generated `go_repository`_ rule(s).                                                                |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| :flag:`-build_tags tag1,tag2,...`                                                                        |                                              |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| Sets the ``build_tags`` attribute for the generated `go_repository`_ rule(s).                                                                           |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+

Directives
~~~~~~~~~~

Gazelle can be configured with *directives*, which are written as top-level
comments in build files. Most options that can be set on the command line
can also be set using directives. Some options can only be set with
directives.

Directive comments have the form ``# gazelle:key value``. For example:

.. code:: bzl

  load("@io_bazel_rules_go//go:def.bzl", "go_library")

  # gazelle:prefix github.com/example/project
  # gazelle:build_file_name BUILD,BUILD.bazel

  go_library(
      name = "go_default_library",
      srcs = ["example.go"],
      importpath = "github.com/example/project",
      visibility = ["//visibility:public"],
  )

Directives apply in the directory where they are set *and* in subdirectories.
This means, for example, if you set ``# gazelle:prefix`` in the build file
in your project's root directory, it affects your whole project. If you
set it in a subdirectory, it only affects rules in that subtree.

The following directives are recognized:

+---------------------------------------------------+----------------------------------------+
| **Directive**                                     | **Default value**                      |
+===================================================+========================================+
| :direc:`# gazelle:build_file_name names`          | :value:`BUILD.bazel,BUILD`             |
+---------------------------------------------------+----------------------------------------+
| Comma-separated list of file names. Gazelle recognizes these files as Bazel                |
| build files. New files will use the first name in this list. Use this if                   |
| your project contains non-Bazel files named ``BUILD`` (or ``build`` on                     |
| case-insensitive file systems).                                                            |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:build_tags foo,bar`             | none                                   |
+---------------------------------------------------+----------------------------------------+
| List of Go build tags Gazelle will consider to be true. Gazelle applies                    |
| constraints when generating Go rules. It assumes certain tags are true on                  |
| certain platforms (for example, ``amd64,linux``). It assumes all Go release                |
| tags are true (for example, ``go1.8``). It considers other tags to be false                |
| (for example, ``ignore``). This flag overrides that behavior.                              |
|                                                                                            |
| Bazel may still filter sources with these tags. Use                                        |
| ``bazel build --define gotags=foo,bar`` to set tags at build time.                         |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:exclude pattern`                | n/a                                    |
+---------------------------------------------------+----------------------------------------+
| Prevents Gazelle from processing a file or directory if the given                          |
| `doublestar.Match`_ pattern matches. If the pattern refers to a source file,               |
| Gazelle won't include it in any rules. If the pattern refers to a directory,               |
| Gazelle won't recurse into it. This directive may be repeated to exclude                   |
| multiple patterns, one per line.                                                           |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:follow pattern`                 | n/a                                    |
+---------------------------------------------------+----------------------------------------+
| Instructs Gazelle to follow a symbolic link to a directory within the repository if the    |
| given `doublestar.Match`_ pattern matches. Normally, Gazelle does not follow symbolic      |
| links unless they point outside of the repository root.                                    |
|                                                                                            |
| Care must be taken to avoid visiting a directory more than once.                           |
| The ``# gazelle:exclude`` directive may be used to prevent Gazelle from                    |
| recursing into a directory.                                                                |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:go_generate_proto`              | ``true``                               |
+---------------------------------------------------+----------------------------------------+
| Instructs Gazelle's Go extension whether to generate ``go_proto_library`` rules for        |
| ``proto_library`` rules generated by the Proto extension. When this directive is ``true``  |
| Gazelle will generate ``go_proto_library`` and ``go_library`` according to                 |
| ``# gazelle:proto``. When this directive is ``false``, the Go extension will ignore any    |
| ``proto_library`` rules. If there are any pre-generated Go files, they will be treated as  |
| regular Go files.                                                                          |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:go_test mode`                   | ``default``                            |
+---------------------------------------------------+----------------------------------------+
| Tells Gazelle how to generate rules for _test.go files. Valid values are:                  |
|                                                                                            |
| * ``default``: One ``go_test`` rule will be generated whose ``srcs`` includes              |
|   all ``_test.go`` files in the directory.                                                 |
| * ``file``: A distinct ``go_test`` rule will be generated for each ``_test.go`` file in the|
|   package directory.                                                                       |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:go_grpc_compilers`              | ``@io_bazel_rules_go//proto:go_grpc``  |
+---------------------------------------------------+----------------------------------------+
| The protocol buffers compiler(s) to use for building go bindings for gRPC.                 |
| Multiple compilers, separated by commas, may be specified.                                 |
| Omit the directive value to reset ``go_grpc_compilers`` back to the default.               |
|                                                                                            |
| See `Predefined plugins`_ for available options; commonly used options include             |
| ``@io_bazel_rules_go//proto:gofast_grpc`` and                                              |
| ``@io_bazel_rules_go//proto:gogofaster_grpc``.                                             |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:go_naming_convention`           | inferred automatically                 |
+---------------------------------------------------+----------------------------------------+
| Controls the names of generated Go targets.                                                |
|                                                                                            |
| Valid values are:                                                                          |
|                                                                                            |
| * ``go_default_library``: Library targets are named ``go_default_library``, test targets   |
|   are named ``go_default_test``.                                                           |
| * ``import``: Library and test targets are named after the last segment of their import    |
|   path.                                                                                    |
|   For example, ``example.repo/foo`` is named ``foo``, and the test target is ``foo_test``. |
|   Major version suffixes like ``/v2`` are dropped.                                         |
|   For a main package with a binary ``foobin``, the names are instead ``foobin_lib`` and    |
|   ``foobin_test``.                                                                         |
| * ``import_alias``: Same as ``import``, but an ``alias`` target is generated named         |
|   ``go_default_library`` to ensure backwards compatibility.                                |
|                                                                                            |
| If no naming convention is set, Gazelle attempts to infer the convention in                |
| use by reading the root build file and build files in immediate                            |
| subdirectories. If no Go targets are found, Gazelle defaults to ``import``.                |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:go_naming_convention_external`  | n/a                                    |
+---------------------------------------------------+----------------------------------------+
| Controls the default naming convention used when resolving libraries in                    |
| external repositories with unknown naming conventions. Accepts the same values             |
| as ``go_naming_convention``.                                                               |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:go_proto_compilers`             | ``@io_bazel_rules_go//proto:go_proto`` |
+---------------------------------------------------+----------------------------------------+
| The protocol buffers compiler(s) to use for building go bindings.                          |
| Multiple compilers, separated by commas, may be specified.                                 |
| Omit the directive value to reset ``go_proto_compilers`` back to the default.              |
|                                                                                            |
| See `Predefined plugins`_ for available options; commonly used options include             |
| ``@io_bazel_rules_go//proto:gofast_proto`` and                                             |
| ``@io_bazel_rules_go//proto:gogofaster_proto``.                                            |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:ignore`                         | n/a                                    |
+---------------------------------------------------+----------------------------------------+
| Prevents Gazelle from modifying the build file. Gazelle will still read                    |
| rules in the build file and may modify build files in subdirectories.                      |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:importmap_prefix path`          | See below                              |
+---------------------------------------------------+----------------------------------------+
| A prefix for ``importmap`` attributes in library rules. Gazelle will set                   |
| an ``importmap`` on a ``go_library`` or ``go_proto_library`` by                            |
| concatenating this with the relative path from the directory where the                     |
| prefix is set to the library. For example, if ``importmap_prefix`` is set                  |
| to ``"x/example.com/repo"`` in the build file ``//foo/bar:BUILD.bazel``,                   |
| then a library in ``foo/bar/baz`` will have the ``importmap`` of                           |
| ``"x/example.com/repo/baz"``.                                                              |
|                                                                                            |
| ``importmap`` is not set when it matches ``importpath``.                                   |
|                                                                                            |
| As a special case, when Gazelle enters a directory named ``vendor``, it                    |
| sets ``importmap_prefix`` to a string based on the repository name and the                 |
| location of the vendor directory. If you wish to override this, you'll need                |
| to set ``importmap_prefix`` explicitly in the vendor directory.                            |
+------------------------------------------------------------+-------------------------------+
| :direc:`# gazelle:map_kind from_kind to_kind to_kind_load` | n/a                           |
+------------------------------------------------------------+-------------------------------+
| Customizes the kind of rules generated by Gazelle.                                         |
|                                                                                            |
| As a separate step after generating rules, any new rules of kind ``from_kind`` have their  |
| kind replaced with ``to_kind``. This means that ``to_kind`` must accept the same           |
| parameters and behave similarly.                                                           |
|                                                                                            |
| Most commonly, this would be used to replace the rules provided by ``rules_go`` with       |
| custom macros. For example,                                                                |
| ``gazelle:map_kind go_binary go_deployable //tools/go:def.bzl`` would configure Gazelle to |
| produce rules of kind ``go_deployable`` as loaded from ``//tools/go:def.bzl`` instead of   |
| ``go_binary``, for this directory or within.                                               |
|                                                                                            |
| Existing rules of the old kind will be ignored. To switch your codebase from a builtin     |
| kind to a mapped kind, use `buildozer`_.                                                   |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:prefix path`                    | n/a                                    |
+---------------------------------------------------+----------------------------------------+
| A prefix for ``importpath`` attributes on library rules. Gazelle will set                  |
| an ``importpath`` on a ``go_library`` or ``go_proto_library`` by                           |
| concatenating this with the relative path from the directory where the                     |
| prefix is set to the library. Most commonly, ``prefix`` is set to the                      |
| name of a repository in the root directory of a repository. For example,                   |
| in this repository, ``prefix`` is set in ``//:BUILD.bazel`` to                             |
| ``github.com/bazelbuild/bazel-gazelle``. The ``go_library`` in                             |
| ``//cmd/gazelle`` is assigned the ``importpath``                                           |
| ``"github.com/bazelbuild/bazel-gazelle/cmd/gazelle"``.                                     |
|                                                                                            |
| As a special case, when Gazelle enters a directory named ``vendor``, it sets               |
| ``prefix`` to the empty string. This automatically gives vendored libraries                |
| an intuitive ``importpath``.                                                               |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:proto mode`                     | :value:`default`                       |
+---------------------------------------------------+----------------------------------------+
| Tells Gazelle how to generate rules for .proto files. Valid values are:                    |
|                                                                                            |
| * ``default``: ``proto_library``, ``go_proto_library``, and ``go_library``                 |
|   rules are generated using ``@io_bazel_rules_go//proto:def.bzl``. Only one                |
|   of each rule may be generated per directory. This is the default mode.                   |
| * ``file``: a ``proto_library`` rule is generated for every .proto file.                   |
| * ``package``: multiple ``proto_library`` and ``go_proto_library`` rules                   |
|   may be generated in the same directory. .proto files are grouped into                    |
|   rules based on their package name or another option (see ``proto_group``).               |
| * ``legacy``: ``filegroup`` rules are generated for use by                                 |
|   ``@io_bazel_rules_go//proto:go_proto_library.bzl``. ``go_proto_library``                 |
|   rules must be written by hand. Gazelle will run in this mode automatically               |
|   if ``go_proto_library.bzl`` is loaded to avoid disrupting existing                       |
|   projects, but this can be overridden with a directive.                                   |
| * ``disable``: .proto files are ignored. Gazelle will run in this mode                     |
|   automatically if ``go_proto_library`` is loaded from any other source,                   |
|   but this can be overridden with a directive.                                             |
| * ``disable_global``: like ``disable`` mode, but also prevents Gazelle from                |
|   using any special cases in dependency resolution for Well Known Types and                |
|   Google APIs. Useful for avoiding build-time dependencies on protoc.                      |
|                                                                                            |
| This directive applies to the current directory and subdirectories. As a                   |
| special case, when Gazelle enters a directory named ``vendor``, if the proto               |
| mode isn't set explicitly in a parent directory or on the command line,                    |
| Gazelle will run in ``disable`` mode. Additionally, if the file                            |
| ``@io_bazel_rules_go//proto:go_proto_library.bzl`` is loaded, Gazelle                      |
| will run in ``legacy`` mode.                                                               |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:proto_group option`             | :value:`""`                            |
+---------------------------------------------------+----------------------------------------+
| *This directive is only effective in* ``package`` *mode (see above).*                      |
|                                                                                            |
| Specifies an option that Gazelle can use to group .proto files into rules.                 |
| For example, when set to ``go_package``, .proto files with the same                        |
| ``option go_package`` will be grouped together.                                            |
|                                                                                            |
| When this directive is set to the empty string, Gazelle will group packages                |
| by their proto package statement.                                                          |
|                                                                                            |
| Rule names are generated based on the last run of identifier characters                    |
| in the package name. For example, if the package is ``"foo/bar/baz"``, the                 |
| ``proto_library`` rule will be named ``baz_proto``.                                        |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:proto_import_prefix path`       | n/a                                    |
+---------------------------------------------------+----------------------------------------+
| Sets the `import_prefix`_ attribute of generated ``proto_library`` rules.                  |
| This adds a prefix to the string used to import ``.proto`` files listed in                 |
| the ``srcs`` attribute of generated rules.                                                 |
|                                                                                            |
| For example, if the target ``//a:b_proto`` has ``srcs = ["b.proto"]`` and                  |
| ``import_prefix = "github.com/x/y"``, then ``b.proto`` should be imported                  |
| with the string ``"github.com/x/y/a/b.proto"``.                                            |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:proto_strip_import_prefix path` | n/a                                    |
+---------------------------------------------------+----------------------------------------+
| Sets the `strip_import_prefix`_ attribute of generated ``proto_library`` rules.            |
| This is a prefix to strip from the strings used to import ``.proto`` files.                |
|                                                                                            |
| If the prefix starts with a slash, it's intepreted relative to the repository              |
| root. Otherwise, it's relative to the directory containing the build file.                 |
| The package-relative form is only useful when a single build file covers                   |
| ``.proto`` files in subdirectories. Gazelle doesn't generate build files like              |
| this, so only paths with a leading slash should be used. Gazelle will print                |
| a warning when the package-relative form is used.                                          |
|                                                                                            |
| For example, if the target ``//proto/a:b_proto`` has ``srcs = ["b.proto"]``                |
| and ``strip_import_prefix = "/proto"``, then ``b.proto`` should be imported                |
| with the string ``"a/b.proto"``.                                                           |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:resolve ...`                    | n/a                                    |
+---------------------------------------------------+----------------------------------------+
| Specifies an explicit mapping from an import string to a label for                         |
| `Dependency resolution`_. The format for a resolve directive is:                           |
|                                                                                            |
| ``# gazelle:resolve source-lang import-lang import-string label``                          |
|                                                                                            |
| * ``source-lang`` is the language of the source code being imported.                       |
| * ``import-lang`` is the language importing the library. This is usually                   |
|   the same as ``source-lang`` but may differ with generated code. For                      |
|   example, when resolving dependencies for a ``go_proto_library``,                         |
|   ``source-lang`` would be ``"proto"`` and ``import-lang`` would be ``"go"``.              |
|   ``import-lang`` may be omitted if it is the same as ``source-lang``.                     |
| * ``import-string`` is the string used in source code to import a library.                 |
| * ``label`` is the Bazel label that Gazelle should write in ``deps``.                      |
|                                                                                            |
| For example:                                                                               |
|                                                                                            |
| .. code:: bzl                                                                              |
|                                                                                            |
|   # gazelle:resolve go example.com/foo //foo:go_default_library                            |
|   # gazelle:resolve proto go foo/foo.proto //foo:foo_go_proto                              |
|                                                                                            |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:resolve_regexp ...`             | n/a                                    |
+---------------------------------------------------+----------------------------------------+
| Specifies an explicit mapping from an import regex to a label for                          |
| `Dependency resolution`_. The format for a resolve directive is:                           |
|                                                                                            |
| ``# gazelle:resolve_regexp source-lang import-lang import-string-regex label``             |
|                                                                                            |
| * ``source-lang`` is the language of the source code being imported.                       |
| * ``import-lang`` is the language importing the library. This is usually                   |
|   the same as ``source-lang`` but may differ with generated code. For                      |
|   example, when resolving dependencies for a ``go_proto_library``,                         |
|   ``source-lang`` would be ``"proto"`` and ``import-lang`` would be ``"go"``.              |
|   ``import-lang`` may be omitted if it is the same as ``source-lang``.                     |
| * ``import-string-regex`` is the regex applied to the import in the source code.           |
|   If it matches, that import will be resolved to the label specified below.                |
| * ``label`` is the Bazel label that Gazelle should write in ``deps``. The label            |
|   can be constructed using captured strings from the subpattern matching in                |
|   import-string-regex                                                                      |
|                                                                                            |
| For example:                                                                               |
|                                                                                            |
| .. code:: bzl                                                                              |
|                                                                                            |
|   # gazelle:resolve_regexp go example.com/.* //foo:go_default_library                      |
|   # gazelle:resolve_regexp proto go foo/.*\.proto //foo:foo_go_proto                       |
|   # gazelle:resolve_regexp proto go foo/(.*)\.proto //foo/$1:foo_rule_proto                |
|                                                                                            |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:go_visibility label`            | n/a                                    |
+---------------------------------------------------+----------------------------------------+
| By default, internal packages are only visible to its siblings. This directive adds a label|
| internal packages should be visible to additionally. This directive can be used several    |
| times, adding a list of labels.                                                            |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:lang lang1,lang2,...`           | n/a                                    |
+---------------------------------------------------+----------------------------------------+
| Sets the language selection flag for this and descendent packages, which causes gazelle to |
| index and generate rules for only the languages named in this directive.                   |
+---------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:default_visibility visibility`  | n/a                                    |
+---------------------------------------------------+----------------------------------------+
| Comma-separated list of visibility specifications.                                         |
| This directive adds the visibility specifications for this and descendant packages.        |
|                                                                                            |
| For example:                                                                               |
|                                                                                            |
| .. code:: bzl                                                                              |
|                                                                                            |
|   # gazelle:default_visibility //foo:__subpackages__,//src:__subpackages__                 |
+---------------------------------------------------+----------------------------------------+

Gazelle also reads directives from the WORKSPACE file. They may be used to
discover custom repository names and known prefixes. The ``fix`` and ``update``
commands use these directives for dependency resolution. ``update-repos`` uses
them to learn about repository rules defined in alternate locations.

+--------------------------------------------------------------------+----------------------------------------+
| **WORKSPACE Directive**                                            | **Default value**                      |
+====================================================================+========================================+
| :direc:`# gazelle:repository_macro [+]macroFile%defName`           | n/a                                    |
+--------------------------------------------------------------------+----------------------------------------+
| Tells Gazelle to look for repository rules in a macro in a .bzl file. The directive can be                  |
| repeated multiple times.                                                                                    |
| The macro can be generated by calling ``update-repos`` with the ``to_macro`` flag.                          |
|                                                                                                             |
| The directive can be prepended with a "+", which will tell Gazelle to also look for repositories            |
| within any macros called by the specified macro.                                                            |
+--------------------------------------------------------------------+----------------------------------------+
| :direc:`# gazelle:repository rule_kind attr1_name=attr1_value ...` | n/a                                    |
+--------------------------------------------------------------------+----------------------------------------+
| Specifies a repository rule that Gazelle should know about. The directive can be repeated multiple times,   |
| and can be declared from within a macro definition that Gazelle knows about. At the very least the          |
| directive must define a rule kind and a name attribute, but it can define extra attributes after that.      |
|                                                                                                             |
| This is useful for teaching Gazelle about repos declared in external macros. The directive can also be used |
| to override an actual repository rule. For example, a ``git_repository`` rule for ``org_golang_x_tools``    |
| could be overriden with the directive:                                                                      |
|                                                                                                             |
| .. code:: bzl                                                                                               |
|                                                                                                             |
|   # gazelle:repository go_repository name=org_golang_x_tools importpath=golang.org/x/tools                  |
|                                                                                                             |
| Gazelle would then proceed as if ``org_golang_x_tools`` was declared as a ``go_repository`` rule.           |
+--------------------------------------------------------------------+----------------------------------------+

Keep comments
~~~~~~~~~~~~~

In addition to directives, Gazelle supports ``# keep`` comments that protect
parts of build files from being modified. ``# keep`` may be written before
a rule, before an attribute, or after a string within a list.

``# keep`` comments might take one of 2 forms; the ``# keep`` literal or a
description prefixed by ``# keep:``.

Example
^^^^^^^

Suppose you have a library that includes a generated .go file. Gazelle won't
know what imports to resolve, so you may need to add dependencies manually with
``# keep`` comments.

.. code:: bzl

  load("@io_bazel_rules_go//go:def.bzl", "go_library")
  load("@com_github_example_gen//:gen.bzl", "gen_go_file")

  gen_go_file(
      name = "magic",
      srcs = ["magic.go.in"],
      outs = ["magic.go"],
  )

  go_library(
      name = "go_default_library",
      srcs = ["magic.go"],
      visibility = ["//visibility:public"],
      deps = [
          "@com_github_example_gen//:go_default_library",  # keep
          "@com_github_example_gen//a/b/c:go_default_library",  # keep: this is also important
      ],
  )

Dependency resolution
---------------------

One of Gazelle's most important jobs is resolving library import strings
(like ``import "golang.org/x/sys/unix"``) to Bazel labels (like
``@org_golang_x_sys//unix:go_default_library``). Gazelle follows the rules
below to resolve dependencies:

1. If the import to be resolved is part of a standard library, no explicit
   dependency is written. For example, in Go, you don't need to declare
   that you depend on ``"fmt"``.
2. If a ``# gazelle:resolve`` directive matches the import to be resolved,
   the label at the end of the directive will be used.
3. If proto rule generation is enabled, special rules will be used when
   importing certain libraries. These rules may be disabled by adding
   ``# gazelle:proto disable_global`` to a build file (this will affect
   subdirectories, too) or by passing ``-proto disable_global`` on the
   command line.

   a) Imports of Well Known Types are mapped to rules in
      ``@io_bazel_rules_go//proto/wkt``.
   b) Imports of Google APIs are mapped to ``@go_googleapis``.
   c) Imports of ``github.com/golang/protobuf/ptypes``, ``descriptor``, and
      ``jsonpb`` are mapped to special rules in ``@com_github_golang_protobuf``.
      See `Avoiding conflicts with proto rules`_.

4. If the import to be resolved is in the library index, the import will be resolved
   to that library. If ``-index=true``, Gazelle builds an index of library rules in
   the current repository before starting dependency resolution, and this is how
   most dependencies are resolved.

   a) For Go, the match is based on the ``importpath`` attribute.
   b) For proto, the match is based on the ``srcs`` attribute.

5. If ``-index=false`` and a package is imported that has the current ``go_prefix``
   as a prefix, Gazelle generates a label following a convention. For example, if
   the build file in ``//src`` set the prefix with
   ``# gazelle:prefix example.com/repo/foo``, and you import the library
   ``"example.com/repo/foo/bar``, the dependency will be
   ``"//src/foo/bar:go_default_library"``.
6. Otherwise, Gazelle will use the current ``external`` mode to resolve
   the dependency.

   a) In ``external`` mode (the default), Gazelle will transform the import
      string into an external repository label. For example,
      ``"golang.org/x/sys/unix"`` would be resolved to
      ``"@org_golang_x_sys//unix:go_default_library"``. Gazelle does not confirm
      whether the external repository is actually declared in WORKSPACE,
      but if there *is* a ``go_repository`` in WORKSPACE with a matching
      ``importpath``, Gazelle will use its name. Gazelle does not index
      rules in external repositories, so it's possible the resolved dependency
      does not exist.
   b) In ``static`` mode, Gazelle has the same behavior as ``external`` mode,
      except that it will not call out to the network for resolution when no
      matching import is found within WORKSPACE. Instead, it will skip the
      unknown import. This is the default mode for ``go_repository`` rules.
   c) In ``vendored`` mode, Gazelle will transform the import string into
      a label in the vendor directory. For example, ``"golang.org/x/sys/unix"``
      would be resolved to
      ``"//vendor/golang.org/x/sys/unix:go_default_library"``. This mode is
      usually not necessary, since vendored libraries will be indexed and
      resolved using rule 4.

Fix command transformations
---------------------------

Gazelle will generate and update build files when invoked with either
``gazelle update`` or ``gazelle fix`` (``update`` is the default). Both commands
perform several transformations to fix deprecated usage of the Go rules.
``update`` performs a safe set of tranformations, while ``fix`` performs some
additional transformations that may delete or rename rules.

The following transformations are performed:

**Migrate library to embed (fix and update):** Gazelle replaces ``library``
attributes with ``embed`` attributes.

**Migrate gRPC compilers (fix and update):** Gazelle converts
``go_grpc_library`` rules to ``go_proto_library`` rules with
``compilers = ["@io_bazel_rules_go//proto:go_grpc"]``.

**Flatten srcs (fix and update):** Gazelle converts ``srcs`` attributes that
use OS and architecture-specific ``select`` expressions to flat lists.
rules_go filters these sources anyway.

**Squash cgo libraries (fix only)**: Gazelle will remove `cgo_library` rules
named ``cgo_default_library`` and merge their attributes with a ``go_library``
rule in the same package named ``go_default_library``. If no such ``go_library``
rule exists, a new one will be created. Other ``cgo_library`` rules will not be
removed.

**Squash external tests (fix only)**: Gazelle will squash ``go_test`` rules
named ``go_default_xtest`` into ``go_default_test``. Earlier versions of
rules_go required internal and external tests to be built separately, but
this is no longer needed.

**Remove legacy protos (fix only)**: Gazelle will remove usage of
``go_proto_library`` rules loaded from
``@io_bazel_rules_go//proto:go_proto_library.bzl`` and ``filegroup`` rules named
``go_default_library_protos``. Newly generated proto rules will take their
place. Since ``filegroup`` isn't needed anymore and ``go_proto_library`` has
different attributes and was always written by hand, Gazelle will not attempt to
merge anything from these rules with the newly generated rules.

This transformation is only applied in the default proto mode. Since Gazelle
will run in legacy proto mode if ``go_proto_library.bzl`` is loaded, this
transformation is not usually applied. You can set the proto mode explicitly
using the directive ``# gazelle:proto default``.

**Update loads of gazelle rule (fix and update)**: Gazelle will remove loads
of ``gazelle`` from ``@io_bazel_rules_go//go:def.bzl``. It will automatically
add a load from ``@bazel_gazelle//:def.bzl`` if ``gazelle`` is not loaded
from another location.
