Что нового в MPS 2021.2

В MPS 2021.2 появился механизм проверки орфографии, окно автодополнения, улучшения VCS и многое другое.

Окно автодополнения

Раньше, чтобы вызвать автодополнение, вы, как правило, нажимали Ctrl/Cmd + Space. Теперь окно автодополнения появляется автоматически — через полсекунды после того, как вы перестаете печатать. Также вы можете отрыть его вручную. Подробнее.

Улучшенное представление изменений обертки в диффах VCS

Улучшенное представление изменений обертки в диффах VCS

Работать с обертывающими изменениями теперь можно с большей гибкостью. Если вы добавили или удалили обертку для блока кода, а также внесли изменения в сам блок, эти изменения будут считаться разными. Изменения обертки, идущие подряд, теперь также отделяются друг от друга. Кроме того, MPS теперь видит перестановку узлов, даже если у родительского узла поменялся ID.

Улучшенное отображение изменений в атрибутах узлов

Улучшенное отображение изменений в атрибутах узлов

Раньше ячейки атрибутов неправильно подсвечивались в окне Diff. Обычно при добавлении или удалении атрибута подсвечивался весь узел.

Универсальный механизм проверки орфографии

Универсальный механизм проверки орфографии

MPS заимствует у IntelliJ IDEA механизм проверки орфографии, позволяющий находить опечатки и ошибки в комментариях и строковых литералах. Теперь вы можете применять эту функциональность для любого текста, отображаемого в редакторе. Чтобы указать, что текст в ячейке нужно проверить по словарю (в соответствии с настройками в разделе Preferences), добавьте стиль spellcheck для соответствующей ячейки в описании редактора.

В случае Rich Client Platform (RCP) не забудьте включить плагин jetbrains.mps.editor.spellcheck в дистрибутив.

Версионирование проекта для миграций

Версионирование проекта для миграций

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

Оптимизация множества видимых ссылок

В MPS есть механизм вычисления множества видимых элементов при первом считывании модели. Для этого в j.m.lang.constraints появились новые выражения: for model [ factory, key], visible roots [concept], а также visible nodes [concept] — взамен new ModelPlusImportedScope(model, rootsOnly, concept). Новые выражения используются для сохранения видимых элементов модели в кэш, а значит, их не нужно будет записывать и вычислять повторно.

Редактирование узлов без ограничений

При написании кода, взаимодействующего с MPS-моделями, авторам расширений нужно выбирать, какой уровень доступа будет назначен. Для операций SNode (например, setProperty(), addChild() и т.д.) можно было назначить только command access, даже если пользователю не нужно было взаимодействовать с интерфейсом. Мы ослабили это ограничение: теперь любой код, в котором для модели указан write access, может вносить изменения в узлы.

Радар для всплывающих окон

Радар для всплывающих окон

Для работы со всплывающими окнами появились радары: они показывают, для каких ячеек доступны всплывающие окна. Чтобы активировать радар для всплывающего окна, нажмите и удерживайте клавишу Ctrl.

Алмазный оператор

BaseLanguage теперь позволяет использовать алмазный оператор Java для вывода generic-параметров из контекста в конструкторе. Алмазный оператор будет доступен по умолчанию для нового кода. Чтобы использовать его для существующих конструкторов, удалите имеющиеся параметры типов и выставьте значение true для infer type parameters в окне инспектора либо снова введите <> и удалите пустой параметр.

Улучшения для свойств BaseLanguage

При проверке типов MPS теперь корректно учитывает свойства BaseLanguage. При наследовании свойством интерфейсных либо абстрактных методов вы теперь не получите ошибок для нереализованных методов. Если вы определили свойство с помощью generic-типа, для доступа к нему теперь будет использоваться правильный тип.

Обратите внимание, что сеттер для свойства типа T вернет объект типа T, а не void.

Единообразное поведение для Show Diff

Единообразное поведение для Show Diff

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

Если вам удобнее отслеживать изменения в отдельном окне, можно перетащить нужный файл из редактора. IDE запомнит это и в будущем будет открывать diff в отдельном окне.

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

Новый вариант навигации в Preferences/Settings

Новый вариант навигации в Preferences/Settings

В правом верхнем углу окна Preferences/Settings появились стрелки, позволяющие перемещаться вперед/назад между секциями.

Перетаскивание окон

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

Предварительный просмотр HTML-файлов

Улучшения терминала

У вас теперь есть возможность выбрать из большего количества форм курсора для встроенного терминала. Также терминал теперь поддерживает сочетания клавиш с Option (⌥) в качестве метаклавиши. Например, можно использовать следующие сочетания:

  • ⌥+F — переход к следующему слову;
  • ⌥+B — переход к предыдущему слову;
  • ⌥+D — удаление следующего слова.