refactor: complete Phase 13 deep architecture refactoring (etaps 3-7)
Split monolithic files into modular architecture: - ui/messages.rs (893→365 lines): extract modals/, compose_bar.rs - tdlib/messages.rs (836→3 files): split into messages/mod, convert, operations - config/mod.rs (642→3 files): extract validation.rs, loader.rs - Code duplication cleanup: shared components, ~220 lines removed - Documentation: PROJECT_STRUCTURE.md rewrite, 16 files got //! docs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
144
CONTEXT.md
144
CONTEXT.md
@@ -1,9 +1,151 @@
|
||||
# Текущий контекст проекта
|
||||
|
||||
## Статус: Фаза 13 Этап 2 — ЗАВЕРШЕНО (100%!) 🎉
|
||||
## Статус: Фаза 13 — ПОЛНОСТЬЮ ЗАВЕРШЕНА (Этапы 1-7) ✅
|
||||
|
||||
### Последние изменения (2026-02-06)
|
||||
|
||||
**📝 COMPLETED: Documentation Update (Фаза 13, Этап 7)**
|
||||
- **Проблема**: После этапов 1-6 документация устарела и не отражала новую архитектуру
|
||||
- **Решение**: Полное обновление документации проекта
|
||||
|
||||
**1. Перезапись PROJECT_STRUCTURE.md:**
|
||||
- Полная перезапись с актуальной архитектурой
|
||||
- ASCII диаграмма архитектуры (main.rs → input/app/ui → tdlib → TDLib C library)
|
||||
- Актуальное дерево файлов со всеми новыми модулями (handlers/, methods/, modals/, components/, messages/)
|
||||
- Таблица trait методов, диаграмма состояний, приоритеты input routing
|
||||
- Секция тестирования
|
||||
|
||||
**2. Module-level документация (`//!` doc comments) для 16 файлов:**
|
||||
- `lib.rs`, `types.rs`, `constants.rs`
|
||||
- `app/mod.rs`
|
||||
- `config/mod.rs`, `config/validation.rs`, `config/loader.rs`
|
||||
- `ui/mod.rs`, `ui/messages.rs`, `ui/chat_list.rs`, `ui/components/mod.rs`
|
||||
- `input/mod.rs`, `input/main_input.rs`
|
||||
- `tdlib/messages/mod.rs`, `tdlib/messages/convert.rs`, `tdlib/messages/operations.rs`
|
||||
|
||||
**Метрики:**
|
||||
- 16 файлов получили module-level документацию
|
||||
- PROJECT_STRUCTURE.md полностью переписан
|
||||
- Все 500+ тестов проходят
|
||||
|
||||
---
|
||||
|
||||
**🔧 COMPLETED: Code Duplication Cleanup (Фаза 13, Этап 6)**
|
||||
- **Проблема**: После этапов 1-5 рефакторинга накопились неиспользуемые импорты и дублированный код
|
||||
- **Решение**: Очистка импортов + выделение общих компонентов
|
||||
|
||||
**1. Очистка неиспользуемых импортов:**
|
||||
- `main_input.rs`: удалено 12 неиспользуемых импортов (функции, traits, типы)
|
||||
- `chat.rs`: удалён `ReplyInfo`
|
||||
- `chat_list.rs`, `compose.rs`, `modal.rs`: удалены `KeyCode`, `KeyModifiers`
|
||||
- `search.rs`: удалён `KeyModifiers`
|
||||
- `app/mod.rs`: удалён `MessageId`
|
||||
- Результат: **0 compiler warnings** в исходных файлах
|
||||
|
||||
**2. Извлечение `format_user_status()` в `ui/chat_list.rs`:**
|
||||
- Было: 2 копии идентичного match по UserOnlineStatus (48 строк x2)
|
||||
- Стало: 1 функция `format_user_status()` (12 строк) + 7 строк вызова
|
||||
- Удалено: ~80 строк дублированного кода
|
||||
|
||||
**3. Создание `ui/components/message_list.rs` (общий компонент):**
|
||||
- `render_message_item()` — рендеринг элемента списка сообщений (marker + sender + date + wrapped text)
|
||||
- `calculate_scroll_offset()` — вычисление offset для скролла к выбранному элементу
|
||||
- `render_help_bar()` — рендеринг help bar с keyboard shortcuts
|
||||
- Использовано в: `modals/search.rs` и `modals/pinned.rs`
|
||||
- Удалено: ~120 строк дублированного кода из двух модалок
|
||||
|
||||
**4. Извлечение `scroll_to_message()` в `input/handlers/mod.rs`:**
|
||||
- Было: идентичный код в `handlers/search.rs` и `handlers/modal.rs`
|
||||
- Стало: 1 функция `scroll_to_message()` (10 строк) + 2 вызова
|
||||
- Удалено: ~20 строк дублированного кода
|
||||
|
||||
**Метрики:**
|
||||
- Удалено ~220 строк дублированного кода
|
||||
- 0 compiler warnings в source файлах
|
||||
- Все 500+ тестов проходят
|
||||
|
||||
---
|
||||
|
||||
### Предыдущие изменения (2026-02-06)
|
||||
|
||||
**🔧 COMPLETED: Разбиение config/mod.rs (Фаза 13, Этап 5)**
|
||||
- **Проблема**: `src/config/mod.rs` содержал 642 строки (structs + validation + loader + credentials)
|
||||
- **Решение**: Разбит на 3 файла по ответственности
|
||||
- **Результат**:
|
||||
- `config/mod.rs`: **350 строк** (было 642) - structs, defaults, Default impls, tests
|
||||
- `config/validation.rs`: **86 строк** - validate(), parse_color()
|
||||
- `config/loader.rs`: **192 строки** - load(), save(), paths, credentials
|
||||
- **Структура config/**:
|
||||
```
|
||||
src/config/
|
||||
├── mod.rs # Structs, defaults, tests (350 lines)
|
||||
├── keybindings.rs # Keybindings (existing)
|
||||
├── validation.rs # validate(), parse_color() (86 lines)
|
||||
└── loader.rs # load/save/credentials (192 lines)
|
||||
```
|
||||
- Все 500+ тестов проходят
|
||||
|
||||
---
|
||||
|
||||
**🔧 COMPLETED: Разбиение tdlib/messages.rs (Фаза 13, Этап 4)**
|
||||
- **Проблема**: `src/tdlib/messages.rs` содержал 836 строк монолитного кода
|
||||
- **Решение**: Разбит на 3 файла по ответственности
|
||||
- **Результат**:
|
||||
- `tdlib/messages/mod.rs`: **99 строк** - struct MessageManager, new(), push_message()
|
||||
- `tdlib/messages/convert.rs`: **134 строки** - convert_message, fetch_missing_reply_info, fetch_and_update_reply
|
||||
- `tdlib/messages/operations.rs`: **616 строк** - 11 TDLib API операций
|
||||
- **Структура messages/**:
|
||||
```
|
||||
src/tdlib/messages/
|
||||
├── mod.rs # Struct + core (99 lines)
|
||||
├── convert.rs # Message conversion (134 lines)
|
||||
└── operations.rs # TDLib operations (616 lines)
|
||||
```
|
||||
- Изменения: `client_id` → `pub(crate)`, `convert_message` → `pub(crate)`
|
||||
- Исправлены trait imports во всех handler файлах и тестах
|
||||
- Все тесты проходят
|
||||
|
||||
---
|
||||
|
||||
**🔧 COMPLETED: Рефакторинг ui/messages.rs на модульную архитектуру (Фаза 13, Этап 3)**
|
||||
- **Проблема**: `src/ui/messages.rs` содержал 893 строки монолитного рендеринга
|
||||
- **Решение**: Разбит на модули modals и compose_bar
|
||||
- **Результат**:
|
||||
- ✅ `ui/messages.rs`: **365 строк** (было 893) - только core rendering
|
||||
- ✅ Создано 6 новых UI модулей:
|
||||
- `ui/modals/mod.rs` - экспорты модальных окон
|
||||
- `ui/modals/delete_confirm.rs` - подтверждение удаления (~8 строк)
|
||||
- `ui/modals/reaction_picker.rs` - выбор реакций (~13 строк)
|
||||
- `ui/modals/search.rs` - поиск по сообщениям (193 строки)
|
||||
- `ui/modals/pinned.rs` - закреплённые сообщения (163 строки)
|
||||
- `ui/compose_bar.rs` - input box с 5 режимами (168 строк)
|
||||
- ✅ **Удалено 528 строк** (59% кода)
|
||||
- ✅ Чистое разделение UI компонентов
|
||||
- **Структура ui/**:
|
||||
```
|
||||
src/ui/
|
||||
├── messages.rs # Core chat rendering (365 lines)
|
||||
├── compose_bar.rs # Multi-mode input box (168 lines)
|
||||
└── modals/
|
||||
├── mod.rs # Re-exports
|
||||
├── delete_confirm.rs # Delete modal wrapper (8 lines)
|
||||
├── reaction_picker.rs # Reaction picker wrapper (13 lines)
|
||||
├── search.rs # Search modal (193 lines)
|
||||
└── pinned.rs # Pinned messages (163 lines)
|
||||
```
|
||||
- **Улучшения**:
|
||||
- Модальные окна полностью изолированы
|
||||
- Compose bar - переиспользуемый компонент
|
||||
- Утилиты (wrap_text_with_offsets) сделаны pub(super) для переиспользования
|
||||
- **Метрики успеха**:
|
||||
- До: 893 строки в 1 файле
|
||||
- После: 365 строк в messages.rs + 545 строк в модулях
|
||||
- Достигнута цель: messages.rs ≈ 300-400 строк ✅
|
||||
|
||||
---
|
||||
|
||||
### Изменения (2026-02-06) - Этап 2
|
||||
|
||||
**🔧 COMPLETED: Рефакторинг app/mod.rs на trait-based архитектуру (Фаза 13, Этап 2)**
|
||||
- **Проблема**: `src/app/mod.rs` содержал 1015 строк с 116 методами (God Object anti-pattern)
|
||||
- **Решение**: Разбит методы на 5 trait модулей по функциональным областям
|
||||
|
||||
Reference in New Issue
Block a user