Skip to content

Commit 03f66cf

Browse files
committed
refactor(embedded): Centralize package name rules
1 parent dc13c89 commit 03f66cf

File tree

2 files changed

+26
-20
lines changed

2 files changed

+26
-20
lines changed

src/cargo/util/restricted_names.rs

+24
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,30 @@ pub fn validate_package_name(name: &str, what: &str, help: &str) -> CargoResult<
8383
Ok(())
8484
}
8585

86+
/// Ensure a package name is [valid][validate_package_name]
87+
pub fn sanitize_package_name(name: &str, placeholder: char) -> String {
88+
let mut slug = String::new();
89+
for (i, c) in name.chars().enumerate() {
90+
match (i, c) {
91+
(0, '0'..='9') => {
92+
slug.push(placeholder);
93+
slug.push(c);
94+
}
95+
(_, '0'..='9') | (_, 'a'..='z') | (_, '_') | (_, '-') => {
96+
slug.push(c);
97+
}
98+
(_, 'A'..='Z') => {
99+
// Convert uppercase characters to lowercase to avoid `non_snake_case` warnings.
100+
slug.push(c.to_ascii_lowercase());
101+
}
102+
(_, _) => {
103+
slug.push(placeholder);
104+
}
105+
}
106+
}
107+
slug
108+
}
109+
86110
/// Check the entire path for names reserved in Windows.
87111
pub fn is_windows_reserved_path(path: &Path) -> bool {
88112
path.iter()

src/cargo/util/toml/embedded.rs

+2-20
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use anyhow::Context as _;
22

33
use crate::core::Workspace;
4+
use crate::util::restricted_names;
45
use crate::CargoResult;
56
use crate::Config;
67

@@ -207,26 +208,7 @@ fn expand_manifest_(script: &RawScript, config: &Config) -> CargoResult<toml::Ta
207208
}
208209

209210
fn sanitize_package_name(name: &str, placeholder: char) -> String {
210-
let mut slug = String::new();
211-
for (i, c) in name.chars().enumerate() {
212-
match (i, c) {
213-
(0, '0'..='9') => {
214-
slug.push(placeholder);
215-
slug.push(c);
216-
}
217-
(_, '0'..='9') | (_, 'a'..='z') | (_, '_') | (_, '-') => {
218-
slug.push(c);
219-
}
220-
(_, 'A'..='Z') => {
221-
// Convert uppercase characters to lowercase to avoid `non_snake_case` warnings.
222-
slug.push(c.to_ascii_lowercase());
223-
}
224-
(_, _) => {
225-
slug.push(placeholder);
226-
}
227-
}
228-
}
229-
slug
211+
restricted_names::sanitize_package_name(name, placeholder)
230212
}
231213

232214
fn hash(script: &RawScript) -> blake3::Hash {

0 commit comments

Comments
 (0)