refactor: complete large files/functions refactoring (Phase 6-7)

Phase 6: Refactor tdlib/client.rs 
- Extract update handlers to update_handlers.rs (302 lines, 8 functions)
- Extract message converter to message_converter.rs (250 lines, 6 functions)
- Extract chat helpers to chat_helpers.rs (149 lines, 3 functions)
- Result: client.rs 1259 → 599 lines (-52%)

Phase 7: Refactor tdlib/messages.rs 
- Create message_conversion.rs module (158 lines)
- Extract 6 helper functions:
  - extract_content_text() - content extraction (~80 lines)
  - extract_entities() - formatting extraction (~10 lines)
  - extract_sender_name() - sender name with API call (~15 lines)
  - extract_forward_info() - forward info (~12 lines)
  - extract_reply_info() - reply info (~15 lines)
  - extract_reactions() - reactions extraction (~26 lines)
- Result: convert_message() 150 → 57 lines (-62%)
- Result: messages.rs 850 → 757 lines (-11%)

Summary:
-  All 4 large files refactored (100%)
-  All 629 tests passing
-  Category #2 "Large files/functions" COMPLETE
-  Documentation updated (REFACTORING_OPPORTUNITIES.md, CONTEXT.md)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Mikhail Kilin
2026-02-04 01:29:26 +03:00
parent b081886e34
commit 5ac10ea24c
9 changed files with 1198 additions and 780 deletions

View File

@@ -1511,29 +1511,95 @@ render() теперь (~92 строки):
- ✅ Код стал модульным и читаемым
- ✅ Каждая функция имеет чёткую ответственность
### Phase 6: Рефакторинг tdlib/client.rs В ПРОЦЕССЕ
### Phase 6: Рефакторинг tdlib/client.rs ✅ ЗАВЕРШЁН! (2026-02-04)
**Коммит 0acf864** - Начало Phase 6:
- Извлечены: handle_new_message_update() (~45 строк), handle_chat_action_update() (~50 строк)
- handle_update() сокращена с **351 до ~268 строк (24% ✂️)**
- Добавлены импорты: UpdateNewMessage, UpdateChatAction
- **2/17 веток** извлечены в отдельные методы
**Этап 1** (коммит 0acf864) - Извлечение Update Handlers:
- Создан модуль `src/tdlib/update_handlers.rs` (302 строки)
- **Извлечено 8 handler функций** (~350 строк):
- handle_new_message_update() — добавление новых сообщений (44 строки)
- handle_chat_action_update() — статус набора текста (32 строки)
- handle_chat_position_update() — управление позициями чатов (36 строк)
- handle_user_update() — обработка информации о пользователях (40 строк)
- handle_message_interaction_info_update() — обновление реакций (44 строки)
- handle_message_send_succeeded_update() — успешная отправка (35 строк)
- handle_chat_draft_message_update() — черновики сообщений (15 строк)
- handle_auth_state() — изменение состояния авторизации (10 строк)
- handle_update() обновлен для делегирования в update_handlers
- **Результат: client.rs 1259 → 983 строки (22% ✂️)**
**Цель Phase 6:**
- Полностью разделить монолитный handle_update() (351 строка, 17 веток)
- Извлечь каждую ветку match в отдельный приватный метод
- handle_update() станет простым диспетчером (~30-40 строк)
**Этап 2** (коммит 88ff4dd) - Извлечение Message Converter:
- Создан модуль `src/tdlib/message_converter.rs` (250 строк)
- **Извлечено 6 conversion функций** (~240 строк):
- convert_message() — основная конвертация TDLib → MessageInfo (150+ строк)
- extract_reply_info() — извлечение reply информации (30 строк)
- extract_forward_info() — извлечение forward информации (25 строк)
- extract_reactions() — извлечение реакций (20 строк)
- get_origin_sender_name() — получение имени отправителя (15 строк)
- update_reply_info_from_loaded_messages() — обновление reply из кэша (30 строк)
- Исправлены ошибки компиляции с неверными именами полей
- Обновлены вызовы в update_handlers.rs
- **Результат: client.rs 983 → 754 строки (23% ✂️)**
**Прогресс:** 2/17 веток (12%)
**Файл:** 1167 → 1178 строк
**Этап 3** (коммит b081886) - Извлечение Chat Helpers:
- Создан модуль `src/tdlib/chat_helpers.rs` (149 строк)
- **Извлечено 3 helper функции** (~140 строк):
- find_chat_mut() — поиск чата по ID (15 строк)
- update_chat() — обновление чата через closure (15 строк, используется 9+ раз)
- add_or_update_chat() — добавление/обновление чата в списке (110+ строк)
- Использован sed для замены вызовов методов по всей кодовой базе
- **Результат: client.rs 754 → 599 строк (21% ✂️)**
**Итоговый результат Phase 6:**
- ✅ Файл client.rs сократился с **1259 до 599 строк (52% ✂️)** 🎉
- ✅ Создано **3 новых модуля** с чёткой ответственностью:
- update_handlers.rs — обработка всех типов TDLib Update
- message_converter.rs — конвертация TDLib Message → MessageInfo
- chat_helpers.rs — утилиты для работы с чатами
- ✅ Все **590+ тестов** проходят успешно
- ✅ Код стал **модульным и лучше организованным**
- ✅ TdClient теперь ближе к **facade pattern** (делегирует в специализированные модули)
**Достижения дополнительного рефакторинга (итого):**
- ✅ main_input.rs: handle() сокращена на 91% (891 → 82 строки)
- ✅ ui/messages.rs: render() сокращена на 76% (390 → 92 строки)
- tdlib/client.rs: handle_update() сокращена на 24% (351 → 268 строк)
- ✅ tdlib/client.rs: файл сокращён на 52% (1259 → 599 строк) 🎉
- ✅ Применены современные Rust паттерны (let-else guards, early returns)
- ✅ Код стал модульным и читаемым
- ✅ Каждая функция имеет чёткую ответственность
- ✅ **2 из 4 больших файлов рефакторены (50%)**
### Phase 7: Рефакторинг tdlib/messages.rs ✅ ЗАВЕРШЁН! (2026-02-04)
**Проблема**: Огромная функция `convert_message()` на 150 строк в MessageManager
**Решение**: Создан модуль `src/tdlib/message_conversion.rs` (158 строк)
- **Извлечено 6 вспомогательных функций**:
- `extract_content_text()` — извлечение текста из различных типов сообщений (~80 строк)
- `extract_entities()` — извлечение форматирования (~10 строк)
- `extract_sender_name()` — получение имени отправителя с API вызовом (~15 строк)
- `extract_forward_info()` — информация о пересылке (~12 строк)
- `extract_reply_info()` — информация об ответе (~15 строк)
- `extract_reactions()` — реакции на сообщение (~26 строк)
- Метод `convert_message()` сократился с **150 до 57 строк** (62% сокращение! 🎉)
- Файл `messages.rs` сократился с **850 до 757 строк** (11% сокращение)
**Результат Phase 7:**
- ✅ Файл `messages.rs`: **850 → 757 строк**
- ✅ Метод `convert_message()`: **150 → 57 строк** (62% ✂️)
- ✅ Создан переиспользуемый модуль `message_conversion.rs`
-Все **629 тестов** проходят успешно
**🎉🎉 КАТЕГОРИЯ "БОЛЬШИЕ ФАЙЛЫ/ФУНКЦИИ" ЗАВЕРШЕНА НА 100%! 🎉🎉**
**Достижения дополнительного рефакторинга (итого):**
- ✅ main_input.rs: handle() сокращена на 91% (891 → 82 строки)
- ✅ ui/messages.rs: render() сокращена на 76% (390 → 92 строки)
- ✅ tdlib/client.rs: файл сокращён на 52% (1259 → 599 строк)
- ✅ tdlib/messages.rs: convert_message() сокращена на 62% (150 → 57 строк)
- ✅ Применены современные Rust паттерны (let-else guards, early returns)
- ✅ Код стал модульным и читаемым
- ✅ Каждая функция имеет чёткую ответственность
-**ВСЕ 4 БОЛЬШИХ ФАЙЛА ОТРЕФАКТОРЕНЫ (100%!)** 🎉🎉🎉
## Известные проблемы