aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-external-packages/src/symfony/console/descriptor
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-13 11:38:20 +0900
committernsfisis <nsfisis@gmail.com>2026-06-13 17:49:15 +0900
commit69c372ba0eca61b05260d6d208445d9e69d14e34 (patch)
treeab837346f5729a5a4a67ccd83462033511b41c89 /crates/shirabe-external-packages/src/symfony/console/descriptor
parentefe5bdb1987411a473d4af15451a376d20928245 (diff)
downloadphp-shirabe-69c372ba0eca61b05260d6d208445d9e69d14e34.tar.gz
php-shirabe-69c372ba0eca61b05260d6d208445d9e69d14e34.tar.zst
php-shirabe-69c372ba0eca61b05260d6d208445d9e69d14e34.zip
fix(console): flatten Application inheritance to restore overrides
Composer\Console\Application embedded Symfony's Application as an `inner` field and delegated to it, so polymorphic calls inside the Symfony base (e.g. doRun -> $this->getLongVersion()) resolved to Symfony's own methods and never reached Composer's overrides. As a result `--version` bypassed Composer's getLongVersion()/doRun() entirely. Flatten the PHP inheritance chain into the single shirabe Application struct: take in the Symfony base methods (parent-calling overrides kept under a `base_` prefix) and drop the `inner` delegation. Replace the Symfony Application struct in shirabe-external-packages with an `Application` trait that the merged struct implements, so commands and descriptors can reference it without a reverse crate dependency. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/console/descriptor')
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/descriptor/application_description.rs4
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/descriptor/descriptor.rs4
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/descriptor/json_descriptor.rs4
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/descriptor/markdown_descriptor.rs8
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/descriptor/text_descriptor.rs4
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/descriptor/xml_descriptor.rs6
6 files changed, 15 insertions, 15 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/console/descriptor/application_description.rs b/crates/shirabe-external-packages/src/symfony/console/descriptor/application_description.rs
index 3454b78..ff14c22 100644
--- a/crates/shirabe-external-packages/src/symfony/console/descriptor/application_description.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/descriptor/application_description.rs
@@ -9,7 +9,7 @@ use std::rc::Rc;
/// @internal
#[derive(Debug)]
pub struct ApplicationDescription {
- application: Rc<RefCell<Application>>,
+ application: Rc<RefCell<dyn Application>>,
namespace: Option<String>,
show_hidden: bool,
@@ -28,7 +28,7 @@ impl ApplicationDescription {
pub const GLOBAL_NAMESPACE: &'static str = "_global";
pub fn new(
- application: Rc<RefCell<Application>>,
+ application: Rc<RefCell<dyn Application>>,
namespace: Option<String>,
show_hidden: bool,
) -> Self {
diff --git a/crates/shirabe-external-packages/src/symfony/console/descriptor/descriptor.rs b/crates/shirabe-external-packages/src/symfony/console/descriptor/descriptor.rs
index d4aa575..d086b28 100644
--- a/crates/shirabe-external-packages/src/symfony/console/descriptor/descriptor.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/descriptor/descriptor.rs
@@ -48,7 +48,7 @@ pub trait Descriptor: DescriptorInterface {
}
// case $object instanceof Application:
_ if todo!("$object instanceof Application") => {
- let application: std::rc::Rc<std::cell::RefCell<Application>> =
+ let application: std::rc::Rc<std::cell::RefCell<dyn Application>> =
todo!("downcast object to Application");
self.describe_application(application, options)?;
}
@@ -113,7 +113,7 @@ pub trait Descriptor: DescriptorInterface {
/// Describes an Application instance.
fn describe_application(
&mut self,
- application: std::rc::Rc<std::cell::RefCell<Application>>,
+ application: std::rc::Rc<std::cell::RefCell<dyn Application>>,
options: IndexMap<String, PhpMixed>,
) -> anyhow::Result<()>;
}
diff --git a/crates/shirabe-external-packages/src/symfony/console/descriptor/json_descriptor.rs b/crates/shirabe-external-packages/src/symfony/console/descriptor/json_descriptor.rs
index b651618..a74fc4b 100644
--- a/crates/shirabe-external-packages/src/symfony/console/descriptor/json_descriptor.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/descriptor/json_descriptor.rs
@@ -62,7 +62,7 @@ impl JsonDescriptor {
fn describe_application(
&mut self,
- application: std::rc::Rc<std::cell::RefCell<Application>>,
+ application: std::rc::Rc<std::cell::RefCell<dyn Application>>,
options: IndexMap<String, PhpMixed>,
) -> anyhow::Result<()> {
let described_namespace = match options.get("namespace") {
@@ -418,7 +418,7 @@ impl Descriptor for JsonDescriptor {
fn describe_application(
&mut self,
- application: std::rc::Rc<std::cell::RefCell<Application>>,
+ application: std::rc::Rc<std::cell::RefCell<dyn Application>>,
options: IndexMap<String, PhpMixed>,
) -> anyhow::Result<()> {
JsonDescriptor::describe_application(self, application, options)
diff --git a/crates/shirabe-external-packages/src/symfony/console/descriptor/markdown_descriptor.rs b/crates/shirabe-external-packages/src/symfony/console/descriptor/markdown_descriptor.rs
index 1fec085..90cad25 100644
--- a/crates/shirabe-external-packages/src/symfony/console/descriptor/markdown_descriptor.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/descriptor/markdown_descriptor.rs
@@ -214,7 +214,7 @@ impl MarkdownDescriptor {
fn describe_application(
&mut self,
- application: std::rc::Rc<std::cell::RefCell<Application>>,
+ application: std::rc::Rc<std::cell::RefCell<dyn Application>>,
options: IndexMap<String, PhpMixed>,
) -> anyhow::Result<()> {
let described_namespace = match options.get("namespace") {
@@ -223,7 +223,7 @@ impl MarkdownDescriptor {
};
let mut description =
ApplicationDescription::new(application.clone(), described_namespace, false);
- let title = self.get_application_title(&application.borrow());
+ let title = self.get_application_title(&*application.borrow());
self.write(
&format!(
@@ -289,7 +289,7 @@ impl MarkdownDescriptor {
Ok(())
}
- fn get_application_title(&self, application: &Application) -> String {
+ fn get_application_title(&self, application: &dyn Application) -> String {
if "UNKNOWN" != application.get_name() {
if "UNKNOWN" != application.get_version() {
return format!(
@@ -376,7 +376,7 @@ impl Descriptor for MarkdownDescriptor {
fn describe_application(
&mut self,
- application: std::rc::Rc<std::cell::RefCell<Application>>,
+ application: std::rc::Rc<std::cell::RefCell<dyn Application>>,
options: IndexMap<String, PhpMixed>,
) -> anyhow::Result<()> {
MarkdownDescriptor::describe_application(self, application, options)
diff --git a/crates/shirabe-external-packages/src/symfony/console/descriptor/text_descriptor.rs b/crates/shirabe-external-packages/src/symfony/console/descriptor/text_descriptor.rs
index b5faaae..323b284 100644
--- a/crates/shirabe-external-packages/src/symfony/console/descriptor/text_descriptor.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/descriptor/text_descriptor.rs
@@ -262,7 +262,7 @@ impl TextDescriptor {
fn describe_application(
&mut self,
- application: std::rc::Rc<std::cell::RefCell<Application>>,
+ application: std::rc::Rc<std::cell::RefCell<dyn Application>>,
options: IndexMap<String, PhpMixed>,
) -> anyhow::Result<()> {
let described_namespace = match options.get("namespace") {
@@ -597,7 +597,7 @@ impl Descriptor for TextDescriptor {
fn describe_application(
&mut self,
- application: std::rc::Rc<std::cell::RefCell<Application>>,
+ application: std::rc::Rc<std::cell::RefCell<dyn Application>>,
options: IndexMap<String, PhpMixed>,
) -> anyhow::Result<()> {
TextDescriptor::describe_application(self, application, options)
diff --git a/crates/shirabe-external-packages/src/symfony/console/descriptor/xml_descriptor.rs b/crates/shirabe-external-packages/src/symfony/console/descriptor/xml_descriptor.rs
index 209964a..2ed8f17 100644
--- a/crates/shirabe-external-packages/src/symfony/console/descriptor/xml_descriptor.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/descriptor/xml_descriptor.rs
@@ -106,7 +106,7 @@ impl XmlDescriptor {
pub fn get_application_document(
&self,
- application: std::rc::Rc<std::cell::RefCell<Application>>,
+ application: std::rc::Rc<std::cell::RefCell<dyn Application>>,
namespace: Option<String>,
short: bool,
) -> DOMDocument {
@@ -209,7 +209,7 @@ impl XmlDescriptor {
fn describe_application(
&mut self,
- application: std::rc::Rc<std::cell::RefCell<Application>>,
+ application: std::rc::Rc<std::cell::RefCell<dyn Application>>,
options: IndexMap<String, PhpMixed>,
) -> anyhow::Result<()> {
let namespace = match options.get("namespace") {
@@ -420,7 +420,7 @@ impl Descriptor for XmlDescriptor {
fn describe_application(
&mut self,
- application: std::rc::Rc<std::cell::RefCell<Application>>,
+ application: std::rc::Rc<std::cell::RefCell<dyn Application>>,
options: IndexMap<String, PhpMixed>,
) -> anyhow::Result<()> {
XmlDescriptor::describe_application(self, application, options)