Skip to content
This repository has been archived by the owner on Jun 4, 2024. It is now read-only.

Commit

Permalink
Fix scala_deps_direct and scala_deps_used (#258)
Browse files Browse the repository at this point in the history
  • Loading branch information
borkaehw authored Dec 18, 2019
1 parent 26163cc commit b2db774
Show file tree
Hide file tree
Showing 7 changed files with 221 additions and 121 deletions.
89 changes: 89 additions & 0 deletions docs/configure_zinc_scala.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
<a name="#configure_zinc_scala"></a>

## configure_zinc_scala

<pre>
configure_zinc_scala(<a href="#configure_zinc_scala-name">name</a>, <a href="#configure_zinc_scala-compiler_bridge">compiler_bridge</a>, <a href="#configure_zinc_scala-compiler_classpath">compiler_classpath</a>, <a href="#configure_zinc_scala-deps_direct">deps_direct</a>, <a href="#configure_zinc_scala-deps_used">deps_used</a>, <a href="#configure_zinc_scala-global_plugins">global_plugins</a>, <a href="#configure_zinc_scala-global_scalacopts">global_scalacopts</a>, <a href="#configure_zinc_scala-runtime_classpath">runtime_classpath</a>, <a href="#configure_zinc_scala-version">version</a>)
</pre>



### Attributes

<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="configure_zinc_scala-name">
<td><code>name</code></td>
<td>
<a href="https://bazel.build/docs/build-ref.html#name">Name</a>; required
<p>
A unique name for this target.
</p>
</td>
</tr>
<tr id="configure_zinc_scala-compiler_bridge">
<td><code>compiler_bridge</code></td>
<td>
<a href="https://bazel.build/docs/build-ref.html#labels">Label</a>; required
</td>
</tr>
<tr id="configure_zinc_scala-compiler_classpath">
<td><code>compiler_classpath</code></td>
<td>
<a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a>; required
</td>
</tr>
<tr id="configure_zinc_scala-deps_direct">
<td><code>deps_direct</code></td>
<td>
String; optional
<p>
Options are <code>error</code> and <code>off</code>.
</p>
</td>
</tr>
<tr id="configure_zinc_scala-deps_used">
<td><code>deps_used</code></td>
<td>
String; optional
<p>
Options are <code>error</code> and <code>off</code>.
</p>
</td>
</tr>
<tr id="configure_zinc_scala-global_plugins">
<td><code>global_plugins</code></td>
<td>
<a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a>; optional
<p>
Scalac plugins that will always be enabled.
</p>
</td>
</tr>
<tr id="configure_zinc_scala-global_scalacopts">
<td><code>global_scalacopts</code></td>
<td>
List of strings; optional
<p>
Scalac options that will always be enabled.
</p>
</td>
</tr>
<tr id="configure_zinc_scala-runtime_classpath">
<td><code>runtime_classpath</code></td>
<td>
<a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a>; required
</td>
</tr>
<tr id="configure_zinc_scala-version">
<td><code>version</code></td>
<td>
String; required
</td>
</tr>
</tbody>
</table>
10 changes: 7 additions & 3 deletions docs/scala.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,21 @@ workspace. (It is not safe for use by multiple Bazel instances.) Stateful compil
This feature shares concepts with
[Java strict and unused deps](https://blog.bazel.build/2017/06/28/sjd-unused_deps.html). The default toolchain uses two defines (`--define=scala_deps_x=y`):

* `scala_deps_direct` - Require that direct usages of libraries come only from immediately declared deps
* `scala_deps_direct` - Require that direct usages of libraries come only from immediately declared deps.
* `scala_deps_used` - Require that any immediate deps are deps are directly used.

Each define may have a value of:

* `error` - Check before creating the jar.
* `check` - Check when building with --output_group=deps_check. (default)
* `error` - Check before creating the jar. (default)
* `off` - Do not check.

Failed checks emit suggested [buildozer](https://github.com/bazelbuild/buildtools/tree/master/buildozer) commands.

You may also toggle deps check via [configure_zinc_scala](configure_zinc_scala.md):

* `deps_direct` - Work the same as `scala_deps_direct`.
* `deps_used` - Work the same as `scala_deps_used`.

## Tests

`scala_test` supports
Expand Down
113 changes: 28 additions & 85 deletions docs/stardoc/scala.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,91 +67,6 @@ configure_bootstrap_scala(<a href="#configure_bootstrap_scala-name">name</a>, <a
</table>


<a name="#configure_zinc_scala"></a>

## configure_zinc_scala

<pre>
configure_zinc_scala(<a href="#configure_zinc_scala-name">name</a>, <a href="#configure_zinc_scala-compiler_bridge">compiler_bridge</a>, <a href="#configure_zinc_scala-compiler_classpath">compiler_classpath</a>, <a href="#configure_zinc_scala-deps_direct">deps_direct</a>, <a href="#configure_zinc_scala-deps_used">deps_used</a>, <a href="#configure_zinc_scala-global_plugins">global_plugins</a>, <a href="#configure_zinc_scala-global_scalacopts">global_scalacopts</a>, <a href="#configure_zinc_scala-runtime_classpath">runtime_classpath</a>, <a href="#configure_zinc_scala-version">version</a>)
</pre>



### Attributes

<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="configure_zinc_scala-name">
<td><code>name</code></td>
<td>
<a href="https://bazel.build/docs/build-ref.html#name">Name</a>; required
<p>
A unique name for this target.
</p>
</td>
</tr>
<tr id="configure_zinc_scala-compiler_bridge">
<td><code>compiler_bridge</code></td>
<td>
<a href="https://bazel.build/docs/build-ref.html#labels">Label</a>; required
</td>
</tr>
<tr id="configure_zinc_scala-compiler_classpath">
<td><code>compiler_classpath</code></td>
<td>
<a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a>; required
</td>
</tr>
<tr id="configure_zinc_scala-deps_direct">
<td><code>deps_direct</code></td>
<td>
String; optional
</td>
</tr>
<tr id="configure_zinc_scala-deps_used">
<td><code>deps_used</code></td>
<td>
String; optional
</td>
</tr>
<tr id="configure_zinc_scala-global_plugins">
<td><code>global_plugins</code></td>
<td>
<a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a>; optional
<p>
Scalac plugins that will always be enabled.
</p>
</td>
</tr>
<tr id="configure_zinc_scala-global_scalacopts">
<td><code>global_scalacopts</code></td>
<td>
List of strings; optional
<p>
Scalac options that will always be enabled.
</p>
</td>
</tr>
<tr id="configure_zinc_scala-runtime_classpath">
<td><code>runtime_classpath</code></td>
<td>
<a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a>; required
</td>
</tr>
<tr id="configure_zinc_scala-version">
<td><code>version</code></td>
<td>
String; required
</td>
</tr>
</tbody>
</table>


<a name="#scala_binary"></a>

## scala_binary
Expand Down Expand Up @@ -895,6 +810,34 @@ Generates Scaladocs.
</table>


<a name="#configure_zinc_scala"></a>

## configure_zinc_scala

<pre>
configure_zinc_scala(<a href="#configure_zinc_scala-kwargs">kwargs</a>)
</pre>



### Parameters

<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="configure_zinc_scala-kwargs">
<td><code>kwargs</code></td>
<td>
optional.
</td>
</tr>
</tbody>
</table>


<a name="#make_scala_binary"></a>

## make_scala_binary
Expand Down
15 changes: 14 additions & 1 deletion rules/scala.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -490,7 +490,7 @@ configure_bootstrap_scala = rule(
implementation = _configure_bootstrap_scala_implementation,
)

configure_zinc_scala = rule(
_configure_zinc_scala = rule(
attrs = {
"version": attr.string(mandatory = True),
"runtime_classpath": attr.label_list(
Expand Down Expand Up @@ -535,3 +535,16 @@ configure_zinc_scala = rule(
},
implementation = _configure_zinc_scala_implementation,
)

def configure_zinc_scala(**kwargs):
_configure_zinc_scala(
deps_direct = select({
"@rules_scala_annex//src/main/scala:deps_direct_off": "off",
"//conditions:default": "error",
}),
deps_used = select({
"@rules_scala_annex//src/main/scala:deps_used_off": "off",
"//conditions:default": "error",
}),
**kwargs
)
14 changes: 14 additions & 0 deletions src/main/scala/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,17 @@ configure_zinc_scala(
version = "2.12.8",
visibility = ["//visibility:public"],
)

config_setting(
name = "deps_used_off",
define_values = {
"scala_deps_used": "off",
},
)

config_setting(
name = "deps_direct_off",
define_values = {
"scala_deps_direct": "off",
},
)
82 changes: 55 additions & 27 deletions tests/dependencies/indirect/BUILD
Original file line number Diff line number Diff line change
@@ -1,49 +1,77 @@
load("@rules_scala_annex//rules:scala.bzl", "scala_library")
load("@rules_scala_annex//rules:providers.bzl", "reconfigure_deps_configuration")

# used_deps off
reconfigure_deps_configuration(
name = "scala",
direct = select({
":deps_direct_off": "off",
"//conditions:default": "error",
}),
name = "scala_used_deps_off",
provider = "//scala:2_12",
used = select({
":deps_used_off": "off",
"//conditions:default": "error",
}),
used = "off",
)

config_setting(
name = "deps_used_off",
define_values = {
"scala_deps_used": "off",
},
scala_library(
name = "used_deps_off_a",
srcs = ["A.scala"],
scala = ":scala_used_deps_off",
)

scala_library(
name = "used_deps_off_b",
srcs = ["B.scala"],
scala = ":scala_used_deps_off",
deps = [":used_deps_off_a"],
)

scala_library(
name = "used_deps_off_c",
srcs = ["C.scala"],
scala = ":scala_used_deps_off",
deps = [":used_deps_off_b"],
)

# direct_deps off
reconfigure_deps_configuration(
name = "scala_direct_deps_off",
direct = "off",
provider = "//scala:2_12",
)

scala_library(
name = "direct_deps_off_a",
srcs = ["A.scala"],
scala = ":scala_direct_deps_off",
)

config_setting(
name = "deps_direct_off",
define_values = {
"scala_deps_direct": "off",
},
scala_library(
name = "direct_deps_off_b",
srcs = ["B.scala"],
scala = ":scala_direct_deps_off",
deps = [":direct_deps_off_a"],
)

scala_library(
name = "direct_deps_off_c",
srcs = ["C.scala"],
scala = ":scala_direct_deps_off",
deps = [":direct_deps_off_b"],
)

# toggle used_deps and direct_deps via --define
scala_library(
name = "a",
name = "define_a",
srcs = ["A.scala"],
scala = ":scala",
scala = "@rules_scala_annex//src/main/scala:zinc_2_12_8",
)

scala_library(
name = "b",
name = "define_b",
srcs = ["B.scala"],
scala = ":scala",
deps = [":a"],
scala = "@rules_scala_annex//src/main/scala:zinc_2_12_8",
deps = [":define_a"],
)

scala_library(
name = "c",
name = "define_c",
srcs = ["C.scala"],
scala = ":scala",
deps = [":b"],
scala = "@rules_scala_annex//src/main/scala:zinc_2_12_8",
deps = [":define_b"],
)
Loading

0 comments on commit b2db774

Please sign in to comment.