diff --git a/gazelle/python/generate.go b/gazelle/python/generate.go index c1edec4731..a18c0f4ec1 100644 --- a/gazelle/python/generate.go +++ b/gazelle/python/generate.go @@ -48,8 +48,8 @@ var ( buildFilenames = []string{"BUILD", "BUILD.bazel"} ) -func GetActualKindName(kind string, args language.GenerateArgs) string { - if kindOverride, ok := args.Config.KindMap[kind]; ok { +func GetActualKindName(kind string, c *config.Config) string { + if kindOverride, ok := c.KindMap[kind]; ok { return kindOverride.KindName } return kind @@ -88,9 +88,9 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes } } - actualPyBinaryKind := GetActualKindName(pyBinaryKind, args) - actualPyLibraryKind := GetActualKindName(pyLibraryKind, args) - actualPyTestKind := GetActualKindName(pyTestKind, args) + actualPyBinaryKind := GetActualKindName(pyBinaryKind, args.Config) + actualPyLibraryKind := GetActualKindName(pyLibraryKind, args.Config) + actualPyTestKind := GetActualKindName(pyTestKind, args.Config) pythonProjectRoot := cfg.PythonProjectRoot() diff --git a/gazelle/python/resolve.go b/gazelle/python/resolve.go index 0dd80841d4..f3732d7063 100644 --- a/gazelle/python/resolve.go +++ b/gazelle/python/resolve.go @@ -57,6 +57,11 @@ func (*Resolver) Name() string { return languageName } func (py *Resolver) Imports(c *config.Config, r *rule.Rule, f *rule.File) []resolve.ImportSpec { cfgs := c.Exts[languageName].(pythonconfig.Configs) cfg := cfgs[f.Pkg] + if !cfg.PerFileGeneration() && GetActualKindName(r.Kind(), c) == pyBinaryKind { + // Don't index py_binary in except in file mode, because all non-test Python files + // are in py_library already. + return nil + } srcs := r.AttrStrings("srcs") provides := make([]resolve.ImportSpec, 0, len(srcs)+1) for _, src := range srcs { diff --git a/gazelle/python/testdata/import_with_same_srcs_library_and_binary/BUILD.in b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/BUILD.in new file mode 100644 index 0000000000..f690472211 --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/BUILD.in @@ -0,0 +1,2 @@ +# gazelle:python_library_naming_convention py_default_library +# gazelle:python_generation_mode package diff --git a/gazelle/python/testdata/import_with_same_srcs_library_and_binary/BUILD.out b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/BUILD.out new file mode 100644 index 0000000000..f690472211 --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/BUILD.out @@ -0,0 +1,2 @@ +# gazelle:python_library_naming_convention py_default_library +# gazelle:python_generation_mode package diff --git a/gazelle/python/testdata/import_with_same_srcs_library_and_binary/README.md b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/README.md new file mode 100644 index 0000000000..39095b5aff --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/README.md @@ -0,0 +1,2 @@ +# Import with same srcs for library and binary +This test case asserts a file with py_library and py_binary rules that include the same .py file in srcs will resolve to the py_library rule correctly. diff --git a/gazelle/python/testdata/import_with_same_srcs_library_and_binary/WORKSPACE b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/WORKSPACE new file mode 100644 index 0000000000..faff6af87a --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/WORKSPACE @@ -0,0 +1 @@ +# This is a Bazel workspace for the Gazelle test data. diff --git a/gazelle/python/testdata/import_with_same_srcs_library_and_binary/bar/BUILD.in b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/bar/BUILD.in new file mode 100644 index 0000000000..f976ef1c58 --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/bar/BUILD.in @@ -0,0 +1,8 @@ +load("@rules_python//python:defs.bzl", "py_library") + +py_library( + name = "bar", + srcs = ["bar.py"], + visibility = ["//:__subpackages__"], + deps = ["//foo"], +) diff --git a/gazelle/python/testdata/import_with_same_srcs_library_and_binary/bar/BUILD.out b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/bar/BUILD.out new file mode 100644 index 0000000000..a93d3710cb --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/bar/BUILD.out @@ -0,0 +1,8 @@ +load("@rules_python//python:defs.bzl", "py_library") + +py_library( + name = "bar", + srcs = ["bar.py"], + visibility = ["//:__subpackages__"], + deps = ["//foo:py_default_library"], +) diff --git a/gazelle/python/testdata/import_with_same_srcs_library_and_binary/bar/bar.py b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/bar/bar.py new file mode 100644 index 0000000000..9935a64811 --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/bar/bar.py @@ -0,0 +1 @@ +import foo.script diff --git a/gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/BUILD.in b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/BUILD.in new file mode 100644 index 0000000000..e69de29bb2 diff --git a/gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/BUILD.out b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/BUILD.out new file mode 100644 index 0000000000..fe6482a492 --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/BUILD.out @@ -0,0 +1,13 @@ +load("@rules_python//python:defs.bzl", "py_binary", "py_library") + +py_binary( + name = "script", + srcs = ["script.py"], + visibility = ["//:__subpackages__"], +) + +py_library( + name = "py_default_library", + srcs = ["script.py"], + visibility = ["//:__subpackages__"], +) diff --git a/gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/script.py b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/script.py new file mode 100644 index 0000000000..9c97da4809 --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/script.py @@ -0,0 +1,2 @@ +if __name__ == "__main__": + print("Hello, world!") diff --git a/gazelle/python/testdata/import_with_same_srcs_library_and_binary/test.yaml b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/test.yaml new file mode 100644 index 0000000000..36dd656b39 --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/test.yaml @@ -0,0 +1,3 @@ +--- +expect: + exit_code: 0 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy