Skylib module containing utilities for Bazel modules and module extensions.

## modules.as_extension

load("@bazel_skylib//lib:modules.bzl", "modules")

modules.as_extension(macro, doc)

Wraps a WORKSPACE dependency macro into a module extension.

Example:
```starlark
def rules_foo_deps(optional_arg = True):
    some_repo_rule(name = "foobar")
    http_archive(name = "bazqux")

rules_foo_deps_ext = modules.as_extension(rules_foo_deps)
```


**PARAMETERS**

| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| macro |  A [WORKSPACE dependency macro](https://bazel.build/rules/deploying#dependencies), i.e., a function with no required parameters that instantiates one or more repository rules.   |  none |
| doc |  A description of the module extension that can be extracted by documentation generating tools.   |  `None` |

**RETURNS**

A module extension that generates the repositories instantiated by the given macro and also
uses [`use_all_repos`](#use_all_repos) to indicate that all of those repositories should be
imported via `use_repo`. The extension is marked as reproducible if supported by the current
version of Bazel and thus doesn't result in a lockfile entry.

## modules.use_all_repos

load("@bazel_skylib//lib:modules.bzl", "modules")

modules.use_all_repos(module_ctx, reproducible)

Return from a module extension that should have all its repositories imported via `use_repo`.

Example:
```starlark
def _ext_impl(module_ctx):
    some_repo_rule(name = "foobar")
    http_archive(name = "bazqux")
    return modules.use_all_repos(module_ctx)

ext = module_extension(_ext_impl)
```


**PARAMETERS**

| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| module_ctx |  The [`module_ctx`](https://bazel.build/rules/lib/builtins/module_ctx) object passed to the module extension's implementation function.   |  none |
| reproducible |  The value of the `reproducible` parameter to pass to the [`extension_metadata`](https://bazel.build/rules/lib/builtins/extension_metadata.html) object returned by this function. This is safe to set with Bazel versions that don't support this parameter and will be ignored in that case.   |  `False` |

**RETURNS**

An [`extension_metadata`](https://bazel.build/rules/lib/builtins/extension_metadata.html)
object that, when returned from a module extension implementation function, specifies that all
repositories generated by this extension should be imported via `use_repo`. If the current
version of Bazel doesn't support `extension_metadata`, returns `None` instead, which can
safely be returned from a module extension implementation function in all versions of Bazel.


