From cbb5118318706dc023eb8551b1f2628f395a6228 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 26 Jun 2026 01:55:03 +0900 Subject: refactor(symfony-table): model rows/cells with enums instead of PhpMixed The Table helper modeled a row's cells as PhpMixed and recovered the concrete TableCell/TableSeparator types via runtime instance_of, leaving the entire mixed/array bridge (to_row_vec, cell_colspan, row_get, ...) as todo!(). Replace that with proper Row/Cell enums: Row = HeaderDivider | Separator(TableSeparator) | Cells(Vec) Cell = Null | Value(String) | Cell(TableCell) | Separator(TableSeparator) The internal header/body boundary that PHP detects by object identity ($divider === $row) becomes the dedicated Row::HeaderDivider variant. Style arguments (PHP string|TableStyle) become a StyleName enum, so Table::new no longer panics in resolve_style's instance_of stub; TableStyle derives Clone so named styles resolve from the registry. PhpMixed-based callers (SymfonyStyle::table, render_table, auditor's sanitize) bridge via From for Cell/Row at the boundary. Un-ignores LicensesCommandTest text-format cases (4) and BaseDependencyCommandTest::why; output matches PHP exactly. Removes ~15 impl todo!()s in the Table helper. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../src/symfony/console/helper/table_rows.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'crates/shirabe-external-packages/src/symfony/console/helper/table_rows.rs') diff --git a/crates/shirabe-external-packages/src/symfony/console/helper/table_rows.rs b/crates/shirabe-external-packages/src/symfony/console/helper/table_rows.rs index ca6fcb7..1fc14bb 100644 --- a/crates/shirabe-external-packages/src/symfony/console/helper/table_rows.rs +++ b/crates/shirabe-external-packages/src/symfony/console/helper/table_rows.rs @@ -1,6 +1,6 @@ //! ref: composer/vendor/symfony/console/Helper/TableRows.php -use shirabe_php_shim::PhpMixed; +use crate::symfony::console::helper::table::Row; /// @internal /// @@ -9,26 +9,26 @@ use shirabe_php_shim::PhpMixed; /// groups eagerly (see `Table::build_table_rows`) and store them here. #[derive(Debug)] pub struct TableRows { - row_groups: Vec>, + row_groups: Vec>, } impl TableRows { - pub fn from_row_groups(row_groups: Vec>) -> Self { + pub fn from_row_groups(row_groups: Vec>) -> Self { Self { row_groups } } - pub fn get_iterator(&self) -> std::slice::Iter<'_, Vec> { + pub fn get_iterator(&self) -> std::slice::Iter<'_, Vec> { self.row_groups.iter() } - pub fn into_row_groups(self) -> Vec> { + pub fn into_row_groups(self) -> Vec> { self.row_groups } } impl<'a> IntoIterator for &'a TableRows { - type Item = &'a Vec; - type IntoIter = std::slice::Iter<'a, Vec>; + type Item = &'a Vec; + type IntoIter = std::slice::Iter<'a, Vec>; fn into_iter(self) -> Self::IntoIter { self.row_groups.iter() @@ -36,8 +36,8 @@ impl<'a> IntoIterator for &'a TableRows { } impl IntoIterator for TableRows { - type Item = Vec; - type IntoIter = std::vec::IntoIter>; + type Item = Vec; + type IntoIter = std::vec::IntoIter>; fn into_iter(self) -> Self::IntoIter { self.row_groups.into_iter() -- cgit v1.3.1