aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/util
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-12 03:19:34 +0900
committernsfisis <nsfisis@gmail.com>2026-06-12 03:19:34 +0900
commitefe5bdb1987411a473d4af15451a376d20928245 (patch)
tree54d3c9e7ab92cfc7d7ec3d90ca3f29e828d929c4 /crates/shirabe/src/util
parent981cae63d9777b877aa9f96907c7995ec020fbf9 (diff)
downloadphp-shirabe-efe5bdb1987411a473d4af15451a376d20928245.tar.gz
php-shirabe-efe5bdb1987411a473d4af15451a376d20928245.tar.zst
php-shirabe-efe5bdb1987411a473d4af15451a376d20928245.zip
refactor(php-shim): replace literal sprintf calls with format!
Convert every sprintf() call with a compile-time literal format string to format!, implementing Display for PhpMixed (delegating to php_to_string) so PhpMixed values render with PHP string semantics through {}. Also merge the format!-wrapped and conditional-literal dynamic sites into single format! calls. Genuinely runtime format strings (table styles, configurable error messages, command synopsis, progress-bar modifiers, regex-built messages) still go through sprintf. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/util')
-rw-r--r--crates/shirabe/src/util/auth_helper.rs15
-rw-r--r--crates/shirabe/src/util/filesystem.rs14
-rw-r--r--crates/shirabe/src/util/http/curl_downloader.rs40
-rw-r--r--crates/shirabe/src/util/remote_filesystem.rs10
4 files changed, 36 insertions, 43 deletions
diff --git a/crates/shirabe/src/util/auth_helper.rs b/crates/shirabe/src/util/auth_helper.rs
index 2373265..8505081 100644
--- a/crates/shirabe/src/util/auth_helper.rs
+++ b/crates/shirabe/src/util/auth_helper.rs
@@ -195,15 +195,12 @@ impl AuthHelper {
message = format!(
"{}\n",
- sprintf(
- &format!(
- "GitHub API limit (%d calls/hr) is exhausted, could not fetch {}. {} You can also wait until %s for the rate limit to reset.",
- url, message,
- ),
- &[
- rate_limit.get("limit").cloned().unwrap_or(PhpMixed::Null),
- rate_limit.get("reset").cloned().unwrap_or(PhpMixed::Null),
- ],
+ format!(
+ "GitHub API limit ({} calls/hr) is exhausted, could not fetch {}. {} You can also wait until {} for the rate limit to reset.",
+ rate_limit.get("limit").cloned().unwrap_or(PhpMixed::Null),
+ url,
+ message,
+ rate_limit.get("reset").cloned().unwrap_or(PhpMixed::Null),
),
);
} else {
diff --git a/crates/shirabe/src/util/filesystem.rs b/crates/shirabe/src/util/filesystem.rs
index f54dfca..f693598 100644
--- a/crates/shirabe/src/util/filesystem.rs
+++ b/crates/shirabe/src/util/filesystem.rs
@@ -519,9 +519,10 @@ impl Filesystem {
// Returning early-formatted Result is not possible without changing signature; panic to surface in tests.
panic!(
"{}",
- sprintf(
- "$from (%s) and $to (%s) must be absolute paths.",
- &[from.to_string().into(), to.to_string().into()]
+ format!(
+ "$from ({}) and $to ({}) must be absolute paths.",
+ from.to_string(),
+ to.to_string()
)
);
}
@@ -583,9 +584,10 @@ impl Filesystem {
if !self.is_absolute_path(from) || !self.is_absolute_path(to) {
panic!(
"{}",
- sprintf(
- "$from (%s) and $to (%s) must be absolute paths.",
- &[from.to_string().into(), to.to_string().into()]
+ format!(
+ "$from ({}) and $to ({}) must be absolute paths.",
+ from.to_string(),
+ to.to_string()
)
);
}
diff --git a/crates/shirabe/src/util/http/curl_downloader.rs b/crates/shirabe/src/util/http/curl_downloader.rs
index a0ef54f..f1056cc 100644
--- a/crates/shirabe/src/util/http/curl_downloader.rs
+++ b/crates/shirabe/src/util/http/curl_downloader.rs
@@ -1527,15 +1527,13 @@ impl CurlDownloader {
&job,
anyhow::anyhow!(
TransportException::new(
- sprintf(
- "IP \"%s\" is blocked for \"%s\".",
- &[
- primary_ip.clone(),
- progress_now
- .get("url")
- .cloned()
- .unwrap_or(PhpMixed::Null),
- ],
+ format!(
+ "IP \"{}\" is blocked for \"{}\".",
+ primary_ip.clone(),
+ progress_now
+ .get("url")
+ .cloned()
+ .unwrap_or(PhpMixed::Null),
),
0,
)
@@ -1611,19 +1609,17 @@ impl CurlDownloader {
if !target_url.is_empty() {
self.io.write_error3(
- &sprintf(
- "Following redirect (%u) %s",
- &[
- PhpMixed::Int(
- job.get("attributes")
- .and_then(|v| v.as_array())
- .and_then(|a| a.get("redirects"))
- .and_then(|b| b.as_int())
- .unwrap_or(0)
- + 1,
- ),
- PhpMixed::String(Url::sanitize(target_url.clone())),
- ],
+ &format!(
+ "Following redirect ({}) {}",
+ PhpMixed::Int(
+ job.get("attributes")
+ .and_then(|v| v.as_array())
+ .and_then(|a| a.get("redirects"))
+ .and_then(|b| b.as_int())
+ .unwrap_or(0)
+ + 1,
+ ),
+ PhpMixed::String(Url::sanitize(target_url.clone())),
),
true,
crate::io::DEBUG,
diff --git a/crates/shirabe/src/util/remote_filesystem.rs b/crates/shirabe/src/util/remote_filesystem.rs
index ff6f066..fc26775 100644
--- a/crates/shirabe/src/util/remote_filesystem.rs
+++ b/crates/shirabe/src/util/remote_filesystem.rs
@@ -981,12 +981,10 @@ impl RemoteFilesystem {
self.io.write_error3("", true, crate::io::DEBUG);
self.io.write_error3(
- &sprintf(
- "Following redirect (%u) %s",
- &[
- PhpMixed::Int(self.redirects),
- PhpMixed::String(Url::sanitize(target_url.clone())),
- ],
+ &format!(
+ "Following redirect ({}) {}",
+ PhpMixed::Int(self.redirects),
+ PhpMixed::String(Url::sanitize(target_url.clone())),
),
true,
crate::io::DEBUG,