From 596482de82ff32705e85f18c1c9ae784e6cd2c6f Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 9 Aug 2026 11:24:48 +0900 Subject: refactor(xdebug-handler): extract composer/xdebug_handler into the shirabe-xdebug-handler crate Move `Composer\XdebugHandler` out of shirabe-external-packages and into its own crate, so the path is `shirabe_xdebug_handler::XdebugHandler` instead of `shirabe_external_packages::composer::xdebug_handler::XdebugHandler`. Standing alone, the stub no longer sits in a crate that shirabe-php-rpc depends on, so drop the dependency-cycle rationale from the comments that explain why callers reach for shirabe_php_rpc directly. Co-Authored-By: Claude Opus 5 (1M context) --- crates/shirabe/src/command/diagnose_command.rs | 4 ++-- crates/shirabe/src/console/application.rs | 2 +- crates/shirabe/src/repository/platform_repository.rs | 2 +- crates/shirabe/src/util/ini_helper.rs | 7 +++---- 4 files changed, 7 insertions(+), 8 deletions(-) (limited to 'crates/shirabe/src') diff --git a/crates/shirabe/src/command/diagnose_command.rs b/crates/shirabe/src/command/diagnose_command.rs index eade37fc..2af2acfc 100644 --- a/crates/shirabe/src/command/diagnose_command.rs +++ b/crates/shirabe/src/command/diagnose_command.rs @@ -888,8 +888,8 @@ impl DiagnoseCommand { warnings.insert("xdebug_profile".to_string(), PhpMixed::Bool(true)); } else if diagnostics.xdebug_active { // PHP: XdebugHandler::isXdebugActive(). As with IniHelper::get_all, the port of that - // method in shirabe_external_packages cannot reach the PHP RPC bridge (the dependency - // would cycle), so the real runtime is queried through the diagnose payload instead. + // method in shirabe_xdebug_handler is a stub, so the real runtime is queried through + // the diagnose payload instead. warnings.insert("xdebug_loaded".to_string(), PhpMixed::Bool(true)); } diff --git a/crates/shirabe/src/console/application.rs b/crates/shirabe/src/console/application.rs index f5c953da..cc456c3c 100644 --- a/crates/shirabe/src/console/application.rs +++ b/crates/shirabe/src/console/application.rs @@ -54,7 +54,6 @@ use crate::util::HttpDownloader; use crate::util::Platform; use crate::util::Silencer; use indexmap::IndexMap; -use shirabe_external_packages::composer::xdebug_handler::XdebugHandler; use shirabe_php_shim::Catch as _; use shirabe_php_shim::{ LogicException as ShimLogicException, PHP_VERSION, PHP_VERSION_ID, PhpMixed, RuntimeException, @@ -99,6 +98,7 @@ use shirabe_symfony_console::style::style_interface::StyleInterface; use shirabe_symfony_console::style::symfony_style::SymfonyStyle; use shirabe_symfony_console::terminal::Terminal; use shirabe_symfony_process::exception::ProcessTimedOutException; +use shirabe_xdebug_handler::XdebugHandler; /// The PHP `Composer\Console\Application` and `Symfony\Component\Console\Application` are /// flattened into a single struct. Methods that are overridden by subclass and called via diff --git a/crates/shirabe/src/repository/platform_repository.rs b/crates/shirabe/src/repository/platform_repository.rs index 710ba28c..7e123151 100644 --- a/crates/shirabe/src/repository/platform_repository.rs +++ b/crates/shirabe/src/repository/platform_repository.rs @@ -16,7 +16,6 @@ use crate::plugin::plugin_interface::{self}; use crate::repository::ArrayRepository; use crate::repository::RepositoryInterface; use indexmap::IndexMap; -use shirabe_external_packages::composer::xdebug_handler::XdebugHandler; use shirabe_pcre::{CaptureKey, Preg}; use shirabe_php_rpc::PlatformInfo; use shirabe_php_shim::{ @@ -25,6 +24,7 @@ use shirabe_php_shim::{ str_replace, str_starts_with, strpos, strtolower, var_export, }; use shirabe_semver::constraint::SimpleConstraint; +use shirabe_xdebug_handler::XdebugHandler; use std::sync::{LazyLock, Mutex}; static LAST_SEEN_PLATFORM_PHP: LazyLock>> = LazyLock::new(|| Mutex::new(None)); diff --git a/crates/shirabe/src/util/ini_helper.rs b/crates/shirabe/src/util/ini_helper.rs index c36b9189..4ff9a5e2 100644 --- a/crates/shirabe/src/util/ini_helper.rs +++ b/crates/shirabe/src/util/ini_helper.rs @@ -5,10 +5,9 @@ pub struct IniHelper; impl IniHelper { /// Returns an array of php.ini locations with at least one entry. pub fn get_all() -> Vec { - // PHP: XdebugHandler::getAllIniFiles(). shirabe_external_packages::XdebugHandler's port - // of that method can't reach the PHP RPC bridge (shirabe-php-rpc already depends on - // shirabe-external-packages, so the reverse dependency would cycle), so query the real - // PHP runtime's loaded/scanned ini files here instead. + // PHP: XdebugHandler::getAllIniFiles(). shirabe_xdebug_handler::XdebugHandler's port + // of that method is a stub that returns the PHP default, so query the real PHP + // runtime's loaded/scanned ini files here instead. shirabe_php_rpc::get_all_ini_files() } -- cgit v1.3.1-4-g156e