diff options
author | Andrew Z Allen <me@andrewzallen.com> | 2020-10-21 23:52:14 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-21 23:52:14 -0600 |
commit | 182046f090d6ecae264c7e5d520da096370287e2 (patch) | |
tree | a6cca4bc2af420af5a2aa3b64f579d2db970b7a4 /gazelle | |
parent | b2ffc94b17518efa40f42e6351cad3d01a7cbdb6 (diff) | |
download | bazel-skylib-182046f090d6ecae264c7e5d520da096370287e2.tar.gz |
Handle "internal" directory visibility (#274)
Both "internal" and "private" directories should be treated the same way
and have visibility restrictions be placed upon them.
Diffstat (limited to 'gazelle')
6 files changed, 44 insertions, 5 deletions
diff --git a/gazelle/bzl/gazelle.go b/gazelle/bzl/gazelle.go index b58eee6..dccec27 100644 --- a/gazelle/bzl/gazelle.go +++ b/gazelle/bzl/gazelle.go @@ -233,11 +233,10 @@ func (*bzlLibraryLang) GenerateRules(args language.GenerateArgs) language.Genera r.SetAttr("srcs", []string{f}) - if args.File == nil || !args.File.HasDefaultVisibility() { - inPrivateDir := pathtools.Index(args.Rel, "private") >= 0 - if !inPrivateDir { - r.SetAttr("visibility", []string{"//visibility:public"}) - } + shouldSetVisibility := args.File == nil || !args.File.HasDefaultVisibility() + if shouldSetVisibility { + vis := checkInternalVisibility(args.Rel, "//visibility:public") + r.SetAttr("visibility", []string{vis}) } fullPath := filepath.Join(args.Dir, f) @@ -335,3 +334,16 @@ func (s srcsList) Contains(m string) bool { } return false } + +// checkInternalVisibility overrides the given visibility if the package is +// internal. +func checkInternalVisibility(rel, visibility string) string { + if i := pathtools.Index(rel, "internal"); i > 0 { + visibility = fmt.Sprintf("//%s:__subpackages__", rel[:i-1]) + } else if i := pathtools.Index(rel, "private"); i > 0 { + visibility = fmt.Sprintf("//%s:__subpackages__", rel[:i-1]) + } else if pathtools.HasPrefix(rel, "internal") || pathtools.HasPrefix(rel, "private") { + visibility = "//:__subpackages__" + } + return visibility +} diff --git a/gazelle/bzl/testdata/private/nested/private/BUILD.out b/gazelle/bzl/testdata/private/nested/private/BUILD.out new file mode 100644 index 0000000..442401c --- /dev/null +++ b/gazelle/bzl/testdata/private/nested/private/BUILD.out @@ -0,0 +1,7 @@ +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") + +bzl_library( + name = "bar", + srcs = ["bar.bzl"], + visibility = ["//nested:__subpackages__"], +) diff --git a/gazelle/bzl/testdata/private/nested/private/bar.bzl b/gazelle/bzl/testdata/private/nested/private/bar.bzl new file mode 100644 index 0000000..c8a4871 --- /dev/null +++ b/gazelle/bzl/testdata/private/nested/private/bar.bzl @@ -0,0 +1,6 @@ +""" +Test sample code. +""" + +def func(): + pass diff --git a/gazelle/bzl/testdata/private/nested/private/inside/internal/BUILD.out b/gazelle/bzl/testdata/private/nested/private/inside/internal/BUILD.out new file mode 100644 index 0000000..afaf8f3 --- /dev/null +++ b/gazelle/bzl/testdata/private/nested/private/inside/internal/BUILD.out @@ -0,0 +1,7 @@ +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") + +bzl_library( + name = "bar", + srcs = ["bar.bzl"], + visibility = ["//nested/private/inside:__subpackages__"], +) diff --git a/gazelle/bzl/testdata/private/nested/private/inside/internal/bar.bzl b/gazelle/bzl/testdata/private/nested/private/inside/internal/bar.bzl new file mode 100644 index 0000000..c8a4871 --- /dev/null +++ b/gazelle/bzl/testdata/private/nested/private/inside/internal/bar.bzl @@ -0,0 +1,6 @@ +""" +Test sample code. +""" + +def func(): + pass diff --git a/gazelle/bzl/testdata/private/private/BUILD.out b/gazelle/bzl/testdata/private/private/BUILD.out index eb2e935..f442a99 100644 --- a/gazelle/bzl/testdata/private/private/BUILD.out +++ b/gazelle/bzl/testdata/private/private/BUILD.out @@ -3,4 +3,5 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") bzl_library( name = "bar", srcs = ["bar.bzl"], + visibility = ["//:__subpackages__"], ) |