From e9bd803515448f8b01f66aeefbb74cb9cbec73f0 Mon Sep 17 00:00:00 2001 From: Zhongpeng Lin Date: Sat, 14 Jun 2025 21:10:40 -0700 Subject: [PATCH 1/3] do not index py_binary unless in file mode --- gazelle/python/generate.go | 10 +++++----- gazelle/python/resolve.go | 5 +++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/gazelle/python/generate.go b/gazelle/python/generate.go index 27930c1025..62dac4d6a5 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() diff --git a/gazelle/python/resolve.go b/gazelle/python/resolve.go index 7a2ec3d68a..87a7bf5950 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 { From a070e0317f0f5e8b625b58438011fedcf466ca42 Mon Sep 17 00:00:00 2001 From: Zhongpeng Lin Date: Tue, 24 Jun 2025 16:07:54 -0700 Subject: [PATCH 2/3] Adding tests --- gazelle/python/python_test.go | 1 - .../BUILD.in | 3 +++ .../BUILD.out | 3 +++ .../README.md | 2 ++ .../WORKSPACE | 1 + .../bar/BUILD.in | 8 ++++++++ .../bar/BUILD.out | 8 ++++++++ .../bar/bar.py | 1 + .../foo/BUILD.in | 0 .../foo/BUILD.out | 13 +++++++++++++ .../foo/script.py | 3 +++ .../test.yaml | 17 +++++++++++++++++ 12 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 gazelle/python/testdata/import_with_same_srcs_library_and_binary/BUILD.in create mode 100644 gazelle/python/testdata/import_with_same_srcs_library_and_binary/BUILD.out create mode 100644 gazelle/python/testdata/import_with_same_srcs_library_and_binary/README.md create mode 100644 gazelle/python/testdata/import_with_same_srcs_library_and_binary/WORKSPACE create mode 100644 gazelle/python/testdata/import_with_same_srcs_library_and_binary/bar/BUILD.in create mode 100644 gazelle/python/testdata/import_with_same_srcs_library_and_binary/bar/BUILD.out create mode 100644 gazelle/python/testdata/import_with_same_srcs_library_and_binary/bar/bar.py create mode 100644 gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/BUILD.in create mode 100644 gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/BUILD.out create mode 100644 gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/script.py create mode 100644 gazelle/python/testdata/import_with_same_srcs_library_and_binary/test.yaml diff --git a/gazelle/python/python_test.go b/gazelle/python/python_test.go index dd8c2411f1..157b989c4f 100644 --- a/gazelle/python/python_test.go +++ b/gazelle/python/python_test.go @@ -141,7 +141,6 @@ func testPath(t *testing.T, gazellePath, name string, files []bazel.RunfileEntry if err != nil { return err } - t.Logf("%q exists", strings.TrimPrefix(path, testdataDir)) return nil }) }) 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..fc43208db2 --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/BUILD.in @@ -0,0 +1,3 @@ +# gazelle:python_extension enabled +# 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..fc43208db2 --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/BUILD.out @@ -0,0 +1,3 @@ +# gazelle:python_extension enabled +# 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..165f69654f --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/script.py @@ -0,0 +1,3 @@ + +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..2410223e59 --- /dev/null +++ b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/test.yaml @@ -0,0 +1,17 @@ +# Copyright 2023 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +expect: + exit_code: 0 From a3ee5c1053ebc08354014d9d136ae2dc1c280a4d Mon Sep 17 00:00:00 2001 From: Zhongpeng Lin Date: Mon, 14 Jul 2025 08:14:57 -0700 Subject: [PATCH 3/3] addressing comments --- gazelle/python/python_test.go | 1 + .../BUILD.in | 1 - .../BUILD.out | 1 - .../foo/script.py | 1 - .../test.yaml | 14 -------------- 5 files changed, 1 insertion(+), 17 deletions(-) diff --git a/gazelle/python/python_test.go b/gazelle/python/python_test.go index 157b989c4f..dd8c2411f1 100644 --- a/gazelle/python/python_test.go +++ b/gazelle/python/python_test.go @@ -141,6 +141,7 @@ func testPath(t *testing.T, gazellePath, name string, files []bazel.RunfileEntry if err != nil { return err } + t.Logf("%q exists", strings.TrimPrefix(path, testdataDir)) return nil }) }) 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 index fc43208db2..f690472211 100644 --- 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 @@ -1,3 +1,2 @@ -# gazelle:python_extension enabled # 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 index fc43208db2..f690472211 100644 --- 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 @@ -1,3 +1,2 @@ -# gazelle:python_extension enabled # 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/foo/script.py b/gazelle/python/testdata/import_with_same_srcs_library_and_binary/foo/script.py index 165f69654f..9c97da4809 100644 --- 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 @@ -1,3 +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 index 2410223e59..36dd656b39 100644 --- 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 @@ -1,17 +1,3 @@ -# Copyright 2023 The Bazel Authors. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - --- 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