aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-external-packages/src/symfony/console/helper/table_rows.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-26 01:55:03 +0900
committernsfisis <nsfisis@gmail.com>2026-06-26 01:55:03 +0900
commitcbb5118318706dc023eb8551b1f2628f395a6228 (patch)
tree35c86c3191c2bfdb154fdfae7ad6f3292c0261f8 /crates/shirabe-external-packages/src/symfony/console/helper/table_rows.rs
parent939359f13acfe8dbf4f16dac517fcbd67d46f611 (diff)
downloadphp-shirabe-cbb5118318706dc023eb8551b1f2628f395a6228.tar.gz
php-shirabe-cbb5118318706dc023eb8551b1f2628f395a6228.tar.zst
php-shirabe-cbb5118318706dc023eb8551b1f2628f395a6228.zip
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>) 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<PhpMixed> 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) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/console/helper/table_rows.rs')
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/helper/table_rows.rs18
1 files changed, 9 insertions, 9 deletions
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<Vec<PhpMixed>>,
+ row_groups: Vec<Vec<Row>>,
}
impl TableRows {
- pub fn from_row_groups(row_groups: Vec<Vec<PhpMixed>>) -> Self {
+ pub fn from_row_groups(row_groups: Vec<Vec<Row>>) -> Self {
Self { row_groups }
}
- pub fn get_iterator(&self) -> std::slice::Iter<'_, Vec<PhpMixed>> {
+ pub fn get_iterator(&self) -> std::slice::Iter<'_, Vec<Row>> {
self.row_groups.iter()
}
- pub fn into_row_groups(self) -> Vec<Vec<PhpMixed>> {
+ pub fn into_row_groups(self) -> Vec<Vec<Row>> {
self.row_groups
}
}
impl<'a> IntoIterator for &'a TableRows {
- type Item = &'a Vec<PhpMixed>;
- type IntoIter = std::slice::Iter<'a, Vec<PhpMixed>>;
+ type Item = &'a Vec<Row>;
+ type IntoIter = std::slice::Iter<'a, Vec<Row>>;
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<PhpMixed>;
- type IntoIter = std::vec::IntoIter<Vec<PhpMixed>>;
+ type Item = Vec<Row>;
+ type IntoIter = std::vec::IntoIter<Vec<Row>>;
fn into_iter(self) -> Self::IntoIter {
self.row_groups.into_iter()