Информация

Дата основания
Местоположение
Россия
Сайт
jetbrains.com
Численность
1 001–5 000 человек
Дата регистрации

Блог на Хабре

Обновить
149,77
Рейтинг
JetBrains
Делаем эффективные инструменты для разработчиков

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

Блог компании JetBrainsПрограммирование

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


image


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


Мы добавили новый макрос $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

Теги:jetbrainsmpsdsldomain-specific language
Хабы: Блог компании JetBrains Программирование
Рейтинг +2
Количество просмотров 3,3k Добавить в закладки 2
Комментарии
Комментировать

Похожие публикации

Software Developer (WebTeam BackEnd & Infrastructure)
от 180 000 ₽JetBrainsСанкт-Петербург
Software Developer (Marketing Automation)
JetBrainsСанкт-Петербург
Java Developer (GoLand)
от 200 000 ₽JetBrainsСанкт-Петербург
Senior Software Developer (New IDE platform)
от 250 000 ₽JetBrainsСанкт-Петербург

Лучшие публикации за сутки