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",
        integrity = "sha256-fHbWI2so/2laoozzX5XeMXqUcv0fsUrHl8m/aE8Js3w=",
        urls = [
            "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.44.2/rules_go-v0.44.2.zip",
            "https://github.com/bazelbuild/rules_go/releases/download/v0.44.2/rules_go-v0.44.2.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 source-lang import-lang import-string-regex label``                    |
|                                                                                            |
| Specifies an explicit mapping from an import regex to a label for                          |
| `Dependency resolution`_. The format for a resolve directive is:                           |
|                                                                                            |
| ``# gazelle:resolve 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.
