Полтора месяца назад я рассказывал, как научил CraftHub работать с папкой проекта. С тех пор накопилось ещё несколько вещей, которые просили в issue — самая заметная из них наконец решает старую проблему с вложенным JSON. Делюсь, что нового.
Главное: вложенность больше не теряется при импорте
CraftHub превращает JSON-массив объектов в таблицу — но что делать с полем, которое само является объектом? {"robot": {"point": {"x": 1, "y": 2}}} — куда девать point?
Раньше ответ был один: расплющить в отдельные колонки — robot.point.x, robot.point.y — и вложенность терялась безвозвратно. Не самое приятное поведение, когда объект специально сериализован вложенным, а на выходе получаешь плоский список.
Кстати, это не первый заход на тему разделителя пути. В истории репозитория уже был коммит с говорящим названием «добавлен управляющий символ для разделения строк» — точку когда-то тоже пробовали как разделитель и отказались: JSON-ключ сам может легально содержать точку, и путь robot.point было невозможно отличить от поля с буквальным именем "robot.point". Разделитель заменили на непечатаемый control-символ (\x1E), который в реальных ключах не встречается почти никогда — эта часть осталась и сейчас, просто раньше применялась только для расплющивания.
Теперь подход другой. По умолчанию вложенный объект не разбивается — он остаётся одной колонкой типа object и открывается двойным кликом во вложенном редакторе, со своей собственной вложенностью внутри. А если всё-таки нужны классические плоские колонки — в диалоге импорта у такого поля появилась стрелочка, разворачивающая его в дочерние поля вручную, на любую глубину:
То есть расплющивание стало осознанным выбором на импорте, а не побочным эффектом, с которым потом приходится жить до конца работы с файлом.
Редактор сырого JSON — с подсветкой синтаксиса и поиском
В CraftHub есть режим «редактировать как есть» — сырой текст JSON вместо таблицы. Раньше это было обычное текстовое поле: моноширинный шрифт и ничего больше, даже номера строк были самодельные.
Переписал этот режим на AvaloniaEdit — тот же класс редакторных контролов, что стоит за SharpDevelop, только под Avalonia. Добавил свою цветовую схему под тёмную и светлую тему приложения — ключи, строки, числа и true/false/null теперь подсвечиваются по-разному:
Заодно бесплатно прилетели поиск и замена — у TextEditor они уже встроены, я только повесил на них Ctrl+F/Ctrl+H и сделал так, чтобы повторное нажатие того же сочетания закрывало панель, а не открывало её заново поверх себя.
И по мелочи
-
Перетаскивание файлов на окно.
.json,.txt,.csтеперь можно просто перетащить на окно — откроются во вкладках. Пока тащишь, окно подсвечивается затемнением с подсказкой, как на веб-страницах.
-
Недавние папки. В проводнике появился список последних пяти открытых папок, как в VS Code — с укороченным путём под именем, чтобы сразу было видно, где что лежит.
-
Окно «Версии». Список всех релизов CraftHub прямо в приложении, подтянутый с GitHub, с описанием изменений у каждого — не нужно идти на страницу релизов вручную.
-
Баг с локалью. На системах с запятой как разделителем дробной части (привет, русская локаль) числа при экспорте JSON превращались в строки:
1.5становилось"1.5". Починил.
Ссылки
-
Десктоп-версия: github.com/c3n9/CraftHub
-
Расширение для VS Code: marketplace.visualstudio.com/items?itemName=c3n9.crafthub
Буду рад багам, идеям и звёздочкам в комментариях — предыдущие статьи из этой серии выросли именно из фидбека читателей.
ссылка на оригинал статьи https://habr.com/ru/articles/1063338/