Skip to content

Gazelle will confuse stdlib packages/modules with sibling modules #3097

@dougthor42

Description

@dougthor42

🐞 bug report

Affected Rule

gazelle

Is this a regression?

It's been like this for as long as I've been using rules_python.

Description

If there's a file called, say, typing.py and a sibling file foo.py has from typing import TYPE_CHECKING or similar, gazelle will add :typing to the foo target deps (or to the package srcs for package generation mode).

The correct behavior is to not include :typing unless the import is from . import typing or from .typing import MyType or import .typing as typing.

🔬 Minimal Reproduction

Dir structure:

$ tree gazelle/python/testdata/stdlib_confusion/
gazelle/python/testdata/stdlib_confusion/
├── file_based
│   ├── BUILD.in
│   ├── BUILD.out
│   ├── foo.py
│   ├── __init__.py
│   └── typing.py
├── package_based
│   ├── BUILD.in
│   ├── BUILD.out
│   ├── foo.py
│   ├── __init__.py
│   └── typing.py
├── README.md
├── test.yaml
└── WORKSPACE
--- FAIL: TestGazelleBinary (0.00s)
    --- FAIL: TestGazelleBinary/stdlib_confusion (0.02s)
        python_test.go:186: stdlib_confusion/file_based/BUILD diff (-want,+got):
              (
                """
                ... // 6 identical lines
                    srcs = ["foo.py"],
                    visibility = ["//:__subpackages__"],
            +       deps = [":typing"],
                )
              
                ... // 5 identical lines
                """
              )
        python_test.go:186: stdlib_confusion/package_based/BUILD diff (-want,+got):
              (
                """
                ... // 5 identical lines
                        "__init__.py",
                        "foo.py",
            +           "typing.py",
                    ],
                    visibility = ["//:__subpackages__"],
                )
                """
              )

Metadata

Metadata

Assignees

Labels

gazelleGazelle plugin related issues

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions