MPS 2019.2: перечисляемые типы данных, настройка сообщений об ошибках, переход на JDK 11 и многое другое +7


В MPS 2019.2 мы подготовили для вас много новых функций в различных подсистемах и исправили ряд ошибок.

image

Скачать MPS 2019.2

Перечисляемые типы данных


Новый способ объявления перечисляемых типов данных позволяет определить список вариантов в компактной форме, указав для каждого варианта именованное значение. При необходимости вы можете настроить способ отображения некоторых значений или выбрать значение по умолчанию, которое будет использоваться, если свойству не было явно задано какое-либо значение.

image

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

image

Кроме того, мы переработали все операции, которые производятся с перечисляемыми типами.

image

В язык SModel был добавлен оператор Enum Switch для множественного выбора членов перечисления. Его также можно использовать как выражение для вычисления различных значений в зависимости от того, какой член перечисления удовлетворяет требованиям.

image

Индивидуальная настройка сообщений об ошибках


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

В этой версии мы добавили новый аспект языка под названием «feedback». Этот аспект можно использовать для настройки текста сообщений об ошибках, связанных с проверкой структуры, ограничениями свойств и областей видимости.

image

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

image

Обратите внимание: вы можете задать свой feedback, расширив предоставляемый набор языков обратной связи. Например, можно описать feedback, который будет подсвечивать ребра или вершины в редакторе диаграмм.

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

image

Язык ограничений на основе правил


Мы создали язык ограничений на основе правил, который в будущем заменит доступное в настоящий момент ограничение canBe* из стандартного языка ограничений MPS. В настоящее время язык ограничений на основе правил является экспериментальной функциональностью, поэтому, вероятнее всего, сильно изменится в последующих релизах.

image

На данный момент предыдущий вариант ограничений остается приоритетным, поэтому, чтобы ввести ограничения на основе правил, старые ограничения canBe* нужно полностью удалить. Новый язык определения ограничений более декларативный, он требует указывать набор изолированных ограничений (правил) вместо одного условного блока.

В версии 2019.2 это позволяет получать индивидуальное сообщение об ошибке для каждого правила в отдельности.

image

История корня


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

image

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

Диалоговое окно похоже на диалог Selection History в IntelliJ IDEA:

image

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

Поиск по данным


Теперь доступен полнотекстовый поиск по значениям свойств. Действие Edit–>Find–>Find Text in Project action (Ctrl+Alt+Shift+F) позволяет находить узлы со свойствами, в значениях которых встречается указанный текст.

image

Проверка на конкретные ошибки


Один из распространенных сценариев использования языка для написания тестов — это проверка узлов на наличие сообщений об ошибках и предупреждений. В некоторых случаях подсистема тестирования MPS не различала разные виды ошибок, затрагивающие один и тот же узел. Это могло приводить к путанице: даже если пользователь явно указывал ожидаемый тип ошибки в аннотации теста, другие ошибки и предупреждения, затрагивающие соответствующий узел, не генерировали ошибок тестирования.

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

image

Шаблоны в определениях правил проверки


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

Теперь вместо переопределения каждого правила, унаследованного от родительского концепта, вы можете явно указать список правил, которые необходимо переопределить. Мы настоятельно рекомендуем просмотреть все ваши правила проверки, использующие функцию overrides, и указать, какие правила следует переопределять.

Раньше можно было определить правило проверки для концепта с помощью языка шаблонов. Эта возможность служила для ограничения условий применимости правила (по сравнению с правилами, определенными исключительно для концепта), а также для удобного именования свойств, дочерних и внучатых элементов, и т.д. Для обеих целей подойдет применение языка шаблонов внутри тела правила, в частности, использование оператора match в верхней части блока do:

image

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

Java 11 в качестве среды выполнения


MPS теперь будет запускаться в JDK 11. Это повлияет на механизм загрузки моделей-заглушек. Большей части вашего проекта миграция не потребуется, за исключением редких случаев использования некоторых классов и полей, которые были переупакованы в JDK 11.

При использовании плагина для IntelliJ IDEA модули с MPS Facet теперь должны быть ассоциированы с JDK версии 11. В противном случае генерация кода завершится неудачно.

API-фасад для проверки соответствия типов


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

Новый API: см. jetbrains.mps.typechecking.TypecheckingFacade и связанные с ним классы.

Устаревший API: иерархия пакетов jetbrains.mps.typesystem.* теперь является устаревшей. Использовать классы из этой иерархии не рекомендуется, за исключением кода, автоматически сгенерированного из содержимого аспекта typesystem.

Планируемые изменения в будущих релизах


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

  • Аспект, отвечающий за реализацию системы типов, и использующийся в нем язык будут объявлены устаревшими. Со временем язык и его поддержка в среде выполнения будут вынесены в отдельный плагин.
  • Будет добавлен новый аспект, который фактически заменит часть аспекта typesystem, не относящуюся к системе типов. Для извлечения правил проверки из старого аспекта typesystem будет предоставлена миграция.
  • Будет реализован новый фреймворк проверки соответствия типов с поддержкой со стороны среды выполнения, вследствие чего устаревшие механизмы будут переписаны с нуля.

Сборка в фоне


Мы повысили отзывчивость интерфейса во время фоновой сборки. Если процесс сборки был отправлен в фоновый режим один раз, он всегда будет производиться в фоне при последующих выполнениях. Действие сохраняется в меню Preferences-> Project Settings-> Perform in background.

BaseLanguage


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

Проверка орфографии в комментариях BL


Теперь доступна проверка орфографии для однострочных комментариев, текста Javadoc и строковых литералов.

Новый образец проекта


Мы учли пожелания сообщества и добавили новый образец проекта с генерацией XML.

Локальная конфигурация Git


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

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

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




К сожалению, не доступен сервер mySQL