Mps logo

MPS

Language workbench to create Domain-Specific Languages

Публикации и ответы на комментарии в блогах JetBrains не выходят на русском языке с 2022 года.

Приносим извинения за неудобства.

Features MPS Releases

Представляем MPS 2020.3

Read this post in other languages:

Встречайте MPS 2020.3! Несколько месяцев мы работали над тем, чтобы сделать MPS еще удобнее, и исправляли проблемы, о которых вы нам сообщали. Скачайте MPS 2020.3 на нашем сайте или с помощью приложения Toolbox.


СКАЧАТЬ MPS 2020.3

Новый макрос генератора

Мы добавили новый макрос $CALL-SITE$. Он упрощает вставку узла, на который указывает макрос SWITCH/CALL, в указанное место в вызванном шаблоне. Раньше узел с прикрепленным макросом SWITCH/CALL обычно игнорировался. Теперь, если вызванный template/switch пытается использовать «call site node», то узел обрабатывается как обычный шаблон, и результат передается в вызванный template/switch как неявный аргумент, который можно вставить в желаемое место.

Вот как выглядит вызов шаблона reduce_Comment, служащего «местом вызова» шаблона reduce_MethodDeclaration:

Если мы заглянем в шаблон, увидим, что там есть call site node с оператором $CALL-SITE$ в теле метода:

Также теперь есть вызов переключателя reduce_Expressions, параметризованного узлом шаблона (вызов метода трассировки) с помощью макроса свойства и макроса ссылки (который обеспечивает то, что вызов метода указывает на правильное объявление метода в другом месте). Внутри переключателя $CALL-SITE$ заменяет вызов метода-заполнителя на тот, который является call site node:

В объявлениях шаблона и переключателя есть флаг, который специально переключается, чтобы указать, что должен использоваться call site node. Использовать макрос $CALL-SITE$ внутри шаблона/переключателя, который не указывает на необходимость получения $CALL-SITE$, будет ошибкой. Нет необходимости указывать явный аргумент в CALL/SWITCH —генератор MPS может определить, нужен ли вызываемому шаблону/переключателю call site, и вычисляет шаблон, включая макросы, CALL/SWITCH перед обработкой.

Эта функциональность полезна в таких сценариях, как приведение условных типов, например в выражениях IF needCast (Type), ELSE, или в преобразованиях, когда есть несколько источников выражения, которые могут служить входными данными, например switch { case Double : Double.valueOf(expression); case Integer : Integer.valueOf(expression, 16); …}. Поэтому нецелесообразно иметь специальный переключатель/шаблон для каждого случая.

Динамическая подсветка в редакторе

В редакторе появилась долгожданная динамическая подсветка. Эта функция очень похожа на действие Highlight Usages (Ctrl/Cmd+Shift+F7). Разница в том, что динамическая подсветка срабатывает автоматически при вводе кода или навигации по нему. Ссылки на узел, находящийся под курсором, подсвечиваются в редактируемом документе практически сразу. Вы по-прежнему можете использовать действие Highlight Usages, чтобы видеть использования выбранного узла, когда навигируетесь в другое место. При этом динамическая подсветка продолжит выделять использования узла под курсором.

Функция включается и выключается в настройках редактора MPS (опция Highlight selected node).

Улучшенный switch-оператор в BaseLanguage

В дополнение к улучшениям в редакторе, концепт switch теперь поддерживает использование нескольких case для одного и того же оператора.

Полоса ошибки на панели Project

На панели Project ошибки, предупреждения и сообщения отображаются по-новому. Полосы ошибок помогают упорядочить сообщения. Вы можете отключить их с помощью кнопки в настройках Logical View.

Изменения в обработке фасетов модулей

Вы больше не обязаны использовать какой-то определенный фасет модуля с любым модулем. Фасеты, связанные с модулем, записываются в файл дескриптора модуля, который теперь является основным источником информации. В предыдущих версиях мы уже сделали фасет Tests необязательным, теперь это касается и последнего фасета — Java. Обратите внимание, что снятие галочки с фасета Java в модуле Language исключит язык из механизма загрузки классов, и все будет работать по-другому. Мы внесли это изменение, чтобы улучшить поддержку других языков.

Улучшенная аннотация корня в VCS

Старый алгоритм корневых аннотаций использовал результаты, полученные из текстового файла модели. Раньше он работал только для моделей с сохранением текста и не всегда корректно. Благодаря новому подходу аннотация строится путем сравнения моделей из разных версий.

Каждую ячейку в редакторе теперь можно аннотировать с помощью опции Annotate cells:

В результате вы увидите последние изменения каждой ячейки во всплывающей подсказке:

Вы можете выбрать версию в столбце Annotation, и MPS подсветит все ячейки, в которые были внесены изменения:

Отслеживание перемещенных узлов в окне Diff

Предыдущий алгоритм расчета различий между двумя моделями не мог обнаружить некоторые типы изменений. Перемещение узла рассматривалось как два независимых изменения: вставка и удаление. Теперь это отображается как одно действие. Кроме того, можно отследить изменения внутри перемещаемого фрагмента:

Вы можете выбрать, следует отслеживать перемещенные узлы в окне Diff или нет:

Иногда порядок узлов одного уровня не имеет значения. Вы можете скрыть несущественные перестановки, используя новую опцию Hide Unordered Moves.

Обновленный начальный экран

Начальный экран MPS выглядит по-новому. Теперь там можно не только выбрать проект, но и настроить MPS в соответствии с вашими потребностями. На странице Projects теперь больше места — она вмещает больше проектов, которые легко искать через поле поиска. На странице Customization можно настроить основные параметры интерфейса, например тему и шрифт, параметры импорта и общего доступа.

Другие улучшения

Обновленное меню VCS

Меню VCS теперь называется в соответствии с той системой контроля версий, которую вы используете. Если у вас в проекте используется только Git, меню VCS будет выглядеть так:

Еще мы улучшили его внешний вид и убрали из него все действия, кроме самых актуальных. Теперь легко получить доступ к ключевым функциям Git — они больше не спрятаны в подменю.

Кнопка Commit and Push

Две самые популярные кнопки — Commit и Commit and Push… — теперь отображаются в окне Commit. Вы можете запушить изменения в удаленный репозиторий сразу после коммита, и больше не нужно прокручивать раскрывающийся список, чтобы добраться до кнопки Commit and Push.

Улучшенные ветки

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

Удобное управление вкладками в редакторе

При работе над большим проектом удобно держать открытыми несколько вкладок. Теперь вы можете разделить главный экран редактора по горизонтали или по вертикали, просто перетащив вкладку в удобное место. Редактор подсветит, где она может быть закреплена. Закрепленные вкладки теперь отображаются в самом начале панели вкладок.

Кроме того, мы исправили множество ошибок. Очень ждем ваших отзывов в комментариях и баг-репортов в нашем трекере.

Хорошего дня и будьте здоровы!

Ваша команда MPS
The Drive to Develop

Оригинал статьи опубликован на habr.com:
https://habr.com/ru/company/JetBrains/blog/536854/

image description