Skip to content

Commit be4046f

Browse files
committed
Intorduce flag that switches where toolchains reads config from
Unfortunately bazel rules doesn't know if attr was set by user or not bazelbuild/bazel#14434
1 parent 1282132 commit be4046f

File tree

2 files changed

+56
-36
lines changed

2 files changed

+56
-36
lines changed

scala/scala_toolchain.bzl

Lines changed: 51 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -40,66 +40,80 @@ def _partition_patterns(patterns):
4040
]
4141
return includes, excludes
4242

43-
_deprecated_attrs = {
44-
"dependency_mode": attr.string(values = ["direct", "plus-one", "transitive"]),
45-
"strict_deps_mode": attr.string(values = ["off", "warn", "error", "default"]),
46-
"unused_dependency_checker_mode": attr.string(values = ["off", "warn", "error"]),
47-
"compiler_deps_mode": attr.string(values = ["off", "warn", "error"]),
48-
"dependency_tracking_method": attr.string(values = ["ast-plus", "ast", "high-level", "default"]),
43+
_config_attrs = {
44+
"dependency_mode": attr.string(
45+
default = "direct",
46+
values = ["direct", "plus-one", "transitive"],
47+
),
48+
"strict_deps_mode": attr.string(
49+
default = "default",
50+
values = ["off", "warn", "error", "default"],
51+
),
52+
"unused_dependency_checker_mode": attr.string(
53+
default = "off",
54+
values = ["off", "warn", "error"],
55+
),
56+
"compiler_deps_mode": attr.string(
57+
default = "off",
58+
values = ["off", "warn", "error"],
59+
),
60+
"dependency_tracking_method": attr.string(
61+
default = "default",
62+
values = ["ast-plus", "ast", "high-level", "default"],
63+
),
4964
"dependency_tracking_strict_deps_patterns": attr.string_list(
5065
doc = "List of target prefixes included for strict deps analysis. Exclude patterns with '-'",
66+
default = [""],
5167
),
5268
"dependency_tracking_unused_deps_patterns": attr.string_list(
5369
doc = "List of target prefixes included for unused deps analysis. Exclude patterns with '-'",
70+
default = [""],
5471
),
5572
"enable_diagnostics_report": attr.bool(
5673
doc = "Enable the output of structured diagnostics through the BEP",
5774
),
5875
"enable_stats_file": attr.bool(
76+
default = True,
5977
doc = "Enable writing of statsfile",
6078
),
6179
"enable_semanticdb": attr.bool(
80+
default = False,
6281
doc = "Enable SemanticDb",
6382
),
64-
"semanticdb_bundle_in_jar": attr.bool(
65-
doc = "Option to bundle the semanticdb files inside the output jar file",
66-
),
83+
"semanticdb_bundle_in_jar": attr.bool(default = False, doc = "Option to bundle the semanticdb files inside the output jar file"),
6784
"use_argument_file_in_runner": attr.bool(
85+
default = False,
6886
doc = "Changes java binaries scripts (including tests) to use argument files and not classpath jars to improve performance, requires java > 8",
6987
),
7088
}
7189

72-
def _attr_to_flag(name):
73-
return "//scala/settings:%s" % name
74-
75-
_flag_attrs = {
76-
"_" + k: attr.label(default = _attr_to_flag(k))
77-
for k in _deprecated_attrs.keys()
90+
_config_flags = {
91+
"_" + k: attr.label(default = "//scala/settings:%s" % k)
92+
for k in _config_attrs.keys()
7893
}
7994

80-
def _resolve_flags(ctx):
81-
def compute(name):
82-
attr = getattr(ctx.attr, name)
83-
return attr if attr else getattr(ctx.attr, "_" + name)[BuildSettingInfo].value
84-
85-
return struct(**{k: compute(k) for k in _deprecated_attrs.keys()})
95+
def _config(ctx):
96+
if ctx.attr._scala_toolchain_flags[BuildSettingInfo].value:
97+
return struct(**{k: getattr(ctx.attr, "_" + k)[BuildSettingInfo].value for k in _config_attrs.keys()})
98+
else:
99+
return struct(**{k: getattr(ctx.attr, k) for k in _config_attrs.keys()})
86100

87101
def _scala_toolchain_impl(ctx):
88-
flags = _resolve_flags(ctx)
102+
config = _config(ctx)
89103

90-
dependency_mode = flags.dependency_mode
104+
dependency_mode = config.dependency_mode
91105

92106
strict_deps_mode = _compute_strict_deps_mode(
93-
flags.strict_deps_mode,
107+
config.strict_deps_mode,
94108
dependency_mode,
95109
)
96110

97-
compiler_deps_mode = flags.compiler_deps_mode
111+
compiler_deps_mode = config.compiler_deps_mode
98112

99-
unused_dependency_checker_mode = flags.unused_dependency_checker_mode
113+
unused_dependency_checker_mode = config.unused_dependency_checker_mode
100114
dependency_tracking_method = _compute_dependency_tracking_method(
101115
dependency_mode,
102-
flags.dependency_tracking_method,
116+
config.dependency_tracking_method,
103117
)
104118

105119
# Final quality checks to possibly detect buggy code above
@@ -118,10 +132,10 @@ def _scala_toolchain_impl(ctx):
118132
if "ast-plus" == dependency_tracking_method and not ENABLE_COMPILER_DEPENDENCY_TRACKING:
119133
fail("To use 'ast-plus' dependency tracking, you must set 'enable_compiler_dependency_tracking' to True in scala_config")
120134

121-
all_strict_deps_patterns = flags.dependency_tracking_strict_deps_patterns
135+
all_strict_deps_patterns = config.dependency_tracking_strict_deps_patterns
122136
strict_deps_includes, strict_deps_excludes = _partition_patterns(all_strict_deps_patterns)
123137

124-
all_unused_deps_patterns = flags.dependency_tracking_unused_deps_patterns
138+
all_unused_deps_patterns = config.dependency_tracking_unused_deps_patterns
125139
unused_deps_includes, unused_deps_excludes = _partition_patterns(all_unused_deps_patterns)
126140

127141
toolchain = platform_common.ToolchainInfo(
@@ -138,12 +152,12 @@ def _scala_toolchain_impl(ctx):
138152
unused_deps_exclude_patterns = unused_deps_excludes,
139153
scalac_jvm_flags = ctx.attr.scalac_jvm_flags,
140154
scala_test_jvm_flags = ctx.attr.scala_test_jvm_flags,
141-
enable_diagnostics_report = flags.enable_diagnostics_report,
155+
enable_diagnostics_report = config.enable_diagnostics_report,
142156
jacocorunner = ctx.attr.jacocorunner,
143-
enable_stats_file = flags.enable_stats_file,
144-
enable_semanticdb = flags.enable_semanticdb,
145-
semanticdb_bundle_in_jar = flags.semanticdb_bundle_in_jar,
146-
use_argument_file_in_runner = flags.use_argument_file_in_runner,
157+
enable_stats_file = config.enable_stats_file,
158+
enable_semanticdb = config.enable_semanticdb,
159+
semanticdb_bundle_in_jar = config.semanticdb_bundle_in_jar,
160+
use_argument_file_in_runner = config.use_argument_file_in_runner,
147161
scala_version = ctx.attr._scala_version[BuildSettingInfo].value,
148162
)
149163
return [toolchain]
@@ -166,8 +180,8 @@ def _default_dep_providers():
166180
_scala_toolchain = rule(
167181
_scala_toolchain_impl,
168182
attrs = _dicts.add(
169-
_deprecated_attrs,
170-
_flag_attrs,
183+
_config_attrs,
184+
_config_flags,
171185
{
172186
"dep_providers": attr.label_list(
173187
default = _default_dep_providers(),
@@ -178,6 +192,7 @@ _scala_toolchain = rule(
178192
"scalac_jvm_flags": attr.string_list(),
179193
"scala_test_jvm_flags": attr.string_list(),
180194
"_scala_version": attr.label(default = "@io_bazel_rules_scala_config//:scala_version"),
195+
"_scala_toolchain_flags": attr.label(default = "//scala/settings:scala_toolchain_flags"),
181196
},
182197
),
183198
fragments = ["java"],

scala/settings/BUILD

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ stamp_scala_import(
99

1010
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag", "string_list_flag")
1111

12+
bool_flag(
13+
name = "scala_toolchain_flags",
14+
build_setting_default = False,
15+
)
16+
1217
string_flag(
1318
name = "dependency_mode",
1419
build_setting_default = "direct",

0 commit comments

Comments
 (0)