Что нового в Rider

Мы улучшили общую производительность Rider — ускорили процесс запуска IDE и обновили движок анализа по всему решению. Rider 2022.2 расширяет поддержку C#: теперь она включает обязательные члены, сырые строки, шаблоны списков и определяемые пользователем операторы с модификатором checked. Кроме того, новая версия позволяет одинаково организовать окна всех решений, над которыми вы работаете. И, конечно же, мы дополнили поддержку Unreal Engine: появилось два новых контекстных действия, New Unreal Module и New Unreal Plugin, возможность указать сервер символов, чтобы при отладке иметь доступ к библиотечным символам, и многое другое.

Производительность

Среда выполнения .NET 6 для бэкенда на Windows

Мы перенесли бэкенд Rider на Windows в среду выполнения .NET 6. Теперь Rider использует среду выполнения .NET 6 для запуска бэкенд-сервиса на всех поддерживаемых операционных системах: Windows, macOS и Linux. За счет оптимизаций среды выполнения .NET 6 выросла и производительность IDE.

Мы заменили NGen на CrossGen. Последний позволяет создавать нативные образы на Windows после установки Rider. Поскольку CrossGen использует среду исполнения .NET и работает на разных платформах, Rider стал быстрее запускаться и загружать решения.

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

Улучшенный холодный запуск

Улучшенный холодный запуск

Когда вы в первый раз загружаете решение (делаете так называемый холодный запуск), у IDE нет информации о проекте, поэтому она загружается быстрее. При этом все проекты загружаются дважды: сначала IDE загружает проекты, чтобы получить о них информацию, затем запускает восстановление NuGet и, когда все готово, загружает проекты повторно.

Мы оптимизировали первоначальную загрузку проекта: теперь Rider ищет только ту информацию, которая нужна для восстановления пакетов NuGet. Как показывают наши внутренние метрики, это ускорило загрузку на 40%.

Оптимизация анализа по всему решению

Мы оптимизировали использование памяти при анализе по всему решению — и с точки зрения потребления, и с точки зрения трафика (количества запросов на выделение памяти).

Чтобы создать отчет об использовании при анализе по всему решению, движок сохраняет список имеющихся проблем и информацию об использовании типов и членов. На основе этой же информации ReSharper предлагает пользователю некоторые инспекции, например Public member is never used. Данные об использовании типов и членов являются «горячими», то есть постоянно обновляются в ходе редактирования кода, поэтому их нельзя сгрузить на диск. Если ваше решение насчитывает много типов и членов типов, IDE потребуется довольно много памяти. Мы проверили, какие данные сохраняются, и нашли закономерности, которые позволили нам дедуплицировать и нормализовать данные. Также мы применили особый тип коллекций, за счет чего еще больше сократили рабочее множество. Таким образом, нам удалось снизить потребление памяти в 5-10 раз и ускорить анализ по всему решению.

C# 11

В новой версии мы поддержали еще несколько возможностей из превью-версии C# 11.

Обязательные члены

Обязательные члены

В C# 11 для типов class, struct и record можно задать список обязательных членов — свойств и полей, которые пользователь должен проинициализировать при создании объекта. Такие списки автоматически наследуются от базовых типов и способствуют уменьшению количества повторяющегося шаблонного кода.

Rider поддерживает ключевое слово required для членов типов class, struct и record. Кроме того:

  • Для ключевого слова required работает автодополнение.
  • Для обязательных членов показываются ошибки и предупреждения компилятора.
  • Мы добавили модификатор required в настройки Modifiers order в разделе Preferences/Settings | Editor | Code Style | C# | Syntax Style page.
Обязательные члены

Если вы создали объект типа, но пока не инициализировали его члены, воспользуйтесь быстрым исправлением Add initializer for required members: оно сгенерирует недостающие обязательные члены, вам останется только указать их значения.

Определяемые пользователем операторы с модификатором checked

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

Мы обновили инспекцию Unchecked/checked context is redundant: теперь она учитывает операторы c модификатором checked, присутствующие в контексте.

Если у вас есть набор заданных пользователем операторов и для некоторых из них уже есть версия с модификатором checked, Rider поможет создать операторы checked для всего набора. Новая инспекция The operator does not have a matching checked operator while other operators do укажет вам на операторы, для которых не заданы версии checked, и предложит сгенерировать их при помощи быстрого исправления.

Если вы не используете операторы checked в вашей кодовой базе, но хотели бы попробовать, воспользуйтесь контекстным действием Create matching checked operator. Оно доступно для любого пользовательского оператора: вы можете сгенерировать checked-версию из меню Alt+Enter буквально в один клик.

Сырые строки

C# 11 вводит понятие сырых строк, позволяющих легко вставить в код на C# фрагмент на другом языке или в текстовом формате.

Rider включает базовую поддержку сырых строк: показывает ошибки компилятора, выполняет парсинг и подсвечивает синтаксис """, позволяет использовать плейсхолдеры внутри интерполированных строк (с синтаксисом {{...}}).

Шаблоны списков

C# 11 расширил поддержку шаблонов: вы можете сопоставлять структуры, похожие на списки, например массивы, строки и некоторые виды коллекций.

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

Больше возможностей C# 11

Больше возможностей C# 11

  • Теперь Rider полностью поддерживает новый оператор беззнакового сдвига вправо (>>>), в том числе перегрузку оператора >>>.
  • Поскольку в C# 11 можно сопоставлять строковые константы со значениями типа Span<char> и ReadOnlySpan<char>, Rider 2022.2 позволяет заменять строковые литералы на конструкции Span<char>.

Анализ кода

Операторы верхнего уровня

В .NET 6 появились новые шаблоны проектов, использующие операторы C# 9 верхнего уровня. С помощью таких операторов проще объявить класс Program или метод public static void Main(string[] args). Но иногда необходимо (или желательно) использовать явный startup-класс Program. Поэтому мы добавили новое контекстное действие To explicit 'Program' class, которое приводит выражение к прежнему стилю.

Если у вас уже есть класс Program и вы хотите перейти на операторы верхнего уровня, используйте контекстное действие Convert to top-level code.

Обновленная поддержка INotifyPropertyChanged

Мы обновили поддержку интерфейса INotifyPropertyChanged. Теперь мы не используем внешние аннотации для поиска общих API INotifyPropertyChanged и потому можем поддержать больше фреймворков MVVM и базовых классов INotifyPropertyChanged. В новой версии используется метод SetField с лаконичным синтаксисом настройки уведомлений INotifyPropertyChanged.

Также теперь можно настроить уведомления об изменении свойств в определенном типе или файле.

Рефакторинги в меню Alt+Enter

Мы выявили самые популярные рефакторинги и добавили соответствующие контекстные действия в меню Alt+Enter — так они всегда будут под рукой.

Контекстное действие Extract method для выделенного фрагмента кода теперь тоже вызывается с помощью Alt+Enter.

Также мы добавили для сигнатуры членов контекстные действия, соответствующие рефакторингам Change Signature, Transform Parameters, Convert to extension method и Convert Property To Method.

Новые подсказки при использовании оператора nameof

Rider 2022.2 фиксирует регистрацию DependencyProperty в проектах WPF и предлагает получить имя соответствующего свойства CLR с помощью оператора nameof. Встроенные шаблоны Live Templates теперь тоже используют nameof вместо встроенных литералов.

Rider не всегда понимает, что означает тот или иной строковый литерал, именующий фрагмент кода (например, член или тип). Поэтому мы добавили для строковых литералов с идентификаторами новое контекстное действие Capture element name: оно позволяет сослаться на сущность, содержащую нужный строковый литерал.

Структурный поиск и замена

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

Другие возможности

Rider 2022.2 находит в коде шаблоны присвоения и предлагает заменить их на более идиоматичные конструкции.

Rider 2022.2 заменяет некоторые паттерны с is внутри выражений ?: на более краткие паттерны с as внутри выражений ??. Это позволит вам избавиться от временных переменных.

Элементы UI/UX

Настройки организации окон по умолчанию

Настройки организации окон по умолчанию

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

Для новых пользователей Rider такое поведение будет работать по умолчанию. Остальные пользователи могут включить его, открыв главное меню и перейдя в раздел Windows | Layout Settings | Use the Same Layout for All Projects.

Обновленные настройки решения

Мы упростили работу с конфигурациями решения. Для работы с некоторыми проектами (например, Unity, Unreal Engine, Xamarin) может потребоваться множество конфигураций, таргетов и платформ. Список разрастался, и работать с меню Solution Configurations становилось неудобно. Теперь вам не придется искать нужное сочетание конфигурации, таргета и платформы — вместо этого нажмите по очереди на каждый тип параметра и выберите значение.

Обновленные настройки решения

Список конфигураций решения теперь доступен в раскрывающемся меню Build Project (со значком зеленого молотка). Ваши отзывы и статистика использования показали, что пользователи не так часто меняют конфигурации решения и не стоит выделять под это отдельный виджет на панели инструментов. Теперь конфигурации доступны по нажатию на значок зеленого молотка — здесь вы увидите привычный список.

Если вы хотите вернуть конфигурации решения на панель инструментов, нажмите на значок зеленого молотка и выберите опцию Show Configuration on Toolbar.

Мы оставили список конфигураций на панели инструментов для проектов Unity, Unreal Engine и Xamarin, поскольку при работе с ними менять конфигурации решения приходится довольно часто.

Изменение размера виджета Run/Debug

Изменение размера виджета Run/Debug

Теперь вы можете менять ширину виджета Run/Debug. Если на главной панели инструментов достаточно места, вы можете растянуть виджет, потянув за левый угол иконки. Эту идею нам подсказали пользователи.

Объединение окон на macOS

Действие Merge All Project Windows для macOS macOS 11+

На macOS теперь можно объединить все открытые окна проекта: они отобразятся в виде вкладок в одном окне. Для этого выберите действие Merge All Project Windows в меню Window.

Начальный экран

Начальный экран

Следить за клонированием репозитория стало удобнее: теперь индикатор прогресса отображается прямо в списке проектов.

Настройки автодополнения кода

Настройки автодополнения кода

Из всплывающего окна автодополнения теперь можно перейти в соответствующие настройки. Для этого нажмите на три вертикальные точки.

Поддержка MAUI Ранний доступ

Поддержка MAUI

Rider 2022.2 включает превью-версию поддержки Multi-platform App UI (MAUI) для .NET. Также мы поддержали проекты под Android и iOS. Для запуска, отладки и развертывания приложений на целевом устройстве можно использовать конфигурации запуска. Обратите внимание, что macOS, Mac Catalyst, Blazor Hybrid и WinUI пока поддерживаются не полностью.

Learn more: macOS Environment Setup for MAUI Development

Solution Explorer

Кастомизация новой панели инструментов

Рефакторинг Safe Delete

Теперь вы можете запускать рефакторинг Safe Delete на уровне проекта. Для этого выберите нужный проект в Solution Explorer и нажмите клавишу Delete либо запустите действие Refactor This. Далее, если IDE найдет упоминания проекта, она покажет вам все конфликты. Если упоминаний нет, Rider удалит проект вместе со всеми ссылками и импортами. Вы можете обойти проверку: для этого в диалоге Safe Delete уберите галочку для опции Search for usages.

Оптимизация работы с отфильтрованными решениями

Оптимизация работы с отфильтрованными решениями

Rider 2022.2 упрощает работу с отфильтрованными решениями. Теперь вы можете отфильтровать проект, набор проектов, папку решения и даже все проекты при загрузке решения: для этого откройте в Solution Explorer контекстное меню проекта, папки решения или корневого узла решения и запустите действие Solution Filter | Remove project. Чтобы просмотреть проекты, которые были отфильтрованы, в Solution Explorer включите режим Show All Files. Чтобы включить выборочный проект в набор, в контекстном меню выберите действие Solution Filter | Add Project.

Оптимизация работы с отфильтрованными решениями

Также мы добавили действия Load Direct Project Dependencies и Load Entire Project Dependency Tree: выполняя их, Rider проверит все зависимости целевого проекта и загрузит необходимый набор проектов, после чего вы сможете быстро приступить к работе.

Менеджер сборок

Менеджер сборок (Assembly Explorer)

Мы улучшили представление сборок ReadyToRun (R2R) и NGen в Assembly Explorer:

  • Теперь рядом с именем каждой сборки отображается значок процессора и метка ngen либо R2R.
  • В дереве Metadata появился заголовок ReadyToRun.
Другие возможности

Другие возможности

  • Окно Solution Explorer теперь показывает файлы, созданные генераторами кода. Их можно найти в узле Dependencies | <Название целевого фреймворка> | Source Generators.
  • Алфавитная сортировка проектов в окнах Solution Explorer, File System и Unity Explorer теперь работает корректно.

Игровая зона

Поддержка Unreal Engine

Добавление новых модулей Unreal

Добавление новых модулей Unreal

Чтобы создать новый модуль с игровой логикой, нужно выполнить массу действий: создать папку, добавить в нее файл Build.cs, создать класс с инициализацией модуля, обновить файлы .uproject и Target.cs и т. д. Теперь вы можете автоматизировать эти действия в разделе Add | New Unreal Module.

Подробнее

Создание плагинов для Unreal Engine

Создание плагинов для Unreal Engine

Если вы уже создавали плагины в редакторе Unreal, эта функциональность будет вам не в новинку. Создавать плагины для Unreal теперь можно прямо в Rider. Используйте действие Add | New Unreal Plugin — оно сгенерирует все необходимые для этого файлы.

Подробнее

Серверы символов

Серверы символов

Библиотечных символов, которые вы используете при отладке, может не оказаться на вашей локальной машине. Если вы пользуетесь Windows, вас выручит сервер символов — просто привяжите к нему отладчик Rider.

Подробнее

Поддержка тестов Spec

Поддержка тестов Spec

Rider 2022.2 поддерживает тесты Spec из фреймворка для автоматизации тестирования Unreal Engine. Если у вас есть набор тестов, заданный в методе Define вслед за макросом DEFINE_SPEC или BEGIN_DEFINE_SPEC / END_DEFINE_SPEC , Rider учтет эти тесты, и вы сможете запускать их в окне Unit Tests.

Вызовы по типу Emplace

Вызовы по типу Emplace

Теперь Rider знает, что вызовы по типу Emplace (например, TArray<..>::Emplace) подразумевают вызов конструктора объекта, и сообщит вам, если вы укажете неверные аргументы. При указании параметров вы сможете свериться с подсказкой IDE. Также вы можете напрямую переходить от вызова Emplace к определению конструктора и наоборот.

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

  • Мы заменили кнопку Build solution на Build startup project. Вы найдете ее на главной панели инструментов при работе с проектами Unreal Engine.
  • Также при работе с проектами Unreal Engine список автодополения включает спецификаторы метаданных Widgets.
Поддержка Unity

Поддержка Unity

  • Мы добавили новую панель инструментов для проектов Unity и перенесли туда индикатор статуса подключения. По умолчанию на панели инструментов больше нет кнопок play/pause/step, но при необходимости вы можете вернуть их обратно.
  • Мы добавили инспекции, которые проверяют, что значения, возвращаемые методами Mathf, не остаются неиспользованными.
  • Для запуска профилирования больше не нужно перезапускать редактор Unity — профилировщик может сам подключаться к запущенным процессам Unity и отключаться от них.

Плагины

dotCover dotUltimate

В редакторе появился индикатор степени покрытия кода. Им удобно пользоваться, если вам мешает красная и зеленая подсветка, которую обычно выполняет плагин dotCover. Индикатор спрятан за значком щита в виджете Inspections. Цвет и заполненность отражают степень покрытия текущего документа. Нажав на значок, вы сможете перейти к непокрытым операторам.

Новое окно уведомлений

dotMemory dotUltimate Только для Windows

Теперь Rider включает встроенный инструмент профилирования dotMemory. Основные изменения в dotMemory:

  • Мы добавили два новых режима профилирования памяти: Memory (sampled allocations) и Memory (full allocations). Они доступны в виджете Run и в разделе Run | Switch profiler configurations в главном меню. Подробнее о доступных режимах профилирования читайте в документации dotMemory.
  • Подключить профилировщик к запущенному процессу можно из меню Run.
  • Просматривайте график Timeline в динамике. Для этого выберите временной интервал и откройте представление Memory Allocation. Как и в автономной версии dotMemory, оно позволит вам подробно проанализировать выбранный временной интервал.

Обратите внимание, что плагин dotMemory не позволяет сохранять снэпшоты и работает в рамках Rider 2022.2 только на Windows.

Подробнее

Индикатор масштаба

Markdown

Теперь можно легко создать оглавление в Markdown-файле на основе заголовков в документе. Новое действие находится в меню Insert и Generate, которые можно вызвать с помощью Alt+Insert или правой кнопкой мыши. Rider добавит оглавление туда, где стоит курсор, и заключит его в теги <!-- TOC -->. В дальнейшем вы сможете внести изменения, вызвав то же меню.

dotTrace dotUltimate

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

Веб-разработка

Поддержка автономных компонентов Angular

Поддержка автономных компонентов Angular

Мы активно работаем над поддержкой Angular 14 в Rider. Главное нововведение этого релиза — поддержка автономных компонентов Angular: теперь IDE корректно распознает и обрабатывает компоненты, директивы и каналы с отметкой standalone: true.

Обновления для Vue 3

Обновления для Vue 3

В Rider 2022.2 вас ждет несколько улучшений для Vue 3. Например, IDE распознает сужение типа в директивах v-if/else. Кроме того, мы улучшили поддержку Pinia — рекомендуемого командой Vue решения для управления состояниями, которое работает как глобальное хранилище. При использовании библиотеки можно пользоваться автодополнением и переходить к свойствам состояния и действиям, определенным в хранилище.

Поддержка TypeScript 4.7

Поддержка TypeScript 4.7

Rider 2022.2 включает TypeScript 4.7 и поддерживает новые возможности языка, например moduleSuffixes и ESM в Node.js. IDE автоматически подставит расширение .js в оператор импорта, если в файле tsconfig.json для module установлено значение node16 или nodenext. Для файлов package.json поддерживается поле typesVersions.

Подробнее о новых возможностях для веб-разработки читайте в релизном блог-посте WebStorm.

Поддержка F#

Мы обновили всплывающее окно Parameter Info для F#.

Окно Parameter Info показывает, какие аргументы принимает функция, и появляется, когда вы пишете применение или вызов функции либо нажимаете Ctrl+P при просмотре уже написанного кода.

Теперь окно Parameter Info поддерживает каррирование и подсвечивает правильные перегрузки методов. Оно показывает информацию о методах, функциях и параметрах, а также значения параметров по умолчанию, информацию о методах расширения и аннотации CanBeNull/NotNull (из фреймворка JetBrains.Annotations). Также окно Parameter Info работает для атрибутов.

Теперь вы можете использовать как глобальную, так и локальную версию dotnet-инструмента Fantomas. Rider будет автоматически использовать выбранный инструмент и позволит синхронизировать версию Fantomas внутри команды.

Новое быстрое исправление Change type of binding сообщит вам, если тип возвращаемого значения, прописанный в определении, отличается от фактического. Special thanks goes to Florian Verdonck for implementing this quick-fix.

You can take a look at the full release notes for more information about F# support in Rider 2022.2.

Поддержка баз данных

Поддержка баз данных
  • Мы добавили два новых режима разрешения объектов: Playground и Script. Подробнее о различиях между ними читайте в блоге DataGrip.
  • Для серверов Microsoft SQL снова доступна аутентификация Windows.
  • Теперь при работе с Microsoft SQL Server правила сопоставления и кодировки генерируются вместе с DDL таблицы.
  • Мы добавили базовую поддержку баз данных DuckDB, Mimer SQL и Apache Ignite.

Подробнее о поддержке баз данных читайте в релизном блог-посте DataGrip