88 "SCALA_MAJOR_VERSION" ,
99)
1010load ("@bazel_skylib//rules:common_settings.bzl" , "BuildSettingInfo" )
11+ load ("@bazel_skylib//lib:dicts.bzl" , _dicts = "dicts" )
1112
1213def _compute_strict_deps_mode (input_strict_deps_mode , dependency_mode ):
1314 if dependency_mode == "direct" :
@@ -42,19 +43,66 @@ def _partition_patterns(patterns):
4243 ]
4344 return includes , excludes
4445
46+ _deprecated_attrs = {
47+ "dependency_mode" : attr .string (values = ["direct" , "plus-one" , "transitive" ]),
48+ "strict_deps_mode" : attr .string (values = ["off" , "warn" , "error" , "default" ]),
49+ "unused_dependency_checker_mode" : attr .string (values = ["off" , "warn" , "error" ]),
50+ "compiler_deps_mode" : attr .string (values = ["off" , "warn" , "error" ]),
51+ "dependency_tracking_method" : attr .string (values = ["ast-plus" , "ast" , "high-level" , "default" ]),
52+ "dependency_tracking_strict_deps_patterns" : attr .string_list (
53+ doc = "List of target prefixes included for strict deps analysis. Exclude patterns with '-'" ,
54+ ),
55+ "dependency_tracking_unused_deps_patterns" : attr .string_list (
56+ doc = "List of target prefixes included for unused deps analysis. Exclude patterns with '-'" ,
57+ ),
58+ "enable_diagnostics_report" : attr .bool (
59+ doc = "Enable the output of structured diagnostics through the BEP" ,
60+ ),
61+ "enable_stats_file" : attr .bool (
62+ doc = "Enable writing of statsfile" ,
63+ ),
64+ "enable_semanticdb" : attr .bool (
65+ doc = "Enable SemanticDb" ,
66+ ),
67+ "semanticdb_bundle_in_jar" : attr .bool (
68+ doc = "Option to bundle the semanticdb files inside the output jar file" ,
69+ ),
70+ "use_argument_file_in_runner" : attr .bool (
71+ doc = "Changes java binaries scripts (including tests) to use argument files and not classpath jars to improve performance, requires java > 8" ,
72+ ),
73+ }
74+
75+ def _attr_to_flag (name ):
76+ return "//scala/settings:%s" % name
77+
78+ _flag_attrs = {
79+ "_" + k : attr .label (default = _attr_to_flag (k ))
80+ for k in _deprecated_attrs .keys ()
81+ }
82+
83+ def _resolve_flags (ctx ):
84+ def compute (name ):
85+ attr = getattr (ctx .attr , name )
86+ return attr if attr else getattr (ctx .attr , "_" + name )[BuildSettingInfo ].value
87+
88+ return struct (** {k : compute (k ) for k in _deprecated_attrs .keys ()})
89+
4590def _scala_toolchain_impl (ctx ):
46- dependency_mode = ctx .attr .dependency_mode
91+ flags = _resolve_flags (ctx )
92+
93+ dependency_mode = flags .dependency_mode
94+
4795 strict_deps_mode = _compute_strict_deps_mode (
48- ctx . attr .strict_deps_mode ,
96+ flags .strict_deps_mode ,
4997 dependency_mode ,
5098 )
5199
52- compiler_deps_mode = ctx . attr .compiler_deps_mode
100+ compiler_deps_mode = flags .compiler_deps_mode
53101
54- unused_dependency_checker_mode = ctx . attr .unused_dependency_checker_mode
102+ unused_dependency_checker_mode = flags .unused_dependency_checker_mode
55103 dependency_tracking_method = _compute_dependency_tracking_method (
56104 dependency_mode ,
57- ctx . attr .dependency_tracking_method ,
105+ flags .dependency_tracking_method ,
58106 )
59107
60108 # Final quality checks to possibly detect buggy code above
@@ -73,13 +121,10 @@ def _scala_toolchain_impl(ctx):
73121 if "ast-plus" == dependency_tracking_method and not ENABLE_COMPILER_DEPENDENCY_TRACKING :
74122 fail ("To use 'ast-plus' dependency tracking, you must set 'enable_compiler_dependency_tracking' to True in scala_config" )
75123
76- enable_stats_file = ctx .attr .enable_stats_file
77- enable_diagnostics_report = ctx .attr .enable_diagnostics_report
78-
79- all_strict_deps_patterns = ctx .attr .dependency_tracking_strict_deps_patterns
124+ all_strict_deps_patterns = flags .dependency_tracking_strict_deps_patterns
80125 strict_deps_includes , strict_deps_excludes = _partition_patterns (all_strict_deps_patterns )
81126
82- all_unused_deps_patterns = ctx . attr .dependency_tracking_unused_deps_patterns
127+ all_unused_deps_patterns = flags .dependency_tracking_unused_deps_patterns
83128 unused_deps_includes , unused_deps_excludes = _partition_patterns (all_unused_deps_patterns )
84129
85130 toolchain = platform_common .ToolchainInfo (
@@ -96,12 +141,12 @@ def _scala_toolchain_impl(ctx):
96141 unused_deps_exclude_patterns = unused_deps_excludes ,
97142 scalac_jvm_flags = ctx .attr .scalac_jvm_flags ,
98143 scala_test_jvm_flags = ctx .attr .scala_test_jvm_flags ,
99- enable_diagnostics_report = enable_diagnostics_report ,
144+ enable_diagnostics_report = flags . enable_diagnostics_report ,
100145 jacocorunner = ctx .attr .jacocorunner ,
101- enable_stats_file = enable_stats_file ,
102- enable_semanticdb = ctx . attr .enable_semanticdb ,
103- semanticdb_bundle_in_jar = ctx . attr .semanticdb_bundle_in_jar ,
104- use_argument_file_in_runner = ctx . attr .use_argument_file_in_runner ,
146+ enable_stats_file = flags . enable_stats_file ,
147+ enable_semanticdb = flags .enable_semanticdb ,
148+ semanticdb_bundle_in_jar = flags .semanticdb_bundle_in_jar ,
149+ use_argument_file_in_runner = flags .use_argument_file_in_runner ,
105150 scala_version = ctx .attr ._scala_version [BuildSettingInfo ].value ,
106151 )
107152 return [toolchain ]
@@ -120,62 +165,20 @@ def _default_dep_providers():
120165
121166scala_toolchain = rule (
122167 _scala_toolchain_impl ,
123- attrs = {
124- "scalacopts" : attr .string_list (),
125- "dep_providers" : attr .label_list (
126- default = _default_dep_providers (),
127- providers = [_DepsInfo ],
128- ),
129- "dependency_mode" : attr .string (
130- default = "direct" ,
131- values = ["direct" , "plus-one" , "transitive" ],
132- ),
133- "strict_deps_mode" : attr .string (
134- default = "default" ,
135- values = ["off" , "warn" , "error" , "default" ],
136- ),
137- "unused_dependency_checker_mode" : attr .string (
138- default = "off" ,
139- values = ["off" , "warn" , "error" ],
140- ),
141- "compiler_deps_mode" : attr .string (
142- default = "off" ,
143- values = ["off" , "warn" , "error" ],
144- ),
145- "dependency_tracking_method" : attr .string (
146- default = "default" ,
147- values = ["ast-plus" , "ast" , "high-level" , "default" ],
148- ),
149- "dependency_tracking_strict_deps_patterns" : attr .string_list (
150- doc = "List of target prefixes included for strict deps analysis. Exclude patterns with '-'" ,
151- default = ["" ],
152- ),
153- "dependency_tracking_unused_deps_patterns" : attr .string_list (
154- doc = "List of target prefixes included for unused deps analysis. Exclude patterns with '-'" ,
155- default = ["" ],
156- ),
157- "scalac_jvm_flags" : attr .string_list (),
158- "scala_test_jvm_flags" : attr .string_list (),
159- "enable_diagnostics_report" : attr .bool (
160- doc = "Enable the output of structured diagnostics through the BEP" ,
161- ),
162- "jacocorunner" : attr .label (
163- default = Label ("@bazel_tools//tools/jdk:JacocoCoverage" ),
164- ),
165- "enable_stats_file" : attr .bool (
166- default = True ,
167- doc = "Enable writing of statsfile" ,
168- ),
169- "enable_semanticdb" : attr .bool (
170- default = False ,
171- doc = "Enable SemanticDb" ,
172- ),
173- "semanticdb_bundle_in_jar" : attr .bool (default = False , doc = "Option to bundle the semanticdb files inside the output jar file" ),
174- "use_argument_file_in_runner" : attr .bool (
175- default = False ,
176- doc = "Changes java binaries scripts (including tests) to use argument files and not classpath jars to improve performance, requires java > 8" ,
177- ),
178- "_scala_version" : attr .label (default = "@io_bazel_rules_scala_config//:scala_version" ),
179- },
168+ attrs = _dicts .add (
169+ _deprecated_attrs ,
170+ _flag_attrs ,
171+ {
172+ "dep_providers" : attr .label_list (
173+ default = _default_dep_providers (),
174+ providers = [_DepsInfo ],
175+ ),
176+ "jacocorunner" : attr .label (default = Label ("@bazel_tools//tools/jdk:JacocoCoverage" )),
177+ "scalacopts" : attr .string_list (),
178+ "scalac_jvm_flags" : attr .string_list (),
179+ "scala_test_jvm_flags" : attr .string_list (),
180+ "_scala_version" : attr .label (default = "@io_bazel_rules_scala_config//:scala_version" ),
181+ },
182+ ),
180183 fragments = ["java" ],
181184)
0 commit comments