From 880a5eaad9dcdfd31563385f11ba1f63d38cfd14 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 9 Aug 2026 06:19:30 +0900 Subject: refactor(php-shim): use std::path::MAIN_SEPARATOR over a shim constant The shim's DIRECTORY_SEPARATOR was hardcoded to "/", so every ported `'\\' === DIRECTORY_SEPARATOR` check compared against a constant that does not track the target platform. std::path::MAIN_SEPARATOR and MAIN_SEPARATOR_STR carry the same meaning as PHP's constant and resolve per platform, so the Windows branches are selected on Windows targets. Co-Authored-By: Claude Opus 5 (1M context) --- crates/shirabe/src/downloader/file_downloader.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'crates/shirabe/src/downloader/file_downloader.rs') diff --git a/crates/shirabe/src/downloader/file_downloader.rs b/crates/shirabe/src/downloader/file_downloader.rs index 9b86ee56..ab9c3672 100644 --- a/crates/shirabe/src/downloader/file_downloader.rs +++ b/crates/shirabe/src/downloader/file_downloader.rs @@ -27,10 +27,10 @@ use crate::util::sync_executor; use indexmap::IndexMap; use shirabe_php_shim::Catch as _; use shirabe_php_shim::{ - DIRECTORY_SEPARATOR, InvalidArgumentException, PATHINFO_BASENAME, PATHINFO_EXTENSION, - PHP_URL_PATH, PhpMixed, RuntimeException, UnexpectedValueException, array_search, file_exists, - filesize, get_class, hash, hash_file, impl_php_class, is_dir, is_executable, parse_url, - pathinfo, realpath, rtrim, spl_object_hash, strlen, strpos, strtr, trim, umask, usleep, + InvalidArgumentException, PATHINFO_BASENAME, PATHINFO_EXTENSION, PHP_URL_PATH, PhpMixed, + RuntimeException, UnexpectedValueException, array_search, file_exists, filesize, get_class, + hash, hash_file, impl_php_class, is_dir, is_executable, parse_url, pathinfo, realpath, rtrim, + spl_object_hash, strlen, strpos, strtr, trim, umask, usleep, }; use std::sync::{LazyLock, Mutex}; @@ -744,10 +744,11 @@ impl DownloaderInterface for FileDownloader { // but in that case we ensure the directory is empty already in ProjectInstaller so no need to empty it here. if !{ let normalized_vendor = self.filesystem.borrow_mut().normalize_path(&vendor_dir); - let normalized_path = self - .filesystem - .borrow() - .normalize_path(&format!("{}{}", path, DIRECTORY_SEPARATOR)); + let normalized_path = self.filesystem.borrow().normalize_path(&format!( + "{}{}", + path, + std::path::MAIN_SEPARATOR + )); strpos(&normalized_vendor, &normalized_path).is_some() } { self.filesystem.borrow_mut().empty_directory(path, true)?; -- cgit v1.3.1-4-g156e