IntelliJ-плагін, що відновлює семантичну модель із розподіленої XML-конфігурації та забезпечує навігацію між неявними залежностями.
Огляд
RimWorld XML Toolkit — інструмент для розробників, створений для вирішення поширеної, але недооціненої проблеми: роботи з великими розподіленими XML-конфігураційними системами.
У багатьох системах — включно з ігровими рушіями, enterprise-платформами та legacy-інтеграціями — XML є не просто даними. Він кодує:
- залежності
- наслідування
- поведінку рантайму
Цей плагін перетворює XML зі статичного тексту на навігаційну структуровану модель всередині IDE.
Контекст
Галузь: Моддинг ігор / XML-based системи
Тип: Інструментарій розробника (IntelliJ Plugin)
Архітектура: Семантична індексація + інтеграція з IDE
Проєкт створено для вирішення реальної складності в розробці модів до RimWorld, де:
- конфігурація розподілена між десятками або сотнями файлів
- зв’язки виражені як рядкові посилання
- налагодження вимагає ручної навігації
Архітектура
Система побудована як багаторівневий семантичний пайплайн:
XML → Parsed Defs → Indexed Model → Reference Resolution → Navigation
Основні компоненти
Рівень парсингу
- Вилучає доменні сутності (Defs) з XML
- Обробляє кілька форматів визначень
Рівень моделі
- Представляє Def як структурований об’єкт
- Включає метадані типу, ідентичності та успадкування
Рівень індексу
- In-memory пошук (
DefType::defName) - Оптимізовано для швидкого розв’язання
Розв’язання посилань
- Виявляє неявні посилання через XML-шляхи
- Відображає значення на фактичні сутності
Інтеграція з IDE
- PSI-based навігація
- інкрементальна індексація
- валідація
Функціональний обсяг
XML-індексація
- Парсить усі XML-файли проєкту
- Вилучає доменні сутності
- Будує семантичний індекс
Навігація
- Розв’язує посилання між файлами
- Вмикає “Go to Definition”
- Підтримує неявні залежності
Валідація
- Виявляє відсутні ідентифікатори
- Підсвічує структурні проблеми
Моя роль
- Проєктування загальної архітектури плагіну
- Реалізація моделі семантичної індексації
- Побудова системи розв’язання посилань
- Інтеграція плагіну з IntelliJ PSI
- Реалізація пайплайну інкрементальних оновлень
- Проєктування розширюваної моделі конфігурації
Інженерні виклики
1. Неявні залежності
XML явно не визначає зв’язки — вони закодовані як рядки.
Рішення:
Запровадити конфіг-кероване відображення між XML-шляхами та типами цільових сутностей.
2. Продуктивність та масштабованість
Великі проєкти можуть містити сотні XML-файлів.
Рішення:
- in-memory індекс (
ConcurrentHashMap) - інкрементальні оновлення через PSI events
3. Обмеження рантайму IDE
Плагін не повинен блокувати UI або знижувати продуктивність.
Рішення:
- фонова індексація
- коректна робота з потоками (ReadAction / SmartMode)
- мінімальний обхід PSI
4. Доменне моделювання
XML — це дерево, але система поводиться як граф.
Рішення:
Відновити семантичні зв’язки та побудувати навігацію поверх них.
Технології
Java, IntelliJ Platform SDK, PSI, XML, JSON
Дорожня карта
Система еволюціонує від простого індексу до повноцінної семантичної моделі:
- Фаза 1 — індексація та навігація
- Фаза 2 — успадкування (ParentName, abstract defs)
- Фаза 3 — конфігуроване відображення (налаштування IDE)
- Фаза 4 — версіозалежна поведінка
- Фаза 5 — крос-мод + vanilla дані
- Фаза 6 — система патчів
- Фаза 7 — ефективні визначення
- Фаза 8 — семантичне збагачення
- Фаза 9 — візуалізація графу
Чому цей кейс важливий
Цей проєкт демонструє:
- системне мислення за межами CRUD/backend
- здатність моделювати неявні доменні зв’язки
- глибоку інтеграцію з інструментарієм розробника
- побудову розширюваних платформ, а не просто функцій
Позиціонування
Це не просто XML-переглядач.
Це домен-орієнтований рушій семантичної індексації всередині IntelliJ.
Той самий підхід можна застосувати до:
- enterprise-конфігураційних систем
- політик безпеки (на базі XML/JSON)
- інтеграційних схем
- legacy-платформ
Можливі розширення
- візуалізація графу залежностей
- AI-аналіз конфігурацій
- аналіз впливу (поширення змін)
- інтеграція із зовнішніми системами
Статус
Активна розробка (Фаза 1 завершена)