В MPS 2021.3 появились Coderules, экспериментальная поддержка Kotlin, лямбда-выражения Java, ряд улучшений для работы с VCS и многое другое.
Не секрет, что мы уже несколько лет разрабатываем новую систему типов. Это оказалось непростой задачей, но сегодня нам наконец есть что показать. Coderules пока доступна в режиме бета-версии и поэтому еще не встроена в MPS.
Это целая подсистема, поэтому мы подготовили онлайн-курс, посвященный ее основам.
Мы встроили в MPS экспериментальную поддержку Kotlin. Сейчас поддерживается большинство структурных элементов языка (а также генерация текста), но пока это лишь частичная поддержка.
Новое действие Hide Revision позволяет исключить версию из текущего результата аннотации и показать результат как в редакторе, так и на полях. Восстановить исключенные версии можно с помощью обратного действия Restore Hidden Revisions.
Действие Annotate в MPS работает не так быстро, как операция git blame для текстовых файлов, поскольку оно конструирует результат аннотации для моделей. Действия Annotate revision и Annotate previous revision используют тот же алгоритм конструирования, что и Annotate, поэтому они тоже работали медленно. Теперь результаты действий Annotate revision и Annotate previous revision можно сконструировать мгновенно, используя результаты первоначального действия Annotate.
Добавлено действие Show Details, позволяющее получить подробную информацию о ветках во время слияния. Оно доступно из окна Merge revision.
Мы добавили действие, меняющее описание изменений в подсказках в диалоге Diff. Описание становится короче и понятнее.
Теперь можно нажать на ссылку в подсказке, и всплывающее окно подсказки останется внутри основного окна приложения. Кроме того, если подсказка длинная, ее текст можно прокрутить.
Мы разработали новый алгоритм, который находит конфликтующие, неконфликтующие и симметричные изменения в новых типах. В интерфейс добавлен механизм переключения алгоритмов с отслеживанием и без отслеживания переноса узлов в окне Merge.
Находить внутренние вставки, удаления и перемещения в изменениях обертки можно было и раньше, однако изменения вложенной обертки при этом не выявлялись. Теперь такие изменения также будут обнаружены.
Мы по-новому организовали настройки системы контроля версий, чтобы их было проще найти и использовать. Теперь список всех доступных настроек VCS вы найдете в разделе Preferences / Settings | Version Control. Кроме того, добавлен отдельный узел Directory mappings. Фоновые операции включены по умолчанию.
В узле Git настройки разбиты на разделы, соответствующие основным процессам: Commit, Push и Update.
Теперь замыкания MPS генерируются в виде лямбда-выражений Java, если они совместимы. Несовместимыми являются случаи, когда используются:
Мы добавили экспериментальную функцию, позволяющую использовать пару узлов в качестве ключа сопоставления: node<>, node<> --> node<>
. Это удобно, когда нужно обеспечить поддержку двух исходных концептов. Эта функция используется точно так же, как и метки с одним ключевым узлом.
Помимо метки сопоставления для кортежей, новая версия поддерживает запрос доступа ко всем известным сопоставлениям для двух заданных ключей: genContext.get output list LABEL for (node1, node2)
.
Из-за большого числа вычислений области видимости обработка динамических ссылок часто замедляет преобразование из одной модели в другую. Трассировка производительности скрывает эту важную информацию под расплывчатой формулировкой «восстановление ссылок». Теперь время, затраченное на обработку динамических ссылок, отображается отдельно от времени, затраченного на восстановление обычных (статических) ссылок.
В новой версии мы упростили процесс миграции проектов. Достаточно создать решение в виде плагина, указать корневые каталоги миграции и приложения, а затем включить плагин в билд-скрипт.
Теперь задача Ant <migrate> поддерживает несколько спецификаций проектов, поэтому их миграцию можно осуществить одновременно. Для перечисления местоположений проектов в этой задаче можно использовать либо вложенные элементы <project path="”/>, либо обычный <dirset> Ant.
Функция Checkout and Rebase onto Current позволяет извлечь выбранную ветку и переместить ее на вершину ветки, в которой вы находитесь. Раньше это действие можно было использовать только локально, а в версии 2021.3 оно работает и для удаленных веток.
В MPS 2021.3 различия между коммитами отображаются в отдельном окне Changes. Оно находится слева от редактора.
Эта функция позволяет передавать на сервер только те коммиты, работа над которыми завершена (остальные будут по-прежнему храниться локально). Выберите коммит, на котором вы хотите остановиться, кликните по нему правой кнопкой мыши для вызова контекстного меню и выберите Push All up to Here.
Как и для предыдущих релизов, мы подготовили руководство по миграции, которое поможет легко перейти на новую версию.