BREAKING: table_core.zig ahora es carpeta table_core/ Módulos creados: - types.zig: Enums, structs, constantes - state.zig: CellEditState, NavigationState - datasource.zig: TableDataSource interface - row_buffer.zig: Excel-style commit logic - keyboard.zig: Manejo de teclado - navigation.zig: Tab, sorting, double-click - rendering.zig: Funciones de dibujo - scrollbars.zig: Scrollbars vertical/horizontal - utils.zig: blendColor, startsWithIgnoreCase - table_core.zig: Hub de re-exports Beneficios: - 2115 LOC → 10 archivos de ~100-270 LOC - Debugging focalizado por módulo - Imports actualizados en 7 archivos de widgets
5.8 KiB
5.8 KiB
PLAN: Modularización de table_core.zig
Fecha: 2025-12-29 Autor: Claude (con input de Gemini) Estado: En progreso
Objetivo
Dividir table_core.zig (2115 LOC) en módulos pequeños (<500 LOC) para:
- Mejorar eficiencia de trabajo (menos contexto por archivo)
- Facilitar debugging focalizado
- Mantener compatibilidad con código cliente
Estructura Final
zcatgui/src/widgets/table_core/
├── types.zig # ~150 LOC - Enums, structs config, constantes
├── state.zig # ~250 LOC - CellEditState, NavigationState
├── datasource.zig # ~120 LOC - TableDataSource interface
├── row_buffer.zig # ~180 LOC - Excel-style commit logic
├── keyboard.zig # ~500 LOC - handleEditingKeyboard, processTableEvents
├── navigation.zig # ~250 LOC - Tab calculation, sorting
├── rendering.zig # ~450 LOC - drawRows, drawCells, drawStateIndicator
├── scrollbars.zig # ~150 LOC - Scrollbars vertical/horizontal
├── utils.zig # ~50 LOC - blendColor, startsWithIgnoreCase
└── table_core.zig # ~30 LOC - Re-exports todo (compatibilidad)
Mapeo de Contenido Original → Nuevos Archivos
| Líneas orig | Contenido | Destino |
|---|---|---|
| 35-47 | table_tips, TIP_ROTATION_FRAMES | types.zig |
| 54-125 | TableColors, CellRenderInfo, EditState, RowState | types.zig |
| 133-355 | CellEditState, NavigationState, DoubleClickState | state.zig |
| 363-480 | drawCellActiveIndicator, drawEditingOverlay, drawCellText, drawStateIndicator | rendering.zig |
| 489-765 | ColumnRenderDef, RowRenderColors, DrawRowsConfig, drawRowsWithDataSource | rendering.zig |
| 774-995 | NavigateDirection, EditKeyboardResult, handleEditingKeyboard | keyboard.zig |
| 1007-1278 | TableEventResult, processTableEvents | keyboard.zig |
| 1285-1457 | PendingCellChange, RowEditBuffer, RowCommitInfo, buildCommitInfo | row_buffer.zig |
| 1466-1498 | blendColor, startsWithIgnoreCase | utils.zig |
| 1503-1706 | TabNavigateResult, CellPosition, calculateNextCell/Prev, planTabNavigation | navigation.zig |
| 1715-1757 | SortDirection, toggleSort | navigation.zig |
| 1784-1885 | TableDataSource, makeTableDataSource | datasource.zig |
| 1893-2010 | VerticalScrollbarParams, HorizontalScrollbarParams, draw* | scrollbars.zig |
Fases de Implementación
FASE 1: Crear estructura de carpeta
- Crear directorio
table_core/ - Mover archivo original como backup
FASE 2: Extraer módulos (uno por uno)
- types.zig - Tipos básicos y constantes
- state.zig - Estados de edición y navegación
- utils.zig - Funciones utilitarias
- datasource.zig - Interface TableDataSource
- row_buffer.zig - Lógica de commit Excel-style
- navigation.zig - Navegación Tab y sorting
- scrollbars.zig - Renderizado de scrollbars
- rendering.zig - Renderizado de filas y celdas
- keyboard.zig - Manejo de teclado
FASE 3: Crear archivo hub de re-export
- table_core.zig con
pub usingnamespacepara cada módulo
FASE 4: Verificar compilación
zig builden zcatguizig builden zsimifactu
FASE 5: Commit y documentar
- jj describe + jj new
- Actualizar LAST_UPDATE.md
- jj git push
Dependencias Entre Módulos
types.zig ←─────────────────────────────────────┐
↑ │
state.zig ←──────────────────────────┐ │
↑ │ │
utils.zig │ │
↑ │ │
datasource.zig ←─────────────────────┤ │
↑ │ │
row_buffer.zig ←─────────────────────┤ │
↑ │ │
navigation.zig ←─────────────────────┤ │
↑ │ │
scrollbars.zig │ │
↑ │ │
rendering.zig ←──────────────────────┘ │
↑ │
keyboard.zig ←──────────────────────────────────┘
Notas Técnicas
- El archivo original
widgets/table_core.zigse convierte enwidgets/table_core/table_core.zig - Zig resuelve
@import("table_core.zig")→ buscatable_core/table_core.zigautomáticamente - No se requieren cambios en código cliente (advanced_table, virtual_advanced_table, zsimifactu)
Historial
| Fecha | Hora | Acción | Estado |
|---|---|---|---|
| 2025-12-29 | -- | Plan creado | En progreso |
| 2025-12-29 | ~02:00 | Refactorización completada | ✅ COMPLETADO |
Resultado Final
10 módulos creados:
table_core/
├── types.zig # 196 LOC
├── state.zig # 175 LOC
├── datasource.zig # 114 LOC
├── row_buffer.zig # 167 LOC
├── keyboard.zig # 270 LOC
├── navigation.zig # 212 LOC
├── rendering.zig # 233 LOC
├── scrollbars.zig # 97 LOC
├── utils.zig # 51 LOC
└── table_core.zig # 115 LOC (hub)
Beneficios:
- Ningún archivo >300 LOC (vs 2115 LOC original)
- Debugging focalizado: solo leer módulo relevante
- Imports actualizados en 7 archivos de widgets
- Compilación OK en zcatgui y zsimifactu