Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Gazelle not raising error when a target py_test exists in place of a py_binary

Ouverte
#3,603 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
48/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
python
Domaine
build-system

Piste de recherche

Commencez par le point d’entrée de rules_python_gazelle_plugin qui gère les targets générées en conflit, en utilisant la reproduction lib/demo fournie et la commande bazel run //:gazelle -- -strict -mode fix. Comparez le conflit entre py_binary et py_test avec le cas py_library et py_test. La tâche est terminée lorsque le conflit py_binary est signalé comme une erreur et que la commande se termine avec le statut 1, comme pour l’autre conflit.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

🐞 bug report

Affected Rule

rules_python_gazelle_plugin functionality

Is this a regression?

Still needs assessment

Description

When gazelle runs over a BUILD file and finds a py_test target where it wants to make a py_binary target, the gazelle extension flags the conflict, but it does not elevate to an error. This is not the case for other target conflicts. For example, if a py_test exists where a py_library should, a full error is raised and the exit code respects this.

When this conflict happens, no other gazelle edits are recommended for the affected target. Recommendations to other targets proceed as normal.

🔬 Minimal Reproduction

Make a simple tree like

lib/demo/
  - example_lib.py
  - example_bin.py
  - example_test.py

The contents of each are
example_bin.py

from lib.demo import example_lib


def main() -> None:
    print("Lib call:", example_lib.some_helper())


if __name__ == "__main__":
    main()

example_lib.py

def some_helper() -> int:
    return 52

example_test.py

import unittest

from lib.demo import example_lib


def test_thing() -> None:
    assert example_lib.some_helper() == 52


if __name__ == "__main__":
    unittest.main()

Now make the BUILD file with the following contents

load("@rules_python//python:defs.bzl", "py_library", "py_test")

py_test(
    name = "example_bin",
    srcs = ["example_bin.py"],
)

py_library(
    name = "example_lib",
    srcs = ["example_lib.py"],
)

py_test(
    name = "example_test",
    srcs = ["example_test.py"],
)

Run bazel run //:gazelle -- -strict -mode diff and see the following output

$ bazel run //:gazelle -- -strict -mode fix
(21:34:13) INFO: Current date is 2026-02-16
(21:34:13) INFO: Analyzed target //:gazelle (0 packages loaded, 0 targets configured).
(21:34:13) INFO: Found 1 target...
Target //:gazelle up-to-date:
  bazel-bin/gazelle-runner.bash
  bazel-bin/gazelle
(21:34:13) INFO: Elapsed time: 0.129s, Critical Path: 0.05s
(21:34:13) INFO: 1 process: 4 action cache hit, 1 internal.
(21:34:13) INFO: Build completed successfully, 1 total action
gazelle: failed to generate target "//lib/demo:example_bin" of kind "py_binary": a target of kind "py_test" with the same name already exists

Now notice the difference in error when py_library is converted incorrectly to a py_test.

gazelle: failed to generate target "//lib/demo:example_bin" of kind "py_binary": a target of kind "py_test" with the same name already exists
gazelle: ERROR: failed to generate target "//lib/demo:example_lib" of kind "py_library": a target of kind "py_test" with the same name already exists. Use the '# gazelle:python_library_naming_convention' directive to change the naming convention.

The details are the same, but the latter scenario is reflected in the exit code with a value of 1.

🌍 Your Environment

Operating System:
debian linux

Output of bazel version:
8.4.2

Rules_python version:
1.8.3

Langage dominant
Starlark
Étoiles
688
Forks
724
Merge moyen
1 j 14 h
PR mergées (30 j)
59

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de bazel-contrib/rules_python

Toutes les issues de bazel-contrib/rules_python

Issues similaires

Plus d'issues Build System

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.