diff --git a/gazelle/python/generate.go b/gazelle/python/generate.go index 27930c1025..b40127f67f 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 @@ -90,9 +90,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() @@ -244,16 +244,10 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes mainFileNames := make([]string, 0, len(mainModules)) for name := range mainModules { mainFileNames = append(mainFileNames, name) - - // Remove the file from srcs if we're doing per-file library generation so - // that we don't also generate a py_library target for it. - if cfg.PerFileGeneration() { - srcs.Remove(name) - } } sort.Strings(mainFileNames) for _, filename := range mainFileNames { - pyBinaryTargetName := strings.TrimSuffix(filepath.Base(filename), ".py") + pyBinaryTargetName := strings.TrimSuffix(filepath.Base(filename), ".py") + "_bin" if err := ensureNoCollision(args.File, pyBinaryTargetName, actualPyBinaryKind); err != nil { fqTarget := label.New("", args.Rel, pyBinaryTargetName) log.Printf("failed to generate target %q of kind %q: %v", @@ -271,7 +265,6 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes } } - // If we're doing per-file generation, srcs could be empty at this point, meaning we shouldn't make a py_library. // If there is already a package named py_library target before, we should generate an empty py_library. if srcs.Empty() { if args.File == nil { diff --git a/gazelle/python/resolve.go b/gazelle/python/resolve.go index 7a2ec3d68a..287f322bc2 100644 --- a/gazelle/python/resolve.go +++ b/gazelle/python/resolve.go @@ -55,6 +55,9 @@ func (*Resolver) Name() string { return languageName } // If nil is returned, the rule will not be indexed. If any non-nil slice is // returned, including an empty slice, the rule will be indexed. func (py *Resolver) Imports(c *config.Config, r *rule.Rule, f *rule.File) []resolve.ImportSpec { + if r.Kind() == GetActualKindName(pyBinaryKind, c) { + return nil + } cfgs := c.Exts[languageName].(pythonconfig.Configs) cfg := cfgs[f.Pkg] srcs := r.AttrStrings("srcs") diff --git a/gazelle/python/testdata/binary_without_entrypoint/BUILD.in b/gazelle/python/testdata/binary_without_entrypoint/BUILD.in index 1177dce580..dc69d5d668 100644 --- a/gazelle/python/testdata/binary_without_entrypoint/BUILD.in +++ b/gazelle/python/testdata/binary_without_entrypoint/BUILD.in @@ -3,6 +3,6 @@ # gazelle:resolve py pandas @pip//:pandas filegroup( - name = "collided_main", + name = "collided_main_bin", srcs = ["collided_main.py"], ) diff --git a/gazelle/python/testdata/binary_without_entrypoint/BUILD.out b/gazelle/python/testdata/binary_without_entrypoint/BUILD.out index 9af815286b..a50a77a9a7 100644 --- a/gazelle/python/testdata/binary_without_entrypoint/BUILD.out +++ b/gazelle/python/testdata/binary_without_entrypoint/BUILD.out @@ -5,12 +5,12 @@ load("@rules_python//python:defs.bzl", "py_binary", "py_library", "py_test") # gazelle:resolve py pandas @pip//:pandas filegroup( - name = "collided_main", + name = "collided_main_bin", srcs = ["collided_main.py"], ) py_binary( - name = "main", + name = "main_bin", srcs = ["main.py"], visibility = ["//:__subpackages__"], deps = [ @@ -20,7 +20,7 @@ py_binary( ) py_binary( - name = "main2", + name = "main2_bin", srcs = ["main2.py"], visibility = ["//:__subpackages__"], deps = [":py_default_library"], @@ -44,4 +44,4 @@ py_library( py_test( name = "main_test", srcs = ["main_test.py"], -) \ No newline at end of file +) diff --git a/gazelle/python/testdata/binary_without_entrypoint/test.yaml b/gazelle/python/testdata/binary_without_entrypoint/test.yaml index 44e4ae8364..d9233b3771 100644 --- a/gazelle/python/testdata/binary_without_entrypoint/test.yaml +++ b/gazelle/python/testdata/binary_without_entrypoint/test.yaml @@ -15,4 +15,4 @@ --- expect: stderr: | - gazelle: failed to generate target "//:collided_main" of kind "py_binary": a target of kind "filegroup" with the same name already exists + gazelle: failed to generate target "//:collided_main_bin" of kind "py_binary": a target of kind "filegroup" with the same name already exists diff --git a/gazelle/python/testdata/binary_without_entrypoint_per_file_generation/BUILD.out b/gazelle/python/testdata/binary_without_entrypoint_per_file_generation/BUILD.out index bffedb1e27..4416938f91 100644 --- a/gazelle/python/testdata/binary_without_entrypoint_per_file_generation/BUILD.out +++ b/gazelle/python/testdata/binary_without_entrypoint_per_file_generation/BUILD.out @@ -26,12 +26,25 @@ py_library( ) py_binary( + name = "lib_and_main_bin", + srcs = ["lib_and_main.py"], + visibility = ["//:__subpackages__"], +) + +py_library( name = "lib_and_main", srcs = ["lib_and_main.py"], visibility = ["//:__subpackages__"], ) py_binary( + name = "main_bin", + srcs = ["main.py"], + visibility = ["//:__subpackages__"], + deps = ["@pip//:pandas"], +) + +py_library( name = "main", srcs = ["main.py"], visibility = ["//:__subpackages__"], @@ -39,6 +52,13 @@ py_binary( ) py_binary( + name = "main2_bin", + srcs = ["main2.py"], + visibility = ["//:__subpackages__"], + deps = [":lib2"], +) + +py_library( name = "main2", srcs = ["main2.py"], visibility = ["//:__subpackages__"], diff --git a/gazelle/python/testdata/binary_without_entrypoint_per_file_generation_partial_update/BUILD.in b/gazelle/python/testdata/binary_without_entrypoint_per_file_generation_partial_update/BUILD.in index 63b547f0b3..f0b132edaf 100644 --- a/gazelle/python/testdata/binary_without_entrypoint_per_file_generation_partial_update/BUILD.in +++ b/gazelle/python/testdata/binary_without_entrypoint_per_file_generation_partial_update/BUILD.in @@ -3,7 +3,7 @@ load("@rules_python//python:defs.bzl", "py_binary") # gazelle:python_generation_mode file py_binary( - name = "a", + name = "a_bin", srcs = ["a.py"], visibility = ["//:__subpackages__"], ) diff --git a/gazelle/python/testdata/binary_without_entrypoint_per_file_generation_partial_update/BUILD.out b/gazelle/python/testdata/binary_without_entrypoint_per_file_generation_partial_update/BUILD.out index 8f49cccd9f..6e46de654f 100644 --- a/gazelle/python/testdata/binary_without_entrypoint_per_file_generation_partial_update/BUILD.out +++ b/gazelle/python/testdata/binary_without_entrypoint_per_file_generation_partial_update/BUILD.out @@ -1,14 +1,26 @@ -load("@rules_python//python:defs.bzl", "py_binary") +load("@rules_python//python:defs.bzl", "py_binary", "py_library") # gazelle:python_generation_mode file py_binary( + name = "a_bin", + srcs = ["a.py"], + visibility = ["//:__subpackages__"], +) + +py_library( name = "a", srcs = ["a.py"], visibility = ["//:__subpackages__"], ) py_binary( + name = "b_bin", + srcs = ["b.py"], + visibility = ["//:__subpackages__"], +) + +py_library( name = "b", srcs = ["b.py"], visibility = ["//:__subpackages__"], diff --git a/gazelle/python/testdata/py312_syntax/BUILD.out b/gazelle/python/testdata/py312_syntax/BUILD.out index 7457f335a7..18732b7da0 100644 --- a/gazelle/python/testdata/py312_syntax/BUILD.out +++ b/gazelle/python/testdata/py312_syntax/BUILD.out @@ -9,6 +9,13 @@ py_library( ) py_binary( + name = "pep_695_type_parameter_bin", + srcs = ["pep_695_type_parameter.py"], + visibility = ["//:__subpackages__"], + deps = [":_other_module"], +) + +py_library( name = "pep_695_type_parameter", srcs = ["pep_695_type_parameter.py"], visibility = ["//:__subpackages__"],