Мы улучшили общую производительность Rider — ускорили процесс запуска IDE и обновили движок анализа по всему решению. Rider 2022.2 расширяет поддержку C#: теперь она включает обязательные члены, сырые строки, шаблоны списков и определяемые пользователем операторы с модификатором checked. Кроме того, новая версия позволяет одинаково организовать окна всех решений, над которыми вы работаете. И, конечно же, мы дополнили поддержку Unreal Engine: появилось два новых контекстных действия, New Unreal Module и New Unreal Plugin, возможность указать сервер символов, чтобы при отладке иметь доступ к библиотечным символам, и многое другое.
Мы перенесли бэкенд 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 для типов 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
помогают работать с типами данных, для которых арифметическое переполнение является ожидаемым поведением. 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 тоже поддерживает шаблоны списков: проверяет на ошибки, делает анализ кода и предлагает автодополнение. В будущих версиях появятся дополнительные рефакторинги и инспекции, позволяющие внедрить шаблоны списков в имеющийся код.
>>>
), в том числе перегрузку оператора >>>
. 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 — так они всегда будут под рукой.
Контекстное действие 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
внутри выражений ??
. Это позволит вам избавиться от временных переменных.
Теперь вы можете одинаково организовать окна всех решений, над которыми работаете. Например, если вы передвинете окно инструмента вправо, оно будет располагаться там, какое бы решение вы ни открыли.
Для новых пользователей 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. Если на главной панели инструментов достаточно места, вы можете растянуть виджет, потянув за левый угол иконки. Эту идею нам подсказали пользователи.
На macOS теперь можно объединить все открытые окна проекта: они отобразятся в виде вкладок в одном окне. Для этого выберите действие Merge All Project Windows в меню Window.
Следить за клонированием репозитория стало удобнее: теперь индикатор прогресса отображается прямо в списке проектов.
Из всплывающего окна автодополнения теперь можно перейти в соответствующие настройки. Для этого нажмите на три вертикальные точки.
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
Теперь вы можете запускать рефакторинг 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 проверит все зависимости целевого проекта и загрузит необходимый набор проектов, после чего вы сможете быстро приступить к работе.
Мы улучшили представление сборок ReadyToRun (R2R) и NGen в Assembly Explorer:
ngen
либо R2R
. Чтобы создать новый модуль с игровой логикой, нужно выполнить массу действий: создать папку, добавить в нее файл Build.cs
, создать класс с инициализацией модуля, обновить файлы .uproject
и Target.cs
и т. д. Теперь вы можете автоматизировать эти действия в разделе Add | New Unreal Module.
Если вы уже создавали плагины в редакторе Unreal, эта функциональность будет вам не в новинку. Создавать плагины для Unreal теперь можно прямо в Rider. Используйте действие Add | New Unreal Plugin — оно сгенерирует все необходимые для этого файлы.
Библиотечных символов, которые вы используете при отладке, может не оказаться на вашей локальной машине. Если вы пользуетесь Windows, вас выручит сервер символов — просто привяжите к нему отладчик Rider.
Rider 2022.2 поддерживает тесты Spec из фреймворка для автоматизации тестирования Unreal Engine. Если у вас есть набор тестов, заданный в методе Define
вслед за макросом DEFINE_SPEC
или BEGIN_DEFINE_SPEC
/ END_DEFINE_SPEC
, Rider учтет эти тесты, и вы сможете запускать их в окне Unit Tests.
Теперь Rider знает, что вызовы по типу Emplace
(например, TArray<..>::Emplace
) подразумевают вызов конструктора объекта, и сообщит вам, если вы укажете неверные аргументы. При указании параметров вы сможете свериться с подсказкой IDE. Также вы можете напрямую переходить от вызова Emplace
к определению конструктора и наоборот.
Mathf
, не остаются неиспользованными. В редакторе появился индикатор степени покрытия кода. Им удобно пользоваться, если вам мешает красная и зеленая подсветка, которую обычно выполняет плагин dotCover. Индикатор спрятан за значком щита в виджете Inspections. Цвет и заполненность отражают степень покрытия текущего документа. Нажав на значок, вы сможете перейти к непокрытым операторам.
Теперь Rider включает встроенный инструмент профилирования dotMemory. Основные изменения в dotMemory:
Обратите внимание, что плагин dotMemory не позволяет сохранять снэпшоты и работает в рамках Rider 2022.2 только на Windows.
Теперь можно легко создать оглавление в Markdown-файле на основе заголовков в документе. Новое действие находится в меню Insert и Generate, которые можно вызвать с помощью Alt+Insert или правой кнопкой мыши. Rider добавит оглавление туда, где стоит курсор, и заключит его в теги <!-- TOC -->
. В дальнейшем вы сможете внести изменения, вызвав то же меню.
Для запуска профилирования больше не нужно перезапускать редактор Unity. Теперь профилировщик может сам подключаться к запущенным процессам Unity и отключаться от них.
Мы активно работаем над поддержкой Angular 14 в Rider. Главное нововведение этого релиза — поддержка автономных компонентов Angular: теперь IDE корректно распознает и обрабатывает компоненты, директивы и каналы с отметкой standalone: true
.
В Rider 2022.2 вас ждет несколько улучшений для Vue 3. Например, IDE распознает сужение типа в директивах v-if/else
. Кроме того, мы улучшили поддержку Pinia — рекомендуемого командой Vue решения для управления состояниями, которое работает как глобальное хранилище. При использовании библиотеки можно пользоваться автодополнением и переходить к свойствам состояния и действиям, определенным в хранилище.
Rider 2022.2 включает TypeScript 4.7 и поддерживает новые возможности языка, например moduleSuffixes
и ESM в Node.js. IDE автоматически подставит расширение .js
в оператор импорта, если в файле tsconfig.json
для module
установлено значение node16
или nodenext
. Для файлов package.json
поддерживается поле typesVersions
.
Подробнее о новых возможностях для веб-разработки читайте в релизном блог-посте WebStorm.
Мы обновили всплывающее окно 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.
Подробнее о поддержке баз данных читайте в релизном блог-посте DataGrip