55 "SCALA_MAJOR_VERSION" ,
66)
77load ("@bazel_skylib//rules:common_settings.bzl" , "BuildSettingInfo" )
8+ load ("@bazel_skylib//lib:dicts.bzl" , _dicts = "dicts" )
89
910def _compute_strict_deps_mode (input_strict_deps_mode , dependency_mode ):
1011 if dependency_mode == "direct" :
@@ -39,19 +40,66 @@ def _partition_patterns(patterns):
3940 ]
4041 return includes , excludes
4142
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" ]),
49+ "dependency_tracking_strict_deps_patterns" : attr .string_list (
50+ doc = "List of target prefixes included for strict deps analysis. Exclude patterns with '-'" ,
51+ ),
52+ "dependency_tracking_unused_deps_patterns" : attr .string_list (
53+ doc = "List of target prefixes included for unused deps analysis. Exclude patterns with '-'" ,
54+ ),
55+ "enable_diagnostics_report" : attr .bool (
56+ doc = "Enable the output of structured diagnostics through the BEP" ,
57+ ),
58+ "enable_stats_file" : attr .bool (
59+ doc = "Enable writing of statsfile" ,
60+ ),
61+ "enable_semanticdb" : attr .bool (
62+ doc = "Enable SemanticDb" ,
63+ ),
64+ "semanticdb_bundle_in_jar" : attr .bool (
65+ doc = "Option to bundle the semanticdb files inside the output jar file" ,
66+ ),
67+ "use_argument_file_in_runner" : attr .bool (
68+ doc = "Changes java binaries scripts (including tests) to use argument files and not classpath jars to improve performance, requires java > 8" ,
69+ ),
70+ }
71+
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 ()
78+ }
79+
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 ()})
86+
4287def _scala_toolchain_impl (ctx ):
43- dependency_mode = ctx .attr .dependency_mode
88+ flags = _resolve_flags (ctx )
89+
90+ dependency_mode = flags .dependency_mode
91+
4492 strict_deps_mode = _compute_strict_deps_mode (
45- ctx . attr .strict_deps_mode ,
93+ flags .strict_deps_mode ,
4694 dependency_mode ,
4795 )
4896
49- compiler_deps_mode = ctx . attr .compiler_deps_mode
97+ compiler_deps_mode = flags .compiler_deps_mode
5098
51- unused_dependency_checker_mode = ctx . attr .unused_dependency_checker_mode
99+ unused_dependency_checker_mode = flags .unused_dependency_checker_mode
52100 dependency_tracking_method = _compute_dependency_tracking_method (
53101 dependency_mode ,
54- ctx . attr .dependency_tracking_method ,
102+ flags .dependency_tracking_method ,
55103 )
56104
57105 # Final quality checks to possibly detect buggy code above
@@ -70,13 +118,10 @@ def _scala_toolchain_impl(ctx):
70118 if "ast-plus" == dependency_tracking_method and not ENABLE_COMPILER_DEPENDENCY_TRACKING :
71119 fail ("To use 'ast-plus' dependency tracking, you must set 'enable_compiler_dependency_tracking' to True in scala_config" )
72120
73- enable_stats_file = ctx .attr .enable_stats_file
74- enable_diagnostics_report = ctx .attr .enable_diagnostics_report
75-
76- all_strict_deps_patterns = ctx .attr .dependency_tracking_strict_deps_patterns
121+ all_strict_deps_patterns = flags .dependency_tracking_strict_deps_patterns
77122 strict_deps_includes , strict_deps_excludes = _partition_patterns (all_strict_deps_patterns )
78123
79- all_unused_deps_patterns = ctx . attr .dependency_tracking_unused_deps_patterns
124+ all_unused_deps_patterns = flags .dependency_tracking_unused_deps_patterns
80125 unused_deps_includes , unused_deps_excludes = _partition_patterns (all_unused_deps_patterns )
81126
82127 toolchain = platform_common .ToolchainInfo (
@@ -93,12 +138,12 @@ def _scala_toolchain_impl(ctx):
93138 unused_deps_exclude_patterns = unused_deps_excludes ,
94139 scalac_jvm_flags = ctx .attr .scalac_jvm_flags ,
95140 scala_test_jvm_flags = ctx .attr .scala_test_jvm_flags ,
96- enable_diagnostics_report = enable_diagnostics_report ,
141+ enable_diagnostics_report = flags . enable_diagnostics_report ,
97142 jacocorunner = ctx .attr .jacocorunner ,
98- enable_stats_file = enable_stats_file ,
99- enable_semanticdb = ctx . attr .enable_semanticdb ,
100- semanticdb_bundle_in_jar = ctx . attr .semanticdb_bundle_in_jar ,
101- use_argument_file_in_runner = ctx . attr .use_argument_file_in_runner ,
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 ,
102147 scala_version = ctx .attr ._scala_version [BuildSettingInfo ].value ,
103148 )
104149 return [toolchain ]
@@ -120,63 +165,21 @@ def _default_dep_providers():
120165
121166_scala_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)
182185
0 commit comments