Skip to content

Commit df35490

Browse files
authored
Replace slashes with underscores in default crate names. (#1334)
This change is consistent with the existing documentation, which says that all illegal characters will be converted to underscores (but in reality, only hyphens were converted). This change has no risk of breakage, since it turns broken builds into passing ones, but not vice versa.
1 parent 21eed19 commit df35490

File tree

3 files changed

+15
-11
lines changed

3 files changed

+15
-11
lines changed

rust/private/rust.bzl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,9 @@ def _rust_binary_impl(ctx):
305305
crate_name = compute_crate_name(ctx.workspace_name, ctx.label, toolchain, ctx.attr.crate_name)
306306
_assert_correct_dep_mapping(ctx)
307307

308-
output = ctx.actions.declare_file(ctx.label.name + toolchain.binary_ext)
308+
# If the target's label contains "/" characters, we need to convert those to
309+
# something safe, otherwise they get converted into path separators.
310+
output = ctx.actions.declare_file(ctx.label.name.replace("/", "_") + toolchain.binary_ext)
309311

310312
deps = transform_deps(ctx.attr.deps)
311313
proc_macro_deps = transform_deps(ctx.attr.proc_macro_deps + get_import_macro_deps(ctx))

rust/private/utils.bzl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,9 @@ def name_to_crate_name(name):
272272
Returns:
273273
str: The name of the crate for this target.
274274
"""
275-
return name.replace("-", "_")
275+
for illegal in ("-", "/"):
276+
name = name.replace(illegal, "_")
277+
return name
276278

277279
def _invalid_chars_in_crate_name(name):
278280
"""Returns any invalid chars in the given crate name.

test/unit/crate_name/crate_name_test.bzl

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def _custom_crate_name_test_test_impl(ctx):
4848

4949
def _invalid_default_crate_name_test_impl(ctx):
5050
env = analysistest.begin(ctx)
51-
asserts.expect_failure(env, "contains invalid character(s): /")
51+
asserts.expect_failure(env, "contains invalid character(s): @")
5252
return analysistest.end(env)
5353

5454
def _invalid_custom_crate_name_test_impl(ctx):
@@ -119,7 +119,7 @@ no_extra_filename_test = analysistest.make(
119119

120120
def _crate_name_test():
121121
rust_library(
122-
name = "default-crate-name-library",
122+
name = "default/crate-name-library",
123123
srcs = ["lib.rs"],
124124
edition = "2018",
125125
)
@@ -132,7 +132,7 @@ def _crate_name_test():
132132
)
133133

134134
rust_binary(
135-
name = "default-crate-name-binary",
135+
name = "default/crate-name-binary",
136136
srcs = ["main.rs"],
137137
edition = "2018",
138138
)
@@ -145,7 +145,7 @@ def _crate_name_test():
145145
)
146146

147147
rust_test(
148-
name = "default-crate-name-test",
148+
name = "default/crate-name-test",
149149
srcs = ["main.rs"],
150150
edition = "2018",
151151
)
@@ -158,7 +158,7 @@ def _crate_name_test():
158158
)
159159

160160
rust_library(
161-
name = "invalid/default-crate-name",
161+
name = "invalid@default-crate-name",
162162
srcs = ["lib.rs"],
163163
edition = "2018",
164164
tags = ["manual", "norustfmt"],
@@ -197,7 +197,7 @@ def _crate_name_test():
197197

198198
default_crate_name_library_test(
199199
name = "default_crate_name_library_test",
200-
target_under_test = ":default-crate-name-library",
200+
target_under_test = ":default/crate-name-library",
201201
)
202202

203203
custom_crate_name_library_test(
@@ -207,7 +207,7 @@ def _crate_name_test():
207207

208208
default_crate_name_binary_test(
209209
name = "default_crate_name_binary_test",
210-
target_under_test = ":default-crate-name-binary",
210+
target_under_test = ":default/crate-name-binary",
211211
)
212212

213213
custom_crate_name_binary_test(
@@ -217,7 +217,7 @@ def _crate_name_test():
217217

218218
default_crate_name_test_test(
219219
name = "default_crate_name_test_test",
220-
target_under_test = ":default-crate-name-test",
220+
target_under_test = ":default/crate-name-test",
221221
)
222222

223223
custom_crate_name_test_test(
@@ -227,7 +227,7 @@ def _crate_name_test():
227227

228228
invalid_default_crate_name_test(
229229
name = "invalid_default_crate_name_test",
230-
target_under_test = ":invalid/default-crate-name",
230+
target_under_test = ":invalid@default-crate-name",
231231
)
232232

233233
invalid_custom_crate_name_test(

0 commit comments

Comments
 (0)