Что нового в MPS 2021.1

В MPS 2021.1 мы добавили поддержку Java-аннотаций, Apple Silicon, улучшили работу с VCS и многое другое.

Редактор

Масштабирование

Размер шрифта теперь можно быстро настроить в открытом окне редактора — просто нажмите Control и прокрутите колесико мыши. Размер шрифта не запоминается — когда вы снова откроете файл, будет использовано значение по умолчанию. Вы можете включить/отключить эту опцию в разделе Preferences | Editor | General: Change font size with Ctrl/Cmd+Mouse Wheel.

Улучшение производительности форматирования с отступами

Для наиболее частых сценариев реализация форматирования с отступами (indent layout) стала инкрементальной — это ускорит отрисовку редакторов больших моделей, которые используют форматирование с отступами (например BaseLanguage). Вы можете отключить эту опцию при помощи параметра VM mps.indent_layout.disable_incremental.

Настройки толщины шрифта

Настройки толщины шрифта

При длительной работе над кодом лучше использовать шрифт, который не сильно утомляет глаза. Мы добавили настройки типографики, чтобы вы могли подобрать идеальные размеры шрифта. Версия 2021.1 позволяет настраивать толщину обычных и жирных шрифтов через меню Preferences | Editor | Fonts.

Система контроля версий

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

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

Использование дополнительной информации от системы контроля версий позволило нам улучшить аннотацию кода. Для нее теперь используется новый алгоритм вычисления изменений ревизии, отслеживающий перемещение узлов. Цвет строк/ячеек с аннотациями определяется только на основе тех ревизий, где был изменен корень. Если столбец с аннотациями раскрыт, то в контекстном меню ячеек в основном редакторе появится новая группа опций, таких как Copy Revision Number, Show Diff и другие.

Окно Diff для коммитов слияния

Окно Diff для коммитов слияния

Для коммитов, уже слитых с основной веткой, в Git-логе доступно окно Diff. Оно включает три панели: левая и правая — отображают ветки, которые подверглись слиянию, центральная — демонстрирует результат слияния.

Синхронизация прокрутки в редакторе Diff

Синхронизация прокрутки в редакторе Diff

Мы добавили кнопку, позволяющую выключить синхронизацию прокрутки в окне редактора Diff.

Использование графа ревизий в алгоритмах для аннотации и истории кода

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

Действие Save to Shelf

Новое действие Save to Shelf копирует изменения на вкладку Shelf, сохраняя их в локальной истории изменений. Чтобы попробовать, нажмите ⇧⌘A на macOS (Ctrl+Shift+A на Windows или Linux) и введите «Save to Shelf».

Генератор

Упрощенный доступ к переменным макроса $LOOP$

Упрощенный доступ к переменным макроса $LOOP$

Теперь вы можете обратиться к входному узлу макроса LOOP при помощи выражения LOOP.inputNode — вам не нужно использовать макросVAR. В том же пространстве имен можно получить доступ к индексу LOOP: используя <0>LOOP.index вместо необходимой ранее контекстной переменной.

Обновленный оператор Transform в объявлении GenPlan

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

Улучшение скомпилированных шаблонов

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

Подробнее

Разное

Java-компилятор для модулей MPS с фасетом Java

Мы существенно изменили подход к компиляции модулей MPS в Java. Это напрямую связано с задачей по поддержке обработки аннотаций, получившей большое количество голосов. Мы перевели инфраструктуру Java-компилятора для MPS на набор API javax.tools.JavaCompiler — теперь MPS может использовать любой компилятор, который реализует стандартный API javax.tools. На данный момент MPS применяет тот компилятор, который назначен стандартным для данного API. При желании вы можете выбрать Eclipse Compiler for Java (ECJ).

Подробнее

Исходная версия MPS для миграции проекта

При создании проекта теперь сохраняется значение «исходной» версии MPS. Миграции с версий MPS, предшествующих исходной, не применяются. Это дает авторам возможность назначить «исходный» порог для миграций проекта (версию можно изменить в интерфейсе для миграции проектов, используя метод «getBaselineVersion():int»).

Подробнее

Улучшения рефакторинга Method signature

Улучшения рефакторинга Method signature

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

Подробнее

Новые возможности для комментариев BaseLanguage

Язык lang.text получил несколько новых возможностей — это напрямую улучшило работу с однострочными и многострочными комментариями в BaseLanguage.

  • Выделяя текст сверху вниз или снизу вверх, вы теперь можете захватывать строки частично.
  • Теперь вы можете сделать жирным, выделить курсивом или подчеркиванием выделенный текст.
  • Работает копирование/вставка обычного текста.
  • Вы можете добавлять маркированные и нумерованные списки.

Улучшенные выражения lang.smodel

Выражения model.roots(), model.rootsIncludingImported() и model.nodesIncludingImported() теперь, аналогично model.nodes(), поддерживают #expression для указания концептов.

Управление видимостью модулей плагина

Плагины сообщают MPS о том, какие модули они затрагивают, при помощи расширения com.intellij.mps.LanguageLibrary. У расширений теперь есть опциональный атрибут hide="true", который разрешает фильтровать модули плагина на основе образца, указанного в com.intellij.mps.VisibleModuleMask.

Подробнее

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

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

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

Мы добавили встроенное превью для HTML-файлов. Чтобы его открыть, нажмите на логотип MPS в виджете в правом верхнем углу редактора. Превью обновляется в реальном времени, когда вы редактируете HTML-код или изменяете связанные CSS и JavaScript-файлы.

Поддержка Apple Silicon

Теперь вы можете пользоваться MPS на Mac-устройствах с чипом M1. Скачать установщик JetBrains MPS для Apple Silicon можно с нашего сайта либо из JetBrains Toolbox App.

Автоматический импорт настроек

Раньше окно Import Settings появлялось каждый раз, когда вы устанавливали новую версию MPS. Теперь, если IDE найдет необходимые конфигурационные файлы, окно не появится.

Специальные возможности

В этом выпуске мы добавили больше меток к элементам интерфейса начального экрана, панели Project Structure и VCS-лога. Теперь эти элементы, как и значки на полях редактора, корректно обрабатываются программами чтения с экрана. Мы также занимаемся расширением поддержки специальных возможностей для пользователей macOS.