Skip to content

Feat: Gazelle directive # gazelle:python_ignore_target target #3105

@dougthor42

Description

@dougthor42

🚀 feature request

Relevant Rules

gazelle

Description

Gazelle can skip files/directories via # gazelle:exclude file and can ignore entire BUILD.bazel files with # gazelle:ignore. rules_python_gazelle_plugin also adds a # gazelle:ignore import annotation that can be added to .py files.

Gazelle can also force deps to be kept around with the # keep comment within a target.

However, there's not currently (that I'm aware of) any way to tell gazelle to ignore an entire target.

Ignoring an entire target can be useful when there are hand-written targets or ones that don't follow the rest of the directives (such as additional file-level targets when the generation mode is package). Having such a directive will also unblock the issues I raised on @yushan26's PR #3046, allowing them to expand the scope from just py_binary targets to all targets.

Describe the solution you'd like

New directive: # gazelle:ignore_target target.

Or if we don't want do potentially shadow a future directive from bazel_gazelle, # gazelle:python_ignore_target target. We could also bike shed about "ignore" vs "exclude".

If target isn't found, the directive has no effect. Maybe it logs a warning, but that's it.

Should wildcards be allowed? For an MVP I don't think so. That adds complexity with, at least for my direct use case, little gain.

Describe alternatives you've considered

You may ask: "How is this different from a # keep comment at the start of a target?"

# keep: this cannot be managed by Gazelle because <reason>
py_library(
    ...
)

The main difference is that the directive can be set in any parent BUILD.bazel file, thus allowing people to have a central location for all such directives:

# gazelle:python_ignore_target //foo/bar:baz
# gazelle:python_ignore_target //foo/bar:baz_test
# gazelle:python_ignore_target //a/b/c/d:e

Admittedly it's a pretty weak argument for having a new directive.

There may also be subtle differences with how gazelle collects targets and generates new ones (eg bazel-contrib/bazel-gazelle#1176) but I haven't fully investigated those yet.

Metadata

Metadata

Assignees

No one assigned

    Labels

    gazelleGazelle plugin related issues

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions