Skip to content

Commit 2f83f47

Browse files
committed
Move default toolchain dependencies logic to .bzl file
Purely refactoring change. Encapsulates the logic of selecting dependencies into a function. Should come in handy in future changes.
1 parent 914e4ee commit 2f83f47

File tree

2 files changed

+80
-48
lines changed

2 files changed

+80
-48
lines changed

scala/BUILD

Lines changed: 14 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,31 @@
11
load("@rules_java//java:defs.bzl", "java_import", "java_library")
22
load("//scala:providers.bzl", "declare_deps_provider")
3-
load("//scala:scala.bzl", "setup_scala_toolchain")
4-
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_MAJOR_VERSION")
3+
load("//scala/private:macros/setup_scala_toolchain.bzl", "default_deps", "setup_scala_toolchain_with_default_classpaths")
4+
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION")
55

66
toolchain_type(
77
name = "toolchain_type",
88
visibility = ["//visibility:public"],
99
)
1010

11-
_SCALA_COMPILE_CLASSPATH_DEPS = [
12-
"@io_bazel_rules_scala_scala_compiler",
13-
"@io_bazel_rules_scala_scala_library",
14-
] + (["@io_bazel_rules_scala_scala_reflect"] if SCALA_MAJOR_VERSION.startswith("2") else [
15-
"@io_bazel_rules_scala_scala_interfaces",
16-
"@io_bazel_rules_scala_scala_tasty_core",
17-
"@io_bazel_rules_scala_scala_asm",
18-
"@io_bazel_rules_scala_scala_library_2",
19-
])
20-
21-
_SCALA_LIBRARY_CLASSPATH_DEPS = [
22-
"@io_bazel_rules_scala_scala_library",
23-
] + (["@io_bazel_rules_scala_scala_reflect"] if SCALA_MAJOR_VERSION.startswith("2") else [
24-
"@io_bazel_rules_scala_scala_library_2",
25-
])
26-
27-
_SCALA_MACRO_CLASSPATH_DEPS = [
28-
"@io_bazel_rules_scala_scala_library",
29-
] + (["@io_bazel_rules_scala_scala_reflect"] if SCALA_MAJOR_VERSION.startswith("2") else [
30-
"@io_bazel_rules_scala_scala_library_2",
31-
])
32-
33-
_PARSER_COMBINATORS_DEPS = ["@io_bazel_rules_scala_scala_parser_combinators"]
34-
35-
_SCALA_XML_DEPS = ["@io_bazel_rules_scala_scala_xml"]
36-
37-
_SEMANTICDB_DEPS = ["@org_scalameta_semanticdb_scalac"] if SCALA_MAJOR_VERSION.startswith("2") else []
38-
39-
setup_scala_toolchain(
11+
setup_scala_toolchain_with_default_classpaths(
4012
name = "default_toolchain",
41-
scala_compile_classpath = _SCALA_COMPILE_CLASSPATH_DEPS,
42-
scala_library_classpath = _SCALA_LIBRARY_CLASSPATH_DEPS,
43-
scala_macro_classpath = _SCALA_MACRO_CLASSPATH_DEPS,
13+
scala_version = SCALA_VERSION,
4414
use_argument_file_in_runner = True,
4515
)
4616

47-
setup_scala_toolchain(
17+
setup_scala_toolchain_with_default_classpaths(
4818
name = "unused_dependency_checker_error_toolchain",
4919
dependency_tracking_method = "ast-plus",
50-
scala_compile_classpath = _SCALA_COMPILE_CLASSPATH_DEPS,
51-
scala_library_classpath = _SCALA_LIBRARY_CLASSPATH_DEPS,
52-
scala_macro_classpath = _SCALA_MACRO_CLASSPATH_DEPS,
20+
scala_version = SCALA_VERSION,
5321
unused_dependency_checker_mode = "error",
5422
)
5523

56-
setup_scala_toolchain(
24+
setup_scala_toolchain_with_default_classpaths(
5725
name = "minimal_direct_source_deps",
5826
dependency_mode = "plus-one",
5927
dependency_tracking_method = "ast",
60-
scala_compile_classpath = _SCALA_COMPILE_CLASSPATH_DEPS,
61-
scala_library_classpath = _SCALA_LIBRARY_CLASSPATH_DEPS,
62-
scala_macro_classpath = _SCALA_MACRO_CLASSPATH_DEPS,
28+
scala_version = SCALA_VERSION,
6329
strict_deps_mode = "error",
6430
unused_dependency_checker_mode = "error",
6531
)
@@ -80,40 +46,40 @@ declare_deps_provider(
8046
name = "scala_compile_classpath_provider",
8147
deps_id = "scala_compile_classpath",
8248
visibility = ["//visibility:public"],
83-
deps = _SCALA_COMPILE_CLASSPATH_DEPS,
49+
deps = default_deps("scala_compile_classpath", SCALA_VERSION),
8450
)
8551

8652
declare_deps_provider(
8753
name = "scala_library_classpath_provider",
8854
deps_id = "scala_library_classpath",
8955
visibility = ["//visibility:public"],
90-
deps = _SCALA_LIBRARY_CLASSPATH_DEPS,
56+
deps = default_deps("scala_library_classpath", SCALA_VERSION),
9157
)
9258

9359
declare_deps_provider(
9460
name = "scala_macro_classpath_provider",
9561
deps_id = "scala_macro_classpath",
9662
visibility = ["//visibility:public"],
97-
deps = _SCALA_MACRO_CLASSPATH_DEPS,
63+
deps = default_deps("scala_macro_classpath", SCALA_VERSION),
9864
)
9965

10066
declare_deps_provider(
10167
name = "scala_xml_provider",
10268
deps_id = "scala_xml",
10369
visibility = ["//visibility:public"],
104-
deps = _SCALA_XML_DEPS,
70+
deps = default_deps("scala_xml", SCALA_VERSION),
10571
)
10672

10773
declare_deps_provider(
10874
name = "parser_combinators_provider",
10975
deps_id = "parser_combinators",
11076
visibility = ["//visibility:public"],
111-
deps = _PARSER_COMBINATORS_DEPS,
77+
deps = default_deps("parser_combinators", SCALA_VERSION),
11278
)
11379

11480
declare_deps_provider(
11581
name = "semanticdb_provider",
11682
deps_id = "semanticdb",
11783
visibility = ["//visibility:public"],
118-
deps = _SEMANTICDB_DEPS,
84+
deps = default_deps("semanticdb", SCALA_VERSION),
11985
)

scala/private/macros/setup_scala_toolchain.bzl

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,69 @@ def setup_scala_toolchain(
9999
target_settings = ["@io_bazel_rules_scala_config//:scala_version" + version_suffix(scala_version)],
100100
visibility = visibility,
101101
)
102+
103+
_DEFAULT_DEPS = {
104+
"scala_compile_classpath": {
105+
"any": [
106+
"@io_bazel_rules_scala_scala_compiler",
107+
"@io_bazel_rules_scala_scala_library",
108+
],
109+
"2": [
110+
"@io_bazel_rules_scala_scala_reflect",
111+
],
112+
"3": [
113+
"@io_bazel_rules_scala_scala_interfaces",
114+
"@io_bazel_rules_scala_scala_tasty_core",
115+
"@io_bazel_rules_scala_scala_asm",
116+
"@io_bazel_rules_scala_scala_library_2",
117+
],
118+
},
119+
"scala_library_classpath": {
120+
"any": [
121+
"@io_bazel_rules_scala_scala_library",
122+
],
123+
"2": [
124+
"@io_bazel_rules_scala_scala_reflect",
125+
],
126+
"3": [
127+
"@io_bazel_rules_scala_scala_library_2",
128+
],
129+
},
130+
"scala_macro_classpath": {
131+
"any": [
132+
"@io_bazel_rules_scala_scala_library",
133+
],
134+
"2": [
135+
"@io_bazel_rules_scala_scala_reflect",
136+
],
137+
"3": [
138+
"@io_bazel_rules_scala_scala_library_2",
139+
],
140+
},
141+
"scala_xml": {
142+
"any": ["@io_bazel_rules_scala_scala_xml"],
143+
},
144+
"parser_combinators": {
145+
"any": ["@io_bazel_rules_scala_scala_parser_combinators"],
146+
},
147+
"semanticdb": {
148+
"2": ["@org_scalameta_semanticdb_scalac"],
149+
},
150+
}
151+
152+
def default_deps(deps_id, scala_version):
153+
versions = _DEFAULT_DEPS[deps_id]
154+
return versions.get("any", []) + versions.get(scala_version[0], [])
155+
156+
def setup_scala_toolchain_with_default_classpaths(
157+
name,
158+
scala_version,
159+
**kwargs):
160+
for dep_id in (
161+
"scala_compile_classpath",
162+
"scala_library_classpath",
163+
"scala_macro_classpath",
164+
):
165+
if dep_id not in kwargs:
166+
kwargs[dep_id] = default_deps(dep_id, scala_version)
167+
setup_scala_toolchain(name = name, **kwargs)

0 commit comments

Comments
 (0)