Что нового в MPS 2021.3

В MPS 2021.3 появились Coderules, экспериментальная поддержка Kotlin, лямбда-выражения Java, ряд улучшений для работы с VCS и многое другое.

Coderules

Не секрет, что мы уже несколько лет разрабатываем новую систему типов. Это оказалось непростой задачей, но сегодня нам наконец есть что показать. Coderules пока доступна в режиме бета-версии и поэтому еще не встроена в MPS.

Это целая подсистема, поэтому мы подготовили онлайн-курс, посвященный ее основам.

Учебный курс

Экспериментальная поддержка языка Kotlin

Экспериментальная поддержка языка Kotlin

Мы встроили в MPS экспериментальную поддержку Kotlin. Сейчас поддерживается большинство структурных элементов языка (а также генерация текста), но пока это лишь частичная поддержка.

Подробнее

Действие Hide revision в аннотациях

Действие Hide revision в аннотациях

Новое действие Hide Revision позволяет исключить версию из текущего результата аннотации и показать результат как в редакторе, так и на полях. Восстановить исключенные версии можно с помощью обратного действия Restore Hidden Revisions.

Подробнее

Оптимизация результатов действия Annotate revision

Действие Annotate в MPS работает не так быстро, как операция git blame для текстовых файлов, поскольку оно конструирует результат аннотации для моделей. Действия Annotate revision и Annotate previous revision используют тот же алгоритм конструирования, что и Annotate, поэтому они тоже работали медленно. Теперь результаты действий Annotate revision и Annotate previous revision можно сконструировать мгновенно, используя результаты первоначального действия Annotate.

Диалог Details в корневых каталогах слияния

Диалог Details в корневых каталогах слияния

Добавлено действие Show Details, позволяющее получить подробную информацию о ветках во время слияния. Оно доступно из окна Merge revision.

Укороченные описания изменений в подсказках в диалоге Diff

Укороченные описания изменений в подсказках в диалоге Diff

Мы добавили действие, меняющее описание изменений в подсказках в диалоге Diff. Описание становится короче и понятнее.

Улучшенные подсказки в редакторе
Спонсировано клиентом

Теперь можно нажать на ссылку в подсказке, и всплывающее окно подсказки останется внутри основного окна приложения. Кроме того, если подсказка длинная, ее текст можно прокрутить.

Новый алгоритм сравнения при слиянии

Новый алгоритм сравнения при слиянии
Спонсировано клиентом

Мы разработали новый алгоритм, который находит конфликтующие, неконфликтующие и симметричные изменения в новых типах. В интерфейс добавлен механизм переключения алгоритмов с отслеживанием и без отслеживания переноса узлов в окне Merge.

Подробнее

Обнаружение изменений вложенной обертки в диалоге Diff

Обнаружение изменений вложенной обертки в диалоге Diff
Спонсировано клиентом

Находить внутренние вставки, удаления и перемещения в изменениях обертки можно было и раньше, однако изменения вложенной обертки при этом не выявлялись. Теперь такие изменения также будут обнаружены.

Реорганизация настроек системы контроля версий

Реорганизация настроек системы контроля версий

Мы по-новому организовали настройки системы контроля версий, чтобы их было проще найти и использовать. Теперь список всех доступных настроек VCS вы найдете в разделе Preferences / Settings | Version Control. Кроме того, добавлен отдельный узел Directory mappings. Фоновые операции включены по умолчанию.

В узле Git настройки разбиты на разделы, соответствующие основным процессам: Commit, Push и Update.

Генерация совместимых замыканий в виде лямбда-выражений Java

Генерация совместимых замыканий в виде лямбда-выражений Java
Спонсировано клиентом

Теперь замыкания MPS генерируются в виде лямбда-выражений Java, если они совместимы. Несовместимыми являются случаи, когда используются:

  • операции yield;
  • «функциональные» абстрактные классы;
  • аннотации;
  • локальные переменные, конфликтующие с родительской областью видимости.

Подробнее

Метка сопоставления для кортежей

Метка сопоставления для кортежей
Спонсировано клиентом

Мы добавили экспериментальную функцию, позволяющую использовать пару узлов в качестве ключа сопоставления: node<>, node<> --> node<>. Это удобно, когда нужно обеспечить поддержку двух исходных концептов. Эта функция используется точно так же, как и метки с одним ключевым узлом.

Подробнее

Доступ ко всем значениям двух сопоставлений ключей в генераторах
Спонсировано клиентом

Помимо метки сопоставления для кортежей, новая версия поддерживает запрос доступа ко всем известным сопоставлениям для двух заданных ключей: genContext.get output list LABEL for (node1, node2).

Трассировка производительности сообщает о затратах времени на обработку динамических ссылок

Из-за большого числа вычислений области видимости обработка динамических ссылок часто замедляет преобразование из одной модели в другую. Трассировка производительности скрывает эту важную информацию под расплывчатой формулировкой «восстановление ссылок». Теперь время, затраченное на обработку динамических ссылок, отображается отдельно от времени, затраченного на восстановление обычных (статических) ссылок.

Упрощенная миграция проектов

Упрощенная миграция проектов

В новой версии мы упростили процесс миграции проектов. Достаточно создать решение в виде плагина, указать корневые каталоги миграции и приложения, а затем включить плагин в билд-скрипт.

Улучшения задачи Ant <migrate>

Теперь задача Ant <migrate> поддерживает несколько спецификаций проектов, поэтому их миграцию можно осуществить одновременно. Для перечисления местоположений проектов в этой задаче можно использовать либо вложенные элементы <project path="”/>, либо обычный <dirset> Ant.

Функция Checkout and Rebase onto Current для удаленных веток

Функция Checkout and Rebase onto Current для удаленных веток

Функция Checkout and Rebase onto Current позволяет извлечь выбранную ветку и переместить ее на вершину ветки, в которой вы находитесь. Раньше это действие можно было использовать только локально, а в версии 2021.3 оно работает и для удаленных веток.

Новое окно Changes

Новое окно Changes

В MPS 2021.3 различия между коммитами отображаются в отдельном окне Changes. Оно находится слева от редактора.

Новое действие Push All up to Here

Новое действие Push All up to Here

Эта функция позволяет передавать на сервер только те коммиты, работа над которыми завершена (остальные будут по-прежнему храниться локально). Выберите коммит, на котором вы хотите остановиться, кликните по нему правой кнопкой мыши для вызова контекстного меню и выберите Push All up to Here.

Руководство по миграции для версии 2021.3

Как и для предыдущих релизов, мы подготовили руководство по миграции, которое поможет легко перейти на новую версию.