Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace (most of) custom set library by Skylib's sets.bzl #1834

Merged
merged 2 commits into from
Nov 29, 2022
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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
*.swp
*.swo
__pycache__
/.direnv
/.envrc
3 changes: 2 additions & 1 deletion haskell/c2hs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ load(
"target_unique_name",
)
load(":private/set.bzl", "set")
load("@bazel_skylib//lib:sets.bzl", "sets")
load(":private/version_macros.bzl", "version_macro_includes")

def _c2hs_library_impl(ctx):
Expand Down Expand Up @@ -62,7 +63,7 @@ def _c2hs_library_impl(ctx):
]
args.add_all(chi_includes)

version_macro_headers = set.empty()
version_macro_headers = sets.make()
if ctx.attr.version:
dep_info = gather_dep_info(ctx.attr.name, ctx.attr.deps)
(version_macro_headers, version_macro_flags) = version_macro_includes(dep_info)
Expand Down
11 changes: 6 additions & 5 deletions haskell/cabal.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ load(
"truly_relativize",
)
load(":private/set.bzl", "set")
load("@bazel_skylib//lib:sets.bzl", "sets")
load(":private/validate_attrs.bzl", "typecheck_stackage_extradeps")
load(":haddock.bzl", "generate_unified_haddock_info")
load(
Expand Down Expand Up @@ -582,11 +583,11 @@ def _haskell_cabal_library_impl(ctx):
hs_info = HaskellInfo(
package_databases = depset([package_database], transitive = [dep_info.package_databases]),
empty_lib_package_databases = dep_info.empty_lib_package_databases,
version_macros = set.empty(),
version_macros = sets.make(),
source_files = depset(),
boot_files = depset(),
extra_source_files = depset(),
import_dirs = set.empty(),
import_dirs = sets.make(),
hs_libraries = depset(
direct = [lib for lib in [vanilla_library, dynamic_library, profiling_library] if lib],
transitive = [dep_info.hs_libraries],
Expand Down Expand Up @@ -881,11 +882,11 @@ def _haskell_cabal_binary_impl(ctx):
hs_info = HaskellInfo(
package_databases = dep_info.package_databases,
empty_lib_package_databases = dep_info.empty_lib_package_databases,
version_macros = set.empty(),
version_macros = sets.make(),
source_files = depset(),
boot_files = depset(),
extra_source_files = depset(),
import_dirs = set.empty(),
import_dirs = sets.make(),
hs_libraries = dep_info.hs_libraries,
deps_hs_libraries = dep_info.deps_hs_libraries,
empty_hs_libraries = dep_info.empty_hs_libraries,
Expand Down Expand Up @@ -1933,7 +1934,7 @@ def _stack_snapshot_impl(repository_ctx):
else:
visibility = sorted(
# use set to de-duplicate
set.to_list(set.from_list([
sets.to_list(sets.make([
str(vendored_packages[rdep].relative(":__pkg__"))
for rdep in reverse_deps[name]
if rdep in vendored_packages
Expand Down
3 changes: 2 additions & 1 deletion haskell/doctest.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ load("@bazel_skylib//lib:dicts.bzl", "dicts")
load(":cc.bzl", "cc_interop_info", "ghc_cc_program_args")
load(":private/context.bzl", "haskell_context", "render_env")
load(":private/set.bzl", "set")
load("@bazel_skylib//lib:sets.bzl", "sets")
load(
"@rules_haskell//haskell:providers.bzl",
"HaskellCcLibrariesInfo",
Expand Down Expand Up @@ -121,7 +122,7 @@ def _haskell_doctest_single(target, ctx):

if ctx.attr.modules:
inputs = ctx.attr.modules
args.add_all(set.to_list(hs_info.import_dirs), format_each = "-i%s")
args.add_all(sets.to_list(hs_info.import_dirs), format_each = "-i%s")
else:
inputs = [source.path for source in hs_info.source_files.to_list()]

Expand Down
3 changes: 2 additions & 1 deletion haskell/experimental/private/module.bzl
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
load("@bazel_skylib//lib:paths.bzl", "paths")
load("@bazel_skylib//lib:sets.bzl", "sets")
load("//haskell:private/path_utils.bzl", "infer_main_module")
load(
"//haskell:private/dependencies.bzl",
Expand Down Expand Up @@ -840,7 +841,7 @@ def build_haskell_modules(
repl_info = struct(
source_files = depset(source_files),
boot_files = depset(boot_files),
import_dirs = set.from_list(import_dirs),
import_dirs = sets.make(import_dirs),
user_compile_flags = user_compile_flags,
),
)
Expand Down
1 change: 1 addition & 0 deletions haskell/haddock.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ load(
)
load(":private/context.bzl", "haskell_context", "render_env")
load(":private/set.bzl", "set")
load("@bazel_skylib//lib:sets.bzl", "sets")

def generate_unified_haddock_info(this_package_id, this_package_haddock, this_package_html, deps):
"""Collapse dependencies into a single `HaddockInfo`.
Expand Down
7 changes: 4 additions & 3 deletions haskell/private/actions/compile.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ load(
"link_libraries",
)
load(":private/set.bzl", "set")
load("@bazel_skylib//lib:sets.bzl", "sets")
load("//haskell/experimental:providers.bzl", "HaskellModuleInfo")
load(
":private/actions/process_hsc_file.bzl",
Expand Down Expand Up @@ -161,7 +162,7 @@ def _compilation_defaults(
# the two must both have the same root; i.e., both plain files,
# both in bin_dir, or both in genfiles_dir.

import_dirs = set.from_list([
import_dirs = sets.make([
hs.src_root,
paths.join(hs.bin_dir.path, hs.src_root),
paths.join(hs.genfiles_dir.path, hs.src_root),
Expand All @@ -176,15 +177,15 @@ def _compilation_defaults(
elif s.extension == "hsc":
s0, idir = process_hsc_file(hs, cc, hsc_flags, hsc_inputs, s)
source_files.append(s0)
set.mutable_insert(import_dirs, idir)
sets.insert(import_dirs, idir)
elif s.extension in ["hs-boot", "lhs-boot"]:
boot_files.append(s)
else:
source_files.append(s)

if s in import_dir_map:
idir = import_dir_map[s]
set.mutable_insert(import_dirs, idir)
sets.insert(import_dirs, idir)

# Write the -optP flags to a parameter file because they can be very long on Windows
# e.g. 27Kb for grpc-haskell
Expand Down
3 changes: 2 additions & 1 deletion haskell/private/actions/process_hsc_file.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ load("@bazel_skylib//lib:paths.bzl", "paths")
load(":private/version_macros.bzl", "version_macro_includes")
load(":private/path_utils.bzl", "declare_compiled")
load(":private/set.bzl", "set")
load("@bazel_skylib//lib:sets.bzl", "sets")

def process_hsc_file(hs, cc, hsc_flags, hsc_inputs, hsc_file):
"""Process a single hsc file.
Expand Down Expand Up @@ -108,6 +109,6 @@ def preprocess_hsc_flags_and_inputs(dep_info, user_compile_flags, version):
if version:
(version_macro_headers, version_macro_flags) = version_macro_includes(dep_info)
hsc_flags += ["--cflag=" + x for x in version_macro_flags]
hsc_inputs += set.to_list(version_macro_headers)
hsc_inputs += sets.to_list(version_macro_headers)

return hsc_flags, hsc_inputs
3 changes: 2 additions & 1 deletion haskell/private/actions/runghc.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ load(
"link_libraries",
)
load("@bazel_skylib//lib:shell.bzl", "shell")
load("@bazel_skylib//lib:sets.bzl", "sets")

def build_haskell_runghc(
hs,
Expand Down Expand Up @@ -56,7 +57,7 @@ def build_haskell_runghc(
)

if lib_info != None:
for idir in set.to_list(hs_info.import_dirs):
for idir in sets.to_list(hs_info.import_dirs):
args += ["-i{0}".format(idir)]

link_libraries(
Expand Down
5 changes: 3 additions & 2 deletions haskell/private/dependencies.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ load(
"HaskellLibraryInfo",
)
load(":private/set.bzl", "set")
load("@bazel_skylib//lib:sets.bzl", "sets")

def gather_dep_info(name, deps):
"""Collapse dependencies into a single `HaskellInfo`.
Expand Down Expand Up @@ -64,7 +65,7 @@ def gather_dep_info(name, deps):
if HaskellInfo in dep
])

import_dirs = set.empty()
import_dirs = sets.make()
for dep in deps:
if HaskellInfo in dep:
import_dirs = set.mutable_union(import_dirs, dep[HaskellInfo].import_dirs)
Expand All @@ -83,7 +84,7 @@ def gather_dep_info(name, deps):
acc = HaskellInfo(
package_databases = package_databases,
empty_lib_package_databases = empty_lib_package_databases,
version_macros = set.empty(),
version_macros = sets.make(),
hs_libraries = hs_libraries,
deps_hs_libraries = deps_hs_libraries,
empty_hs_libraries = empty_hs_libraries,
Expand Down
29 changes: 15 additions & 14 deletions haskell/private/haskell_impl.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ load(
)
load(":private/pkg_id.bzl", "pkg_id")
load(":private/set.bzl", "set")
load("@bazel_skylib//lib:sets.bzl", "sets")
load(":private/list.bzl", "list")
load(":private/version_macros.bzl", "generate_version_macros")
load(":providers.bzl", "GhcPluginInfo", "HaskellCoverageInfo")
Expand Down Expand Up @@ -285,7 +286,7 @@ def _haskell_binary_common_impl(ctx, is_test):

hs_info = HaskellInfo(
package_databases = all_deps_info.package_databases,
version_macros = set.empty(),
version_macros = sets.make(),
source_files = depset(transitive = [c.source_files, module_outputs.repl_info.source_files]),
boot_files = depset(transitive = [c.boot_files, module_outputs.repl_info.boot_files]),
extra_source_files = c.extra_source_files,
Expand Down Expand Up @@ -531,13 +532,13 @@ def haskell_library_impl(ctx):

# Validate that hidden modules appear as modules in src list or modules list, depending which appears:
declared_modules = haskell_module_names if modules else module_map.keys()
hidden_minus_declared_modules = set.difference(set.from_list(ctx.attr.hidden_modules), set.from_list(declared_modules))
if not hidden_minus_declared_modules == set.empty():
fail("""Hidden modules must be a subset of all modules, found additional hidden modules {}""".format(set.to_list(hidden_minus_declared_modules)))
hidden_minus_declared_modules = sets.difference(sets.make(ctx.attr.hidden_modules), sets.make(declared_modules))
if not hidden_minus_declared_modules == sets.make():
fail("""Hidden modules must be a subset of all modules, found additional hidden modules {}""".format(sets.to_list(hidden_minus_declared_modules)))

exposed_modules = set.from_list(module_map.keys() + exposed_modules_reexports + haskell_module_names)
set.mutable_difference(exposed_modules, set.from_list(other_modules))
exposed_modules = set.to_list(exposed_modules)
exposed_modules = sets.make(module_map.keys() + exposed_modules_reexports + haskell_module_names)
exposed_modules = set.mutable_difference(exposed_modules, sets.make(other_modules))
exposed_modules = sets.to_list(exposed_modules)

if non_empty:
static_library = link_library_static(
Expand Down Expand Up @@ -598,14 +599,14 @@ def haskell_library_impl(ctx):
transitive = [all_deps_info.interface_dirs, module_outputs.his, module_outputs.dyn_his],
)

version_macros = set.empty()
version_macros = sets.make()
if version:
package_name = hs.name
if hasattr(ctx.attr, "package_name") and ctx.attr.package_name:
package_name = ctx.attr.package_name
version_macros = set.singleton(
version_macros = sets.make([
generate_version_macros(ctx, package_name, version),
)
])

empty_libs = _create_empty_library(hs, cc, posix, my_pkg_id, with_shared, with_profiling, empty_libs_dir)

Expand Down Expand Up @@ -986,11 +987,11 @@ def haskell_import_impl(ctx):
file
for file in ctx.files.static_libraries + ctx.files.shared_libraries
]
version_macros = set.empty()
version_macros = sets.make()
if ctx.attr.version != None:
version_macros = set.singleton(
version_macros = sets.make([
generate_version_macros(ctx, ctx.label.name, ctx.attr.version),
)
])
hs_info = HaskellInfo(
# XXX Empty set of conf and cache files only works for global db.
package_databases = depset(),
Expand All @@ -999,7 +1000,7 @@ def haskell_import_impl(ctx):
source_files = depset(),
boot_files = depset(),
extra_source_files = depset(),
import_dirs = set.empty(),
import_dirs = sets.make(),
hs_libraries = depset(),
deps_hs_libraries = depset(),
empty_hs_libraries = depset(),
Expand Down
7 changes: 4 additions & 3 deletions haskell/private/list.bzl
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""Helper functions on lists."""

load(":private/set.bzl", "set")
load("@bazel_skylib//lib:sets.bzl", "sets")

def _dedup_on(f, list_):
"""deduplicate `list_` by comparing the result of applying
Expand All @@ -12,12 +13,12 @@ def _dedup_on(f, list_):
dedup_on(compare_x, [struct(x=3), struct(x=4), struct(x=3)])
=> [struct(x=3), struct(x=4)]
"""
seen = set.empty()
seen = sets.make()
deduped = []
for el in list_:
by = f(el)
if not set.is_member(seen, by):
set.mutable_insert(seen, by)
if not sets.contains(seen, by):
sets.insert(seen, by)
deduped.append(el)
return deduped

Expand Down
2 changes: 1 addition & 1 deletion haskell/private/path_utils.bzl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Utilities for module and path manipulations."""

load("@bazel_skylib//lib:paths.bzl", "paths")
load(":private/set.bzl", "set")
load("@bazel_skylib//lib:sets.bzl", "sets")

def is_haskell_extension(extension):
"""Whether the given extension defines a Haskell source file."""
Expand Down
Loading