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/
.. _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:: 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

  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",
        sha256 = "80a98277ad1311dacd837f9b16db62887702e9f1d1c4c9f796d0121a46c8e184",
        urls = [
            "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.46.0/rules_go-v0.46.0.zip",
            "https://github.com/bazelbuild/rules_go/releases/download/v0.46.0/rules_go-v0.46.0.zip",
        ],
    )

    http_archive(
        name = "bazel_gazelle",
        integrity = "sha256-MpOL2hbmcABjA1R5Bj2dJMYO2o15/Uc5Vj9Q0zHLMgk=",
        urls = [
            "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.35.0/bazel-gazelle-v0.35.0.tar.gz",
            "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.35.0/bazel-gazelle-v0.35.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.

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                          |
+---------------------+------------------------------+------------------------------+

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.

.. 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`                                                               |                                              |
+----------------------------------------------------------------------------------------------------------+----------------------------------------------+
| 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``.                      |
|                                                                                            |
| 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                       |
|                                                                                            |
+---------------------------------------------------+----------------------------------------+
| :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.
