Skip to content

Commit

Permalink
Replace custom set library by Skylib's sets (#1799)
Browse files Browse the repository at this point in the history
  • Loading branch information
evertedsphere committed Nov 29, 2022
1 parent 1bc0dd5 commit d45f901
Show file tree
Hide file tree
Showing 16 changed files with 61 additions and 187 deletions.
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
5 changes: 3 additions & 2 deletions 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 All @@ -78,7 +79,7 @@ def _c2hs_library_impl(ctx):
depset(cc.files),
depset(hs.toolchain.bindir),
depset(hs.toolchain.libdir),
set.to_depset(version_macro_headers),
depset(sets.to_list(version_macro_headers)),
inputs,
]),
input_manifests = input_manifests,
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
4 changes: 3 additions & 1 deletion haskell/private/path_utils.bzl
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
"""Utilities for module and path manipulations."""

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

# 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

0 comments on commit d45f901

Please # to comment.