RimWorld XML Toolkit

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 завершена)