From e4402e52c08b8b28497151302c994793ce885cc3 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 21 Jun 2026 20:23:04 +0900 Subject: refactor(php-shim): drop current()/key()/end() array helpers PHP's internal array pointer (current/key/end) has no clean Rust equivalent. Remove these todo!() shim stubs and replace each call site with direct first/last element access matching Composer's original behavior. Unblocks Config::merge of anonymous {name: false} disable entries, re-enabling test_add_packagist_repository. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../symfony/console/question/choice_question.rs | 7 +++--- .../src/symfony/console/style/symfony_style.rs | 28 +++++++++++++++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) (limited to 'crates/shirabe-external-packages') diff --git a/crates/shirabe-external-packages/src/symfony/console/question/choice_question.rs b/crates/shirabe-external-packages/src/symfony/console/question/choice_question.rs index 64f0687..24d434d 100644 --- a/crates/shirabe-external-packages/src/symfony/console/question/choice_question.rs +++ b/crates/shirabe-external-packages/src/symfony/console/question/choice_question.rs @@ -221,9 +221,10 @@ impl ChoiceQuestion { return Ok(PhpMixed::List(multiselect_choices)); } - Ok(shirabe_php_shim::current(PhpMixed::List( - multiselect_choices, - ))) + Ok(multiselect_choices + .into_iter() + .next() + .unwrap_or(PhpMixed::Bool(false))) }) } } diff --git a/crates/shirabe-external-packages/src/symfony/console/style/symfony_style.rs b/crates/shirabe-external-packages/src/symfony/console/style/symfony_style.rs index 83229a9..4b945b0 100644 --- a/crates/shirabe-external-packages/src/symfony/console/style/symfony_style.rs +++ b/crates/shirabe-external-packages/src/symfony/console/style/symfony_style.rs @@ -171,9 +171,31 @@ impl SymfonyStyle { todo!() } // $headers[] = key($value); $row[] = current($value); - let _ = shirabe_php_shim::key(value.clone()); - headers.push(todo!()); - row.push(shirabe_php_shim::current(value)); + let (first_key, first_value) = match &value { + PhpMixed::Array(entries) => ( + entries + .keys() + .next() + .map(|k| PhpMixed::String(k.clone())) + .unwrap_or(PhpMixed::Null), + entries + .values() + .next() + .cloned() + .unwrap_or(PhpMixed::Bool(false)), + ), + PhpMixed::List(items) => ( + if items.is_empty() { + PhpMixed::Null + } else { + PhpMixed::Int(0) + }, + items.first().cloned().unwrap_or(PhpMixed::Bool(false)), + ), + _ => unreachable!("value is an array past the is_array guard"), + }; + headers.push(first_key); + row.push(first_value); } self.horizontal_table(headers, vec![PhpMixed::List(row.into_iter().collect())]); -- cgit v1.3.1