Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions gazelle/python/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes
}
}

pyLibrary = newTargetBuilder(pyLibraryKind, pyLibraryTargetName, pythonProjectRoot, args.Rel).
pyLibrary = newTargetBuilder(pyLibraryKind, pyLibraryTargetName, pythonProjectRoot, args.Rel, pyLibraryFilenames.Union(pyTestFilenames)).
setUUID(label.New("", args.Rel, pyLibraryTargetName).String()).
addVisibility(visibility).
addSrcs(pyLibraryFilenames).
Expand Down Expand Up @@ -246,7 +246,7 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes
}
}

pyBinaryTarget := newTargetBuilder(pyBinaryKind, pyBinaryTargetName, pythonProjectRoot, args.Rel).
pyBinaryTarget := newTargetBuilder(pyBinaryKind, pyBinaryTargetName, pythonProjectRoot, args.Rel, pyLibraryFilenames.Union(pyTestFilenames)).
setMain(pyBinaryEntrypointFilename).
addVisibility(visibility).
addSrc(pyBinaryEntrypointFilename).
Expand Down Expand Up @@ -286,7 +286,7 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes
}
}

conftestTarget := newTargetBuilder(pyLibraryKind, conftestTargetname, pythonProjectRoot, args.Rel).
conftestTarget := newTargetBuilder(pyLibraryKind, conftestTargetname, pythonProjectRoot, args.Rel, pyLibraryFilenames.Union(pyTestFilenames)).
setUUID(label.New("", args.Rel, conftestTargetname).String()).
addSrc(conftestFilename).
addModuleDependencies(deps).
Expand Down Expand Up @@ -322,7 +322,7 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes
}
}
}
return newTargetBuilder(pyTestKind, pyTestTargetName, pythonProjectRoot, args.Rel).
return newTargetBuilder(pyTestKind, pyTestTargetName, pythonProjectRoot, args.Rel, pyLibraryFilenames.Union(pyTestFilenames)).
addSrcs(pyTestFilenames).
addModuleDependencies(deps).
generateImportsAttribute()
Expand Down
10 changes: 7 additions & 3 deletions gazelle/python/target.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ type targetBuilder struct {
bzlPackage string
uuid string
srcs *treeset.Set
siblingSrcs *treeset.Set
deps *treeset.Set
resolvedDeps *treeset.Set
visibility *treeset.Set
Expand All @@ -26,13 +27,14 @@ type targetBuilder struct {
}

// newTargetBuilder constructs a new targetBuilder.
func newTargetBuilder(kind, name, pythonProjectRoot, bzlPackage string) *targetBuilder {
func newTargetBuilder(kind, name, pythonProjectRoot, bzlPackage string, siblingSrcs *treeset.Set) *targetBuilder {
return &targetBuilder{
kind: kind,
name: name,
pythonProjectRoot: pythonProjectRoot,
bzlPackage: bzlPackage,
srcs: treeset.NewWith(godsutils.StringComparator),
siblingSrcs: siblingSrcs,
deps: treeset.NewWith(moduleComparator),
resolvedDeps: treeset.NewWith(godsutils.StringComparator),
visibility: treeset.NewWith(godsutils.StringComparator),
Expand Down Expand Up @@ -65,15 +67,17 @@ func (t *targetBuilder) addSrcs(srcs *treeset.Set) *targetBuilder {

// addModuleDependency adds a single module dep to the target.
func (t *targetBuilder) addModuleDependency(dep module) *targetBuilder {
t.deps.Add(dep)
if dep.Name+".py" == filepath.Base(dep.Filepath) || !t.siblingSrcs.Contains(dep.Name+".py") {
t.deps.Add(dep)
}
return t
}

// addModuleDependencies copies all values from the provided deps to the target.
func (t *targetBuilder) addModuleDependencies(deps *treeset.Set) *targetBuilder {
it := deps.Iterator()
for it.Next() {
t.deps.Add(it.Value().(module))
t.addModuleDependency(it.Value().(module))
}
return t
}
Expand Down
2 changes: 2 additions & 0 deletions gazelle/python/testdata/subdir_sources/one/two/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Same package imports
This test case asserts that no `deps` is needed when a module imports another module in the same package
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import foo.baz.baz as baz
import three

_ = baz
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,5 @@ py_binary(
srcs = ["__main__.py"],
main = "__main__.py",
visibility = ["//:__subpackages__"],
deps = [
":with_third_party_requirements",
"@gazelle_python_test_baz//:pkg",
],
deps = [":with_third_party_requirements"],
)
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# With third-party requirements

This test case asserts that a `py_library` is generated with dependencies
This test case asserts that
* a `py_library` is generated with dependencies
extracted from its sources and a `py_binary` is generated embeding the
`py_library` and inherits its dependencies, without specifying the `deps` again.
* when a third-party library and a module in the same package having the same name, the one in the same package takes precedence.